Ansible:当提供key = value args时,“此模块需要key = value arguments”

时间:2016-01-19 17:22:49

标签: ansible ansible-playbook

我从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

这里发生了什么?

1 个答案:

答案 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: >

如果此模块支持两种传递参数的方式,您还可以尝试删除>标量(并保留冒号)。