I think you don't understand the structure of "interfaces"
> Here the output of the debug:
>
> ok: [server1.infra.sys] => {
> "interfaces": [
> {
> "bootproto": "none",
> "device": "ens192",
> "gateway": "1.1.1.250",
> "ipaddr": "1.1.1.2",
> "netmask": "255.255.255.0",
> "type": "Ethernet"
> },
> {
> "aliases": "ansible",
> "fqdn": "ansible.infra.sys",
> "host": "1.1.1.3"
> }
> ]
> }
This tells us that "interfaces" is a list with two elements. Both are
dictionaries but they have differing keys. As such you
cannot itterate over the elements of "interfaces" because in each iteration you
are trying to access the key "device" for the
current element.
The second element has no such key. This is why your play fails.
>
>
> This is the complete configuration of the interfaces and additional services:
>
> fqdn: 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
>
> # /etc/hosts ENTRIES
> - host: 1.1.1.3
> fqdn: ansible.infra.sys
> aliases: "ansible"
>
> ntp_servers:
> - server: 1.1.1.5
> - server: 1.1.1.6
> ntp_interface: ens192
>
>
> So when I understand the debug correct, device is set so it shouldn't be any
> problem. Or do I need so specify anything else with
> device on an other part of the configuration?
>
>
> Am Freitag, 30. November 2018 09:13:16 UTC+1 schrieb Kai Stian Olstad:
>
> 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]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/e865f480-4277-48d1-9d8d-a59aa6564ced%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/e865f480-4277-48d1-9d8d-a59aa6564ced%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.
--
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/b81b39f7-089a-8a17-1fb0-ab3af3d35aba%40gmail.com.
For more options, visit https://groups.google.com/d/optout.