Ansible - 循环访问URL,用户名,密码并生成响应文件

时间:2018-05-11 21:11:23

标签: json loops ansible ansible-inventory

我的任务是使用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

1 个答案:

答案 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 }}"