我从Ansible 1.9.4中收到此错误:
TASK: [rabbitmq | add rabbitmq vhost] *****************************************
failed: [prod-sensu01] => (item={'name': u'/sensu'})
=> {"failed": true, "item": {"name": "/sensu"}}
msg: this module requires key=value arguments
(['name:', '/sensu', 'node:', 'rabbit',
'tracing:', 'no', 'state:', 'present'])
但是从错误消息中可以看出,该项实际上是一个key = value参数(hash)。
以下是变量:
# playbooks/roles/rabbitmq/vars/main.yml
# Set the rabbitmq vhost
rabbitmq_vhost_definitions:
- name: "{{ sensu_server_rabbitmq_vhost }}"
角色的任务:
# playbooks/roles/rabbitmq/tasks/vhost.yml
- name: add rabbitmq vhost
rabbitmq_vhost: >
name: "{{ item.name }}"
node: "{{ item.node | default('rabbit') }}"
tracing: "{{ item.tracing | default('no') }}"
state: present
with_items: rabbitmq_vhost_definitions
这里发生了什么?
答案 0 :(得分:1)
作为字符串传递的Ansible模块的键/值参数对应由=
分隔,而不是:
。正确的任务应如下所示:
# playbooks/roles/rabbitmq/tasks/vhost.yml
- name: add rabbitmq vhost
rabbitmq_vhost: >
name="{{ item.name }}"
node="{{ item.node | default('rabbit') }}"
tracing="{{ item.tracing | default('no') }}"
state=present
with_items: rabbitmq_vhost_definitions
为什么他们以字符串形式传递?因为您在模块名称之后使用折叠块标量>
,所以在此行中:
rabbitmq_vhost: >
如果此模块支持两种传递参数的方式,您还可以尝试删除>
标量(并保留冒号)。