这是参考https://github.com/ansible-collections/community.zabbix/issues/1294。 基本要求是由于版本冲突而禁用 epel.repo 中的 zabbix 二进制文件。 我的问题是如何在 epel.repo 文件的 epel 部分中添加 zabbix,并且仍然保留任何现有的排除项。
我可以先读取文件,然后使用一系列其他命令来查看那里是否已经存在现有行,然后提取值,以便我可以将它们附加到 ini_file 命令中,但这确实很复杂和令人费解。 希望有任何建议。
如何在
文件的zabbix
部分添加epel
,同时仍保留任何现有的排除项?epel.repo
基于 使用 Ansible 读取远程节点上的 INI 文件中的选项的正确方法是什么?,一个最小的示例剧本
---
- hosts: localhost
become: false
gather_facts: true
tasks:
- debug:
var: ansible_local
- name: Make sure key value is in INI file
ini_file:
path: example.repo
section: epel
option: "excludepkgs"
value: "{% if ansible_local.custom_soft.epel.excludepkgs is defined %}{{ ansible_local.custom_soft.epel.excludepkgs }},{% endif %}zabbix*"
将产生
的输出TASK [debug] ***********************************************************************
ok: [localhost] =>
ansible_local:
custom_soft:
epel:
enabled: '1'
excludepkgs: example
failovermethod: priority
gpgcheck: '1'
gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
mirrorlist: http://mirrors.example.org/mirrorlist?repo=epel-9&arch=$basearch
name: Extra Packages for Enterprise Linux 9 - $basearch
TASK [Make sure key value is in INI file] ******************************************
changed: [localhost]
文件内容为
[epel]
name=Extra Packages for Enterprise Linux 9 - $basearch
#baseurl=http://download.example.org/pub/epel/9/$basearch
mirrorlist=http://mirrors.example.org/mirrorlist?repo=epel-9&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
excludepkgs = example,zabbix*
请注意,要使任务完全幂等,您需要实现更多逻辑以避免多次添加值
zabbix
。