Ansible:在 jinja 模板中显示变量
Ansible : display variable in jinja template
我有一个剧本,以便 运行 一个 shell 命令来计算更新次数。
我想在文件中显示这个结果,但这个结果是错误的。
我的剧本:
- name: Listing packages
hosts: all
gather_facts: false
tasks:
- name: Count number of updates
shell: yum check-update | wc -l
register: nbupdates
- name: Display number of updates
debug:
var: nbupdates.stdout_lines
- name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
我的神社模板是这个:
{% for host in vars['play_hosts'] %}
{{ host | upper }} : we have {{ nbupdates.stdout_lines[0] }} updates
{% endfor %}
当我 运行 剧本时,我总是对每个服务器进行相同数量的更新,就像循环不工作一样。
我做错了什么?
您的模板存在一些问题。
vars
是一个未记录的内部变量,具有不良行为,不应使用。
- 您对
vars
的使用完全没有必要,因此您可以将其删除而不是将其替换为 vars
lookup。
play_hosts
是 deprecated,不应使用。
- 您的任务应该使用
run_once
以便它只运行一次,而不是每个服务器运行一次。
- 您应该 use
hostvars
to access information about other hosts 而不是总是使用当前主机的值。
- name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
run_once: true
{% for host in ansible_play_hosts %}
{{ host | upper }} : we have {{ hostvars[host].nbupdates.stdout_lines.0 }} updates
{% endfor %}
我有一个剧本,以便 运行 一个 shell 命令来计算更新次数。
我想在文件中显示这个结果,但这个结果是错误的。
我的剧本:
- name: Listing packages
hosts: all
gather_facts: false
tasks:
- name: Count number of updates
shell: yum check-update | wc -l
register: nbupdates
- name: Display number of updates
debug:
var: nbupdates.stdout_lines
- name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
我的神社模板是这个:
{% for host in vars['play_hosts'] %}
{{ host | upper }} : we have {{ nbupdates.stdout_lines[0] }} updates
{% endfor %}
当我 运行 剧本时,我总是对每个服务器进行相同数量的更新,就像循环不工作一样。
我做错了什么?
您的模板存在一些问题。
vars
是一个未记录的内部变量,具有不良行为,不应使用。- 您对
vars
的使用完全没有必要,因此您可以将其删除而不是将其替换为vars
lookup。 play_hosts
是 deprecated,不应使用。- 您的任务应该使用
run_once
以便它只运行一次,而不是每个服务器运行一次。 - 您应该 use
hostvars
to access information about other hosts 而不是总是使用当前主机的值。
- name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
run_once: true
{% for host in ansible_play_hosts %}
{{ host | upper }} : we have {{ hostvars[host].nbupdates.stdout_lines.0 }} updates
{% endfor %}