tati_v_p
подскажите, как в плейбуке назначить переменную хостнейм сервера? из вывода cat /etc/hostname можно это сделать?
Grek 🇺🇦
Взять из фактов?
tati_v_p
даже если они выключены?
Oleg Y.
дайте определение "хостнейм". У машины может быть много имён.
Vitaly
hostname у машины один
tati_v_p
Под хостнеймом имею ввиду результат вывода cat /etc/hostname
tati_v_p
В моем случае именно там хранится то, что нужно использовать как переменную в плейбуке
Vitaly
так вам же ответили, по идее в fact оно и будет
Grek 🇺🇦
подскажите, как в плейбуке назначить переменную хостнейм сервера? из вывода cat /etc/hostname можно это сделать?
Ну сделайте так с cat и зарегистрируйте результат. Потому что хостнейм действительно может быть задан в нескольких местах
Grek 🇺🇦
даже если они выключены?
Включите и ограничьте их сбор
Anonymous
[WARNING]: Unable to parse /home/alex/ansible/host.txt as an inventory source от чего может быть ошибка?
M
Хост.тхт
Anonymous
ну там вроед все норм? а тфуты, имя не такое
Roman
подскажите, пожалуйста, где почитать, как правильно с помощью Ансибл установить пайтон на сервера для дальнейшей работы
Рамиль
Ребята, привет! Я новичок в работе с энсиблом, но есть задача запустить плейбук. Только мастер нода не работает сейчас. Можно как то локально руками накатить рецепт?
Anastasia
Anastasia
Если я верно поняла ваш вопрос
Александр
Наверное глупость спрошу, извиняюсь :) Разгребал тут старые плейбуки и нашёл вот такой простенький таск по добавлению правила брандмауэра на windows хосты. Так вот, если такого правила с таким именем в винде ещё не было, то таск отрабатывает нормально, но если правило с таким именем уже было, то таск затирает адреса которые были прописаны ранее, и заносит адреса из переменных {ip1_win1} и {ip1_win2}. А желательно чтоб добавлял, а не затирал. Помню сразу решение не нашёл и забил, стал просто давать разные имена правилам. А как в этом случае сделать, чтобы он оставлял старые адреса и добавлял к ним новые? Ткните если не трудно. --- - name: Add firewall rules on server1 for group "staging_win1" and "staging_win2" gather_facts: no hosts: server1 vars: ip1_win1: "{{ groups['staging_win1'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" ip2_win2: "{{ groups['staging_win2'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" tasks: - name: Allow input on TCP port 5555 win_firewall_rule: name: ReportsRules localport: 5555 remoteip: "{{ ip1_win1 }},{{ ip1_win2 }}" action: allow direction: in protocol: tcp state: present enabled: yes
Подскажите кто-нибудь пожалуйста, что подправить в этом таске, чтобы не затирались уже имеющиеся айпишники в правиле файервола, а только новые добавлялись? Может кто дела что-то подобное именно с модулем win_firewall_rule?
Full
Народ, хочу вчерашний свой вопрос повторно задать. Крч, модуль replace, параметр replace. Ругается на bad escape. Причина в следующем: repl can be a string or a function; if it is a string, any backslash escapes in it are processed. ... Changed in version 3.7: Unknown escapes in repl consisting of '\' and an ASCII letter now are errors. Оттуда: https://docs.python.org/3/library/re.html#re.sub Если заэкранировать вторым слешом, то все работает, но мне это не нравится. Дело в том, что строка замены - это PS1 из .bashrc, и там встречаются всякие \u, \h, одинарные и двойные кавычки, а еще \033, что может быть воспринято как backreference. И мне не нравится идея добавлять в эту строку еще какое-то экранирование. Вопрос - возможно ли как-то обскакать эту логику, передать строку как raw string, мало ли?
Full
Ну, т.е. в питоне то можно сделать r'string' - как мне это в ямле сделать?
Anonymous
Модуль wait_for игнорит timeout Кто-нибудь знает в чем может быть причина? wait_for: timeout: 60 port: 22 host: "{{ansible_host}}" search_regex: OpenSSH delay: 10 state: started vars: ansible_connection: ssh ansible_host: "{{host_ip}}"
Отделение Bereke Bank
Модуль wait_for игнорит timeout Кто-нибудь знает в чем может быть причина? wait_for: timeout: 60 port: 22 host: "{{ansible_host}}" search_regex: OpenSSH delay: 10 state: started vars: ansible_connection: ssh ansible_host: "{{host_ip}}"
У меня так работает без проблем. убери search_regex - name: Wait for droplets become available via ssh wait_for: host: "{{ item.data.ip_address }}" port: 22 timeout: 600 delay: 10
Anonymous
У меня так работает без проблем. убери search_regex - name: Wait for droplets become available via ssh wait_for: host: "{{ item.data.ip_address }}" port: 22 timeout: 600 delay: 10
Спасибо! А как он детектит? Просто когда создается линода, то порт изначально доступен, но машина еще в процессе подготовки к старту.
Volodymyr
А кто красноглазил с OS X? Подскажите как поставить через mas-cli Xcode определенной версии, а не последней из AppStore?
inqfen
А я думал тут группа по ансиблу...
Anna
Подскажите, как правильно делать git pull из каталога определенного пользователя с помощью ansible. Только через shell? делать от лица ansible, закинув его публичный ключ в свойства пользователя ansible (предположим, такое имя дали) gitlab ci?
inqfen
Хм, а если надо будет ансиблом nginx запустить, а тот из-за кривого конфига падает, по конфигу тоже тут спрашивать?)
Sergey
так я роль пишу :)
А если ролью переключать ёлочные гирлянды, то за советами по электротехнике тоже сюда?
inqfen
Я думаю это как-то в более профильные макочаты все-таки, вопрос-то не по ансиблу
Volodymyr
дадада, я понял что мимо.. сорянчик
Gunnery
подскажите пожалуйста, как бы мне сравнить одинаковые файлы на разных узлах из вывода модуля (find) сделать register отдаваемых checksum и path вот что отдается: https://pastebin.com/h2F27Y5h
Gunnery
вот так ищу и не врубаюсь, что в register указывать - name: найти файлы для подсчета find: paths: /mnt/vmpool/ patterns: "^file_.*" use_regex: true get_checksum: true register: files_to_check
Gunnery
спасибо
Александр
Наверное глупость спрошу, извиняюсь :) Разгребал тут старые плейбуки и нашёл вот такой простенький таск по добавлению правила брандмауэра на windows хосты. Так вот, если такого правила с таким именем в винде ещё не было, то таск отрабатывает нормально, но если правило с таким именем уже было, то таск затирает адреса которые были прописаны ранее, и заносит адреса из переменных {ip1_win1} и {ip1_win2}. А желательно чтоб добавлял, а не затирал. Помню сразу решение не нашёл и забил, стал просто давать разные имена правилам. А как в этом случае сделать, чтобы он оставлял старые адреса и добавлял к ним новые? Ткните если не трудно. --- - name: Add firewall rules on server1 for group "staging_win1" and "staging_win2" gather_facts: no hosts: server1 vars: ip1_win1: "{{ groups['staging_win1'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" ip2_win2: "{{ groups['staging_win2'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" tasks: - name: Allow input on TCP port 5555 win_firewall_rule: name: ReportsRules localport: 5555 remoteip: "{{ ip1_win1 }},{{ ip1_win2 }}" action: allow direction: in protocol: tcp state: present enabled: yes
в общем, может кому пригодиться, модуль "win_firewall_rule" не идемпотентен (судя по ответам на форуме ansible и на других ресурсах)
Павел
А кто красноглазил с OS X? Подскажите как поставить через mas-cli Xcode определенной версии, а не последней из AppStore?
После распаковки xip 👉 - name: "Xcode: Install additional Xcode components" command: /usr/sbin/installer -pkg /Applications/Xcode.app/Contents/Resources/Packages/XcodeSystemResources.pkg -target / become: yes - name: "Xcode: Accept Xcode license" command: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -license accept become: yes - name: "Xcode: Run Xcode first launch" command: "xcodebuild -runFirstLaunch" become: yes
....
народ, подскажите, пожалуйста как модулю uri запретить рендерить тело запроса? задача - через HTTP Api залить витрину в графану шаги такие: - заливаются папки, запоминаются их ИДшники - читаются витрины из JSONок, из них формируются тела запросов, куда подставляется ИД папки - тело запроса передается в таск, выполняющий запрос, таким образом: - name: Push dashboard include_tasks: execute_request.yml vars: api: "{{ grafana.api.dashboards }}" body: "{{ request }}" а дальше execute_request.yml: - name: Execute POST request register: post_response uri: url: "......." headers: Accept: "application/json" Content-type: "application/json" Authorization: "{{ token }}" method: POST body: "{{ body }}" body_format: json И всё было прекрасно, пока среди источников данных не появился эластик, в запросах которого используются конструкции вида {{someone.keyword}}, которые ансибл пытается шаблонизировать и, ожидаемо, падает с ошибкой отсутствия переменной Пробовал менять body_format на raw, как-то менять тело запроса фильтрами to_json, string - всё равно тело проходит попытку рендера. Модуль grafana_dashboard не подходит, через него залить витрину в нужную папку возможности нет (или я был невнимателен и такое можно?). Добавлю еще, что кейс с графаной - только один из множества. Другие сервисы, у которых в теле используются конструкции {{ ... }} испытывают абсолютно аналогичную боль.
Full
Я вчерась натыкался где-то на конструкцию вида: {{ {{ }} Это для открывающих скобок. Для закрывающих - аналогично. Не уверен, но ИМХО это оно. Сейчас с телефона, ссылку не найду, где это было.
....
рассматривал такой вариант увы, подходит только как крайняя мера, потому что витрины и прочие штуки выгружаются в репу автоматически - надо будет вносить правки в алгоритмы выгрузки на стороне ансибла вообще без вариантов запретить шаблонизацию? :(
Full
Мне по моему вчерашнему вопросу тоже приходится дополнительно экранировать слэши, чего очень не хочется. Но выбора, походу, нет. Во всяком случае, в моем примере с replace.
Full
Разве что вводить дополнительные шаги, которые будут как-то модифицировать данные, чтоб система управления конфигурацией могла управлять конфигурацией.
Sergey
народ, подскажите, пожалуйста как модулю uri запретить рендерить тело запроса? задача - через HTTP Api залить витрину в графану шаги такие: - заливаются папки, запоминаются их ИДшники - читаются витрины из JSONок, из них формируются тела запросов, куда подставляется ИД папки - тело запроса передается в таск, выполняющий запрос, таким образом: - name: Push dashboard include_tasks: execute_request.yml vars: api: "{{ grafana.api.dashboards }}" body: "{{ request }}" а дальше execute_request.yml: - name: Execute POST request register: post_response uri: url: "......." headers: Accept: "application/json" Content-type: "application/json" Authorization: "{{ token }}" method: POST body: "{{ body }}" body_format: json И всё было прекрасно, пока среди источников данных не появился эластик, в запросах которого используются конструкции вида {{someone.keyword}}, которые ансибл пытается шаблонизировать и, ожидаемо, падает с ошибкой отсутствия переменной Пробовал менять body_format на raw, как-то менять тело запроса фильтрами to_json, string - всё равно тело проходит попытку рендера. Модуль grafana_dashboard не подходит, через него залить витрину в нужную папку возможности нет (или я был невнимателен и такое можно?). Добавлю еще, что кейс с графаной - только один из множества. Другие сервисы, у которых в теле используются конструкции {{ ... }} испытывают абсолютно аналогичную боль.
Боль ты получаешь, только когда используешь в шаблоне или переменных двойные фигурные скобки, которые (ой, сюрприз!) воспринимаются шаблонизатором как обращение к шаблонизатору. А вообще в доке по Jinja2 вот чего пишут: https://jinja.palletsprojects.com/en/2.11.x/templates/#escaping.
....
>>используешь в шаблоне или переменных двойные фигурные скобки, которые (ой, сюрприз!) воспринимаются шаблонизатором как обращение к шаблонизатору я как бы об этом и писал вопрос был поставлен иначе - как для конкретной таски/переменной/модуля задизейблить рендеринг?
Anonymous
почему в ответ на команду ansible all -m copy -a "src=orivet.txt dest=/home mode=777" -b получаем linux2 | FAILED! => { "msg": "Missing sudo password" }
Отделение Bereke Bank
ну ты хочешь become. либо убери либо добавь еще -K
Влад 🇺🇦
Всем привет, почему это не работает? - name: add host add_host: name: "{{ item }}" groups: tournament_just_created ansible_ssh_user: admin ansible_ssh_private_key_file: "/home/jenkins/.ssh/ansible" with_items: - "{{ tf_run.outputs.gs_ec2_ip.value.0 }}" - name: test shell: touch /tmp/1234.txt delegate_to: "{{ item }}" with_items: - "{{ tf_run.outputs.gs_ec2_ip.value.0 }}"
Влад 🇺🇦
я делегирую комманду на хост который создал выше
Влад 🇺🇦
но все равно выполняеться на локалхосте
Anonymous
ansible --help -b, --become run operations with become (does not imply password prompting)
ну. так все таки does not imply password prompting .. а чего оно тогда просит парол
Lamobot
ну. так все таки does not imply password prompting .. а чего оно тогда просит парол
Это значит, что при ключике --become не будет вызван запрос пароля для него же. Нужно ещё --ask-become-pass добавить, чтобы вышел запрос (или -K как выше указали). Ну или использовать пароль откуда-то ещё.
Lamobot
но все равно выполняеться на локалхосте
Проверьте что у вас в tf_run.outputs.gs_ec2_ip.value.0 И почему не сразу другим плеем тестить группу tournament_just_created ?
Влад 🇺🇦
с tf_run.outputs.gs_ec2_ip.value.0 тут все ок, тут список ip адресов которые я выше добавил add_host
Влад 🇺🇦
даже создал локальный файл
Влад 🇺🇦
другим плеем не хочу, хочу делегировать все, так как нужно будет выполнять пару команд сначала в одной группе + регистрировать переменные output и передавать их другой группе
Grek 🇺🇦
Влад 🇺🇦
вроде разобрался немного, но не понимаю почему так, не работает делегирование на удаленный хост в моей версии ansible
Влад 🇺🇦
он выполняет все только локально
Anonymous
ну ты хочешь become. либо убери либо добавь еще -K
а что можно беком судо без пароля?
Влад 🇺🇦
2.9.6 работает, 2.9.11 уже не работает delegate_to
Anonymous
да
это как и почему у меня так не получилось
inqfen
Ну вот хоть секнду бы в гугле потратил... https://askubuntu.com/questions/147241/execute-sudo-without-password
inqfen
Так и судо у тебя на машине с паролем или без тоже к ансиблу не относится
Lamobot
и тогда придется для каждой из нод вводить отдельно пароль? как быть если везде разные пароли
https://docs.ansible.com/ansible/latest/user_guide/become.html#become-connection-variables Можно задать ansible_become_password
Muhammad
можно сразу в ansible.cfg занести пользователя, дальше в плейбуках не писать, но это дело вкуса
Lamobot
А нафига юзер? Под рутом не страшно что ли? :)
Anonymous
а тоесть надо изначально везде в каждой ноде насоздавать пользователй с рут правами специально для ансибла?
Anonymous
вроде бы логин в shh под рутом надо отключать и это тоже хорошая практика