Итак, у меня есть эта книга, которая проверяет, установлены ли выбранные пакеты. там ничего особенного. Затем я хотел бы отправить сообщение на свой адрес электронной почты, если все прошло хорошо и т. Д.
--- - name: Install basic apps hosts: some hosts from inventory become: yes tasks: - name: load global variables include_vars: file: /etc/ansible/vars/global.yml name: global - name: install MC apt: name: mc state: present register: mc - debug: var: mc - name: install HTOP apt: name: htop state: present register: htop - name: install TMUX apt: name: tmux state: present register: tmux - name: install VIM apt: name: vim state: present register: vim - name: send email mail: host: "{{ global.mail_server }}" port: "{{ global.mail_port }}" subject: basic apps instalation was run by {{ ansible_user_id }} subtype: html # body: targeted server: {{ ansible_hostname }}
# stav MC - {{ mc.failed }} {{ mc.changed }}
# stav HTOP - {{ htop }}
# stav TMUX - {{ tmux }}
# stav VIM - {{ vim }} body: "{{ lookup('template', '/etc/ansible/templates/mail.j2') }}" from: adress to: adress run_once: true
простой шаблон Jinja:
{% for host in play_hosts %} {{ host }}:
Полуночный командир
- is there anything wrong? {{ mc.failed }}
- any changes made? {{ mc.changed}}
Htop
- is there anything wrong? {{ htop.failed }}
- any changes made? {{ mc.changed}}
{% endfor %}
это результат моего электронного письма:
host1: Midnight Commander - is there anything wrong? False - any changes made? True Htop - is there anything wrong? False - any changes made? True ________________________________________ host2: Midnight Commander - is there anything wrong? False - any changes made? True Htop - is there anything wrong? False - any changes made? True
но изменения были внесены только на host1. Если я внесу изменения на host2, везде будет False. Это означает, что переменные, зарегистрированные из модуля apt, заполняются только с первого хоста. Что я здесь делаю не так?
Я был бы уверен в этом, если бы знал, как именно вы отправляете электронные письма. Но я предполагаю, что вы делаете это с host1.
Проблема может заключаться в том, что вы не получаете доступ к hostvars
правильно в вашем шаблоне электронной почты.
это
{{ mc.failed }}
фактически является ярлыком для
{{ hostvars[inventory_hostname].mc.failed }}
Это зависит от того, с какого хоста вы его запускаете.
Попробуйте это в шаблоне (используя свой host
переменная сверху):
{{ hostvars[host].mc.failed }}
Документы по этой теме можно найти здесь: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables