user3270760
user3270760

Reputation: 1504

Set variable if empty or not defined with ansible

In my ansible vars file, I have a variable that will sometimes be set and other times I want to dynamically set it. For example, I have an RPM that I want to install. I can manually store the location in a variable, or if I don't have a particular one in mind, I want to pull the latest from Jenkins. My question is, how can I check if the variable is not defined or empty, and if so, just use the default from Jenkins (already stored in a var)?

Here is what I have in mind:

...code which gets host_vars[jenkins_rpm]
- hosts: "{{ host }}"
  tasks:
  - name: Set Facts
    set_fact:
      jenkins_rpm: "{{ hostvars['localhost']['jenkins_rpm'] }}"

  - name: If my_rpm is empty or not defined, just use the jenkins_rpm
    set_fact: my_rpm=jenkins_rpm
    when: !my_rpm | my_rpm == ""

Upvotes: 6

Views: 14922

Answers (1)

Konstantin Suvorov
Konstantin Suvorov

Reputation: 68269

There is default filter for that:

- set_fact:
    my_rpm: "{{ my_rpm | default(jenkins_rpm) }}"

Upvotes: 8

Related Questions