Serge
я как бы не хочу чтобы Pyventory считали реализацией Dynamic Inventory. он вполне себе Static и (да использует спеку для Dynamic, но это подробности реализации). Pyventory — статический инвентори с валидацией и плюшками
Serge
вот например, можно описать прототип сервиса class Service(Asset): host = NotImplemented port = NotImplemented
Serge
и если ты потом сделаешь class MyAwesomeService(Service): host = 'example.com' то оно тебе даже не даст запустить ансибл с таким инвентори, потому что port объявлен, но не указан
Serge
а еще можно так: class Service(Asset): service_name = NotImplemented host = '{service_name}.example.com' class MyService(Service): service_name = 'awesome' и в итоге MyService.host разрешится в awesome.example.com
Serge
а еще круче вот так: class Service(Asset): service_name = NotImplemented host = '{service_name}.{domain}' class Env(Asset): domain = NotImplemented class Staging(Env): domain = 'staging.example.com' class MyService(Service): service_name = 'awesome' class MyServiceStaging(MyService, Staging): pass вжух
Serge
там потом надо инстансы создать и экспортнуть, но это стандартная тема, описано в ридми. с инстансами прикольно, что можно одну строку закоментить и его уже целиком нет, выключено
Serge
еще вот придумал сейчас такое делать service_pool = MyService() * 4 типа чтобы 4 штуки создать;)
Serge
еще вот придумал сейчас такое делать service_pool = MyService() * 4 типа чтобы 4 штуки создать;)
это пока не реализовано, но уже можно так: class Service(Asset): host = 'service-{n}' service_1 = Service(n=1) service_2 = Service(n=2)
Serge
это пока не реализовано, но уже можно так: class Service(Asset): host = 'service-{n}' service_1 = Service(n=1) service_2 = Service(n=2)
надо бы еще сделать service_pool = [Service(n=x) for x in range(4)] да, будет прикольно:)
Serge
мастер класс окончен, всем спасибо:)
Anton
кто-нибудь знает, есть ли такой плейбук или роль, который настраивает локальное окружение на федоре и устанавливает основные пакеты?
ithy
Any english speakers lurking?
Александр
кто-нибудь знает, есть ли такой плейбук или роль, который настраивает локальное окружение на федоре и устанавливает основные пакеты?
Если тебе действительно надо установить только пакеты и переменные - это две таски + with_items
Nklya
Например мой для макоси https://github.com/Nklya/macOS-setup
Aleksey
https://docs.ansible.com/ansible/devel/plugins/vars.html
Aleksey
какая интересная няшка
Womchik
что это ты решил доку почитать?
Albert
какая интересная няшка
Прикольно, может пригодится
Sergei
может кто-нибудь подсказать. Есть переменная в плейбуке, которая является ссылкой на deb пакет, но когда я указываю ее в apt: deb={{var}} то ansible пытается искать в локальной директории.
Sergei
--- - hosts: all tasks: - name: use vars apt: deb={{ubuntu1604}} vars: ubuntu1604: "https://apt.puppetlabs.com/puppet5-release-xenial.deb" debian8: "https://apt.puppetlabs.com/puppet5-release-jessie.deb" debian9: "https://apt.puppetlabs.com/puppet5-release-stretch.deb" debpackage: "{% if ansible_distribution_version == '16.04'%} {{ ubuntu1604 }} {% elif ansible_distribution_major_version == '9'%} {{debian9}} {% else %} {{debian8}} {%endif%}" Вот это вполне нормально отрабатывает
Sergei
а если я вместо ubuntu1604 подставлю debpackage, то он пытается искаль локальный файл, когда debpackage уже является ссылкой на нужный дистрибутив
Sergei
Не, я тут опечатался, в оригинальном debpackage стоит ))
Albert
Засунте все в роль, в tasks/main.yml: - include_vars: "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml"
Albert
Затем создайте файл под каждый дестрибутив + версию в папке vars
Sergei
Да не, распихать все по ролям, сделать несколько файлов - это понятно. Можно просто через when написать портянку. Но я хотел написать минимальную по строчкам роль. Но чет как то странно переменную он кушает...
Albert
И пропишите в каждом свой параметер "deb_package:"
Albert
Да не, распихать все по ролям, сделать несколько файлов - это понятно. Можно просто через when написать портянку. Но я хотел написать минимальную по строчкам роль. Но чет как то странно переменную он кушает...
Минимально на костылях? Такой код ансиблом не поддерживается (хоть и работает.. пока..) debpackage: "{% if ansible_distribution_version == '16.04'%} {{ ubuntu1604 }} {% elif ansible_distribution_major_version == '9'%}
Sergei
Это просто jinja template сразу засунутый в роль )) Все понятно же
Sergei
пчм он не будет потом поддерживаться? ))
dk
Притаскиваешь ансиблом паппет
Sergei
чего это толсто то?
Nklya
Это пример. Кому что нравится
Womchik
вот ни разу на макбуке не запускал. но это привычка имет виртуалку с запущенным тмуксом
Aleksey
Парни, есть такой вот кусок кода в инвентори. if "mongod" in services: # Elect master # As node with largest n_instances # and lowest address pri = sorted( services["mongod"], key=lambda ss: [-ss.n_instances] + [int(x) for x in ss.node.get_address().split(".")] )[0] r["svc-mongod-master"] = { "hosts": [pri.node.name] } r["_meta"]["hostvars"][pri.node.name]["has_svc_mongod_master"] = True # Add arbiter node when necessary r["svc-mongod-arbiter"] = {"hosts": []} if not len(services["mongod"]) % 2: r["svc-mongod-arbiter"]["hosts"] = [pri.node.name] r["_meta"]["hostvars"][pri.node.name]["has_svc_mongod_arbiter"] = True в кратце он выбирает "лидера" на основании списка данных серверов. хочу убрать этот кусок из инвентори и закинуть в плагин. но чот не могу сообразить какой это будет тип плагина. лукап ? как бы сделать это покрасивее?
Ievgen
Всем привет, а кто то вообще заморачивался при массовом поднятии инстансов в EC2 тегами с порядковым номером? И если да, есть желание потрещать на эту тему? Я вот заморачивался ибо надо, но натыкаюсь постоянно на всякие грабли, хочется узнать кто как еще эту задачу решал
Ievgen
фишка в том еще, что в какой то момент мне понадобилось поднимать инстансы максимально быстро и ec2 + with_что-то это медленно, а ec2: count=10 допустим означает внешнее переименование и потенциально совпадающие номера (с чем я один раз уже столкнулся - не так часто как могло бы быть, но тем не менее)
Ievgen
кроме как патчить ec2 модуль, может есть красивые варианты?
Ievgen
ну в общем если есть желание обсудить - вэлкам (если хоть кому то это интересно)
Dmitrii
Я делал
Dmitrii
Я плакал
Dmitrii
Я написал свой with_что-то модуль
Ievgen
эхх
Ievgen
ну вот короче я нашел кое что
Ievgen
http://toroid.org/ansible-parallel-dispatch
Ievgen
я как бы знал про async просто не связал все воедино так сказать
Ievgen
буду пробовать
Ievgen
посмотрим получится ли быстрее
Ievgen
а так конечно да, есть над чем поплакать
Ievgen
так как я не использую родной ec2.py а делаю динамические группы через ec2_instance_facts и add_host, я напилил разбор нужных тегов с номерами, расчет свободных/занятых через set_fact и на вход таску который вешает нужные теги на новоподнятые инстансы даю list с instance_id и делаю with_indexed_items, после чего из list со свободными порядковыми номерами беру номер с индексом равным индексу итема. Короче как то так )
Ievgen
сам лист с номерами генерится по правилам, так чтобы всем все хватало естественно
Ievgen
вот я думаю по поводу тераформ
Serge
вот я думаю по поводу тераформ
Ну, честно говоря, со списками сущностей там тоже не особо удобно, но немного проще имхо. По крайней мере, более-менее в общей конве со всем остальным.
Ievgen
ясно, ну я попробую пока асинхронно запускать, сразу с именем правильным и буду поглядывать на тераформ начинать
Aleksey
господа почему galaxy такое дно ?
Aleksey
ansible-galaxy где блин update ?
Aleksey
multiple facepalm.
john
ну галакси дно - это всем известно
Danila
Я для себя уяснил вообще, что лучше самому роль написать ))
matt
чтобы было заебись надо делать самому
matt
нормально делай - нормально будет
Danila
Sergey
ansible-galaxy где блин update ?
а потом ты такой апдейтишь и тебе приезжает breaking change. И чонть раскатать надо срочно.
Aleksey
там смешно
Aleksey
update это ansible-galaxy install --force
Aleksey
я галакси не для чужих хочу а для своих.
Aleksey
впрочем командой ansible-galaxy можно пользоваться и без galaxy
Nklya
Внезапно
Aleksey
да для правильного скачивания ролей.
Aleksey
а на вход команде можно дать Yml файлик с описанием чо дёргать
Vladimir
да я тут зашёл в репозиторий ansible и увидел 3400 isuues и погрустнел https://github.com/ansible/ansible/issues