Alex
и это еще я напрямую с ребятами из гугла общался, которые отвечали за эти модули :)
Oleg
Есть способ удалить содерживое файла не модулем shell и не удаляя файл? Спасибо.
George
типа echo "" > XXX ?
George
https://github.com/ansible/ansible-modules-core/issues/902 - видимо, это?
George
https://github.com/ansible/ansible-modules-core/issues/902#issuecomment-164043327
George
как один из способов это сделать @iNulll
Oleg
типа echo "" > XXX ?
да, типо как на баше > file
George
см. выше
𝚔𝚟𝚊𝚙𝚜
Вопрос не сколько по Ansible сколько по организации логики выполнения. Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли. Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию. Проблема: После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться. Вопрос: Как реализовать последовательное выполнение? Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост Либо использовать lock-файл. Но в этом случае возникает другой вопрос: Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
Anonymous
собствеено виду что выводиться более красиво
Dr. L.S.Dee
Вопрос не сколько по Ansible сколько по организации логики выполнения. Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли. Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию. Проблема: После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться. Вопрос: Как реализовать последовательное выполнение? Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост Либо использовать lock-файл. Но в этом случае возникает другой вопрос: Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
Ну кто-то из 40 добежит первым и создаст свой лок, так? Остальные 39 покурят пока. А вообще, хоть я и не понимаю ничего в этом вашем красноглазии, кажется мне, что с логикой что-то не так. Но это, разумеется, вам виднее.
Anonymous
только не оч понятно, как это решило вопрос обрашения к конкретному value зная имя key_name
Dr. L.S.Dee
Так все 40 ломанутся создавать lock, не?
И что, хотя бы двое из них сделают это одновременно, с точностью атомных часов?
George
Вопрос не сколько по Ansible сколько по организации логики выполнения. Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли. Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию. Проблема: После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться. Вопрос: Как реализовать последовательное выполнение? Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост Либо использовать lock-файл. Но в этом случае возникает другой вопрос: Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
лок файлы это не страшно - страшно другое, у тебя логика таймаутов как будет выглядеть?
George
ибо таймаут может истечь, а лок файл не освободиться. Ваши действия?
𝚔𝚟𝚊𝚙𝚜
Вопрос не сколько по Ansible сколько по организации логики выполнения. Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли. Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию. Проблема: После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться. Вопрос: Как реализовать последовательное выполнение? Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост Либо использовать lock-файл. Но в этом случае возникает другой вопрос: Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
Это логика ansible-оператора в kubernetes, на данный момент я не вижу более эфективного способа обрабатывать большое количество CR ресурсов за раз.
Timur
Я ж изначально уточнял специально - что должно быть на выходе
Anonymous
похоже да, я вчера адски протупил с жтим
Timur
🤦‍♂️
George
поток 1 заблочил ресурс 1 и ждет ресурс 2 поток 2 заблочил ресурс 2 и ждет ресурс 1
George
или вообще напиши оператор куба
Timur
похоже да, я вчера адски протупил с жтим
Список превращается в словарь одним фильтром. Подсказка нужна?
Anonymous
да ) был бы благодарен
Timur
да ) был бы благодарен
{{ tags | items2dict }} Which turns: tags: - key: Application value: payment - key: Environment value: dev into: Application: payment Environment: dev
Anonymous
пойду равлекаться, спасибо
cent
Коллеги, а как прокинуть переменные в tasks из переменной? - debug: var=some vars: "{{ variable_dict_with_some }}"
𝚔𝚟𝚊𝚙𝚜
ибо таймаут может истечь, а лок файл не освободиться. Ваши действия?
Задачи которые выполняет плейбук, крайне просты (модуль raw), каждый запуск выполняет 3-5 комманд удалённо, времени на это уходит немного. Если же таймаут истек, ничего страшного, оператор запустит этот же плейбук в следующий цикл
𝚔𝚟𝚊𝚙𝚜
или вообще напиши оператор куба
Да я думал об этом, уже даже какой-никакой прототип написал, просто думаю что если решить этот вопрос с lock-файлами, то и с operator-sdk получится весьма здорово
Anonymous
@nett00n будет жить. Поприветствуем!
𝚔𝚟𝚊𝚙𝚜
В идеале конечно создавать лок не ансиблом а непосредственно перед запуском каждого таска и удалять его по завершению таска, так будет быстрее и не будет блокироваться исполнение остальных тасков в плейбуке
𝚔𝚟𝚊𝚙𝚜
Вот и думаю, может есть какая специфическая опция для ssh клиента, или ansible_ssh_executable переопределить
nett00n
Привет, подскажите, в чём я не прав с синтаксосом в таске: - name: Copy jira-{{ item }}.example.ru nginx config template: src: templates/jira.example.ru.conf.j2 dest: "/etc/nginx/sites-enabled/jira{{ item }}.example.ru.conf" mode: '0644' backup: true notify: Reload nginx tags: nginx_config_jira_jira_example,nginx_config_jira loop: - {{ item: "prod", when "'prod' in groups" }} - {{ item: "dev", when "'dev' in groups" }}
nett00n
а что ты хочешь
подставлять dev/prod в имя файла в зависимости от среды
Anonymous
{{ tags | items2dict }} Which turns: tags: - key: Application value: payment - key: Environment value: dev into: Application: payment Environment: dev
я вот смотрю в доку и понимаю что не пониаю куда это пихать https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html?highlight=items2dict#items2dict-filter гугл тоже примерами не горит делиться
Anonymous
а есть более менее рабочий пример ?
George
не проще просто без лупа сделать, а имя среды положить в переменную типа jira_environment и ее одну подставлять?
nett00n
не проще просто без лупа сделать, а имя среды положить в переменную типа jira_environment и ее одну подставлять?
слишком анонимизировал. У меня есть переменная с названием среды, но она не совпадает с тем, что я хочу подставлять должно было быть так: - name: Copy jira{{ item }}.example.ru nginx config template: src: templates/jira.example.ru.conf.j2 dest: "/etc/nginx/sites-enabled/jira{{ item }}.example.ru.conf" mode: '0644' backup: true notify: Reload nginx tags: nginx_config_jira_jira_example,nginx_config_jira loop: - {{ item: "" when "'prod' in groups" }} - {{ item: "-test" when "'dev' in groups" }}
George
это все в рамках одного хоста? или это роль такая? и прокатываться все равно будет ЛИБО одно, ЛИБО другое
Sergey
Всё равно не надо так. Это элементарно через group_vars и переменную для группы all делается.
nett00n
да, должно прокатываться либо одно либо другое на хост, в зависимости от того, в каком сегменте. Сейчас этот кусок написан просто как два таска с when
Timur
да, должно прокатываться либо одно либо другое на хост, в зависимости от того, в каком сегменте. Сейчас этот кусок написан просто как два таска с when
Это делается встроенным механизмом групп. Никаких специальных условий для этого не нужно добавлять
Ivan
Привет! а как мне из этого сделать list, в котором будет первый элемент этот дикт? ok: [localhost] => { "instance_config_dict": { "address": "84.201.129.108", "identity_file": "id_rsa.pub", "instance": "ubuntu18", "port": "22", "user": "ubuntu" } } Я попробовал | list , но получается фигня в виде: "ansible_facts": { "instance_conf": [ "instance", "user", "port", "identity_file", "address" ] }
Ivan
как-то комбинировать надо с .values()?
Ivan
А второй элемент какой будет?
а не будет второго элемента мне надо из этого замутить подобную структуру: ``` "instance_conf": [ { "address": "192.168.130.49", "identity_file": "/tmp/temporary_ssh_key", "instance": "node_ubuntu18", "port": "22", "user": "user" } ] ```
Ivan
а у меня теряются значения почему-то
Timur
Что у вас за задача исходно?
Ivan
задача — сформировать instance_config.yml для молекулы
Timur
Вы свой delegated драйвер пишете?
Timur
дык вот тут проблема же. Сделать странное
Ещё раз. От чего возникла такая проблема?
Timur
Делаете плейбуку create/destroy?
Ivan
Делаете плейбуку create/destroy?
Ага, делаю. Destroy быстро сделал, там всего лишь терраформовское. А вот чтобы молекуле передать дальше данные. на какой хост и с чем идти, у меня проблем
Ivan
Можете на наши примеры драйверов глянуть для ориентира
Примерно все, что я видел, копиапстят древнюю магию типа - name: Dump instance config copy: # NOTE(retr0h): Workaround for Ansible 2.2. # https://github.com/ansible/ansible/issues/20885 content: "{{ instance_conf | to_json | from_json | molecule_to_yaml | molecule_header }}" ну и плейбук у всех почти один на гите
Timur
Вот тут например: https://github.com/lean-delivery/ansible-molecule-drivers
Ivan
ваще никаких претензий. Просто у меня поему-то стадия Convert instance config dict to a list не работает, как показал выше. Возможно, потому что я пока без .results это делаю, но имхо влияеть не должно
Artur
привет всем. не могу понять в чём косяк. имеется mysql сервак в контейнере. ансайблом выполняю - name: recreate/create database mysql_db: login_host: 127.0.0.1 login_user: root login_password: '{{ mysql_admin_password }}' name: '{{ mysql_item.0.schema }}' state: '{{ mysql_item.1 }}' with_nested: - '{{ local_item.db }}' - [ "absent","present"] loop_control: loop_var: mysql_item а в ответ ловлю unable to find /root/.my.cnf. Exception message: (2013, \"Lost connection to MySQL server at 'reading initial communication packet файла этого действительно нет, и зачем, если я казал логин и пасс для подключения
Artur
Ну он похоже хочет через сокет подключаться, дайте ему сокет
при всем желании не могу. сокет из контейнера не проброшен. да и раньше этот плейбук работал без проблем. что поменялось, без понятия. ( ну кроме версии самого ансайбла).
Артём
А есть ли приличный способ ансиблом сделать так, чтобы пакет был установлен из правильного репо? С реинсталлом в случае, если уже стоит из неправильного?
Sergey
Т.к. в модуле ансибла нет концепта "правильной" и "неправильной" репы.