如何实现容器部署的Ansible Tower(AWX)与Zabbix的清单同步
AWX与Zabbix清单同步可行性说明
容器部署的AWX(Ansible Tower)完全支持和Zabbix清单实现同步,无需修改AWX容器的核心配置,通过自定义Playbook结合AWX的作业调度能力即可实现全量/定时同步。
前置依赖
- AWX实例网络可正常访问Zabbix的API接口
- 拥有Zabbix侧具备主机读取权限的账号凭证
- AWX侧具备清单编辑权限的账号或OAuth令牌
- 执行同步任务的AWX执行环境预装了
community.zabbix和awx.awx集合,可通过执行环境的requirements.yml配置预装:
collections: - name: community.zabbix version: 2.2.0 - name: awx.awx version: 22.7.0
- 提前在AWX中创建好用于存储同步结果的目标清单,记录对应清单ID
同步Playbook示例
--- - name: 同步Zabbix启用状态主机到AWX清单 hosts: localhost gather_facts: false vars: # 替换为你的Zabbix实际配置 zabbix_url: "https://你的Zabbix域名/api_jsonrpc.php" zabbix_api_user: "Zabbix账号" zabbix_api_pass: "Zabbix密码" # 替换为你的AWX实际配置 awx_url: "https://你的AWX域名" awx_oauth_token: "AWX的OAuth令牌" target_inventory_id: 1 # 替换为提前创建的目标清单ID collections: - community.zabbix - awx.awx tasks: - name: 拉取Zabbix所有启用状态的主机信息 community.zabbix.zabbix_host_info: server_url: "{{ zabbix_url }}" login_user: "{{ zabbix_api_user }}" login_password: "{{ zabbix_api_pass }}" host_status: enabled output: extend selectInterfaces: extend register: zabbix_host_list - name: 批量将Zabbix主机写入AWX目标清单 awx.awx.host: controller_host: "{{ awx_url }}" controller_oauthtoken: "{{ awx_oauth_token }}" name: "{{ item.host }}" inventory: "{{ target_inventory_id }}" enabled: true # 可自定义需要同步的主机变量 variables: zabbix_hostid: "{{ item.hostid }}" zabbix_host_groups: "{{ item.groups | default([]) }}" ansible_host: "{{ item.interfaces | selectattr('main', 'equalto', '1') | map(attribute='ip') | first | default(item.host) }}" state: present loop: "{{ zabbix_host_list.hosts }}" loop_control: label: "{{ item.host }}"
敏感凭证建议通过AWX的自定义凭证功能传入,不要明文写在Playbook代码中。如果需要同步已禁用的Zabbix主机,修改
host_status参数为disabled即可,也可扩展逻辑实现Zabbix主机删除后对应AWX主机自动下架。
AWX自动同步配置步骤
- 将上述Playbook上传到AWX关联的Git代码仓库
- 在AWX中分别创建Zabbix API凭证、AWX管理凭证,绑定到后续的作业模板
- 新建作业模板,关联上述Playbook和对应的执行环境、凭证
- 如需定时自动同步,给作业配置对应时间规则的调度计划即可
内容的提问来源于stack exchange,提问作者dcremona
相关产品推荐
相关产品推荐

