bebebe
спасибо, теперь все стало понятно, вопросов боьше нет
inqfen
И при подходе gitlab ci оно должно быть именно так, остальное будет криво
inqfen
Я уже пробовал)
bebebe
inqfen я вам безусловно верю, но считаю что подход, где описание окружения соседствуют с плейбуками идеологически не верен.
видимо я не прав, если у вас нет проблем
inqfen
Есть неудобства я бы сказал, но они есть при любом подходе, но разные
bebebe
какие неудобства?
inqfen
Ну как пример копипаста в разных проектах
inqfen
Я использую один aws аккаунт, а реквизиты прописаны одни и те же в 5 местах
bebebe
а почему не в одном?
inqfen
inqfen
С другой стороны, я могу просто отдать этот проект в другое подразделение и там есть все, что нужно чтобы его развернуть, он вполне самодостаточен
bebebe
у меня это решено так:
1. есть контейнер с ansible и нужными модулями anbible:stable
2. от него наследуются контейнеры с описанием окружения FROM ansible:stable, назовем его env1:stable
3. от контейнера env1:stable наследуются все контейнеры которые будут запущены против окружения env1 FROM env1:stable
bebebe
какие минусы вы видите в таком подходе?
inqfen
Эти контейнеры служат для деплоя?
bebebe
из пункта 3 - да
bebebe
все остаьные - нет
inqfen
Как минимум 2 минуса
1 - я не могу прочитать в одном месте все, что мне нужно для развёртывания (к примеру я только пришёл к вам и не знаю что в каком образе и как это доставляется в итоге на сервер)
2 - я не могу развернуть ПО без этих образов, к примеру к себе на виртуалку. А я как разработчик хочу поднять все окружение из своих веток и посмотреть как это работает и на ходу что-то изменять. Ну или банально у меня нет доступа к registry, а такое уже вполне случалось как раз на предыдущем месте благодаря ркн
bebebe
1. почему не можете прочитать? запустим контейнер из п.3 вы получите все что нужно (плейбуки, python модули, inventory)
2. тоже не понятно, вы можете запустить контейнер, изменять в нем плейбуки и далее комитить изменения.
вопрос с registry совсем не понятен, что мешает хранить в нескольких?
inqfen
А, ну и ещё я что-то меняю в деплое сервисов, например всем пригорело с php переехать на go. 1 сервис я уже поменял, остальные нет. Всё в окружении production. Для каждого сервиса нужно сначала менять код, а потом пересобирать образ? Причём может быть ещё придётся и вариативность продумывать, сейчас ведь какая-то часть окружения деплоится совсем по-другому и надо отслеживать, чтобы эти изменения были совместимы с сервисами которые деплоятся по старому
bebebe
этим и занимается CI, из примера выше, у нас остаются контейнеры
ansible:stable
env1:stable
от них наследуются php web:php, и web:go, но это уже вкусовщина
inqfen
1. почему не можете прочитать? запустим контейнер из п.3 вы получите все что нужно (плейбуки, python модули, inventory)
2. тоже не понятно, вы можете запустить контейнер, изменять в нем плейбуки и далее комитить изменения.
вопрос с registry совсем не понятен, что мешает хранить в нескольких?
1. А где это все описано? Только в фс контейнера? Если да, то это крайне неудобно, репозиторий гораздо лучше. И код нередко важен для понимания работы или сборки сервиса, значит я смотрю то в контейнер, то в git
2. Мне необходимы лишние действия. Вместо того, чтобы мне просто склонировать код определённой ветки и запустить плейбук мне ещё дополнительно нужно качать контейнер под определённое окружение и думать как это разворачивается. Кстати подтягивается код с фс? Я например сделал изменения в коде, мне нужно пересобрать код и залить на свой же локалхост например.
3. Например нам не повезло и все наши registry забанил ркн. Как быстро восстановить эти образы и куда-то залить так, чтобы деплой не вставал?
inqfen
ПО то разное, которое разворачивается в идеале одним контейнером
inqfen
И билдится
inqfen
Банально, нода, 3 проекта - 3 версии
inqfen
Один проект остался as is и там нода 8 и всегда останется
bebebe
я к сожалению потерял суть этого диалога, навсякий случай отвечу:
1. есть две точки входа, /etc/ansible и /opt/playbook
2. вы так же можете делать git clone изменения кода и запускать котнейрех с подмаунченым volume:
docker run --rm -it -v`pwd`:/opt/playbook ...
, в /opt/playbook будет прокинута директория с хост системы
3. вы не знаете как решить эту проблему?
еще раз, иерархия наследования трехуровневая, ansible, окружения, playbook-роли
inqfen
Другие развиваются и версия обновляется
bebebe
прощу прощения, я пожалуй сольюсь из этой бесседы
inqfen
Хорошо, тоже спать уже надо
Maksim
Всем привет. Не подскажите с чем может быть связано?
TASK [Gathering Facts] *********************************************************
fatal: [VV10888-TEST]: UNREACHABLE! => {"changed": false, "msg": "argument must be an int, or have a fileno() method.", "unreachable": true}
Гугл ничего не подсказал
Nklya
Гадать где ошибка без кода такое себе занятие
Maksim
уже разобрался, спасибо
Andrei
Евгений
Добры день. Как Вы решаете задачи, если нет специального модуля?
У меня из одной строки, генерирующей список пользователей на bash:
users=($( for NAME in `cut -d: -f1 /etc/passwd`; do uid=`id -u $NAME` ; if [ $uid -ge 1000 ]; then echo $NAME ; fi; done ))
echo ${users[@]}
получилось 4 таска:
https://pastebin.com/bs6MRcVZ
Есть идеи, как сделать лучше?
Sergey
Евгений
Tadeusz
"дешевле" модуль напитонить)
Евгений
Maksim
Подскажите, какой-нибудь "мусор" остаётся после отработки playbook'а, который может привести к каким-нибудь недобствам? Retry файлы отключены. Может Ansible ещё что-то куда-то писать, например, в скрытые каталоги?
Sergey
Sergey
Прошу извинить, мой парсер русского вывалился с ошибкой - не могу понять смысл фразы.
Евгений
Евгений
Nklya
Тут больше вопрос в том, что ты решаешь странную задачу.
Логичнее было бы менеджить пользователей ансиблом и не было бы этих приседаний
Nklya
А если уж не получается, тогда да, приходится делать страшные конструкции, в несколько раз больше кода на баше
Nklya
Или писать свой модуль
Евгений
Nklya
Там есть expires, которым мне кажется можно примерно то же сделать
bebebe
Andrei
Господа, подскажите, здесь предлагается создать каталог group_vars названный по имени группы. то есть например production_d1_vars в моем случае. А где сам этот каталог должен находиться?
https://docs.ansible.com/ansible/2.6/user_guide/playbooks_best_practices.html#variables-and-vaults
Andrei
но там говориться про файлы vars.yml и vault.yml
Andrei
можешь пояснить, пожалуйста?
Rodion
По-моему, в доке в данном случае по другому написано?
Anonymous
Сорри, не дочитал и ответил неверно..
Rodion
Хм, нет, по-моему, документация предлагает в качестве best_practices
group_vars/groupname/vars.yml
group_vars/groupname/vault.yml
Rodion
Если я правильно понял)
Anonymous
Да, так похоже
Andrei
Rodion
ясно, попробую так, спасибо.
Ну а сам group_vars обычно рядом с плейбуком создается, на одном уровне, вопрос вроде изначально в этом был?)
Вот тут же есть пример, как может выглядеть структура
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
Andrei
citius
Никто на вот таком банальном таске
- name: Hostname | Update the hostname (pt. 1) - hostname cmd
hostname:
name: "{{hostname}}"
не ловил вот такой стремный косяк?
ERROR! Unexpected Exception, this is probably a bug: update expected at most 1 arguments, got 2
что особенно интересно, перед этим шагом есть дебаг:
- debug: msg="hostname change execute, because {{ ansible_hostname }} != {{ hostname }}"
который показывает что хостнейм должен смениться на обычное имя типа consul-0, и падать оно не должно ну никак
citius
целевая os - centos 7 с последними апдейтами, ансибл 2.6.2 на таком же центосе
citius
и какие такие два аргумента там подаются, я никак отловить не могу )
Aleksey
парни хочу странного. есть каталог с большим колвом подкаталогов. хочу дать права(g+w) на этот каталог но исключить несколько подкаталогов.
не хочу заранее знать какие есть подкаталоги.
Aleksey
не вижу варианта с идемпотентным поведением
Andrei
а разве выставление определенного права не идемпотентно?
Andrei
можно применить 1 или более раз, результат будет один
Aleksey
очень даже. но не идемпонентно поведение применить рекурсивно в папке
/opt/blb права g+w
а потом
/opt/blb/lib g-w
Andrei
обходить рекурсивно скриптом, пропуская исключения, не делать сначала на все, а потом снять
Aleksey
ы ?
Aleksey
шел ?
Andrei
python проще imho/ а может и нет ))
Aleksey
можно еще попробовать сделать
shell: ls /opt/bla | grep -v lib
register: result
file:
..
with_items: result.stdout_lines