
Dmitriy
20.07.2016
16:07:46
ребяты, у меня тут коллега спрашивает, а я ему ответить не могу.
как сделать, чтобы можно было писать
include task.yml when tag == foo
в rolename/main.yml
я могу это на уровне варки сделать, типа include task when my_var == true, например. А с тегами такое не работает. Подозреваю, что надо не к тегу обращаться, а искать в тегах как-то
типа include task.yml when 'foo' in tags

Google

Dmitriy
20.07.2016
16:10:31
что вообще человек хочет - чтобы запуск плейбука с —tag install - делал установку, без указания —tag install - не делал установку

Roman
20.07.2016
16:12:40
вот так ответь ему

Dmitriy
20.07.2016
16:15:54
у меня глаза вытекли
не думаю, что этот ответ можно считать ответом :)

Dmitry
20.07.2016
16:16:15
от странного желания этого человека тоже собсно глаза вытекают :)

Dmitriy
20.07.2016
16:16:45
а как правильно сделать?
мне так видится, что разбить роли на установку и обслуживание

Roman
20.07.2016
16:17:13
этот одновременно с твоим вопросом прилетел просто

Dmitry
20.07.2016
16:18:27
мне так видится, что надо пометить таски тагами
которые устанавливают, тем проставить таги install.
всё. и не теребить писюн, вытаскивая себя за волосы

Roman
20.07.2016
16:19:08
"when 'foo' in tags"

Dmitriy
20.07.2016
16:19:34

Google

Dmitriy
20.07.2016
16:19:51
а если ты теги не укажешь - то у тебя инсталл отработает

Dmitry
20.07.2016
16:20:55
ну если хочет странного, то пусть попробует примерно так
- name: blablabla
tasks:
- include: tasks/bububu.yml
tags:
- install
а, он хочет настолько странного, что это ему не поможет

Dmitriy
20.07.2016
16:21:39
вроде уже чото такое пробовали
ладно, думаю, что оно не решается в заданном виде просто
порекомендую разбить роль на две

Roman
20.07.2016
16:22:18
а это часть кода или окружения?

Dmitry
20.07.2016
16:22:48

Dmitriy
20.07.2016
16:22:56

Roman
20.07.2016
16:23:03
не, нафиг этот вопрос.
пойду матчасть курить

Dmitry
20.07.2016
16:24:26
может так?
- include: install.yml
when: install_whatever is defined
и запускать
ansible-playbook -i inventory site.yml -e "install_whatever=true"
нихрена не таг, но хотелку наверное залечит

Roman
20.07.2016
16:24:50
я ничего не понимаю кроме понимания что надо засесть и раздуплить.

Dmitriy
20.07.2016
16:24:55

Dmitry
20.07.2016
16:25:59
иначе никак, when clause can't evaluate the presence of tags
хм... придумал :)
- shell: /bin/true
register: lets_install
- name: only run when tag
shell: /bin/echo "hahaha"
when: lets_install is not defined
tags: install
не пробовал

Dmitriy
20.07.2016
16:29:17
так-это ж не поможет :) это тоже самое, что и варку определить и потом через -e вызывать

Google

Dmitry
20.07.2016
16:29:30
ты уже попробовал?

Dmitriy
20.07.2016
16:29:56
нет
ну просто смотри, ты этим кодом делаешь что
ты говоришь - всегда делай инсталл

Dmitry
20.07.2016
16:37:28
а вот я короче попробовал
но ты можешь продолжать дальше пробовать интерпретировать в уме :)

Dmitriy
20.07.2016
16:39:22
как оно работает?
если ты пишешь —tag=install - то видишь хахаха, а если не пишешь - то не видишь?

Dmitry
20.07.2016
16:39:35
шелл http://dpaste.com/3NR9VSC.txt
site.yml http://dpaste.com/1ZJCAM8.txt
в inventory просто test1
как оно работает, видно в шелл сессии
без тэга
TASK [Only run when tag is specified] ******************************************
skipping: [test1]
с тэгом
TASK [Only run when tag is specified] ******************************************
changed: [test1]
не знаю, что тут еще добавить
но ты держись там, здоровья, хорошего настроения :)
ну просто смотри, ты этим кодом делаешь что
ты говоришь - всегда делай инсталл

Dmitriy
20.07.2016
16:42:23
я не пони, как это работает, но работает
круто

Dmitry
20.07.2016
16:46:11
очередная хитрожопость ансибла :(

Dmitriy
20.07.2016
16:48:59
завтра попробую понять, интересно ж

Dmitry
20.07.2016
16:58:05
да оно в общем-то примерно понятно, как
смотри, shell: /bin/true выполняется всегда, так? и регистрирует успешное выполнение в lets_install, так?

Google

Dmitry
20.07.2016
16:59:00
- shell: /bin/true
register: lets_install
теперь смотрим дальше
- name: Only run when tag is specified
shell: /bin/echo "Only running because of specified tag"
when: lets_install is not defined
tags: install
что тут написано? что shell /bin/echo (или любая другая поебень) будет работать только если lets_install не определено. но оно определено выше, в register от /bin/true
поэтому без указания тэга не срабатывает
ибо не попадает под условие when

Dmitriy
20.07.2016
17:00:54
ааа

Dmitry
20.07.2016
17:01:01
а дальше сраная магия. если указать tag, то оно нахер перекрывает всё :)
и срабатывает

Dmitriy
20.07.2016
17:01:09
ты крутой, я уже вроде говорил :)
прекрасный костылик

Dmitry
20.07.2016
17:01:18
даже не очень магия
просто в
- shell: /bin/true
register: lets_install
ведь нет тага install? значит этот таск не срабатывает, значит не заполняется register :D
значит срабатывает when ниже :)

Dmitriy
20.07.2016
17:04:02
я бы конечно за такие неочевидные решения убивал, но круто :)
Серега, ты если читаешь - не надо такое использовать у нас :)

Denis 災 nobody
20.07.2016
17:04:15
и
любителей
писать
так

yopp
20.07.2016
17:04:55
первое ещё куда ни шло, а вот второее это нацизм

Google

Dmitriy
20.07.2016
17:05:11
это правильный, хороший нацизм
я категорически поддерживаю

Denis 災 nobody
20.07.2016
17:05:27
не можешь выразить мысль менее чем в 10 сообщений - иди в школу

Dmitry
20.07.2016
17:05:37
баньте
меня

yopp
20.07.2016
17:05:39
это чятик, а не мейл лист

Dmitry
20.07.2016
17:05:40
я
такой
хуйни
написал
выше :)

Denis 災 nobody
20.07.2016
17:05:54
или как минимум используй переносы
код можно выделять отдельно
речь именно про "фразу из 10 слов я способен выдать только в 10 сообщений"
и писать по 1-2 слова на сообщение, (!!когда в этом нет смысла!!, Дмитрий) - это верх неуважения
еще раз - выделить код, копипасты и проч - норма

Vit
21.07.2016
08:48:12
О, расскажите про террфаорм, кто пользовался. Что это такое, в двух словах и что позволяет сделать? Статьи в интернете отличаются умным языком и оторванностью от реальности как-то. Для каких задач можно использовать.