Score:3

Ansible variable without quotes

cn flag
raw

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 ?

Score:6
br flag

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.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.