Appelez le modèle jinja2 dans / templates comme indiqué ci-dessous, et après le rendu, placez-le sous des playbooks avec la même configuration.
/User/taka
|--main.py
|--templates
| |--inf
| | |--group_vars
| | | |--test001.yml.j2
| | | |--test002.yml.j2
| | |--inventory
| | | |--inv_test001.yml.j2
| | | |--inv_test002.yml.j2
|--playbooks
| |--inf
| | |--group_vars
| | | |--test001.yml.j2
| | | |--test002.yml.j2
| | |--inventory
| | | |--inv_test001.yml.j2
| | | |--inv_test002.yml.j2
J'ai essayé de transformer l'instruction for avec un dictionnaire de type liste comme indiqué ci-dessous, mais bien sûr, il est au format clé-valeur, donc la valeur suivante écrase la valeur précédente et le répertoire du playbook a test002.yml.j2, inv_test002. Seul .yml.j2 a été créé
self.j2_files = defaultdict(list)
self.j2_files['group_vars'].append("test001.yml.j2")
self.j2_files['group_vars'].append("test002.yml.j2")
self.j2_files['inventory'].append("invt_est001.yml.j2")
self.j2_files['inventory'].append("inv_test002.yml.j2")
env = Environment(trim_blocks = True, loader =
FileSystemLoader(os.path.join("User", "taka", "templates", "inf"))
Même si je googlé [plusieurs valeurs pour une clé dans le dictionnaire Python] en anglais, je ne pouvais pas trouver un plan que je pensais, donc je suis resté un peu coincé.
Le résultat a été résolu comme suit
1 for k in self.j2_files.keys():
2 for v in self.j2_files[k]:
3 tmpl = env.get_template(k + "/" + v)
4 with open(os.path.join(User,taka,inf, k, v), "wb") as f:
5 f.write(tmpl.render(self.test_conf).encode("utf-8"))
1: stocker la clé de j2_files, c'est-à-dire group_vars et inventaire dans k 2: Stockez la valeur correspondant à la clé de j2_files dans v 3: Spécifiez que l'emplacement du modèle est extrait du répertoire k + "/" + v sous templates / inf 4: Spécifiez la destination de sortie 5: Générer un fichier jinja à partir du dictionnaire spécifié