Hi,
maybe I am being stupid here, but why doesn’t it work, that when I call the
set_fact
module, and then run the
setup
module, my newly set fact is not returned?
What else do I have to do?
Hi,
maybe I am being stupid here, but why doesn’t it work, that when I call the
set_fact
module, and then run the
setup
module, my newly set fact is not returned?
What else do I have to do?
You can start by providing an example playbook.
For example:
`
name: Get date
command curl http://some-url
register: my_date
name: Set fact
set_fact:
my_date_as_fact: my_date
name: Gather facts
setup:
register: {{ ansible_facts }}
name: Print facts
debug: msg={{ ansible_facts }}
`
“my_date_as_fact” is not included in the output.
Hi there,
Try doing,
-name: Set fact
set_fact:
my_date_as_fact: my_date
That is what I have, it was a typo in my post.
This is what I have now, and it is still not working.
`
name: Get app version
command: curl -H application/json localhost:8088/rs
register: get_version
ignore_errors: true
name: Set app version as fact
set_fact:
fact_app_version:
app_version: “{{ ((get_version | default({‘stdout’:‘N/A’})).stdout | from_json).version }}”
ignore_errors: true
name: Gather facts
setup:
register: ansible_facts
name: Send facts somewhere
local_action:
module: uri
url: “{{ some_url }}”
method: PUT
body: “{{ ansible_facts | combine(fact_app_version) | to_json }}”
status_code: 204
body_format: json
`
The error is:
`
FAILED! => {“failed”: true, “msg”: “the field ‘args’ has an invalid value (), and could not be converted to an dict. Error was: No JSON object could be decoded\n\nThe error appears to have been in ‘update-facts.yml’: line 18, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: Set app version as fact\n ^ here\n”}
`
I am fairly certain what I am trying to do should be rather simply, however the more I dig into it, the uglier it gets.
I want to add an optional fact to the dictionary of facts, and then send all facts somewhere.
What is the suggested approach do accomplish this?
This is what I have now, and it is still not working.
- name: Get app version
command: curl -H application/json localhost:8088/rs
register: get_version
ignore_errors: true- name: Set app version as fact
set_fact:
fact_app_version:
app_version: "{{ ((get_version |
default({'stdout':'N/A'})).stdout | from_json).version }}"
ignore_errors: true- name: Gather facts
setup:
register: ansible_facts
Remove the register:, you don't need it.
If gather_facts is set to true you can remove the entire "Gather facts" task.
- name: Send facts somewhere
local_action:
module: uri
url: "{{ some_url }}"
method: PUT
body: "{{ ansible_facts | combine(fact_app_version) | to_json }}"
status_code: 204
body_format: json
Change body to
body: "{{ hostvars[inventory_hostname] }}"
I am fairly certain what I am trying to do should be rather simply, however
the more I dig into it, the uglier it gets.
I want to add an optional fact to the dictionary of facts, and then send
all facts somewhere.
What is the suggested approach do accomplish this?
hostvars should contain all you need as it contains all your facts, variables and groups.
@Kai Stian Olstad
Thank you, the magic that is hostvars[inventory_hostname] was exactly what I was looking for!
However I do have another question:
Is there a way to easily filter this list to at least exclude the temporary variables that got introduced during the playbook run, for example from “register” ?