Содержание
ansible
Установка
sudo apt-add-repository ppa:ansible/ansible sudo apt-get update sudo apt-get install ansible
Настраиваем ssh для входа по ключу
http://docs.ansible.com/ansible/latest/intro_installation.html#latest-releases-via-apt-ubuntu
retry_files
Отключить создание retry файлов:
Добавить переменную перед запуском:
ANSIBLE_RETRY_FILES_ENABLED=0
Или добавить в:
- ./ansible.cfg
- ~/.ansible.cfg
- /etc/ansible/ansible.cfg
[defaults] retry_files_enabled = False
Изменить путь создания retry файлов:
retry_files_save_path = "~/"
hosts
Пример настройки hosts для входа по ключу:
testd.domain.com ansible_ssh_private_key_file=/etc/ansible/ansible_rsa ansible_user=ansible
Подготовка клиента
Создаём пользователя ansible и добавляем его в группу sudo:
adduser ansible --ingroup sudo
Разрешаем пользователю выполнять sudo без пароля:
echo "ansible ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
Команды
Проверить связь со всеми хостами:
ansible all -m ping
Выполнить команду на удаленном хосте (proxy):
ansible -m shell -a 'ls /home/' proxy
Проверить playbooks:
ansible-playbook /etc/ansible/playbooks/ntp.yml --syntax-check
Показать всю собранную информацию о хосте:
ansible localhost -m setup
Показать информацию о сервисах хоста:
ansible localhost -m service_facts
Роли
Назначение директорий:
- files: содержит файлы, которые будут скопированы на настраиваемые хосты; так же – может содержать скрипты, которые позже будут запускаться на хостах;
- handlers: обработчики, которые будут использоваться при выполнении задач;
- meta: описание зависимостей, т.е. – ролей, которые должны быть обработаны перед запуском настраиваемой роли и мета-данных, таких как автор, описание продукта и прочее;
- templates: шаблоны файлов с переменными;
- tasks: все задачи, которые ранее были описаны в Playbook-е;
- vars: переменные для шаблонов.
https://galaxy.ansible.com/ - готовые роли
Модули
http://docs.ansible.com/ansible/latest/list_of_all_modules.html - список всех модулей
copy
Пример копирования более одного файла:
- name: Copy conf file
copy: src={{ item.src }} dest={{ item.dest }}
with_items:
- { src: /etc/ansible/playbooks/ntp/timesyncd.conf, dest: /etc/systemd/timesyncd.conf }
- { src: /etc/ansible/playbooks/ntp/ntp.conf, dest: /etc/ntp.conf }
apt_key
Пример добавления ключей по url и по id:
- name: Add an Apt signing key rep.domain.com
apt_key:
url: "http://rep.domain.com/pubring.gpg"
state: present
- name: Add an apt key Zabbix by id from a keyserver
apt_key:
keyserver: keyserver.ubuntu.com
id: 082AB56BA14FE591
docker_container
На целевой системе должен быть установлен docker-py:
sudo pip install docker-py
или
sudo apt install python-docker
Пример запуска и удаления контейнера:
- name: Create a Alpine container
docker_container:
name: alpine
image: alpine
- name: Remove a Alpine container
docker_container:
name: alpine
state: absent
https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
service_facts
Собрать информацию о всех сервисах/службах хоста.
- name: populate service facts
service_facts:
- debug:
var: ansible_facts.services
https://docs.ansible.com/ansible/latest/modules/service_facts_module.html
Примеры
Запуск одной роли для одного хоста
Создаём playbook role.yml:
Запускаем, пример для роли sysctl и хоста d2proxy:
ansible-playbook role.yml -e "ROLE=sysctl" -e "HOST=d2proxy"
Если роли необходимо передавать параметры, то незабываем добавлять их в role.yml
Показать список задач
Параметр: –list-tasks
ansible-playbook -i hosts role.yml -e "ROLE=docker" -e "ROLE=sysctl" --list-tasks
GUI
- AWX - Docker, Git, docker-py | https://www.ansible.com/awx-project-faq
- Semaphore - MySQL/MariaDB, Git | https://github.com/ansible-semaphore/semaphore
- работает только с git по ssh ключам
-
- нет настройки прав доступа (v.0.0.9)
- Foreman - MySQL/MariaDB/PostgreSQL/SQLite, Ruby, Puppet | https://theforeman.org/
- работает только по ssl
Foreman
Semaphore
Polemarch
nci ansible ui
Docker
Dockerfile:
FROM ubuntu:18.04
LABEL maintainer="domain" \
release-date="2020–04–27"
ENV ANSIBLE_RETRY_FILES_ENABLED 0
WORKDIR /etc/ansible
RUN set -x \
&& apt-get update && apt-get install -y ansible python-docker curl jq \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
CMD ["/bin/bash"]
Ссылки
http://support.mdl.ru/MasteringAnsible2nd/content/index.html - Полное руководство Ansible
https://habrahabr.ru/post/306998/ - 15 вещей, которые вы должны знать об Ansible
