Alex
тогда еще как вариант - name: Test set_fact: distrib: "{{ distrib | d([]) + [item] }}" loop: "{{ example }}" when: template in item register: res - debug: msg="{{ (res.results | last)['ansible_facts']['distrib'] }}"
Alex
без json_query
Denis
я сейчас может странное спрошу: ансибл из пип’а пропал? 2.9.9 у меня ещё из пипа стоит
Lamobot
я сейчас может странное спрошу: ансибл из пип’а пропал? 2.9.9 у меня ещё из пипа стоит
Уверены? pip install --user --upgrade ansible Collecting ansible Downloading ansible-2.9.13.tar.gz
Denis
апгрейдом - да инсталлится новая версия
George
https://pypi.org/project/ansible/#description
George
Тут все есть, врут, черти ?
George
@tnt4brain в чем разница между ансиблом и redhat ansible engine ?
George
Никто же ведь вторым не пользуется
Sergey
👀
Отделение Bereke Bank
George
Хз
George
Типа стабильная штука на базе ансиболи
Отделение Bereke Bank
Так куда ещё стабильнее?)
Отделение Bereke Bank
Хотя не. С проблемы с openssl модулями на центоси в свое время у меня сильно горела жепа
Sergey
@tnt4brain в чем разница между ансиблом и redhat ansible engine ?
Все зоопарковые модули в поддерживаемых коллекциях, но это не точно.
Sergey
В 2.10 же кучу всего повыкидывали, а в поддерживаемой версии всё выброшенное есть искаропки.
Alex
@tnt4brain tranfer_method - а какие вообще значения есть и чем они отличаются? В доке что то не нашел
Sergey
В статье ссылка
Sergey
Alex
Ну исходники так себе ссылка
George
Ну исходники так себе ссылка
А что ты хотел ? Дословную цитату из документации?
Alex
Описание опций и для чего кпждый из параметров
Alex
А не делать предположения и дргадки на основе исходников
Alex
Чета ржу
И не говори - документация для слабаков :D
Alex
Тру админы сразу читают исходники
George
И не говори - документация для слабаков :D
а что делать, если она всегда запаздывает
George
@tnt4brain няштяк - пайплайн ci/cd на ансибле
George
https://zuul-ci.org/docs/zuul/tutorials/quick-start.html
Sebor▂▅▇█▓▒░
Ахонь же!
Yks
Что же можеть быть не так? {"msg": "The task includes an option with an undefined variable. The error was: 'str object' has no attribute 'user' . . . - name: Add users. user: name={{ item.user }} shell=/bin/bash append=yes groups={{ item.groups|default(omit) }} register: add_users_register loop: - "{{ ssh_deployers|default([]) }}" - "{{ ssh_admins|default([]) }}" - "{{ ssh_users|default([]) }}" Должен по идее дефолт отрабатывать
Я и твой кот
@tnt4brain няштяк - пайплайн ci/cd на ансибле
Для CD он не очень подходит.
Я и твой кот
Для CI я ничего лучше не видел.
A
Ты используешь точку, ансибл резонно думает, что item - nested variable. А в дефолте плоский список
SO: - hosts: 'localhost' tasks: - debug: msg: "{{ ((a | default({})).nested | default({}) ).var | default('bar') }}"
Владимир
Подскажите, пожалуйста: При деплоии node exporter на какой нибудь инстанс, как мне рассказать мониторинг хосту, что с того инстанса надо скрапить метрики?
George
чо
George
прометеус подключить
George
я вообще просто в конфиг прометеуса затаскивал айпишники группы узлов
Lamobot
Подскажите, пожалуйста: При деплоии node exporter на какой нибудь инстанс, как мне рассказать мониторинг хосту, что с того инстанса надо скрапить метрики?
Хосты, на которые деплоите node exporter объединяете в группу. После деплоя, из группы хостов формируете конфиги прометеуса
George
prometheus_targets: node: - targets: "{{ groups['monitoring'] | map('extract', hostvars, ['ansible_host']) | map('regex_replace', '$', ':9100') | list }}" labels: env: monitoring
George
примерно так
Владимир
спасибо
Max
Всем привет. Можно ли в плейбуках использовать * в пути назначения? суть - надо положить конфиг в профиль firefox. при каждой инсталляции имя профиля firefox меняется. поэтому хочется писать путь как /home/user/.mozilla/*.default-default не хочу хардкодить имя профиля в плейбуку, чтобы плейбука была обобщённая и раскатывать всё одним движением руки в bash и sh это работает sh-4.4# ls /home/monitoring/.mozilla/firefox/*.default-default/prefs.js /home/monitoring/.mozilla/firefox/q7zsbkhi.default-default/prefs.js а в ансибле не работает fatal: [monitoring-pc]: FAILED! => {"changed": false, "checksum": "3a118c7c88ef61b0f3cd54098968cf360bdb67c8", "msg": "Destination directory /home/monitoring/.mozilla/firefox/*.default-default does not exist"} таска вот такая - name: Render Firefox config template: src: prefs.js.j2 dest: "/home/{{ work_user }}/.mozilla/firefox/*.default-default/prefs.js"
Grek 🇺🇦
Всем привет. Можно ли в плейбуках использовать * в пути назначения? суть - надо положить конфиг в профиль firefox. при каждой инсталляции имя профиля firefox меняется. поэтому хочется писать путь как /home/user/.mozilla/*.default-default не хочу хардкодить имя профиля в плейбуку, чтобы плейбука была обобщённая и раскатывать всё одним движением руки в bash и sh это работает sh-4.4# ls /home/monitoring/.mozilla/firefox/*.default-default/prefs.js /home/monitoring/.mozilla/firefox/q7zsbkhi.default-default/prefs.js а в ансибле не работает fatal: [monitoring-pc]: FAILED! => {"changed": false, "checksum": "3a118c7c88ef61b0f3cd54098968cf360bdb67c8", "msg": "Destination directory /home/monitoring/.mozilla/firefox/*.default-default does not exist"} таска вот такая - name: Render Firefox config template: src: prefs.js.j2 dest: "/home/{{ work_user }}/.mozilla/firefox/*.default-default/prefs.js"
В баш у тебя работает ls, для которого * приемлемая конструкция в адресе. В ансибле ты используешь темплейт. Он такого не любит. Рекомендую через модуль find получать текущий профиль, а потом подставлять его в ткмплейт
Max
https://serverfault.com/questions/578544/deploying-a-folder-of-template-files-using-ansible
я чёт не оч понимаю, как применить советы от туда. там они пытаются переносить всю директорию с содержимым и откидывать .j2 от шаблонов регуляркой.
Grek 🇺🇦
Это влечет за собой ровно 1 таск
Max
я имел ввиду архитектурно. бывает же, что новички придумывают какие-то велосипеды, хотя есть нативные функции у приложения. но спасибо за совет, буду реализовывать
Oleg
Привет, парни. Помогите пож-та разобраться с проблемой. Есть два идентичных сервера, софт один и тот же на борту. При запуске джоба на одном сервере все норм отрабатывает, на другом ошибка "E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)", "E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?" Плэйбук - name: Install and configure ntp hosts: habr_linux become_user: sudo tasks: - name: Install ntpdate apt: name: ntpdate state: present Переменные ansible_user: **** ansible_ssh_private_key_file: ****
Oleg
может сходить на серв и проверить можно ли стать sudo от юзера, от которого ходит ансибл?
sudo установлено. Проверял. Просто на другом таком же сервере отработал плэйбук.
Отделение Bereke Bank
become_user: sudo это точно то что ты хочешь?
Max
sudo установлено. Проверял. Просто на другом таком же сервере отработал плэйбук.
ну т.е. на этом проблемном сервере ты сейчас получаешь ошибку в ансибл и можешь вручную запустить установку пакетов тоже сейчас? в порядке бреда: может там ещё какой-то процесс dpkg висит?
Oleg
become_user: sudo это точно то что ты хочешь?
делал become: true. Ансибл ругался на отсутствие пароля sudo.
Grek 🇺🇦
делал become: true. Ансибл ругался на отсутствие пароля sudo.
так у тебя надо либо задать пароль для судо в ансибле. илбо для ансибл юзера сделать nopassword в судоерс
Vadim "Oxyd"
так у тебя надо либо задать пароль для судо в ансибле. илбо для ансибл юзера сделать nopassword в судоерс
Кстати какой из этих двух вариантов более идеологически правильный?
Grek 🇺🇦
идеологически - наверное второй, а то средство автоматизации у которого нет прав это всегда костыли, но при это м стоит учитывать реалии. Если можете сразу деплоить так чтоб у пользователя мождно было давать нужное права - деплойте. Если это существующие хосты - выкручивайтесь указанием беком пасворд в конфиге ансибла
Вячеслав
Подскажите как команду в плейбуке описать /usr/java/jdk1.8.0_152/bin/jcmd `pgrep -f Bootstrap` VM.unlock_commercial_features; Использую модуль шелл, как я понимаю проблема в апострофах
Отделение Bereke Bank
загрузи скрипт со своей командой и запусти его
Вячеслав
а модульно нельзя?
Вячеслав
знает
Вячеслав
shell: '/bin/bash -c /usr/java/jdk1.8.0_152/bin/jcmd $(pgrep -f Bootstrap) VM.unlock_commercial_features;
Вячеслав
вот так сделал
Max
Это влечет за собой ровно 1 таск
не получается в 1 таск. как сделать в 1? - name: Find Firefox profile path part 1 find: path: /home/{{ work_user }}/.mozilla/firefox file_type: directory patterns: '*.default-default' register: firefox_path_tmp - name: Find Firefox profile path part 2 set_fact: firefox_profile: "{{ item.path }}" with_items: "{{ firefox_path_tmp.files }}"
Grek 🇺🇦
убрать - name: Find Firefox profile path part 2 set_fact: firefox_profile: "{{ item.path }}" with_items: "{{ firefox_path_tmp.files }}" и прям в таске где вы меняете файл, или что вы там делаете использовать firefox_path_tmp.path