LINUX.ORG.RU

Вышел Ansible 2.0

 ,


3

5

Сегодня вышел Ansible 2.0. Этот релиз в первую очередь является масштабным рефакторингом, направленным на устранение technical debt, накопившегося за три года бурного роста до 1000 участников. Обещают обратную совместимость на уровне плейбуков, но API плагинов претерпел значительные изменения. Инструкция по портированию прилагается.

Новый релиз также привносит несколько ожидаемых улучшений: таск блоки, которые добавляют механизм исключений в плейбуки, человеческий код для парсинга YAML'а и, соответственно, нормальные сообщения об ошибках, динамические инклуды, а также плагины типа «execution strategy», которые позволяют пользователям менять, как происходит выполнение задач на целевых машинах. Кроме того, в поставку включены новые и/или существенно улучшенные модули для поддержки OpenStack, AWS, Docker, VMWare и Microsoft Windows.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Ответ на: комментарий от aidaho

вы свои веб-проекты выкатываете каким-нибудь сторонним инструментом деплоймента вроде этого анзибля, или самописным скриптом (на базе библиотек) на основном языке проекта?

scp --- это инструмент деплоймента или самописный скрипт? ))

Rastafarra ★★★★ ()
Ответ на: комментарий от anonymous

анонимусы конечно величайшие знатоки. а я пока что просто смотрю на список компаний и соответственно продуктов которые они купили, и на список открытых проектов которые точно повторяют этот список продуктов.

dyasny ★★★★★ ()
Ответ на: комментарий от slovazap

Puppet можно списывать, он своё уже отжил. Chef — если знаний особо нет, учиться не хочется/нет времени, а делать нужно сложные вещи уже прямо сейчас. У Salt есть перспективы, но оно ещё не готово. А вот с CFEngine однозначно стоит разобраться как следует. Как-никак, прадедушка всех современных систем управления, имеет научную основу и до сих пор имеет наилучшие показатели. Один минус: за час не освоишь. Придётся читать, вникать и ломать себе стереотипы.

anonymous ()
Ответ на: комментарий от selivan

честно говоря, ansible настолько прост в написании что все равно никакой gui не особо нужен. он понадобится скорее для зпауска и контроля плейбуков, а для этого есть и rundeck и jenkins и еще туева хуча проектов поскромнее

dyasny ★★★★★ ()
Ответ на: комментарий от Rastafarra

Ну, если ты его вызываешь из .sh - и то и другое!

Yustas ★★★★ ()
Ответ на: комментарий от dyasny

Tower - это для централизованного запуска, запуска по расписанию, логи по результатам накатывания плейбук, красивый дашбоард и т. п: http://www.ansible.com/tower-features Писать всё равно надо руками :) К rundesk/jenkins ansible ещё прикрутить надо

selivan ★★★ ()
Ответ на: комментарий от selivan

само собой, но rundeck/jenkins во первых бесплатные, а во вторых у них намного лучше с поддержкой плагинов под все что угодно. т.е. tower хорош для чистого ansible, но я постоянно натыкаюсь на установки где намешано до хрена всего

dyasny ★★★★★ ()
Ответ на: комментарий от slovazap

все хосты разные, но набор сервисов пересекается
а хотелось бы параллельно и так чтобы результаты по s1 для hosta и hostc показались рядом

Какая-то необычная инфраструктура, очень странный юз-кейс. Не опишешь подробнее?

По-моему, ты все возможные способы перечислил. Ещё есть теги для ролей, но они вариантов не прибавляют. Можешь использовать второй вариант, зависимости в ролях исключить, а перечислять их напрямую:

- hosts: hosta hostc # или сделать группу типа servers-that-run-s1
  roles:
    - s2
    - s1

- hosts: hosta hostb
  roles:
    - s2


Так получится самое близкое к тому, что ты хочешь.

selivan ★★★ ()
Ответ на: комментарий от selivan

Какая-то необычная инфраструктура, очень странный юз-кейс. Не опишешь подробнее?

Самая обычная - пачка VPS у разных хостеров, на одних одни проекты, на других другие, кое-где с избыточностью, кое-где есть общие куски, общая система мониторинга и т.д.

Можешь использовать второй вариант, зависимости в ролях исключить, а перечислять их напрямую

