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

如何创建可复用Ansible模板以传入组名并列出不可达服务器

解决Ansible可复用Unreachable服务器记录模板问题

核心思路

要实现支持任意主机组的不可达服务器记录,关键在于解决动态主机组传递和任务作用域的问题,下面提供两种经过验证的可行方案:


方案一:用include_tasks实现可复用任务模块

1. 编写可复用任务模板(save_unreachable.yml)

- name: 生成当前组的不可达主机列表
  set_fact:
    unreachable_hosts: "{{ ansible_play_hosts_all | difference(ansible_play_hosts) }}"
  run_once: true

- name: 将不可达主机写入日志文件
  copy:
    content: |
      【{{ target_group }} 组不可达服务器记录】
      {% for host in unreachable_hosts %}
      - {{ host }}
      {% endfor %}
    dest: "./unreachable_{{ target_group }}.log"
  run_once: true

2. 主剧本调用示例(main_playbook.yml)

- name: 检测目标组主机连通性
  hosts: "{{ target_group }}"
  gather_facts: no
  tasks:
    - name: 执行基础连通性测试
      ping:
      ignore_unreachable: yes  # 遇到不可达主机不终止剧本

    - name: 导入不可达记录任务
      include_tasks: save_unreachable.yml
      vars:
        target_group: "{{ target_group }}"  # 传递目标组变量
      run_once: true

3. 执行命令

ansible-playbook main_playbook.yml -e "target_group=web_servers"

方案二:用import_playbook实现可复用独立剧本

1. 编写可复用剧本模板(unreachable_check.yml)

- name: 检测{{ target_group }}组并记录不可达主机
  hosts: "{{ target_group }}"
  gather_facts: no
  tasks:
    - name: 连通性测试
      ping:
      ignore_unreachable: yes

    - name: 收集不可达主机列表
      set_fact:
        unreachable_hosts: "{{ ansible_play_hosts_all | difference(ansible_play_hosts) }}"
      run_once: true

    - name: 写入记录文件
      copy:
        content: "{{ unreachable_hosts | to_nice_yaml }}"
        dest: "./unreachable_{{ target_group }}.log"
      run_once: true

2. 主剧本调用示例(main.yml)

- name: 调用不可达检查剧本
  import_playbook: unreachable_check.yml
  vars:
    target_group: db_servers  # 指定要检测的主机组

常见错误排查

  • 变量传递失败:确保target_group变量在调用时明确传递(通过-e参数或剧本vars),避免任务作用域导致的变量丢失。
  • hosts字段赋值错误:Ansible要求play的hosts字段在解析阶段必须确定,不能用任务内生成的变量,必须通过外部传入。
  • 未设置ignore_unreachable:如果不开启该参数,剧本遇到不可达主机会直接终止,无法收集完整的不可达列表。
  • 未加run_once:收集和写入操作必须只执行一次,否则每个可达主机都会重复执行,导致日志文件被多次覆盖。

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:32:14