我的任务是使用ansible在多个网址上循环,提供每个用户名/密码,将响应json文件保存在不同的文件名' response_json _ {{url}}'中。 我定义了一个角色文件,如下所示。它适用于单个网址。我应该在哪里添加vars列表?如何为每组vars(url,username,password)循环yml文件,以确保login.set_cookie也将循环1? 非常感谢提前!
- name: Login
uri:
url: https://{{url}}/rest/v1/login
method: POST
body: "username={{username}}&password={{password}}&action=login"
register: login
- name: Get configuration in JSON
uri:
url: https://{{url}}/rest/v1/fullconfigs/running-config
method: GET
force: yes
return_content: yes
headers:
Cookie: "{{login.set_cookie}}"
register: json_response
- copy:
content: "{{json_response}}"
dest: /home/ansible/json_response_{{url}}.json
答案 0 :(得分:1)
您可以将变量传递给roles:
声明,例如:
roles:
- {role: rolename, username: user1, password: pass1, filename: file1}
- {role: rolename, username: user2, password: pass2, filename: file2}
- {role: rolename, username: user3, password: pass3, filename: file3}
注意:
我假设url
变量对所有角色都是通用的,因此您可以在vars
部分定义它。
另外,我认为你可以使用一个变量,每次迭代都有一个唯一的文件名(url无论如何都有无效的文件名),我参考一行:
dest: /home/ansible/json_response_{{url}}.json
您可以将其更改为:
dest: /home/ansible/json_response_{{filename}}.json
第二种方式:
您可以使用include_roles
模块,但它必须在您的任务文件中将variable
替换为item.variable
。如果你在任务文件中有循环任务,但是你没有:),这可能会产生影响:)例如:
剧本:
- hosts: localhost
gather_facts: false
vars:
accounts_variable:
- { username: user1, password: passw1, filename: file1}
- { username: user2, password: passw2, filename: file2}
- { username: user3, password: passw3, filename: file3}
tasks:
- name: Use role in loop
include_role:
name: test_role
with_items:
- "{{ accounts_variable }}"
role / tasks / main.yml文件:
---
# tasks file for test_role
- debug:
msg: "username: {{ item.username }}, password: {{ item.password }}"