Да, кстати - так и сделал. В целом нормально, кроме того что отдельные playbook'и выполняются по очереди и нет единого отчёта. В документации было что-то про стратегии выполнения которые должны были появиться в 2.0, может оно как раз поможет.

slovazap ★★★★★ ()

Всем привет! А подскажите пожалуйста, я хочу попробовать ansible вместо своего puppet'a, и у меня возникло несколько вопросов. Допустим у меня 2к серверов. Ansible вывезет такую нагрузку? Как он вообще взаимодействует с подопечными серверами, он ходит к каждому по ssh на сколько я знаю, а есть ли какой-то агент, чтоб ходить к ansible? Как назначать время в которое ansible должен ходить к серверам, с помощью системного cron'а сервера с ansible или у него есть своё какое-то внутренне расписание? Если я хочу на каждый сервер ходить в разное время, это мне придётся загаживать системный cron задачами для ansible? Если я захочу на 2к серверов сделать что-то единоразово, он инициализирует 2к коннектов или будет поочерёдно тыкаться в каждый сервер? Чего-то ещё спросить хотел, но забыл) Пардон за глупые вопросы, всегда использовал puppet, давеча решил с 3.8 перейти на 4.2 и заодно посмотреть альтернативы, в общем, тяжело это :)

Grotesque ()
Ответ на: комментарий от fjfalcon

Он немношк не пра это :) Т.е. абс. ортогонален «ансиблянию кукол на ниточках по кукбукам» и вот этому вот всему.

slackwarrior ★★★★★ ()

Хорошо, но переключился на REX - rexify.org

anonymous ()
Ответ на: комментарий от Grotesque

Допустим у меня 2к серверов. Ansible вывезет такую нагрузку? Как он вообще взаимодействует с подопечными серверами, он ходит к каждому по ssh на сколько я знаю, а есть ли какой-то агент, чтоб ходить к ansible?

Есть два варианта взаимодействия:
- напрямую запускать плейбуки с управляющего хоста. В этом случае количество параллельных коннектов к серверам ограничено настройкой в конфиге, по умолчанию 5, можешь поставить 2k, если сеть позволяет.
- поставить на хост ansible и запускать по крону ansible-pull: оно заберёт из гита последнюю версию плейбуки и применит локально.

Ещё можно купить ansible-tower или поставить упомянутую в топике бесплатную semaphore. Это как первый вариант, но с красивыми логами, запуском по расписанию и т. д.

selivan ★★★ ()
Ответ на: комментарий от Grotesque

Допустим у меня 2к серверов. Ansible вывезет такую нагрузку?

легко.

Если я захочу на 2к серверов сделать что-то единоразово, он инициализирует 2к коннектов или будет поочерёдно тыкаться в каждый сервер?

как настроишь. 2k одновременных коннектов не вызывают проблемы.

насчет крона. можно пуллить плейбуки с хостов, можно использовать один из массы сторонних шедулеров, включая разнообразные distributed schedulers.

val-amart ★★★★★ ()
Ответ на: комментарий от Grotesque

Pull есть, он рудиментарный. Хочешь обслуживать 2к серверов бери CFEngine. Всё остальное хуже.

anonymous ()
Ответ на: комментарий от selivan

Доктор, а что мне делать? Мне NSA запрещает иметь SSH на некоторых серверах, а compliance нужно выдерживать на четыре девятки?

anonymous ()
Ответ на: комментарий от val-amart

А как убедиться, что крон запущен всё время и не упал? А как бутстрапиться? А как быть с клиентами с дискретным доступом к интернету?

anonymous ()
Ответ на: комментарий от anonymous

Доктор, а что мне делать? Мне NSA запрещает иметь SSH на некоторых серверах, а compliance нужно выдерживать на четыре девятки?

Годится вариант с ansible-pull, он может по расписанию забирать задачи из гита и применять. Сверху можно накручивать требуемую степень паранойти: git раздаётся по https, который контролируется с обеих сторон IPS, плюс дополнительно завёрнут в VPN, и т. д. и т. п.

selivan ★★★ ()
Ответ на: комментарий от val-amart

Пушем? На полторы тысячи хостов? Экий затейник! А проблему кочевников с непостоянными IP как решить? А как быть с серверами, доступ к которым извне невозможен?

