Ansible多组URL/账号密码循环任务及变量配置咨询
多组URL+账号的Ansible循环处理方案
我来帮你搞定这个多组URL的Ansible循环问题~首先咱们明确核心需求:把单URL的登录、获取配置、保存JSON的流程,扩展成多组URL+对应用户名/密码的循环处理,还要保证每组的登录Cookie能精准对应,不会串用。
一、先定义多组变量
你可以把这些多组的URL、账号信息放在几个地方,选你顺手的方式就行:
方式1:直接写在Playbook的vars段
vars: target_systems: - url: "system1.example.com" username: "admin1" password: "pass123" - url: "system2.example.com" username: "admin2" password: "pass456" - url: "system3.example.com" username: "admin3" password: "pass789"
方式2:放在单独的变量文件(比如vars/targets.yml)
然后在Playbook里引入这个文件:
- include_vars: vars/targets.yml
方式3:定义在Inventory主机组变量里
如果每个URL对应一个独立主机,也可以给Inventory里的主机单独加变量,但用列表字典的方式对批量循环更友好。
二、修改角色代码实现循环
核心思路是用loop(Ansible 2.5+官方推荐)把登录→获取配置→保存文件整个流程包裹起来,让每组变量的上下文完全独立,从根本上避免Cookie串用的问题。修改后的完整代码如下:
- name: 循环处理每个目标系统 block: - name: 登录目标系统 uri: url: "https://{{ item.url }}/rest/v1/login" method: POST body: "username={{ item.username }}&password={{ item.password }}&action=login" register: login - name: 获取JSON格式的配置 uri: url: "https://{{ item.url }}/rest/v1/fullconfigs/running-config" method: GET force: yes return_content: yes headers: Cookie: "{{ login.set_cookie }}" register: json_response - name: 保存JSON响应到文件 copy: content: "{{ json_response.content }}" dest: "/home/ansible/json_response_{{ item.url }}.json" loop: "{{ target_systems }}" loop_control: label: "{{ item.url }}" # 可选:让循环日志只显示URL,更简洁
关键细节说明
- 用
block把三个任务打包后加loop,每个循环迭代里的login变量都是当前组的专属变量,绝对不会和其他组的Cookie混淆。 - 保存文件时记得用
json_response.content,而不是直接用json_response——后者是Ansible返回的完整任务结果对象,包含很多元数据,content才是真正的JSON响应内容。 loop_control的label是可选配置,加上后Ansible执行日志会只显示每个迭代的URL,不会打印整个字典内容,日志可读性更高。
内容的提问来源于stack exchange,提问作者user1536782
相关产品推荐
相关产品推荐

