Denis
спасибо
Andrey
спасибо
Не забудь указывать явно группварсы в плейбуках
Sergey
А кто сориентирует, в {% raw %} блоке jinja не работает? Надо стоить условия такими блоками снаружи?
Sergey
хочу на одни хосты раскидать один raw template, на другие другой
Sergey
{% raw %} {% if hostgroup == 'server' %} process_names: - name: "{{.ExeBase}}" cmdline: - '.+' {% else %} process_names: - name: "{{.Comm}}" cmdline: - '.+' {% endif %} {% endraw %} Что видимо не работает пришла идея что надо строить темплейт самими блоками снаружи
Sergey
group_vars + имя шаблона в переменной
Max
спасибо
1. называть переменную env чревато 2. если она таки не склашится ни с чем, то: ... when: - env == 'prod'
Sergey
Логично же, все что внутри raw jinja игнорит
ага, внешними условиями решил
Egor
Добрый день. Подскажите пожалуйста, как можно выполнить команду с sudo привилегиями? На VM в папке sudoers.d создал файл для пользователя и обозначил такие правила: user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/git В role/task/main.yml указал: --- - name: Pull Dir git: dest: /var/www repo: "{{ git.repo }}" become: yes Но таска не выполняется и выдает ошибку: module_stdout: |- sudo: a password is required Используя ключи -vvvv я так понимаю он сначала пытается стать root пользователем, но я хочу лишь, что бы он выполнил команду git к примеру как "sudo git pull".
łibfitź.r14.a
Пробовали добавить become_user и become_method ?
Egor
Пробовали добавить become_user и become_method ?
Если я добавлю become_user то ansible попытается с под него зайти же ж? Согласно документации become_method по умолчанию использует sudo что мне и надо, если я правильно понимаю.
łibfitź.r14.a
become_user, насколько я знаю, применится к конкретной таске, а не к логину
łibfitź.r14.a
Но я могу знать неправильно :)
Egor
В доке вижу вроде указано: Set to user with desired privileges — the user you become. Ну и плюс дополнительно попробовал, он просто перешел под этого пользователя и выполнил команду. Но есть желание чисто как sudo команду выполнить, а не перейти на пользователя и выполнить команду. И вот не совсем пойму как это сделать.
łibfitź.r14.a
Покажите выхлоп с -vvvv
łibfitź.r14.a
На пейстбин например
Egor
Покажите выхлоп с -vvvv
Кусок там где выполняется sudo команда: https://pastebin.com/AguYihzH
Egor
То есть я так понимаю он пытается выполнить команду: sudo -H -S -n -u root
łibfitź.r14.a
Попробуйте в плейбуке become_user явно указать
Egor
Если я указываю того же пользователя с которого я зашел, то есть в данном примере: User1 То он просто не использует sudo команду так, в теории логично, он уже под этим пользователем. А если указывать root, то он пытается зайти под него. Но я через sudoers дал разрешение на выполнение команды git пользователю user1 без пароля.
Egor
У тебя sudoers корявый
Так если заходить с под пользователя User1 И выполнить команду: sudo git pull То она отработает корректно.
Sergey
Ни о чём не говорит. Гитом вообще все пользователи могут пользоваться, это не админская команда 😉
Sergey
man sudoers. вопрос закрыт.
Egor
Ни о чём не говорит. Гитом вообще все пользователи могут пользоваться, это не админская команда 😉
Извиняюсь не правильно выразился. Там на папку .git в проекте установлены другие права, другого пользователя. И если выполнить команду просто git pull то, возникнет ошибка: error: cannot open .git/FETCH_HEAD: Permission denied sudo git pull выполняет команду от root.
Sergey
Извиняюсь не правильно выразился. Там на папку .git в проекте установлены другие права, другого пользователя. И если выполнить команду просто git pull то, возникнет ошибка: error: cannot open .git/FETCH_HEAD: Permission denied sudo git pull выполняет команду от root.
Для этого в Unix есть группы. Кстати, в правилах группы написано про кривые процессы. Вот это вот всё не имеет абсолютно никакого отношения к Ансиблу. Ещё раз повторяю - достаточно выполнить "man sudoers". В мане указан верный формат записи в файле.
Sergey
Подробнее - в ЛС.
Vladislav 👻
Хотя я не понимаю логику, зачем давать судо на гит...
Egor
Хотя я не понимаю логику, зачем давать судо на гит...
Это лишь как пример, для эксперимента.
Vladislav 👻
Скопируйте к себе и делайте что хотите
Vladislav 👻
А лучше отдельно стягивайте под своим пользователем
Egor
А лучше отдельно стягивайте под своим пользователем
Я просто хотел попробовать автоматизировать. То есть на виртуальной машине есть сайт, он работает с под пользователя apache и ему принадлежит. И хотел автоматизировать в плане заходить не из под root на виртуальную машину, в папку с сайтом и делать git pull с определенной ветки.
Vladislav 👻
если в кратце, делайте под апач пользователем пулл
Vladislav 👻
зачем вам user1?
Lex
парни, подскажите а можно в плэйбук использовать конструкцию как в inventory host[1:3]
Lex
- hosts: hostname[1:3]
Lex
и инфраструктуре при этом есть hostname1 hostname2 hostname3
Vladislav 👻
создайте группу с такой конструкцией и по группе
Lex
ну это как запасной вариант
Vladislav 👻
протестируйте свой вопрос, тест на 2 минуты же
Vladislav 👻
да
Lex
я протестировал - в лоб не работает ) думал может надо как то это экранировать..или еще что-нибудь
Lex
гугл сходу не подсказывает
Vladislav 👻
в одинарные кавычки попробуйте
Vladislav 👻
но мне кажется, надо через группу
Timur
- hosts: hostname[1:3]
Нет, так не работает
Lex
Нет, так не работает
ясно понятно...значит еще варианты экранирования искать не буду )
Lex
парни а как в плэйбуке использовать исключение в хостс? если стоит - hosts: host-group1:!host1 то все норм, а если - hosts: host-group1:!host1,host-group2 то на синтаксис не ругается, но из из первой группы никого не берет
Vladislav 👻
опечатка?
Lex
где?
Vladislav 👻
host-grup1
Lex
а данном сообщении - да опечатка
Lex
блин ну это же костыль...
Lex
жааалко
Sergey
А потом настанет время вешать туда переменные, и ты поймёшь, что это не костыль, а Ansible way
Sergey
Если уж так сильно хочется, то попробуй сделать список на месте: hosts: group1:!([host1] + group2) Вот _это_ - точно костыль
Sergey
Lex
просто есть то механизм паттернов и он работает! Но только если у тебя эта группа в хостс, а если ты через запятую добавляешь вторую группу - то все не работает
Vladislav 👻
Что ты имеешь в виду?
если в group2 есть хосты из group1, то логика будет не такой
Sergey
если в group2 есть хосты из group1, то логика будет не такой
Вот я и пытаюсь услышать: а какой она будет?
Vladislav 👻
в твоем случае ты сделаешь исключение тех хостов, которые и там и там
Vladislav 👻
хотя в примере выше такие хосты не исключаются, а объединяются/дублируются
Sergey
".... в одной хосты точёные..."
Sergey
(сорри, орнул)
Lex
я хочу запустить все, кроме 1го из первой группы и все из 2ой группы
Lex
причем этот синтаксис воспринимается для команды ansible
Lex
а вот для ansible-playbook - нет