Quero ser capaz de escrever um manual para atualizar todos os meus servidores em diferentes ambientes - palco e produção. Não quero reiniciar esses servidores toda vez que houver uma atualização do kernel, quero apenas reiniciar, por exemplo, a cada 2 meses.
Existe uma maneira de passar uma variável de reinicialização para o comando ansible para acionar a reinicialização de todos os servidores somente quando eu quiser reinicializar?
Estarei usando Jenkins para acionar o trabalho de atualização.
Exemplo de código abaixo:
- hosts: all
become: yes
tasks:
- name: Making changes to the yum.conf file
shell: sudo sed "s/exclude=kernel/#exclude=kernel/g" /etc/yum.conf
args:
executable: /bin/bash
- name: Performing yum update
yum:
update_cache: yes
name: '*'
state: latest
update_cache: yes
- name: Checking for reboot
shell: LAST_KERNEL=$(rpm -q --last kernel | awk 'NR==1{sub(/kernel-/,""); print $1}'); CURRENT_KERNEL=$(uname -r); if [ $LAST_KERNEL != $CURRENT_KERNEL ]; then echo 'reboot'; else echo 'no'; fi
ignore_errors: true
register: reboot_hint
- name: Rebooting servers now ...
command: shutdown -r now "Reboot required for updated kernel"
async: 0
poll: 0
sudo: true
ignore_errors: true
when: reboot_hint.stdout.find("reboot") != -1
register: rebooting
- name: Taking a nap while servers reboot...
pause: seconds=200
when: rebooting is changed
- name: Confirming servers are back online
wait_for:
host: "{{ ansible_ssh_host | default(inventory_hostname) }}"
delay: 30
state: started
search_regex: OpenSSH
port: 22
become: false
when: reboot is changed
delegate_to: localhost
Você pode passar variáveis extras para playbooks ansible executando
Modifique a parte superior do seu manual:
A tarefa de reinicialização torna-se:
Quando você não passa o parâmetro extra-vars então o var tem o valor "notnow" e então
when
a condição não será satisfeita.Agora existe um módulo que simplesmente faz uma reinicialização de uma máquina: https://docs.ansible.com/ansible/latest/modules/reboot_module.html