Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒FreeBSD and Nix⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

Ansible: пример работы


 

Ansible: пример работы


В схеме будет:
Сервер с установленным ansible
2 сервера - клиента, на которых ansible будет выполнять задачи


Скапируем ssh .pub ключ с сервера Ansible на серверы-клиенты:
С сервера с ansible: /root/.ssh/id_rsa.pub
На серверы-клиенты: /root/.ssh/authorized_keys


Установка в Centos:
# yum -y install ansible
Или в Debian\Ubuntu:
# apt-get -y install ansible


Сам главный конфигурационный файл находится тут, укажем в нем:
/etc/ansible/ansible.cfg


Файл со списком хостов и ip (переменные из него мы позже выпилим в отдельный файл):
/etc/ansible/hosts


Создаем каталог для плейбуков (файлы инструкций):
# mkdir /etc/ansible/playbooks


Создаем первый плейбук:
/etc/ansible/playbooks/install_web_server.yml

В нем на хостах из группы test_servers_group из файла /etc/ansible/hosts выполнятся задачи из tasks
become - sudo
name - имя задачи
yum - модуль для установки в Rhel\Centos
service - инсталлиоует, стартует и рестарует сервис nginx


Вывод инвентаризации:
# ansible-inventory --list


Запускаем плейбук:
# ansible-playbook /etc/ansible/playbooks/install_web_server.yml


Запускаем плейбук на определенной задаче:
# ansible-playbook /etc/ansible/playbooks/install_web_server.yml --step --start-at-task="restart nginx"


Запуск Ad-Hoc комманд

Модуль yum:
# ansible all -m yum -a "name=nginx state=latest"

Модуль ping:
# ansible test_servers_group -m ping

# ansible all -m ping

Модуль copy (копирование файлов):
# echo 'Test' > /tmp/test.txt
# ansible all -m copy -a 'src=/tmp/test.txt dest=/tmp/ owner=root mode=0644' -u root

Модуль shell (выполнение комманд из shell):
# ansible all -m shell -a "uname -n && cat /tmp/test.txt"


Пример плейбука с модулем copy:
/etc/ansible/playbooks/copy_file_on_servers.yml


Запуск:
# ansible-playbook /etc/ansible/playbooks/copy_file_on_servers.yml


Переменные


Вынесем их из hosts:
/etc/ansible/hosts


Создаем папку group_vars:
# mkdir /etc/ansible/group_vars


По названию группы создаем файл и вносим туда кусок из hosts:
/etc/ansible/group_vars/test_servers_group


Проверяем:
# ansible test_servers_group -m ping


Названия групп и отдельных хостов можно использовать в командах:
# ansible test_server_1 -m setup


Усложненный плейбук (Проверка версий ОС, дебаг,копирование конфигурации):

Создадим 2 статичных файла и один с используемыми параметрами из вывода модуля (-m setup):
# echo "Hello world from .htm" > /tmp/index.htm && echo "Hello world from .html" > /tmp/index.html
# echo "Server {{ ansible_hostname }} ( ip {{ansible_default_ipv4.address }} ) say Hello world" > /tmp/dynamic.j2


Сам плейбук:
/etc/ansible/playbooks/web_server.yml


Где:
block - блок, к которому применен параметр из модуля setup - when: ansible_os_family == "RedHat"
handlers - подписка, которая вызовется при изменении файлов в задаче Copy htm file
failed_when: result.failed - проверка значения параметра из вывода debug, если true - закончить выполнение
dynamic.j2 превратит переменную из модуля setup в значение

Запуск
# ansible-playbook /etc/ansible/playbooks/web_server.yml

Проверка:
# curl http://10.0.2.10/index.htm && curl http://10.0.2.11/index.html && curl http://10.0.2.11/dynamic.html


Роли

Распределим наш код в роль с именем deploy_web_server:
# mkdir /etc/ansible/roles && cd /etc/ansible/roles
# ansible-galaxy init deploy_web_server

Получившаяся структура:
# tree deploy_web_server/

Копируем статичные файлы:
# cp /tmp/index.* /etc/ansible/roles/deploy_web_server/files/

Копируем j2 файл шаблонов:
# cp /tmp/dynamic.j2 /etc/ansible/roles/deploy_web_server/templates/

Определим переменные:
/etc/ansible/roles/deploy_web_server/defaults/main.yml

Определим подписки:
/etc/ansible/roles/deploy_web_server/handlers/main.yml

Определим задачи:
/etc/ansible/roles/deploy_web_server/tasks/main.yml


Сам плейбук:
/etc/ansible/playbooks/web_server_roles.yml

Где:
hosts: "{{ servers }}" - будет передаваемый параметр аргументом

Запускаем с передачей значения в переменную servers:
# ansible-playbook /etc/ansible/playbooks/web_server_roles.yml -e "servers=test_servers_group"

Проверяем:
# curl http://10.0.2.10/index.htm && curl http://10.0.2.11/index.html && curl http://10.0.2.11/dynamic.html


Шифрование

Придумываем пароль, файл будет зашифрован:
# ansible-vault encrypt /etc/ansible/playbooks/web_server.yml

Вводим пароль для исполнения:
# ansible-playbook /etc/ansible/playbooks/web_server.yml --ask-vault-pass

Пример без ввода пароля:
# echo "32167" > /etc/ansible/pass.txt
# ansible-playbook /etc/ansible/playbooks/web_server.yml --vault-password-file /etc/ansible/pass.txt

Вводим пароль, файл будет разшифрован:
# ansible-vault decrypt /etc/ansible/playbooks/web_server.yml


Возможность шифровать значение переменных

 

Было в /etc/ansible/playbooks/web_server.yml:

 

Зашифруем значение - "/tmp":
# ansible-vault encrypt_string


Стало /etc/ansible/playbooks/web_server.yml:

 

Вводим придуманный пароль при шифровке для запуска плейбука:
# ansible-playbook /etc/ansible/playbooks/web_server.yml --ask-vault-pass


Расшифровать зашифрованное значение переменной ( Обратите внимание на удаленный кусок "!vault |" )
# echo '$ANSIBLE_VAULT;1.1;AES256

 

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru