Проблема с Ansible группами хостов и фильтрацией IP-адресов - PullRequest
0 голосов
/ 24 октября 2019

У меня проблемы с циклическим просмотром списка хостов в группе Ansible, я получаю нужные значения, но получаю ложную ошибку, которую просто не могу выяснить. Если бы произошла ошибка, он бы вообще не печатал значения:

fatal: [worker01]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_eth1'\n\nThe error appears to be in 'roles/vagrant/tasks/main.yml': line 15, 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- debug:\n  ^ here\n"}

Извлечение из файла vagrant

ansible.groups = {
            "workers" => ["worker01", "worker02", "worker03"],
            "controllers" => ["controller01", "controller02"],
            "kubernetes" => ["kubernetes"],
            "all_groups:children" => ["workers", "controllers", "kubernetes"]
        }

Пример определения хоста, используемого vagrant

{
  "name": "worker03",
  "alias": "worker03",
  "box": "bento/ubuntu-18.04",
  "memory": 2048,
  "vcpu": 2,
  "provider": "virtualbox",
  "autostart": "false",
  "cpus": 2,
  "cpu_percentage": 100,
  "Controller": "SATA Controller",
  "lv_disks": 4,
  "pv_size": 5,
  "infra_ip_addr": "10.2.15.60",
  "service_ip_addr": "10.96.0.60",
  "pod_ip_addr": "192.168.0.60",
  "port_forwards": {},
  "project": "wks",
  "tags": "all",
  "group": "workers",
  "extra_vars": {}
}

Следующий код:

- debug:
    msg: "External: {{ hostvars[item]['ansible_eth1']['ipv4']['address'] }} ; Service: {{ hostvars[inventory_hostname]['ansible_eth3']['ipv4']['address'] }} "
  with_items:
    - "{{ groups['workers'] }}"

Производит вывод - ошибка примечания 'объект ansible.vars.hostvars.HostVarsVars' не имеет атрибута ansible_eth1 '

ok: [worker01] => (item=worker01) => {
    "msg": "External: 10.2.15.40 ; Service: 192.168.0.40 "
}
fatal: [worker01]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_eth1'\n\nThe error appears to be in 'roles/vagrant/tasks/main.yml': line 15, 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- debug:\n  ^ here\n"}

PLAY RECAP ****************************************************************************************************************************************************************************************************************************
worker01                   : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

1 Ответ

0 голосов
/ 27 октября 2019

На современных образах Ubuntu имена интерфейсов глупы (например, enp0s31f6 и wlp0s20f3);вам нужно будет использовать ansible_default_ipv4 вместо именования определенного интерфейса (или, конечно, вы можете в дальнейшем пройти через все обнаруженные интерфейсы, но для того, что вы делаете, это не то, что вы хотите)

- debug:
    msg: "External: {{ hostvars[item]['ansible_default_ipv4']['address'] }} ; Service: {{ hostvars[inventory_hostname]['ansible_eth3']['ipv4']['address'] }} "
  with_items:
    - "{{ groups['workers'] }}"

Хотя это решит вашу специфическую проблему, более общий совет для вашей будущей помощи по отладке - использовать debug: var=hostvars, чтобы посмотреть, какие значения доступно, поскольку ошибка 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_eth1' не может быть более ясной в отношении того, что не так.

...