kevit
в целом
kevit
никогда не знаешь когда кончится интернет
Max
# group_vars/group1 sudo_config: - command: 'ls' user: bla target: root
.
Не то, чтобы прям сложно. Кастом модуль всё решит.
Т..е. правильный путь - не расписывать это в тасках, а рисовать модуль, который дёргать из таска?
Womchik
# group_vars/group1 sudo_config: - command: 'ls' user: bla target: root
реально он так и описано. но я не знаю сколько будет групп. и они будут добавляться и ужадять. а вот юзер всегда один
George
Ну, и да, и нет
George
Да - любая сложная логика должна быть в модуль, который гарантирует идемпотентность
George
Нет - в твоём случае можно наГОвнякать плейбук
George
Ибо поддерживать модуль сложнее
Max
реально он так и описано. но я не знаю сколько будет групп. и они будут добавляться и ужадять. а вот юзер всегда один
юзеру ты добаляешь команды в зависимости от группы. ты хочешь, чтобы для него список команд был суммой всех групп пользователя. правильно ?
Max
можно просто создать для него /etc/sudoers.d/$user и делать lineinfile
Max
(блин, даже не верится, что я рекомендую lineinfile)
Max
т.е. если отсутствует строка, она добавляется модулем lineinfile
Timur
мне надо hash_*, я не знаю, сколько их будет
Я так и не понял вашего юзкейса
Womchik
можно просто создать для него /etc/sudoers.d/$user и делать lineinfile
я и так файл создаю. но мне же нужно в этом lineinfile переменные все собрать
Max
Я так и не понял вашего юзкейса
как я понял: есть группы. он по группам опр. юзеру дает выполнять команды.
Max
ты делай append
Max
понял ?
Womchik
sorry. вынужден убежать
Max
мы еще встретимся...
Womchik
ты делай append
таска-то одна и выполняется один раз. к чему будет append?
Victor
Тут вообще решение другое
Victor
все через жопу перевернули
.
Ты описываешь не конкретное желаемое состояние, а процедуру его получения
Да, частично. Оттого, что я не вижу, как это целиком описать декларативно. Допустим, я чисто декларативно пишу user: name: "{{item}}" state: absent Но первая же проблема - если в памяти висят процессы пользователя, его удалить не удаётся. У меня мысль - сначала убить процессы. Модуля для этого не нашёл. В какую сторону мне нужно подумать дальше?
Timur
Модуль, Карл, понимаешь? Модуль!
Да не нужен тут модуль
George
force
Чем форс поможет для убиения процессов?
.
Модуль, Карл, понимаешь? Модуль!
Это решение осознал, спасибо. Буду разбираться. но наверняка есть еще пути :)
George
Да не нужен тут модуль
Внезапно - я соглашусь с Тимуром
Timur
Если запускать удаление пользователя от рута - процессы не должны помешать
.
force
force - пойти /etc/{passwd,shadow, groups} отредактировать?
George
Если запускать удаление пользователя от рута - процессы не должны помешать
Я так понимаю, что коллега хочет убить процессы пользователя при любом раскладе
.
по крайней мере, userdel'у, и ансиблю, чем он там пользуется.
Timur
Мешают...
Значит, не от рута запускаете
.
Значит, не от рута запускаете
https://pastebin.com/wyUkX4Sv я делаю become. Это тот же рут.
Victor
https://pastebin.com/wyUkX4Sv я делаю become. Это тот же рут.
Ну так-то бекамится можно не в рута, но по умолчанию в него
Sergey
Я так понимаю, что коллега хочет убить процессы пользователя при любом раскладе
В модуле Ansible используется userdel. Эта команда не убивает процессы, если что.
.
Ну так-то бекамится можно не в рута, но по умолчанию в него
Это да. Но в данном случае, это получается рут.
Sergey
А вот "pkill -u username" убивает.
.
А вот "pkill -u username" убивает.
Процесс убивает, а не пользователя.
.
Значит, не от рута запускаете
[root@centos7 ~]# useradd testusr [root@centos7 ~]# su - testusr [testusr@centos7 ~]$ nohup sleep 3h & [1] 24013 [testusr@centos7 ~]$ nohup: ignoring input and appending output to ‘nohup.out’ [testusr@centos7 ~]$ logout [root@centos7 ~]# ps axu |grep testusr testusr 24013 0.0 0.0 107952 356 pts/0 S 15:35 0:00 sleep 3h root 24016 0.0 0.0 112708 976 pts/0 S+ 15:35 0:00 grep --color=auto testusr [root@centos7 ~]# userdel testusr userdel: user testusr is currently used by process 24013
Sergey
Процесс убивает, а не пользователя.
Я про это и написал так-то.
.
Ага, но проблема в том, что декларативно ансибль не убивает пользователя в таком состоянии
.
$ ansible all -i 10.1.4.24, -b -m user -a "name=testusr state=absent" 10.1.4.24 | FAILED! => { "changed": false, "msg": "userdel: user testusr is currently used by process 24013\n", "name": "testusr", "rc": 8 }
Sergey
Не Ансибл.
.
Не Ансибл.
Согласен.
Victor
Придумал костыль. Написать системдишный скрипт, который будет логаутить и не давать законнектится пользователю. Дергать в анзибле системд
Womchik
для группы А, потом для группы Б
Один юзер, одна таска, один хост, три группы. Почему lineinfile три раза выполнится?
Max
если использовать роль судо в каждой группе в отдельном плее.
.
Придумал костыль. Написать системдишный скрипт, который будет логаутить и не давать законнектится пользователю. Дергать в анзибле системд
Если костыль про процессы, то не поможет. Логаут пользователя не гарантия, что от него процессов не осталось.
Victor
смысл в том что весь шелл там.
.
Ну убивать процессы, какая разница
ребут поможет железнобетонно :)
Victor
.
т.е. делать для этого процедурный скрипт, загружать на удалённые хосты и там исполнять? но shell делает всё тоже самое, как я понимаю.
Timur
В модуле Ansible используется userdel. Эта команда не убивает процессы, если что.
Зато директории и все пути грохает, даже если юзер залогинен
Victor
если использовать роль судо в каждой группе в отдельном плее.
Мне кажется вы пытаетеь решить проблему неподходящими средствами. Анзибл слабо расчитан на диаграмму виенна где каждый круг это группа со своими настройками и по этим гругам разбросаны хосты. Но это не точно.
Womchik
если использовать роль судо в каждой группе в отдельном плее.
Ну вот простой плей по разливке только sudo
.
Зато директории и все пути грохает, даже если юзер залогинен
Если залогинен, значит висят процессы. Значит, не может грохнуть пользователя. Значит, пути останутся целы. По крайней мере, в RHEL так.
Max
я бы ожидал, что роль будет вызывать пользовательская роль.
Womchik
Я. Другой админ
Max
или плейбук после накладывания другой роли.
Max
(или до)
Max
Пользователь один. Его создали и все
процесс таков: - роль/группа знает что ей надо дать - ее надо применить. лучше, чтобы был плейбук, в котором применялась sudo роль, до целевой роли. т.е. "пользователь" процесса - роль/роли, которые вешаются на группу
Max
иначе придется "собирать", логика сбора будет неуклюжей, неудобно поддерживать, некрасивой.