Ansible

Refs

Ansible

Documentation

Files modules

Полное руководство Ansible

Ansible Galaxy

Проверка синтаксиса playbook

Установка

source

Бинарник (v2.x)

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt-get install ansible
ansible --version

Pip-пакет

sudo python3 -m pip install ansible
# --- консоль необходимо перезапустить
ansible --version

Commands

#
# --- modules
#
# --- ping
# пигуем все серверы
ansible all -m ping
# пингуем один сервер
ansible ds4ci -m ping
# пингуем один сервер из заданного инвентаря с выводом отладочной информации
ansible ds4ci -i /path/to/hosts -m ping -vvvv

# --- setup
# получение "фактов" о хосте (значительный вывод)
ansible ds4staging -m setup
# получение "фактов" с фильтрацией вывода
ansible ds4staging -m setup -a 'filter=ansible_ens*'

# --- command
# выполнение произвольной команды на сервере (uptime)
ansible ds4ci -m command -a uptime
# то же, -m command выполняется по умолчанию
ansible ds4ci -a uptime
# выполнение команды с пробелами на сервере
ansible ds4ci -a "tail /var/log/dmesg"

# --- reboot
# reboot all hosts
ansible -i inventory/hosts.yml all -m reboot -b

# --- apt
ansible all -m apt -a "upgrade=yes update_cache=yes" --become
ansible all -m apt -a "upgrade=yes update_cache=yes autoremove=yes" --become

#
# --- debug
#
ansible registry -a uptime -e @secrets.yml.enc --ask-vault-pass
# отладочный вывод с подключением зашифрованного файла с секретами
ansible registry -m debug -a 'var=hostvars[inventory_hostname]' -e @secrets.yml.enc --ask-vault-pass
ansible registry -a uptime

# получение справки по модулю `service`
ansible-doc service

Recipes

Alt Linux

Для возможности управления Alt Linux с использование Ansible необходимо установить на Alt следующие пакеты:

# --- python 2
su
apt-get install python-module-pip
pip install simplejson 
# --- python 3
su
apt-get install python3 python3-module-pip
ln -fs /usr/bin/python3 /usr/bin/python
ln -fs /usr/bin/pip3 /usr/bin/pip

Кэширование переменных

Выявлено, что если в переменных хоста прописать следующую конструкцию

ansible_password: "{{ registry.ansible_password }}"
registry: ""

а в secrets.yml.enc

registry:
  ansible_password: 'secret'

то при выполнении команды

ansible registry -a uptime -e @secrets.yml.enc --ask-vault-pass

мы ожидаемо получаем корректный ответ.

Но если мы сразу повторим команду без secrets.yml.enc, то она также выполнится корректно

ansible registry -a uptime

Т.е. в течении некоторого времени (до 5 минут) пароль где-то хранится...

Данное поведение наблюдается только при наличии пустой переменной `registry: ""```

Troubleshooting

localhost in Alert URL

В уведомлениях приходит URL localhost. Необходимо добавить переменную окружения GF_SERVER_ROOT_URL с адресом сервера. https://community.grafana.com/t/how-can-i-update-the-grafana-dashboard-url-in-the-slack-notification/15075/2

"AnsibleError: template error while templating string: unexpected '.'

При выполнении модуля template, может случится так, что в файле-шаблоне уже используются {{ }}.

Напр, oauth2_proxy предполагает конфигурация логов через фигурные скобки.

#standard_logging_format = "[{{.Timestamp}}] [{{.File}}] {{.Message}}"

Подобная запись будет интерпретироваться Ansible-ом и будет выдана ошибка

"AnsibleError: template error while templating string: unexpected '.'

Решение Чтобы Ansible пропускал определенные записи файла-шаблона необходимо воспользоваться {% raw %}и {% endraw %}, например

{% raw %}
#standard_logging_format = "[{{.Timestamp}}] [{{.File}}] {{.Message}}"
{% endraw %}