Timur
вот что написано в заголовке гитхаба
Если читать не только заголовок, то можно прочитать следующее: Ansible’s Resources are declarative; it figures out the steps needed to achieve the final state. It also lets you know whether or not any steps needed to be taken to get to the final state.
Oleksandr
что хитро - там в описании НИ СЛОВА ПРО STATE
кстати в модулях есть именно state: ;)
George
> Ansible’s Resources are declarative да
George
> it figures out the steps needed to achieve the final state маркетинг - зависит от того, что там унутри модуля. Ну, положим, что ок
George
> It also lets you know whether or not any steps needed to be taken to get to the final state. это вообще за гранью
Viktor
Госпаде. Ужос-то какой
Мне нужен многострочный if иначе будет много тасков c when: some_var isdefined
Timur
Мне нужен многострочный if иначе будет много тасков c when: some_var isdefined
Вы в курсе, что у роли есть возможность использовать дефолтные значения переменных?
Timur
Тогда зачем if?
Timur
Опишите детальнее задачу тогда
Timur
Помогать писать говнокод нет никакого желания
Viktor
Тогда зачем if?
Это возможно или нет?
Timur
Мне карма дорога
Timur
Это возможно или нет?
Да, но #ненадотак
Viktor
Да, но #ненадотак
Пример можно?
Timur
Пример можно?
Опишите задачу конкретнее
Viktor
Да, но #ненадотак
очень нужно
Timur
очень нужно
Опишите задачу конкретнее
Viktor
Опишите задачу конкретнее
Несколько проектов разворачивается из одного плейбука, который запускается после пуша в мастер.
Timur
Это общие слова
Timur
Конкретно что вы хотите сделать, для чего вам потребовался многострочный if?
Viktor
попробую так {% if inventory_hostname in groups.aptcache %} {% set cachehost = 'localhost' %} {% else %} {% set cachehost = groups['aptcache'] | first %} {% endif %} #ненадотак
Timur
if inventory_hostname in groups.aptcache подобный код сразу в топку
Timur
Учитесь пользоваться группами, как предусмотрено ансиблом
Viktor
Учитесь пользоваться группами, как предусмотрено ансиблом
Да, так не надо https://github.com/ansible/ansible/issues/8233
George
Да, так не надо https://github.com/ansible/ansible/issues/8233
Это окончательно разрушило мой мир
Aleksandr
Да, так не надо https://github.com/ansible/ansible/issues/8233
Зато в солте это за милую душу прокатывает
Max
и в Fabric.
George
и в Fabric.
А фабрик ещё имеет смысл ?
Max
смотря где и кому.
Max
если команда питонистов, то естественнее на питошке писать, чем на ямле.
Max
или если уже есть код на нем.
Max
он вроде и py3 поддерживает.
Aleksandr
А фабрик ещё имеет смысл ?
Не имеет, зачем изобретать велосипед, если в солте и ансибле написаны уже таски
Aleksandr
Проще нужное поведение написать функцией для системы управления конфигурацией
George
хотите кошмара немного?
George
https://github.com/serghey-rodin/vesta/blob/master/install/vst-install-rhel.sh#L441
George
vestacp - система управления хостингом написанная на баше
Timur
Nikolay
Смотрите в сторону фильтров select, selectattr, map
решилось с помощью map как раз "{{ msg.tagged_instances|map(attribute='public_dns_name') |join('\n ') }}"
Nikolay
через selectattr чет не вышло
Timur
А что вы хотели получить-то?
Nikolay
получить public_dns_name по конструкции с мануала {{ users|selectattr("is_active") }}
Nikolay
Да, теперь остался вопрос с нормальным разделением, не хочет он воспринимать символ новой строки из json
Nikolay
чтобы аутпут красивый был, построчно
Nikolay
в общем через list сделал, вроде нормально
Sergey
#ненадотак
а как же #тыхочешьстранное
Nikolay
В доке жынжы такого не видел
Nikolay
ща попробую
Nikolay
я чето упустил?
Nikolay
<generator object do_map at 0x7f52f9dd4af0> is not JSON serializable"
Nikolay
Прилшлось аутпут регать как новую переменную, и потом к ней применять to_nice_json . Разницы в стдауте никакой, но в файл по крайней мере пишет джейсонисто - debug: msg: "{{ ec2.tagged_instances|map(attribute='public_dns_name') | list }}" register: hosts - name: Add the newly created EC2 instance(s) to the local host group (located inside the directory) copy: content: "{{ hosts | to_nice_json }}" dest: /tmp/1
Sergey
а как же #тыхочешьстранное
Это он уже не _хочет_, а _сделал_ :-)
Jungo
доброе утро! скажите пож-та я делаю деплой lxc и вот думаю а можно ли как то уменбшить кол-во кода, чтобы не писать 10 копий кода а циклом? для разных - hosts: with_items использовать? у меня на каждом pve хосте своя подсеть и разные vmid - hosts: pve1 become: yes gather_facts: false tasks: - name: inlcude default vars include_vars: 'vars.yml' - name: create ldap-rw containers proxmox: swap: "{{ proxmox_lxc_defaults.swap }}" onboot: "{{ proxmox_lxc_defaults.onboot }}" cpus: "{{ proxmox_lxc_defaults.cpus }}" cores: "{{ proxmox_lxc_defaults.cores }}" disk: "{{ proxmox_lxc_defaults.disk }}" storage: "{{ proxmox_lxc_defaults.storage }}" memory: "{{ proxmox_lxc_defaults.memory }}" vmid: '1078' hostname: 'ldap-rw' netif: '{"net0":"name=eth0,gw=10.0.1.1,ip=10.0.1.78/16,bridge=vmbr1"}' node: 'pve1' api_host: 'pve1' api_user: "{{ proxmox_lxc_defaults.api_user }}" api_password: "{{ proxmox_lxc_defaults.api_password }}" password: "{{ proxmox_lxc_defaults.password }}" ostemplate: "{{ proxmox_lxc_defaults.ostemplate }}" state: 'started'
George
доброе утро! скажите пож-та я делаю деплой lxc и вот думаю а можно ли как то уменбшить кол-во кода, чтобы не писать 10 копий кода а циклом? для разных - hosts: with_items использовать? у меня на каждом pve хосте своя подсеть и разные vmid - hosts: pve1 become: yes gather_facts: false tasks: - name: inlcude default vars include_vars: 'vars.yml' - name: create ldap-rw containers proxmox: swap: "{{ proxmox_lxc_defaults.swap }}" onboot: "{{ proxmox_lxc_defaults.onboot }}" cpus: "{{ proxmox_lxc_defaults.cpus }}" cores: "{{ proxmox_lxc_defaults.cores }}" disk: "{{ proxmox_lxc_defaults.disk }}" storage: "{{ proxmox_lxc_defaults.storage }}" memory: "{{ proxmox_lxc_defaults.memory }}" vmid: '1078' hostname: 'ldap-rw' netif: '{"net0":"name=eth0,gw=10.0.1.1,ip=10.0.1.78/16,bridge=vmbr1"}' node: 'pve1' api_host: 'pve1' api_user: "{{ proxmox_lxc_defaults.api_user }}" api_password: "{{ proxmox_lxc_defaults.api_password }}" password: "{{ proxmox_lxc_defaults.password }}" ostemplate: "{{ proxmox_lxc_defaults.ostemplate }}" state: 'started'
loop. with_items, насколько я помню, депрекейтится. Но массив значений откуда брать будете ?
Sergey
доброе утро! скажите пож-та я делаю деплой lxc и вот думаю а можно ли как то уменбшить кол-во кода, чтобы не писать 10 копий кода а циклом? для разных - hosts: with_items использовать? у меня на каждом pve хосте своя подсеть и разные vmid - hosts: pve1 become: yes gather_facts: false tasks: - name: inlcude default vars include_vars: 'vars.yml' - name: create ldap-rw containers proxmox: swap: "{{ proxmox_lxc_defaults.swap }}" onboot: "{{ proxmox_lxc_defaults.onboot }}" cpus: "{{ proxmox_lxc_defaults.cpus }}" cores: "{{ proxmox_lxc_defaults.cores }}" disk: "{{ proxmox_lxc_defaults.disk }}" storage: "{{ proxmox_lxc_defaults.storage }}" memory: "{{ proxmox_lxc_defaults.memory }}" vmid: '1078' hostname: 'ldap-rw' netif: '{"net0":"name=eth0,gw=10.0.1.1,ip=10.0.1.78/16,bridge=vmbr1"}' node: 'pve1' api_host: 'pve1' api_user: "{{ proxmox_lxc_defaults.api_user }}" api_password: "{{ proxmox_lxc_defaults.api_password }}" password: "{{ proxmox_lxc_defaults.password }}" ostemplate: "{{ proxmox_lxc_defaults.ostemplate }}" state: 'started'
Параметризированная роль в данном случае - то, что доктор прописал.
Sergey
Можно использовать дефолты на всю мощь, можно использовать подстановки Jinja2 и вот это вот всё.
Max
Не имеет, зачем изобретать велосипед, если в солте и ансибле написаны уже таски
это как раз не точно. в python shops нередко есть скрипты на питоне, которые может быть легче обернуть в Fabric/Plumbum, чем переписывать на ямле.
Max
ясен пень если нужно создавать с нуля, лучше брать инструмент с библиотекой готового функционала, а ля ансибл/солт и т.д.
Vladislav 👻
Делайте 1 роль - 1 сервис, иначе рано или поздно упретесь...
Vladislav 👻
Как минимум, проблемы начнуться, когда захотите сделать изменения только для 1 сервиса и придется передергивать все по такой схеме
Sergey
Делайте 1 роль - 1 сервис, иначе рано или поздно упретесь...
О том и речь: сервис в данном случае - поднятие ВМ, поэтому параметризированная роль подойдёт как нельзя лучше.
Vladislav 👻
Ну хз, я аналогию пытался накинуть на докер контейнеры и решил отказаться
Vladislav 👻
Проще дублировать роль под сервис, чем писать джинджой в ямле для ансибла
Sergey
Проще дублировать роль под сервис, чем писать джинджой в ямле для ансибла
А зачем джинджить-то, что это даёт? Плейбук для сервиса обеспечивает нужное кол-во виртуалок через роль, потом эти виртуалки провижнятся.
Vladislav 👻
lxc же не вмы
George
Vladislav 👻
А то что сервисы надо настраивать и тут сразу вопрос, а где будут конфиги под его N lxc
Vladislav 👻
И почему все это дело будет размазано между кучей ролей