Ansible,字段参数具有无效值
Ansible, the field args has an invalid value
我向 playbook.yml 添加了一个名为 common 的角色,但配置失败并显示以下消息:
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
为什么 ansible 声称 args 是未定义的。我使用的例子不是我做的,已经几个月了,所以我想知道,ansible 处理角色变量的方式是否已经改变,因此它不起作用。
with_items: hosts
这是过时的语法。您不能将裸变量用于循环。
正确语法:with_items: "{{ hosts }}"
我向 playbook.yml 添加了一个名为 common 的角色,但配置失败并显示以下消息:
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
为什么 ansible 声称 args 是未定义的。我使用的例子不是我做的,已经几个月了,所以我想知道,ansible 处理角色变量的方式是否已经改变,因此它不起作用。
with_items: hosts
这是过时的语法。您不能将裸变量用于循环。
正确语法:with_items: "{{ hosts }}"