Erorr while using magic variables

Please refer to the attached file for issues I am running into…

Here is my playbook:

— # Ansible facts example

  • hosts: centos

tasks:

  • name: create a file to write the fact values

lineinfile:

path: /home/ansible/hostname

create: yes

line: “{{ ansible_hostname }}”

  • name: access magic variables

lineinfile:

path: /home/ansible/hostname

line: “{{ hostvars[‘centos’][‘ansible_default_ipv4’][‘address’] }}”

And here is the command I am using to run it:

ansible-playbook -i inv facts.yml

And here is the inventory (host):

[centos]

cen ansible_host=172.31.4.215

I keep running into this error:

PLAY [centos] ********************************************************************

TASK [Gathering Facts] ***********************************************************

ok: [cen]

TASK [create a file to write the fact values] ************************************

ok: [cen]

TASK [access magic variables] ****************************************************

fatal: [cen]: FAILED! => {“msg”: “The task includes an option with an undefined variable. The error was: "hostvars[‘centos’]" is undefined\n\nThe error appears to have been in ‘/home/ansible/facts.yml’: line 9, column 13, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n line: "{{ ansible_hostname }}"\n - name: access magic variables\n ^ here\n”}

to retry, use: --limit @/home/ansible/facts.retry

PLAY RECAP

Hi

I don’t see attached files (which is good I’d say) but then the indentation of the include yaml files is a bit messed up.

Regardless of that, it is not clear what you are trying to do with this playbook?
Write the default ipv4 address of all hosts in a group to a file on all those hosts?
Please explain what you want to do, and why (as there may be alternative way to achieve what you want).

Hello -
I am trying to create a new file called 'hostname", and within it trying to copy the ansible_hostname, and ipv4 address using the hostvars magic variable.
Attaching the screenshots.

If you want to create files then I would suggest using the template module, or even copy.

You are targeting a group, but are using hostvars- what is your actual intention? A group, a host, or…? This is necessary to answer your question.

BTW attaching screendumps add unnecessary clutter for people and make it difficult for content to be indexed. So don’t use screendumps but just text.

(attachments)


This is part of the training module I am currently learning, to try how the magic variables work.
the centos is group, with one host, in the inventory file.
the output of this playbook is supposed to be a file named “hostname” gets created on target host. And it should have two values: “ansible_hostname”, and the “ipv4” address.

Which training is this?

Usually with a training you need to come up with answers to questions yourself, and the trainer shows you the answer if you don’t know it.

Its linux academy, video based…no trainer as such.

Assuming you connect as user ‘ansible’, this playbook will do what you want:

Thank you ! that worked :slight_smile: