2016-10-24 6 views
0

Ich versuche, die MAC-Adresse für den aktuellen Host zu erhalten, damit ich den Wert in einer Aufgabe verwenden kann. Selbst nachdem ich die Dokumente gelesen habe, kann ich nicht verstehen, wie ich das machen soll. Ich habe versucht, die Struktur herauszufinden, indem ich die Werte ausblutete. Das Playbook, das die Rolle aufruft, sammelt Fakten.Abrufen der MAC-Adresse von Ansible-Fakten in der Rolle

Dies ist, was die Aufgabe hat:

- name: Get the MAC address 
    debug: msg="{{ hostvars[inventory_hostname] }}" 

Dies erzeugt die folgenden (abgeschnitten):

ok: [steve.dev.v4-1-0] => { 
    "msg": { 
     "ansible_all_ipv4_addresses": [ 
      "10.1.3.144" 
     ], 
     "ansible_all_ipv6_addresses": [ 
      "fe80::250:56ff:fe8b:1051" 
     ], 
     "ansible_architecture": "x86_64", 
     "ansible_bios_date": "09/21/2015", 
     "ansible_bios_version": "6.00", 
     "ansible_check_mode": false, 
     "ansible_cmdline": { 
      "KEYBOARDTYPE": "pc", 
      "KEYTABLE": "us", 
      "LANG": "en_US.UTF-8", 
      "SYSFONT": "latarcyrheb-sun16", 
      "crashkernel": "[email protected]", 
      "quiet": true, 
      "rd_NO_DM": true, 
      "rd_NO_LUKS": true, 
      "rd_NO_LVM": true, 
      "rd_NO_MD": true, 
      "rhgb": true, 
      "ro": true, 
      "root": "UUID=408345fe-146b-4dec-b62c-31fe6d60b376" 
     }, 
     "ansible_date_time": { 
      "date": "2016-10-24", 
      "day": "24", 
      "epoch": "1477329455", 
      "hour": "10", 
      "iso8601": "2016-10-24T17:17:35Z", 
      "iso8601_basic": "20161024T101735509516", 
      "iso8601_basic_short": "20161024T101735", 
      "iso8601_micro": "2016-10-24T17:17:35.509824Z", 
      "minute": "17", 
      "month": "10", 
      "second": "35", 
      "time": "10:17:35", 
      "tz": "MST", 
      "tz_offset": "-0700", 
      "weekday": "Monday", 
      "weekday_number": "1", 
      "weeknumber": "43", 
      "year": "2016" 
     }, 
     "ansible_default_ipv4": { 
      "address": "10.1.3.144", 
      "alias": "eth1", 
      "broadcast": "10.1.3.255", 
      "gateway": "10.1.0.10", 
      "interface": "eth1", 
      "macaddress": "00:50:56:8b:10:51", 
      "mtu": 1500, 
      "netmask": "255.255.252.0", 
      "network": "10.1.0.0", 
      "type": "ether" 
     }, 

Aber wenn ich versuche zu verweisen:

- name: Insert the mac address into the customer license 
    debug: msg="{{ hostvars[inventory_hostname][ansible_default_ipv4] }}" 

ich das bekommen Fehler, der aufreizend die Daten hat, die ich suche:

fatal: [steve.dev.v4-1-0]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: dict object has no element {u'macaddress': u'00:50:56:8b:10:51', u'network': u'10.1.0.0', u'mtu': 1500, u'broadcast': u'10.1.3.255', u'alias': u'eth1', u'netmask': u'255.255.252.0', u'address': u'10.1.3.144', u'interface': u'eth1', u'type': u'ether', u'gateway': u'10.1.0.10'}\n\nThe error appears to have been in '/opt/deployment_data/playbooks/roles/eti_license/tasks/main.yml': line 13, 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: Insert the mac address into the customer license\n^here\n"} 

Was mache ich hier falsch?

Antwort

2

Ihr Problem ist eine Variable sind vorbei:

{{ hostvars[inventory_hostname][ansible_default_ipv4] }} 

Sie sollten stattdessen tun:

{{ hostvars[inventory_hostname]["ansible_default_ipv4"] }} 

Oder Sie könnten nur tun:

{{ ansible_default_ipv4["field"] }} 

Oder:

{{ ansible_default_ipv4.field }} 

Der Grund dafür ist, dass, wenn Wörterbücher verwenden, müssen Sie einen Feldnamen zu übergeben. Wenn Sie eine Zeichenfolge (in Anführungszeichen) übergeben, ist dies das Feld, das Sie erhalten möchten. Übergeben Sie keine Zeichenfolge (nicht in Anführungszeichen), ist dies eine Variable, die das Feld enthält, das Sie abrufen möchten.

Verwandte Themen