You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:24