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 оно и будет
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
Anonymous
Lamobot
Anonymous
Volodymyr
А кто красноглазил с OS X? Подскажите как поставить через mas-cli Xcode определенной версии, а не последней из AppStore?
inqfen
А я думал тут группа по ансиблу...
Anna
Подскажите, как правильно делать git pull из каталога определенного пользователя с помощью ansible. Только через shell? делать от лица ansible, закинув его публичный ключ в свойства пользователя ansible (предположим, такое имя дали) gitlab ci?
Я и твой кот
Volodymyr
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
Volodymyr
....
народ, подскажите, пожалуйста
как модулю 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
Lamobot
Влад 🇺🇦
Всем привет, почему это не работает?
- 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
Влад 🇺🇦
с tf_run.outputs.gs_ec2_ip.value.0 тут все ок, тут список ip адресов которые я выше добавил add_host
Влад 🇺🇦
даже создал локальный файл
Влад 🇺🇦
другим плеем не хочу, хочу делегировать все, так как нужно будет выполнять пару команд сначала в одной группе + регистрировать переменные output и передавать их другой группе
Anonymous
Grek 🇺🇦
Влад 🇺🇦
вроде разобрался немного, но не понимаю почему так, не работает делегирование на удаленный хост в моей версии ansible
Влад 🇺🇦
он выполняет все только локально
Anonymous
Влад 🇺🇦
2.9.6 работает, 2.9.11 уже не работает delegate_to
inqfen
Anonymous
да
это как и почему у меня так не получилось
inqfen
Ну вот хоть секнду бы в гугле потратил...
https://askubuntu.com/questions/147241/execute-sudo-without-password
Anonymous
inqfen
Так и судо у тебя на машине с паролем или без тоже к ансиблу не относится
Muhammad
можно сразу в ansible.cfg занести пользователя, дальше в плейбуках не писать, но это дело вкуса
Lamobot
А нафига юзер? Под рутом не страшно что ли? :)
Anonymous
а тоесть надо изначально везде в каждой ноде насоздавать пользователй с рут правами специально для ансибла?
Muhammad
inqfen
Anonymous
вроде бы логин в shh под рутом надо отключать и это тоже хорошая практика