Anonymous
вроде, идеи те же. реализация +/- та же
Anonymous
и официальный источник
Anonymous
а, не "кто-то что-то" придумал
Aleksey
@tnt4brain мне кажется что den и ipv176 это виртуалы одного человека.
Anonymous
То что «официально» в обще ничего не говорит о качестве - но не смотря спорить не стану. У меня пример из другой области - единственная изданная в РФ книга ансибл по русски - крайне сильно спорно как в практиках ансибл, так в общем подходе
Anonymous
"единственная изданная в РФ книга ансибл по русски". уже вздрогнул
Anonymous
@tnt4brain мне кажется что den и ipv176 это виртуалы одного человека.
про русские книги я бы никогда не стал даже намека давать
Anonymous
Это не по теме чата. Не вижу смысла спорить или обсуждать
Anonymous
Тут 99% тех кто читать умеет и самое главное по английски понимает - не понимает что оно делает и пытается получить. Так что язык тут точно не принципиален
Anonymous
первоисточник - это документация и сам код ансибл. все остальное это сомнительное. чем чаще пользуешься документацией и "подсматриваешь" код ансибл, тем более уверенно будешь понимать, что действительно происходит с твоим кодом
Anonymous
Не спорю - все так
Anonymous
на том и порешали
Aleksey
Это ты не видел, как они ругались :-D
Видел. Что ещё больше меня укрепляет во мнении
Anonymous
если вам интересно это обсудить, то можно создать отдельный чат на n человек. меня там пригласить и пытать. как бы тут вроде чат про другоеъ
Aleksey
Нет обсуждать тут нечего,
Anonymous
Нет обсуждать тут нечего,
как решил проблемы с порядком name?
Aleksey
Выше issue
Anonymous
так уже объяснили, что это "не проблема"
Anonymous
но например, можно написать что-то типа go fmt
Anonymous
нет?
Oleksandr
А - да. Б - идёт автоматом если верная группа хостов
Пока получается так: # /group_vars/mysql ufw_vars: - { port: "3306", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard MySQL port" } # /group_vars/web ufw_vars: - { port: "80", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTP port" } - { port: "443", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTPS port" } Делаю debug: - debug: msg: '{{ ufw_vars }}' - debug: msg: '{{ ufw_vars.port }}' - debug: msg: '{{ ufw_vars.protocol }}' Получил следующее: ok: [ansible5] => { "msg": [ { "comment": "allow incoming connection on standard HTTP port", "from": "any", "policy": "allow", "port": "80", "protocol": "tcp" }, { "comment": "allow incoming connection on standard HTTPS port", "from": "any", "policy": "allow", "port": "443", "protocol": "tcp" } ] } ok: [ansible6] => { "msg": [ { "comment": "allow incoming connection on standard MySQL port", "from": "any", "policy": "allow", "port": "3306", "protocol": "tcp" } ] } А вот получить значение ufw_vars.port и ufw_vars.protocol не получилось: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'port'\n\nThe error appears to be in '/home/ansible/ansible_test/ufw.yml': line 34, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^ here\n"}
Anonymous
Пока получается так: # /group_vars/mysql ufw_vars: - { port: "3306", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard MySQL port" } # /group_vars/web ufw_vars: - { port: "80", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTP port" } - { port: "443", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTPS port" } Делаю debug: - debug: msg: '{{ ufw_vars }}' - debug: msg: '{{ ufw_vars.port }}' - debug: msg: '{{ ufw_vars.protocol }}' Получил следующее: ok: [ansible5] => { "msg": [ { "comment": "allow incoming connection on standard HTTP port", "from": "any", "policy": "allow", "port": "80", "protocol": "tcp" }, { "comment": "allow incoming connection on standard HTTPS port", "from": "any", "policy": "allow", "port": "443", "protocol": "tcp" } ] } ok: [ansible6] => { "msg": [ { "comment": "allow incoming connection on standard MySQL port", "from": "any", "policy": "allow", "port": "3306", "protocol": "tcp" } ] } А вот получить значение ufw_vars.port и ufw_vars.protocol не получилось: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'port'\n\nThe error appears to be in '/home/ansible/ansible_test/ufw.yml': line 34, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^ here\n"}
может Вам это поможет https://www.digitalocean.com/community/tutorials/how-to-manage-multistage-environments-with-ansible
Anonymous
это по мотивам https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html
Anonymous
Directory Layout & Alternative Directory Layout
Oleksandr
может Вам это поможет https://www.digitalocean.com/community/tutorials/how-to-manage-multistage-environments-with-ansible
К сожалению нет 😊 У меня есть пару групп серверов (web и mysql), и есть group_vars/ # /group_vars/web ufw_vars: - { port: "80", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTP port" } - { port: "443", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTPS port" } # /group_vars/mysql ufw_vars: - { port: "3306", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard MySQL port" } Я хочу в loop / with_items применить правила UFW фаерволла, для этого мне нужно как-то обратиться к значениям списка (массива?) - debug: msg: '{{ ufw_vars }}' возвращает корректные значения всего списка: ok: [ansible5] => { "msg": [ { "comment": "allow incoming connection on standard HTTP port", "from": "any", "policy": "allow", "port": "80", "protocol": "tcp" }, { "comment": "allow incoming connection on standard HTTPS port", "from": "any", "policy": "allow", "port": "443", "protocol": "tcp" } ] } Но в loop, нужно конкретно по "port", "protocol", "policy" обращаться
Anonymous
К сожалению нет 😊 У меня есть пару групп серверов (web и mysql), и есть group_vars/ # /group_vars/web ufw_vars: - { port: "80", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTP port" } - { port: "443", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTPS port" } # /group_vars/mysql ufw_vars: - { port: "3306", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard MySQL port" } Я хочу в loop / with_items применить правила UFW фаерволла, для этого мне нужно как-то обратиться к значениям списка (массива?) - debug: msg: '{{ ufw_vars }}' возвращает корректные значения всего списка: ok: [ansible5] => { "msg": [ { "comment": "allow incoming connection on standard HTTP port", "from": "any", "policy": "allow", "port": "80", "protocol": "tcp" }, { "comment": "allow incoming connection on standard HTTPS port", "from": "any", "policy": "allow", "port": "443", "protocol": "tcp" } ] } Но в loop, нужно конкретно по "port", "protocol", "policy" обращаться
наверно вам сюда https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html
Anonymous
точнее loop_control:
Oleksandr
если я бы мог понять что это значит)
Anonymous
ну, там примеры есть
Anonymous
попробуй их
Anonymous
возможно по ходу понадобиться https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter
Anonymous
типа составить лист/словарь, а потом его "закинуть" в loop_control
Anonymous
точная задача неизвестна, могу лишь догадываться
Oleksandr
сейчас опишу задачу, все конфиги, и тд
Anonymous
возможно по ходу понадобиться https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter
есть еще практики укатывать это через jinja2. на Ваш вкус.
Anonymous
Может и стандартные фильтры зайдут. Это более приемлемый вариант.
Oleksandr
пару минут, я сейчас выложу все детали на pastebin. Уже часа 4 это пытаюсь сделать, уже не понимаю куда смотреть и что деать
Oleksandr
https://pastebin.com/WPATXy7t
Anonymous
Скоро буду у компа, гляну
Николай
Разработчики Ansible рассматривают возможность замены ветки "master" на "devel". GitHub на пути замены веток "master" на "main". Огонь.
Николай
Пока так https://github.com/ansible-collections/overview/issues/83 (в комментах угар — разрабы оправдываются, что "master" — это просто так принято, а другие указывают, что "devel" похоже на "devil") и https://www.opennet.ru/opennews/art.shtml?num=53146 (внизу)
Anonymous
https://pastebin.com/WPATXy7t
- debug: msg: "{{ ufw_vars[0].policy }}" - debug: var: item loop: "{{ ufw_vars | json_query('[*].policy') }}"
Anonymous
что-то типа такого
Sergey
Пока так https://github.com/ansible-collections/overview/issues/83 (в комментах угар — разрабы оправдываются, что "master" — это просто так принято, а другие указывают, что "devel" похоже на "devil") и https://www.opennet.ru/opennews/art.shtml?num=53146 (внизу)
Вторая ссылка - такое себе, "оборзеватели" с opennet даже не удосужились ссылку на источник вставить, а вот в комментах к issue дискуссия прям огонь, спасибо, посмеялся (https://github.com/ansible-collections/overview/issues/83#issuecomment-643704369)
Oleksandr
- debug: msg: "{{ ufw_vars[0].policy }}" - debug: var: item loop: "{{ ufw_vars | json_query('[*].policy') }}"
Спасибо, оба варианта работают. Сейчас попытаюсь сделать чтобы это заработало в Playbook`е (чтобы непосредственно задать правила UFW и их применить)
Oleksandr
что-то типа такого
В таком виде срабатывает только для 1-го по списку правила ( порт 80), а второе правило не обрабатывается. # /group_vars/web ufw_vars: - { port: "80", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTP port" } - { port: "443", protocol: "tcp", policy: "allow", from: "any", comment: "allow incoming connection on standard HTTPS port" } ————— - name: Allow selected ports ufw: rule: "{{ ufw_vars[0].policy }}" to_port: "{{ ufw_vars[0].port }}" proto: "{{ ufw_vars[0].protocol }}" src: "{{ ufw_vars[0].from }}" comment: "{{ ufw_vars[0].comment }}" loop: - policy - port - protocol - from Понимаю что это потому что стоит "0", а что если правил больше (и мы не знаем их кол-во) ?
Anonymous
- debug: var: item loop: "{{ ufw_vars | json_query('[*].policy') }}"
Anonymous
это через loop_control
Anonymous
пока выбираешь первый элемент массива
Anonymous
а нужно пройтись по всем
Oleksandr
Anonymous
это так не работает
Bogdan
export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD)
Bogdan
Какой аналог команды в ансабле?
Oleksandr
- debug: var: item loop: "{{ ufw_vars | json_query('[*].policy') }}"
Если делать так: - debug: msg: "{{ ufw_vars | json_query('[*].policy') }}" в случае если 2 два элемента массива то вывод такой: ok: [ansible5] => { "msg": [ "allow", "allow" ] } И на вход в loop приходит двойное значение: [WARNING]: The value ['allow', 'allow'] (type list) in a string field was converted to "['allow', 'allow']" (type string). If this does not look like what you expect, quote the entire value to ensure it does not change. ———- Если сделать так: - debug: var: item loop: "{{ ufw_vars | json_query('[*].policy') }}" то вывод идет как два отдельных значения: ok: [ansible5] => (item=allow) => { "ansible_loop_var": "item", "item": "allow" } ok: [ansible5] => (item=allow) => { "ansible_loop_var": "item", "item": "allow" ——————— Как можно по аналогии для использования в "loop" добавить "var: item" ? Или я не туда вообще смотрю
Aleksandr
сделай через шаблоны и подгружай уже готовыми файлами в ufw
Aleksey
смотрите какую смешную какашку я вам принёс. даже не препополагал что можно так обезобразить ансибл https://github.com/timberio/vector-test-harness/tree/master/ansible/roles/vector
Aleksey
видел. там есть интересные находки и подходы.
Aleksey
как и в ara
Bogdan
Как передать переменную для докер стака через ансабль?
Anonymous
примерно так
Anonymous
https://pastebin.com/PmzcE62D https://pastebin.com/tPe4nxwt
Anonymous
Критика приветствуется!
Anonymous
Например, почему это здорово или почему это не здорово
Oleksandr
@ipv176 @deniswork4951 Спасибо за помощь. ПС. Мои краткие выводы: я осознал что занимался перфекционизмом, вместо того чтобы просто сделать и работало, я пытался сделать идеально, потратил много своего и вашего времени, и в итоге сделал по простому: 3 шт. Playbook`а ( в одном правила для web, во втором - для mysql, в третьем - для mongo). Не идеально но фиг с ним 😃 https://pastebin.com/VNAjDgEr
Dimujin
Подскажите куда копать. Пробую выполнить некий плейбук в AWX docker. Поскольку часть хостов нет доступа, фильтруется доступ, jobs может бесконечно выполняться, часть хостов пишет нет доступа сразу, а часть ожидает до бесконечности. Какие таймауты покрутить? Чтобы сразу получить результат. Сутки ждал, потом прерывал вручную.
Dimujin
/api/v2/settings/jobs/ у меня: "DEFAULT_JOB_TIMEOUT": 0, Пробую изменить: https://docs.ansible.com/ansible-tower/3.3.1/html/administration/configure_tower_in_tower.html
нет, это не то поставил 50 и задание не успевает выполниться за 50сек, вываливается с ошибкой а мне надо чтоб оно успешно выполнилось, где смогло и выдало результирующее окно в этом варианте выдает ошибку
Viktor
Привет! Научите подставлять в if переменные из for {% for i in item %} {% if {{ i.name }} == "foo" %} ... Вылавливаю ошибку, видимо, как-то иначе должна подставляться переменная в if?
Anastasia
для начала - двойные фигурные скобки вокруг i.name не нужны
Anastasia
у вас i - это словарь?
Viktor
у вас i - это словарь?
yup. избавление от скобок помогло, спасибо!
Wadik
Добрый день. Подскажите , что значит "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1