Как сделать playbook идемпотентным с необработанным модулем?

У меня по умолчанию установлены серверы без python2 (целевые серверы в основном находятся под Alpine Linux), и я использую приведенную ниже книгу, чтобы исправить это.

- 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

Я использую необработанный модуль, потому что без установленного пакета python я получил следующий результат:

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}

На самом деле playbook работает нормально, но состояние «изменено = 1» каждый раз, когда запускаются задачи «Установить python».

Можно ли сделать его идемпотентным (с повторением воспроизведения 'изменено = 0' и все в порядке '= x')? Если да, можете ли вы мне помочь?

0
09.08.2017, 22:27
1 ответ

Я не уверен на 100%, но я думаю, что он уже может быть почти идемпотентным из-за того, как работает APK. Основываясь на том, что я могу сказать, APK вернет успех, ничего не делая, если вы скажете ему добавить пакет, который уже установлен, по крайней мере (, это то, что он делает при попытке установить python2 в системе, которую я уже получил. установлен на ). Единственное потенциальное предостережение заключается в том, что он обновит пакет, если будет более новая версия, но я не думаю, что есть какой-либо способ без встраивания сценария оболочки в книгу воспроизведения, который вы можете обойти (, который вам придется анализировать вывод apk version, чтобы выяснить, будет ли он обновлять его или нет ).

0
28.01.2020, 04:41

Теги

Похожие вопросы