bebebe
спасибо, теперь все стало понятно, вопросов боьше нет
inqfen
И при подходе gitlab ci оно должно быть именно так, остальное будет криво
inqfen
Я уже пробовал)
bebebe
inqfen я вам безусловно верю, но считаю что подход, где описание окружения соседствуют с плейбуками идеологически не верен. видимо я не прав, если у вас нет проблем
inqfen
Есть неудобства я бы сказал, но они есть при любом подходе, но разные
bebebe
какие неудобства?
inqfen
Ну как пример копипаста в разных проектах
inqfen
Я использую один aws аккаунт, а реквизиты прописаны одни и те же в 5 местах
bebebe
а почему не в одном?
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
этим и занимается CI, из примера выше, у нас остаются контейнеры ansible:stable env1:stable от них наследуются php web:php, и web:go, но это уже вкусовщина
А потом у нас в окружениях рано или поздно появляются несовместимые изменения, хотя бы просто в процессе изменения деплоя и мы имеем php:v2 php:v3 go:v2 go:v5 и уже непонятно что откуда наследуется и зачем их столько
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
уже разобрался, спасибо
Евгений
Добры день. Как Вы решаете задачи, если нет специального модуля? У меня из одной строки, генерирующей список пользователей на 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 Есть идеи, как сделать лучше?
Евгений
Tadeusz
"дешевле" модуль напитонить)
Sergey
Зато можно накопировать и запустить сразу)
С pastebin тоже можно накопировать, и при этом не будет простыни - подумай о тех, кому придётся прокручивать несколько экранов на телефоне.
Maksim
Подскажите, какой-нибудь "мусор" остаётся после отработки playbook'а, который может привести к каким-нибудь недобствам? Retry файлы отключены. Может Ansible ещё что-то куда-то писать, например, в скрытые каталоги?
Sergey
Я поправил, спасибо.
Замечательно. Как выглядит изначальная задача?
Евгений
Замечательно. Как выглядит изначальная задача?
Поменять политику устаревания паролей списку пользователей
Sergey
Прошу извинить, мой парсер русского вывалился с ошибкой - не могу понять смысл фразы.
Maksim
на целевом хосте временные файлы могут остаться
а на хосте с самим ансиблом может что-то оставаться?
Евгений
Прошу извинить, мой парсер русского вывалился с ошибкой - не могу понять смысл фразы.
Программа chage изменяет количество дней между датой смены пароля...
Евгений
а на хосте с самим ансиблом может что-то оставаться?
Почему бы нет. Я для другой задачи генерировал файл на нем с помощью delegate_to
Nklya
Тут больше вопрос в том, что ты решаешь странную задачу. Логичнее было бы менеджить пользователей ансиблом и не было бы этих приседаний
Nklya
А если уж не получается, тогда да, приходится делать страшные конструкции, в несколько раз больше кода на баше
Nklya
Или писать свой модуль
Nklya
Там есть expires, которым мне кажется можно примерно то же сделать
Евгений
awk -F: '($3 >= 1000) {print $1}' /etc/passwd
https://pastebin.com/XsJSHpii Так и правда покороче получилось, спасибо
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
Да, так похоже
Rodion
ясно, попробую так, спасибо.
Ну а сам group_vars обычно рядом с плейбуком создается, на одном уровне, вопрос вроде изначально в этом был?) Вот тут же есть пример, как может выглядеть структура https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
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