Como configurar o ansioso playbook para reinicializar os servidores

1

Eu quero poder escrever um playbook para atualizar todos os meus servidores em diferentes ambientes - stage e prod. Eu não quero reiniciar esses servidores toda vez que houver uma atualização para o kernel, eu só quero reiniciar por exemplo a cada 2 meses.

Existe uma maneira de passar uma variável de reinicialização para um comando ansible para acionar a reinicialização de todos os servidores somente quando eu quiser reinicializar?

Eu usarei o 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
    
por bonafideaf 27.05.2018 / 04:29

1 resposta

2

Você pode passar variáveis extras para playbooks ansible executando

ansible-playbook --limit whatever myplaybook.yml --extra-vars reboot=now

Modifique o topo do seu manual:

- hosts: all
  become: yes
  vars:
    reboot: notnow

A tarefa de reinicialização se torna:

- name: Rebooting servers now ...
  command: shutdown -r now "Reboot required for updated kernel"
  async: 0
  poll: 0
  sudo: true
  ignore_errors: true
  when: reboot == "now"
  register: rebooting

Quando você não passar o parâmetro extra-vars, o var terá o valor "notnow" e a condição when não será satisfeita.

    
por 28.05.2018 / 16:54