Artem
Добрый день. Подскажите, есть ли возможность запустить плейбук через скрипт питона? Нашел вот это https://docs.ansible.com/ansible/2.4/dev_guide/developing_api.html#python-api-2-0 но здесь нет ответа на вопрос: как запустить сам плейбук
Alexandr
Добрый день! Подскажите если возможность запустить 1 playbook на несколько хостов паралельно? чтобы не прибегать к такому ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit "host1"
Alexandr
Можно использовать паттерны для хостов https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html#common-patterns
это понятно . для примера у менять есть playbook - hosts: host1 become_user: '{{ default("root") }}' roles: - { role: role1 } - { role: role2 } - { role: role3} - hosts: host become_user: '{{ default("root") }}' roles: - { role: role1 } - { role: role2 } - { role: role3} как нибудь можно запустить установку паралельно. не запуская несколько playbook через Limit ?
Alexandr
В одну группу засуньте эти хосты и используйте: - hosts: groupname
дело в том что у меня они в разных группах
Alexandr
не могу в одну их запихнуть
Lamobot
дело в том что у меня они в разных группах
Вы одинаковый набор ролей накидываете на хосты из разных групп... По логике ансибла они должны быть в одной группе.
Lamobot
Не понимаю, что мешает сделать ещё одну группу под вашу задачу - установки нескольких ролей.
Timur
не могу в одну их запихнуть
И что же этому мешает?
Lamobot
нет. набор ролей там разный
Тогда запускайте средствами ОС в параллель.
Deyvis
Никто не вкурсе, как узнать порядковый номер ноды в инвентори?
Lamobot
Никто не вкурсе, как узнать порядковый номер ноды в инвентори?
'{{ (groups[hosts_group]|sort).index(ansible_host) }}' Не совсем порядковый номер, но как-то так можно
Timur
У ключей словаря нет четкого порядка
Timur
Поэтому задача определения порядкового номера ключа заведомо бессмысленна
Deyvis
они же идут в каком то порядке, один за другим
Deyvis
следовательно их можно рассчитать
Timur
Он не фиксирован
Timur
При одном запуске может один порядок быть, потом другой
Timur
Как исходная задача звучит?
Deyvis
добавлять днс записи из группы. кафка будет tratata-1 эластик tratata-2 и тд тп
Deyvis
в днс сервер
Deyvis
плюс соотносить с их ip
Timur
Ну и? Зачем тут какой-то порядок?
Deyvis
потом что количество нод не фиксировано и постоянно меняется. я и пишу цикл, что бы при прогоне он соотносил ноду с ее порядковым номером
Timur
Зачем какие-то номера?
Deyvis
я тоже
Timur
Вам нужно обновить DNS записи для хостов группы?
Deyvis
добавить\обновить не суть важно. есть иннвентори с группой в которой куча хостов, их количество будет постоянно меняться. их имена будут постоянно меняться и на них не стоит ориентироваться. вообще никакой статики кроме ip адреса. требуется: соотнести ноду с ее ip и даеть ей имя, типо node-1. соотнести 2ю ноду и дать node-2 тд тп
Deyvis
т.е. blablanode ip: 1.1.1.1 превращается в днс запись node-1 1.1.1.1
Timur
И используйте это
Timur
Зачем что-то там считать при этом?
Deyvis
смысла в этом большого нет, для моего случая
Timur
смысла в этом большого нет, для моего случая
Тогда яснее сформулируйте задачу
Timur
Пока она выглядит как создание костылей на пустом месте
Timur
Что за ноды, зачем вам нумерация и что именно вы хотите сделать?
Deyvis
просто представьте, что есть список нод с рандомными именами и рядом их ip адреса. требуется привести этот список в днс и сделать четкое именование с шаблонным началом, например node
Deyvis
и это требуется для ряда служб, что бы имена были типа node-1, node-2, node-3
Timur
В чем проблема-то?
Deyvis
не могу придумать, как это сделать. что бы он взял любую ноду и назвал ее node-1 и вписал её же ip взял следующую и назвал node-2
Deyvis
{% if index == 0 %}{% else %}{% endif %} горожу типо такого, но не так работает, как хотелось бы
Alex
как то так {% for curr_host in groups[hosts_group] %} curr_host{{ loop.index }} {% endfor %}
Timur
lookup sequence есть
Deyvis
модуль который отправить имя в днс
Deyvis
он вполне понимает переменные
Timur
модуль который отправить имя в днс
Ну, вызываете его в цикле по всем хостам группы
Timur
Например with_inventory_hostnames
Timur
В качестве номера используйте текущий индекс лупа (он генерируется автоматически)
Timur
Вот и получите нужные вам имена вида node-1, node-2 и т.п. для каждого хоста группы
Anonymous
Коллеги подскажите как решить красиво, генерирую ансиблом файл upstream для nginx . Переменная выглядит так nginx: upstreams: - { name: "node3210", server: server1, domain: "{{internal_domain}}", port: 3210, fail_timeout: 0, conf: "nginx-default-upstream.conf.j2"} шаблогн выглядит пока так upstream {{ item.name }} { server {{item.server}}.{{item.domain}}:{{item.port}} fail_timeout={{item.fail_timeout}}; } мыль чтобы в перменной для server передавать адрес многих апстримов, но как это завернуть внутрь я не оч понимаю
Anonymous
сам спросил, сам разобрался)
Anonymous
победил так - { name: "node3210", server: { "node-sbx01", "node-sbx02"}, domain: "{{internal_domain}}"}, port: 3210, fail_timeout: 0, conf: "nginx-multi-upstream.conf.j2"} и конфиг upstream {{ item.name }} { {% for included in item.server %} server {{included}}.{{item.domain}}:{{item.port}} weight=50 fail_timeout={{item.fail_timeout}}; {% endfor %} }
Anonymous
теперь задача два чтьбы каждому серверу задать вес,. то есть я так понимаю я должен дополнительные перменные добавить в server: { "node-sbx01", "node-sbx02"} - массив в массиве какой то получается
Vladimir
Вот мы и узнали, что переменная записывается один раз. Возможно, надо использовать циклы, но как )
Для истории. Надо модифицировать скрипт, чтобы он при каждом запуске выдавал текущий uid+1
Full
Привет, чат. Я пришел к тебе с вопросом. Ansible 2.8. Есть один модуль, vmware_portgroup, я его использую примерно вот так: - name: Add Portgroup vmware_portgroup: hostname: '{{ vsphere_host }}' username: '{{ vsphere_user }}' password: '{{ vsphere_password }}' validate_certs: no hosts: '{{ esxi_hosts }}' switch_name: '{{ item.esxi_vswitch }}' portgroup_name: '{{ item.portgroup_name }}' vlan_id: '{{ item.vlan_id }}' state: present with_items: '{{ esxi_portgroups }}' delegate_to: localhost
Full
Все исправно добавляется (ну почти), но есть нюанс. При добавлении портгруппы ансибл оверрайдит настройки "Teaming and failover". Сами настройки при этом не изменяются. Просто расставляются галки "Override" (картинка ниже). В результате я не могу менять эти настройки на уровне свича. Вопросов, собственно, два: 1. Как сделать так, чтоб ансибл не трогал Teaming and failover"? 2. Как сделать unset для этих настроек?
Full
Full
В доке написано, что для teaming_policy есть default: {"inbound_policy": false, "load_balance_policy": "loadbalance_srcid", "notify_switches": true, "rolling_order": false} Единственное, что я пробовал - передать пустой словарь в teaming_policy (teaming_policy: '{}'), но это никак не меняет поведение.
Alex
В AWS модулях есть специальное значение, забыл как называется
Alex
мб здесь что то аналогичное
Отделение Bereke Bank
Сори случайно
Igor
почему ансиблу может это не нравиться?
Igor
2.9.6, ошибка ERROR! unexpected parameter type in action: <type 'bool'>
Igor
если убрать пакеты из таски, оставить просто обновление кеша, всё ок. С {{item}} тоже ок.
Alex
update_cache это же параметр модуля
Alex
а не таска
Igor
точно, я его не подвинул. Спасибо, работает. 🤦‍♂️
Alex
а что за pkg? У модуля apt нет такого параметра
Igor
https://docs.ansible.com/ansible/latest/modules/apt_module.html