Sandy
Sandy

Reputation: 41

Ansible - how to use if condition to set variable in jinja based on inventory_hostname

I have an ansible jinja which is making use of variable {{ mydata }} the value of this variable differs for each host available in the inventory. I am trying to use if condition in my vars to set it up but it's throwing below error. Can someone guide me?

Jinja :

appkey = {{ mydata }}

vars/vars.yml {% if inventory_hostname == "my-host-name" %} mydata: myvalue {% endif %}

Expecting value: line 2 column 1 (char 1)\n\nSyntax Error while loading YAML.\n  found character that cannot start any token\n\nThe error appears to be in

Upvotes: 0

Views: 1944

Answers (1)

Vladimir Botka
Vladimir Botka

Reputation: 68144

Put the data into a dictionary

    mydata_dict:
      my_host_name: myvalue
      default: default value
    mydata: "{{ mydata_dict[inventory_hostname]|default(mydata_dict.default) }}"

For example the playbook

- hosts: my_host_name,my_host_name2
  vars:
    mydata_dict:
      my_host_name: myvalue
      default: default value
    mydata: "{{ mydata_dict[inventory_hostname]|default(mydata_dict.default) }}"
  tasks:
    - debug:
        var: mydata

gives

ok: [my_host_name] => 
  mydata: myvalue
ok: [my_host_name2] => 
  mydata: default value

Upvotes: 1

Related Questions