将任何 YAML 文件转换为 Ansible 清单
Transforming any YAML file into Ansible inventory
我正在尝试从现有的 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'
我正在尝试从现有的 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'