2016-10-24 1 views
0

작업의 값을 사용할 수 있도록 현재 호스트의 MAC 주소를 가져 오려고합니다. 문서를 읽은 후에도이를 수행하는 방법에 대해 머리를 감싸는 것처럼 보입니다. 나는 값을 버려서 구조를 알아 내려고 노력했다. 역할을 부르는 작전표는 사실을 수집합니다.MAC 주소 가져 오기 역할의 가능한 사실

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

이것은 다음과 같은 내용 (일부) 생산 :

는 작업이 무엇 나는이 얻을

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

을 :

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" 
     }, 

을하지만 참조 할 때 오류, 어떤 분노에 내가 찾고있는 데이터가 :

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"} 

여기서 내가 뭘 잘못하고 있니?

답변

2

귀하의 문제는 당신이 변수를 전달하는됩니다 :

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

을 또는 당신은 다만 수 :

{{ hostvars[inventory_hostname][ansible_default_ipv4] }} 

을 대신해야

{{ ansible_default_ipv4["field"] }} 

또는 :

{{ ansible_default_ipv4.field }} 

이유는 사전을 사용하는 경우, 당신은 필드 이름을 전달해야한다는 것입니다. 문자열 (인용)을 전달하면 얻고 자하는 필드가됩니다. 문자열 (따옴표 제외)을 전달하지 않으면 얻고 자하는 필드를 포함하는 변수가됩니다.

관련 문제