Rufen Sie die jinja2-Vorlage in / templates wie unten gezeigt auf und platzieren Sie sie nach dem Rendern unter Playbooks mit derselben Konfiguration.
/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
Ich habe versucht, die for-Anweisung mit einem Listenwörterbuch zu drehen, wie unten gezeigt, aber natürlich ist es im Schlüsselwertformat, sodass der nächste Wert den vorherigen Wert überschreibt und das Playbook-Verzeichnis test002.yml.j2, inv_test002 hat. Es wurde nur .yml.j2 erstellt
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"))
Selbst wenn ich [mehrere Werte für einen Schlüssel im Python-Wörterbuch] auf Englisch googelte, konnte ich mir keinen Plan ausdenken, den ich dachte, also blieb ich ein wenig hängen.
Das Ergebnis wurde wie folgt gelöst
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: Speichern Sie den Schlüssel von j2_files, dh group_vars und Inventar, in k 2: Speichern Sie den Wert, der dem Schlüssel von j2_files entspricht, in v 3: Geben Sie an, dass der Speicherort der Vorlage aus dem Verzeichnis k + "/" + v unter templates / inf abgerufen wird 4: Geben Sie das Ausgabeziel an 5: Generieren Sie eine Jinja-Datei aus dem angegebenen Wörterbuch