将任何 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'