Назад | Перейти на главную страницу

Ansible - управление установленными приложениями и отправка вывода по электронной почте - переменные заполняются неправильно

Итак, у меня есть эта книга, которая проверяет, установлены ли выбранные пакеты. там ничего особенного. Затем я хотел бы отправить сообщение на свой адрес электронной почты, если все прошло хорошо и т. Д.

---
 - 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