anonymous ()
Ответ на: комментарий от anonymous

Пушем? На полторы тысячи хостов? Экий затейник! А проблему кочевников с непостоянными IP как решить? А как быть с серверами, доступ к которым извне невозможен?

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

val-amart ★★★★★ ()
Ответ на: комментарий от v9lij

кучей проблем, если использовать его как general purpose scheduler. например, очень негибкий, не гарантирует выполнение, отсутствует нормальный мониторинг и репортинг, рестарт джоб, продолжать можно бесконечно. с другой стороны, надо просто использовать подходящий инструмент.

val-amart ★★★★★ ()
Ответ на: комментарий от anonymous

cron. Результаты работы ansible-pull всё равно мониторить стоит, например неудачный запуск. Туда же можно мониторинг самого факта запуска.

selivan ★★★ ()

Чего-то не получается... Попробовал по этому ману сделать первый плейбук и звести юзеров:

[root@ansible ansible]# cat /etc/ansible/roles/preconf/tasks/main.yml 
- name: installing pkg
  apt: pkg=$item
  with_items:
    - htop
    - sudo
    - tcpdump
    - mc
    - wget
    - vim
    - facter

- name: Add users
#  user: name={{item.user}} comment={{item.comment}} uid={{item.uid}} password={{item.password}} shell='/bin/bash' groups='sudo'
  debug: msg={{item.user}} msg={{item.comment}} msg={{item.uid}} msg={{item.password}}
  with_items:
    - $adm_users
	
	
[root@ansible ansible]# cat /etc/ansible/roles/main/variables/main.yml
adm_users:
 - { user: 'user1', comment: 'user11', uid: '15139', password: '$gsdJDGASgdashdakshdg' }
 - { user: 'user2', comment: 'user22', uid: '15217', password: '$tERuJGEAgdfSAGDVaGV' }

В итоге:

[root@ansible ansible]# time ansible-playbook -vvvv main.yml --ask-pass --ask-sudo-pass
Using /etc/ansible/ansible.cfg as config file
SSH password: 
SUDO password[defaults to SSH password]: 
1 plays in main.yml
Loaded callback default of type stdout, v2.0

PLAY ***************************************************************************

TASK [setup] *******************************************************************
...
ok: [192.168.0.2]

TASK [preconf : installing pkg] ************************************************
...
ok: [192.168.0.2] => (item=[u'htop', u'sudo', u'tcpdump', u'mc', u'wget', u'vim', u'facter']) => {"cache_update_time": 0, "cache_updated": false, "changed": false, "invocation": {"module_args": {"name": ["htop", "sudo", "tcpdump", "mc", "wget", "vim", "facter"]}, "module_name": "apt"}, "item": ["htop", "sudo", "tcpdump", "mc", "wget", "vim", "facter"]}

TASK [preconf : Add users] *****************************************************
task path: /etc/ansible/roles/preconf/tasks/main.yml:12
fatal: [192.168.0.2]: FAILED! => {"failed": true, "msg": "ERROR! 'unicode object' has no attribute 'password'"}

PLAY RECAP *********************************************************************
192.168.0.2                : ok=2    changed=0    unreachable=0    failed=1   


real	0m3.745s
user	0m0.357s
sys	0m0.100s
Ни user, ни debug таким способом не работаю. Что я неправильно делаю? :(

Grotesque ()
Ответ на: комментарий от val-amart

До прода ещё не дошло. Масштаб приличный, впечатления тоже. Многие проекты используют эту связку, плохих отзывов не слышал.

bytecode ★★ ()
Ответ на: комментарий от Grotesque
roles/preconf/tasks/main.yml
roles/main/variables/main.yml


Во-первых, переменные из разных ролей друг другу не видны, во-вторых, не variables, а vars. Ну и лучше бери что-нибудь из https://github.com/ansible/ansible-examples и меняй под себя, чем сразу с нуля писать.

selivan ★★★ ()
Ответ на: комментарий от selivan

Да не работает так. Я уже в каждой директории /etc/ansible/* создал ./vars/main.yml и ./variables/main.yml всё равно он не видит этих переменных. Начинаю подозревать, что в том мануале какая-то ахинея написана...

Grotesque ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.