{{tag>Ansible YAML INI JSON Python CA}}
= Ansible inventaire script - inventaire dynamique vers statique - Conversion JSON YAML INI
Voir :
* [[notes_ansible-inventory]]
* https://docs.ansible.com/automation-controller/latest/html/administration/scm-inv-source.html
== INI vers JSON
Pour convertir un inventaire Ansible INI vers JSON
ansible-inventory -i inventory.ini --list > inventory.json
== INI vers YAML
Pour convertir un inventaire Ansible de INI vers YAML
ansible-inventory -i inventory.ini -y --list > inventory.yml
== JSON vers YAML
''cat.py''
#! /usr/bin/env python3
import os
filename = os.environ["FILENAME"]
with open(filename, "r") as f:
print(f.read())
env FILENAME=inventaire.json ansible-inventory -i cat.py -y --list> inventaire.yml
== JSON vers INI
Reformater l'inventaire JSON
env FILENAME=inventaire.json ansible-inventory -i cat.py --list> inventaire2.json
Script de conversion json_to_ini.py
''json_to_ini.py''
#! /usr/bin/env python3
import sys
import json
import configparser
import argparse
parser = argparse.ArgumentParser(
epilog="""Convert Ansible JSON inventory file to INI.
JSON inventory must be in ansible-inventory format.
"""
)
parser.add_argument("-i", help="Input JSON file")
parser.add_argument("-o", help="Output INI file")
args = parser.parse_args()
def convert_json2ini():
config_object = configparser.ConfigParser(delimiters=" ")
with open(args.i, "r") as json_file:
python_dictionary = json.load(json_file)
python_dictionary["all"]["children"].remove("ungrouped")
for section in python_dictionary["all"]["children"]:
config_object.add_section(section)
for options in python_dictionary[section]["hosts"]:
suboptions = []
for subsection in python_dictionary["_meta"]["hostvars"][options]:
subkey = str(subsection)
subvalue = (
'"'
+ str(python_dictionary["_meta"]["hostvars"][options][subkey])
+ '"'
)
suboptions.append("=".join([subkey, subvalue]))
key = " ".join(suboptions)
config_object.set(section, options, key)
with open(args.o, "w") as ini_file:
config_object.write(ini_file)
def main():
if args.i and args.o:
convert_json2ini()
sys.exit(0)
if __name__ == "__main__":
main()
./json_to_ini.py -i inventaire2.json -o inventaire.ini