Ansible:循环文件以执行POST请求

时间:2017-03-28 09:37:47

标签: json ansible

我试图调用一些REST API并使用Ansible对服务进行一些POST请求。由于正文(JSON)发生了变化,我试图对某些文件进行循环。这是剧本:

name_of_the_plugin:name_of_the_goal

但是当我运行剧本时,我收到了这个错误:

  

领域' args'具有无效值,似乎包含未定义的变量。错误是:' item'未定义

问题出在哪里?

1 个答案:

答案 0 :(得分:2)

主要问题是with_指令应属于任务字典(一个缩进级别)。

第二个问题是,您应该with_items使用文件查找,或只使用"{{ item }}" with_files

- name: do post requests                                            
  uri:
    url: "https://XXXX.com"
    method: POST
    return_content: yes
    body_format: json
    headers:
      Content-Type: "application/json"
      X-Auth-Token: "XXXXXX"
    body: "{{ item }}"
  with_files:
    - server1.json
    - server2.json
    - proxy.json

- name: do post requests                                            
  uri:
    url: "https://XXXX.com"
    method: POST
    return_content: yes
    body_format: json
    headers:
      Content-Type: "application/json"
      X-Auth-Token: "XXXXXX"
    body: "{{ lookup('file', item) }}"
  with_items:
    - server1.json
    - server2.json
    - proxy.json

此外,{{ ... }}构造不是引用每个变量的必需方法 - 它是一个构造,打开一个Jinja2表达式,在其中使用变量。对于单个变量,它确实变为:{{ variable }},但是一旦打开它,您就不需要再次执行它,所以写它是完全没问题的:

body: "{{ lookup('file', item) }}"