Ansible – Use Ansible Variable Without Quotes

ansible

To use a variable gathered from json, I need it to be raw, without quotes:

I have

ok: [device] => {
    "fact": {
        "int": "7"
    },
}

I want

ok: [device] => {
    "fact": {
        "int": 7
    },
}

The thing is that the quotes are not part of the variable so I cant use | int or | replace to remove the quotes.

Is there a way ?

Best Answer

The result of a Jinja expression is always a string. You can't get an integer. What you really want, I guess, is the value of the attribute int in the dictionary fact to be an integer. Test the current value, e.g.

        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug

If the value of the attribute int is a string you'll get (abridged)

  fact.int: '7'
  fact.int|type_debug: AnsibleUnicode

You can convert the string to an integer, e.g.

        - set_fact:
            fact: "{{ fact|combine({'int': _int|int}) }}"
          vars:
            _int: "{{ fact.int }}"
        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug

you'll get (abridged)

  fact.int: '7'
  fact.int|type_debug: int

Now, the value of the attribute int is an integer. But, the result of the Jinja expression var: fact.int is still a string fact.int: '7'.


Notes

  • Be aware that the var option of the debug module already runs in Jinja2 context and has an implicit {{ }} wrapping.