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