On 30.11.2018 08:50, Phillip wrote:

ok: [server1.infra.sys] => (item={u'ipaddr': u'1.1.1.2', u'netmask':
u'255.255.255.0', u'bootproto': u'none', u'device': u'ens192', u'type':
u'Ethernet', u'gateway': u'1.1.1.250'}) => {"changed": false, "checksum":
"fdecaa26f260854783e24a79c166604488713c90", "gid": 0, "group": "root",
"item": {"bootproto": "none", "device": "ens192", "gateway": "1.1.1.250",
"ipaddr": "1.1.1.2", "netmask": "255.255.255.0", "type": "Ethernet"},
"mode": "0644", "owner": "root", "path":
"/etc/sysconfig/network-scripts/ifcfg-ens192", "secontext":
"system_u:object_r:net_conf_t:s0", "size": 229, "state": "file", "uid": 0}

fatal: [server1.infra.sys]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute
'device'\n\nThe error appears to have been in
'/opt/ansible/playbooks/roles/basic/tasks/main.yml': line 36, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe
offending line appears to be:\n\n\n- name: Update primary interface IP
information\n  ^ here\n\nexception type: <class
'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'dict object' has no
attribute 'device'"}

So you are running this task twice, so you with_items aka interfaces variable contain at least to list elements.


This is what I have written in to the host file in the inventory
directory/./host_vars/server1.infra.sys:

# HOST INTERFACES DEFINITIONS
interfaces:
 - device: ens192
   type: Ethernet
   bootproto: none
   ipaddr: 1.1.1.2
   netmask: 255.255.255.0
   gateway: 1.1.1.250

My suspicion is that this is not the whole content of the file, because your output indicate that you have at least one more element in this list.


As seen, there is device configured and in the error msg from Ansible it
isn't happy because the variable 'device' isn't set.

This is a part of /opt/ansible/playbooks/roles/basic/tasks/main.yml

- name: Update primary interface IP information
  template:
   src: roles/basic/templates/ifcfg.j2
   dest: "/etc/sysconfig/network-scripts/ifcfg-{{item.device}}"
   owner: root
   group: root
   mode: 0644
  with_items: "{{ interfaces }}"
  when: interfaces is defined
  notify: restart network



So why should I get an error from Ansible when the changes have been made
successfully?

The first element in the list interfaces goes thru OK but not the second one.

If you before the task that fails add this

  - debug: var=interfaces

you can verify that you variable actually contain more than one list element.


--
Kai Stian Olstad

--
You received this message because you are subscribed to the Google Groups "Ansible 
Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/620f62a5995ea3b6223ac400a92ae5be%40olstad.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to