2

я добавил роль под названием общей для моей playbook.yml, и инициализация завершается с сообщением:анзибля, поле арг имеет недопустимое значение

TASK [common : Host is present] ************************************************ 
==> cd: fatal: [localhost]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'unicode object' has no attribute 'host_ip'\n\nThe error appears to have been in '/vagrant/ansible/roles/common/tasks/main.yml': line 7, 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: Host is present\n^here\n"} 

здесь является содержанием roles/common/tasks/main.yml, конкретные задачи, которые терпят неудачу

- name: Host is present 
    lineinfile: 
    dest: /etc/hosts 
    regexp: "^{{ item.host_ip }}" 
    line: "{{ item.host_ip }} {{ item.host_name }}" 
    with_items: hosts 
    tags: [common] 

А вот содержание roles/common/defaults/main.yml

hosts: [ 
    { host_ip: "10.100.198.200", host_name: "cd"}, 
    { host_ip: "10.100.198.201", host_name: "prod"}, 
    { host_ip: "10.100.198.202", host_name: "logging"}, 
    { host_ip: "10.100.194.201", host_name: "serv-disc-01"}, 
    { host_ip: "10.100.194.202", host_name: "serv-disc-02"}, 
    { host_ip: "10.100.194.203", host_name: "serv-disc-03"}, 
    { host_ip: "10.100.193.200", host_name: "proxy"}, 
    { host_ip: "10.100.192.200", host_name: "swarm-master"}, 
    { host_ip: "10.100.192.201", host_name: "swarm-node-1"}, 
    { host_ip: "10.100.192.202", host_name: "swarm-node-2"}, 
] 

obsolete_services: 
    - puppet 
    - chef-client 

Почему необъяснимые утверждения о том, что args не определены. Пример, который я использую, сделан не мной, а мне несколько месяцев, поэтому мне интересно, изменился ли процесс изменения переменных в ролях, и, следовательно, он не работает.

ответ

12

with_items: хосты

Это устаревшее синтаксис. Вы не можете использовать голые переменные для циклов.

Исправить синтаксис: with_items: "{{ hosts }}"