python - 将任何 YAML 文件转换为 Ansible 清单
问题描述
我正在尝试从现有 YAML 文件创建 Ansible Inventory 文件。这是我正在谈论的yaml文件:
- Fabric: AAA
Hauteur: 20
Nom de l'equipement: AAA-BAT1
Role: BGW
Salle: '1'
Travee: 4
Type de materiel: N9K-C9YTR
- Hauteur: 20
Nom de l'equipement: BBB-BAT2
Role: SP
Salle: '1'
Travee: 4
Type de materiel: N9K-C9YTR
进入这个清单:
all:
hosts:
AAA-BAT1:
Type de materiel: "N9K-C9YTR"
Fabric: "AAA"
emplacement:
Salle: "1"
Travee: "4"
Hauteur: "20"
Role: "BGW"
BBB-BAT2:
Type de materiel: "N9K-C9YTR"
Fabric: "BBB"
emplacement:
Salle: "1"
Travee: "4"
Hauteur: "20"
Role: "SP"
请问有没有办法用Python做到这一点?
解决方案
您甚至可以使用 Ansible 剧本来完成所有这些工作,在本地控制器节点上运行它。
鉴于剧本:
- hosts: localhost
gather_facts: no
vars:
faking_data:
- Fabric: AAA
Hauteur: 20
Nom de l'equipement: AAA-BAT1
Role: BGW
Salle: '1'
Travee: 4
Type de materiel: N9K-C9YTR
- Fabric: BBB
Hauteur: 20
Nom de l'equipement: BBB-BAT2
Role: SP
Salle: '1'
Travee: 4
Type de materiel: N9K-C9YTR
tasks:
- set_fact:
hosts: "{{ hosts | default({}) | combine({item[\"Nom de l'equipement\"]: transformed_item}) }}"
loop: "{{ faking_data }}"
vars:
transformed_item:
"Type de materiel": "{{ item['Type de materiel'] }}"
Fabric: "{{ item.Fabric }}"
emplacement:
Salle: "{{ item.Salle }}"
Travee: "{{ item.Travee }}"
Hauteur: "{{ item.Hauteur }}"
Role: "{{ item.Role }}"
- copy:
content: "{{ {'all': {'hosts': hosts } } | to_nice_yaml(indent=2) }}"
dest: hosts.yml
这将最终创建一个hosts.yml文件,其中包含
all:
hosts:
AAA-BAT1:
Fabric: AAA
Role: BGW
Type de materiel: N9K-C9YTR
emplacement:
Hauteur: '20'
Salle: '1'
Travee: '4'
BBB-BAT2:
Fabric: BBB
Role: SP
Type de materiel: N9K-C9YTR
emplacement:
Hauteur: '20'
Salle: '1'
Travee: '4'
推荐阅读
- java - Hortonworks HDFS 名称节点在启动时出现 tryLock 问题
- java - Java将字符串数组中每个单词的首字母大写
- c# - C#如何使重复输入重叠?
- wso2 - 在 WSO2 API Manager 上自行注册后如何发送帐户确认电子邮件
- c# - C# - 连接到 SQL Server
- android - Android camera2 api。设置多个 ImageReader 表面会产生空白输出
- c# - Twilio API - 如何使用 C# 挂断所有活动呼叫?
- ios - NativeScript IOS project.pbxproj not found
- javascript - 传单地图未显示
- python - 使用 Python 在 Selenium 中使用 send_keys() 从数据帧发送值