提问人:NotAProfessional 提问时间:8/24/2023 更新时间:8/24/2023 访问量:48
使用 Ansible 从静态配置文件动态设置配置文件中的变量
Using Ansible to dynamically set a variable in a configuration file from a static config file
问:
我正在尝试使用 Ansible 自动执行配置文件中的变量。 我有一个模板配置文件,其中包含以下行“config_version={{osVersion}}” 此 playbook 针对 RHEL 7 和 8 机器运行,理想情况下,我希望 ansible 获取它运行 playbook 的主机的版本和主要版本,然后使用每个机器版本填充该 {{osVersion}}。
我试图找到这个特定的用例,但似乎什么都没有出现。关于如何做到这一点。
总而言之,模板包含这个“config_version={{osVersion}}” 我想让该模板放在机器上,检查机器的版本,然后将版本写入一个或多个主机的配置文件。
答:
1赞
Vladimir Botka
8/24/2023
#1
您必须连接到远程主机才能了解操作系统。要连接远程主机,必须先读取清单。当您查看变量优先级时,您会看到ansible_distribution_version(和其他主机事实)可能从优先级 12 中可用。向上播放 VAR。默认情况下,事实收集处于启用状态(隐式)。查看DEFAULT_GATHERING
- 例如,该剧
shell> cat pb.yml
- hosts: test_24
vars:
test: "{{ ansible_distribution_version }}"
tasks:
- debug:
var: test
给出(删节)
shell> ANSIBLE_GATHERING=implicit ansible-playbook pb.yml
test: '8.4'
然后,您可以写入文件
- copy:
dest: /tmp/test.conf
content: |
config_version={{ ansible_distribution_version }}
给
shell> ssh admin@test_24 cat /tmp/test.conf
config_version=8.4
- 如果不收集事实,则不会定义变量ansible_distribution_version
shell> ANSIBLE_GATHERING=explicit ansible-playbook pb.yml
test: VARIABLE IS NOT DEFINED!
您可以使用模块设置随时在游戏中收集或更新事实。
看:
评论