【发布时间】:2021-04-26 19:01:48
【问题描述】:
我需要一些帮助来确定执行此操作的最佳方法以及如何设置我的剧本以适当地为每个节点提取变量。
假设我有 3 个主机
/etc/ansible/hosts:
host1
host2
host3
我有一个变量文件,里面有多个条目
vars/IPs.yaml:
---
IP: ['192.168.77.35', '192.167.77.36', '192.168.77.37']
我正在运行这个剧本:
network_change.yaml:
---
- hosts: all
vars_files:
- vars/IPs.yaml
tasks:
- name: Check 10G Interface
stat:
path: /etc/sysconfig/network-scripts/ifcfg-card-10Gb-1
register: teng
- name: Change 10G Interface Settings
lineinfile:
path: /etc/sysconfig/network-scripts/ifcfg-card-10Gb-1
regexp: '{{item.From}}'
line: '{{item.To}}'
when: teng.stat.exists
with_items:
- { From: 'IPADDR=', To: 'IPADDR={{IP}}'}
我可以在单个主机上正常工作...但是当我有多个主机时,我不确定如何循环访问 IPs.yaml 变量并在下次循环运行时提取下一个值。还有没有办法让我不使用字典 .yaml 变量,我可以只使用在换行符上有 IP 的原始文本文件吗?
基本上我想循环并让主机在每个相应的主机 /etc/sysconfig/network-scripts/ifcfg-card-10Gb-1 中显示此内容。
host1 = 'IPADDR=192.168.77.35'
host2 = 'IPADDR=192.168.77.36'
host3 = 'IPADDR=192.168.77.37'
最终的目标是能够使用简单的文本文件而不是字典 yaml 文件来处理超过 100 台主机,并且将包括多个变量等。系统都可以通过 dhcp/hostnames/ 访问知识产权。
【问题讨论】: