Como fazer o playbook idempotent com o módulo raw?

0

Eu tenho servidores sem o python2 instalado por padrão (os servidores de destino estão principalmente sob o Alpine Linux) e eu uso o manual abaixo para corrigir isso.

- hosts: all
  become: yes
  remote_user: root
  gather_facts: no
  pre_tasks:
      # Python is not installed by default
      - name: 'Install python'
        raw: apk --no-cache add python

  tasks:
      - name: 'Upgrade Operating System'
        apk:
                available: yes
                upgrade: yes

      - name: 'Install base software'
        apk:
                name: '{{ item }}'
                state: latest
        with_items:
                - tmux
                - vim
                - git

Eu uso o módulo raw porque sem o pacote python instalado eu obtive esta saída:

TASK [Upgrade Operating System] ******************************************************************************************************************************************
fatal: [172.16.160.254]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to 172.16.160.254 closed.\r\n", "module_stdout": "/bin/sh: /usr/bin/python: not found\r\n", "msg": "MODULE FAILURE", "rc": 0}

Na verdade, o manual funciona bem, mas o estado é 'changed = 1' para cada vez que as tarefas 'Install python' são executadas.

É possível torná-lo idempotente (com recapitulação de jogo 'alterada = 0' e tudo é 'ok = x')? Se sim, você pode me ajudar a fazer isso?

    
por Rollniak 09.08.2017 / 19:33

1 resposta

0

Não tenho 100% de certeza, mas acho que já pode ser quase idempotente devido ao funcionamento do APK. Com base no que posso dizer, o APK retornará o sucesso sem fazer nada se você disser para adicionar um pacote que já está instalado (pelo menos, é o que ele está fazendo ao tentar instalar o python2 em um sistema em que já o instalei ). A única ressalva em potencial é que ele atualizará o pacote se houver uma versão mais recente, mas não acredito que exista uma maneira de incorporar um script de shell ao playbook que você possa contornar (você teria que analisar a saída de apk version para descobrir se o atualizaria ou não).

    
por 09.08.2017 / 20:31

Tags