Skip to content

Commit

Permalink
fix й problem
Browse files Browse the repository at this point in the history
  • Loading branch information
ctrlok committed Apr 19, 2016
1 parent c3a8a32 commit a5bfac8
Show file tree
Hide file tree
Showing 17 changed files with 149 additions and 149 deletions.
14 changes: 7 additions & 7 deletions content/post/ansible-depend-hash.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: 'Трюки: Как сделать таск зависимым от хеша который присвоен переменной?'
title: 'Трюки: Как сделать таск зависимым от хеша который присвоен переменной?'
author: ctrlok
layout: post
date: 2013-08-09
Expand All @@ -12,13 +12,13 @@ tags:
- маленькие трюки

---
Например у нас есть роль nginx, которая копирует конфиги серверов в зависимости от значения переменной. Типа так:
Например у нас есть роль nginx, которая копирует конфиги серверов в зависимости от значения переменной. Типа так:

<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">nginx_config_list:
- {ip: &#039;127.0.0.1&#039;, domain: &#039;exemple.com&#039;}
- {ip: &#039;127.0.0.2&#039;, domain: &#039;exemple2.com&#039;}</pre>

Как видно выше &#8212; это конфиг для двух сайтов &#8212; есть переменная nginx, внутри которой находятся два хеша &#8212; собственно конфиги сайтов. Тогда мы можем запустить копирование конфига стандартными методами:
Как видно выше &#8212; это конфиг для двух сайтов &#8212; есть переменная nginx, внутри которой находятся два хеша &#8212; собственно конфиги сайтов. Тогда мы можем запустить копирование конфига стандартными методами:

<!--more-->

Expand All @@ -29,9 +29,9 @@ tags:
notify:
- restart nginx</pre>

Теперь сделаем задачу более повседневной &#8212; на одном из сайтов нам надо развернуть ssl, а второй оставить как есть. И это достаточно нетривиальная задача, так как стандартная проверка _when_set _хочет странного и проверяет внутри хеша только **(!)** при синтаксисе **${}**. То есть стандартные {{}} и $ &#8212; не работают. Это было для меня удивительным открытием и я великолепно потратил пол часа пытаюсь понять почему оно не заводится.
Теперь сделаем задачу более повседневной &#8212; на одном из сайтов нам надо развернуть ssl, а второй оставить как есть. И это достаточно нетривиальная задача, так как стандартная проверка _when_set _хочет странного и проверяет внутри хеша только **(!)** при синтаксисе **${}**. То есть стандартные {{}} и $ &#8212; не работают. Это было для меня удивительным открытием и я великолепно потратил пол часа пытаюсь понять почему оно не заводится.

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

<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">- name: Coping ssl-nginx config for sites
template: src=nginx.j2 dest=/etc/nginx/conf.d/ssl-{{ item.domain }}.conf
Expand All @@ -47,7 +47,7 @@ tags:
- {ip: &#039;127.0.0.1&#039;, domain: &#039;exemple.com&#039;, ssl: &#039;yes&#039;}
- {ip: &#039;127.0.0.2&#039;, domain: &#039;exemple2.com&#039;}</pre>

И небольшой лайфхак в завершение &#8212; чтобы не писать два отдельных конфига под обычный nginx и nginx-ssl можно воспользоваться встроенной возможностью ansible регистрировать переменные во время выполнения тасков.
И небольшой лайфхак в завершение &#8212; чтобы не писать два отдельных конфига под обычный nginx и nginx-ssl можно воспользоваться встроенной возможностью ansible регистрировать переменные во время выполнения тасков.

<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">- name: Coping nginx config for sites
template: src=nginx.j2 dest=/etc/nginx/conf.d/{{ item.domain }}.conf
Expand Down Expand Up @@ -86,7 +86,7 @@ server {
ssl_session_timeout 10m;
{% endif %}</pre>

В общем у нас есть один когфиг nginx, который превращается в конфиг nginx для ssl когда копируется вторым. При первом обходе переменная не активна и, естественно, строки выше опускаются.
В общем у нас есть один когфиг nginx, который превращается в конфиг nginx для ssl когда копируется вторым. При первом обходе переменная не активна и, естественно, строки выше опускаются.

Надеюсь кому-то эта заметка сможет сэкономить час-два времени.

Expand Down
36 changes: 18 additions & 18 deletions content/post/ansible13.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,47 +16,47 @@ tags:

В этом посте я постараюсь описать обновления и разобраться зачем они нужны.

Список нововведений:
Список нововведений:

* Accelerated Mode
* role dependencies
* role defaults
* Local Facts (Facts.d)
* changed_when
* always_run
* экстра переменные из файлов
* экстра переменные из файлов

<!--more-->

## Accelerated Mode

[Accelerated Mode][1] &#8212; если говорить коротко, то при выборе такого типа подключения ansible на хостах стартует демон поверх ssh, который слушает мир 30 минут. Типа старого фаербола, но быстрее.
[Accelerated Mode][1] &#8212; если говорить коротко, то при выборе такого типа подключения ansible на хостах стартует демон поверх ssh, который слушает мир 30 минут. Типа старого фаербола, но быстрее.

## role dependencies

[Совсем недавно ребята из ansibleworks обновили ansible до версии 1.3

В этом посте я постараюсь описать обновления и разобраться зачем они нужны.

Список нововведений:
Список нововведений:

* Accelerated Mode
* role dependencies
* role defaults
* Local Facts (Facts.d)
* changed_when
* always_run
* экстра переменные из файлов
* экстра переменные из файлов

<!--more-->

## Accelerated Mode

[Accelerated Mode][1] &#8212; если говорить коротко, то при выборе такого типа подключения ansible на хостах стартует демон поверх ssh, который слушает мир 30 минут. Типа старого фаербола, но быстрее.
[Accelerated Mode][1] &#8212; если говорить коротко, то при выборе такого типа подключения ansible на хостах стартует демон поверх ssh, который слушает мир 30 минут. Типа старого фаербола, но быстрее.

## role dependencies

][2] &#8212; очень мощная фигня, включение ролей в роли с передаваемыми переменными.
][2] &#8212; очень мощная фигня, включение ролей в роли с передаваемыми переменными.

Теперь внутри роли можно использовать конструкции типа:

Expand All @@ -66,41 +66,41 @@ tags:

Таким образом применяя какую-либо роль мы можем сразу назначить другие роли на выполнение.

Например нам надо на группу серверов GROUP2 всегда устанавливать сислог-нг, nginx, php-fpm и collectd + выполнить какие-то действия. Весь этот софт связан между собой. Если раньше нам надо было либо назначать эти роли в основном плейбуке и в темплейтах рулить группами, либо в инвентори файлах включать хосты группы GROUP2 в группы nginx, collectd, syslog и т.п., а в самих связанных ролях уже обрабатывать `{% if inventory_hostname in groups['nginx'] %}`, то сейчас все стало намноооого проще:
Например нам надо на группу серверов GROUP2 всегда устанавливать сислог-нг, nginx, php-fpm и collectd + выполнить какие-то действия. Весь этот софт связан между собой. Если раньше нам надо было либо назначать эти роли в основном плейбуке и в темплейтах рулить группами, либо в инвентори файлах включать хосты группы GROUP2 в группы nginx, collectd, syslog и т.п., а в самих связанных ролях уже обрабатывать `{% if inventory_hostname in groups['nginx'] %}`, то сейчас все стало намноооого проще:

1. Создаем роль GROUP2
2. Создаем файл ./roles/GROUP2/meta/main.yml
2. Создаем файл ./roles/GROUP2/meta/main.yml
3. Пишем в него: <pre class="brush: bash; gutter: false; first-line: 1; highlight: []; html-script: false">dependencies:
- { role: syslog-ng, include_nginx: true }
- { role: nginx, istheresyslog: true, phpfpm: true }
- { role: collectd, nginx: true, phpfpm: true }</pre>

Тут мы сделали:

1. запускаем роль syslog, которая проверяет include_nginx &#8212; если он true, то создает пайпы для nginx
2. запускам роль nginx, которая устанавливает nginx и если установлен syslog &#8212; вместо файлов для логов использует пайпы, также ставит phpfpm если есть такая переменная.
1. запускаем роль syslog, которая проверяет include_nginx &#8212; если он true, то создает пайпы для nginx
2. запускам роль nginx, которая устанавливает nginx и если установлен syslog &#8212; вместо файлов для логов использует пайпы, также ставит phpfpm если есть такая переменная.
3. ставим collectd, кроме обычных проверок добавляем чек для nginx и phpfpm
4. После этого можем со спокойной душей запускать плейбук и наблюдать :) Очередь выполнения будет такой:
4. После этого можем со спокойной душей запускать плейбук и наблюдать :) Очередь выполнения будет такой:
1. роль сислога &#8212; его таски
2. роль nginx &#8212; его таски
3. роль collectd &#8212; его таски
4. таски роли GROUP2

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

## role defaults

[role defaults][3] &#8212; еще одна долгожданная фича. Если раньше мы должны были пользоваться group_vars или назначать переменные прямо в плейбуке, то сейчас достаточно создать файл `roles/rolename/defaults/main.yml` и дело в шляпе. Намного удобнее и читаемее. К тому же такие переменные будут иметь самый низкий приоритет из всех доступных.
[role defaults][3] &#8212; еще одна долгожданная фича. Если раньше мы должны были пользоваться group_vars или назначать переменные прямо в плейбуке, то сейчас достаточно создать файл `roles/rolename/defaults/main.yml` и дело в шляпе. Намного удобнее и читаемее. К тому же такие переменные будут иметь самый низкий приоритет из всех доступных.

## Остальное

[Local Facts (Facts.d)][4] &#8212; создание локальных фактов, которые будут показываться в ansible -m setup. Я пока особого применения не вижу даже в команде кроме как создания факта ansible_local.user.signature и вшитие его в все конфиги для того чтобы более наглядно показывать кто последний деплоил конфиг.
[Local Facts (Facts.d)][4] &#8212; создание локальных фактов, которые будут показываться в ansible -m setup. Я пока особого применения не вижу даже в команде кроме как создания факта ansible_local.user.signature и вшитие его в все конфиги для того чтобы более наглядно показывать кто последний деплоил конфиг.

[changed_when][5] &#8212; удобная штука для модуля shell с помощью которой можно сделать выполнение шела зеленым, в зависимости от exit статуса команды. Но у меня почему-то не получилось заставить его работать, если программа завершается с ошибкой и пишет в stderr.
[changed_when][5] &#8212; удобная штука для модуля shell с помощью которой можно сделать выполнение шела зеленым, в зависимости от exit статуса команды. Но у меня почему-то не получилось заставить его работать, если программа завершается с ошибкой и пишет в stderr.

[always_run][6] &#8212; позволяет запускать команды даже если мы запустили плейбук только для чека ( ansible-playbook -C&#187; ) Может быть удобно для выполнения каких-то подготовок.
[always_run][6] &#8212; позволяет запускать команды даже если мы запустили плейбук только для чека ( ansible-playbook -C&#187; ) Может быть удобно для выполнения каких-то подготовок.

Также начиная с версии 1.3 внешние переменные во время выполнения плейбука можно подгружать из файла в YAML или JSON формате. Это круто, если вы используете внешние файлы переменных. Вот так: `--extra-vars "@some_file.json"`
Также начиная с версии 1.3 внешние переменные во время выполнения плейбука можно подгружать из файла в YAML или JSON формате. Это круто, если вы используете внешние файлы переменных. Вот так: `--extra-vars "@some_file.json"`

[1]: http://ansibleworks.com/docs/playbooks2.html#accelerated-mode
[2]: http://ansibleworks.com/docs/playbooks.html#role-dependencies
Expand Down
Loading

0 comments on commit a5bfac8

Please sign in to comment.