##やりたいこと
①group_vars/server01/vars.mainの〇がついている行のみ抜き出した、varsを作成
②そのvarsをinclude
③そのincludeしたものを元に出力
を汎用化させたい
[0]00_tst.yaml
00_tst.yaml
1--- 2- name: file change 3 hosts: all 4 become: no 5 vars: 6 yyyymmdd: "{{ lookup('pipe','date +%Y%m%d%H%M') }}" 7 roles: 8 - 00_hosts_change
[1]group_vars/server01/vars.main
group_vars/server01/vars.main
1RHEL: 2 hosts: 3 - "1.1.1.1 server01:::〇" 4 - "2.1.1.1 server02:::×" 5 6 tstfile: 7 - "usagi:::〇" 8 - "kappa:::〇"
[2]roles/00_hosts_change/tasks/update_file_choice.yaml
roles/00_hosts_change/tasks/update_file_choice.yaml
1--- 2#------------------------------------------------------------------------------# 3# 値の「〇」がついている値のみ、抜き出して作成。セパレータは「:::」 4#------------------------------------------------------------------------------# 5- name: generate myhost vars file 6 template: 7 src: template/vars.j2 8 dest: "/var/tmp/vars.j2" 9 delegate_to: localhost 10 11#------------------------------------------------------------------------------# 12# yaml再読み込みして変数上書き 13#------------------------------------------------------------------------------# 14- name: include myhost vars file 15 include_vars: "/var/tmp/vars.j2" 16 delegate_to: localhost 17 18#------------------------------------------------------------------------------# 19# ファイル出力 20#------------------------------------------------------------------------------# 21- name: output file 22 template: 23 src: template/file.j2 24 dest: "/var/tmp/hosts"
[3]roles/00_hosts_change/template/vars.j2
roles/00_hosts_change/template/vars.j2
1updateos: 2 {{ j2_vars }}: 3{% for var in j2_vars_list %} 4{% if var.split(':::')[1] == '〇' %} 5 - {{ var.split(':::')[0] }} 6{% endif %} 7{% endfor %}
[4]roles/00_hosts_change/template/file.j2
roles/00_hosts_change/template/file.j2
1{% for var in updateos.hosts %} 2{{ var }} 3{% endfor %}
[5]roles/00_hosts_change/vars/main.yaml
j2_vars: "hosts" j2_vars_list: "{{ RHEL.hosts }}" j2_file_list: "updateos.hosts"
[5]roles/00_hosts_change/tasks/main.yaml
--- - import_tasks: update_file_choice.yaml
##質問内容
[4]roles/00_hosts_change/template/vars.j2のupdateos.hostsを[5]roles/00_hosts_change/vars/main.yamlに定義した変数に変更したいのですが、
方法が分かりません。
j2_file_list内の値(updateos.hosts)の値を変数として使うという風にしたいです。RHELのeval的な感じです。
いい方法は御座いませんでしょうか?
回答1件
あなたの回答
tips
プレビュー