Владимир
спасибо, мне такая инфо и нужна была
Ivan
- name: remove web dir contents file: path: "{{ item }}" state: absent with_fileglob: - "/home/mydata/web/*"
Здесь нет рекурсии, а вариант с synchronize требует rsync Выходит, command/shell всё лучше
Артём
Загрузить созданный плейбук в приватный репозиторий по его окончанию
Я слоупок, но. Мне кажется, или эту часть не нужно делать ансиблом? В смысле, не «напишите плейбук, который будет грузить себя в гит», а «напишите плейбук и загрузите его в гит».
Udjin
Парни, а подскажите нубский вопрос: Если nginx не рестартанул игнорь упади на следующей команде как этого добиться? вот пример - name: Restarting nginx service: name: nginx state: restarted register: nginx_restart ignore_errors: True - name: Nginx status shell: nginx -t register: nginx_status failed_when: "'error' in nginx_restart.stderr" - debug: msg="{{nginx_status}}" оно мне пишет "The conditional check ''error' in nginx_restart.stdout' failed. The error was: error while evaluating conditional ('error' in nginx_restart.stdout): Unable to look up a name or access an attribute in template string ({% if 'error' in nginx_restart.stdout %} True {% else %} False {% endif %}).\nMake sure your variable name does not contain invalid characters like '-': argument of type 'AnsibleUndefined' is not iterable"
inqfen
Ну как минимум двойные кавычки убери
inqfen
Это темплейт, а не строка
Udjin
убрал, ответило
Udjin
говорит вернуть)
inqfen
А, с in да, нужны, я туплю
Udjin
гугл говорит надо юзать блоки, хотя я хз, нафига там в блок оборачивать, для такой простой задачи
Udjin
поверить не могу что в 2к20 ещё не изобрели такого
A
Посоветуйте, пожалуйста, не слишком сложный UI для ансибла - бесплатный и с scheduler'ом
inqfen
зачем для него UI?
inqfen
поверить не могу что в 2к20 ещё не изобрели такого
Вообще думаю тебе проще сделать просто failed_when: nginx_restart.stderr
A
Чтобы в консоли не возиться. Смотрел на Semaphore, Polemarch, Rundeck, AWX, но хз насчёт плюсов-минусов
inqfen
Потому что если есть ошибка - то stderr не пустая строка
inqfen
Соответственно true
Udjin
Потому что если есть ошибка - то stderr не пустая строка
я уже закостылил, оно делает то что нужно
inqfen
Если ошибок нет - то пустая, то есть false
Udjin
Соответственно true
кинуть решение?
Udjin
- name: Restarting nginx block: - name: Barada service: name: nginx state: restarted ignore_errors: True always: - name: Nginx status shell: nginx -t register: nginx_status - name: Message debug: msg: "{{nginx_status}}" any_errors_fatal: true короче вот - оно работает. Если ошибка при рестарте - оно падает на shell и выводит аутпут. Если всё ок - то всё ок)
Отделение Bereke Bank
Посоветуйте, пожалуйста, не слишком сложный UI для ансибла - бесплатный и с scheduler'ом
Я использую AWX. Есть два неудобства 1) group_vars/all не синхронизируются с гитом. Может уже починили но не хочу проверять 2) иногда он зависает. На ровном месте. Любая таска висит pending. Но это началось только после обновления до 9.1.0. Может потом исправят
A
Коммитишь в гит - твой jenkins/gitlab/etc запускает
Ничего такого нет, мне управление сетевыми железками автоматизировать, а не девопсить
inqfen
И что, у тебя конфиги для железок не в гите?
inqfen
Я сам в провайдере работал и все управление железками было с гитом
A
И что, у тебя конфиги для железок не в гите?
В todo листе положить их в локальный гит, пока они oxidized'ом просто в папку складываются, чтобы NMS мог показывать... Но в любом случае по сути хочется только webui управление инвентарём и плейбуками да планировщик 🤔
inqfen
Юзай AWX, но как по мне, такой подход - изначально крив
inqfen
Проще сразу нормально сделать
inqfen
Надо запустить - запускаешь со своего CD пайплайн
inqfen
И ни на каком сервере ничего не живет
inqfen
Гитлаб развернуть в докере 15 минут
inqfen
Ну еще на донастроить/поковырять день
A
Где почитать best practices? Что даст гитлаб? Мне выдали сеть прост типа "на, администрируй". Есть одна виртуалка в корпоративной vsphere под это дело, сейчас там LibreNMS, oxidized тянет конфиги для него, и собственно ansible на данный момент имеет один плэйбук, который запускается cron'ом для бэкапов с железок в .tar. И без докера, да.
inqfen
по всему интернету
Tekitai
Привет товарищи. Дэбильный вопросик. Ансибл дестрибьютит с помощью модуля Authorized_keys ссш ключи по хостам - все ок. Маленько необычная задача для меня. - Все хосты в системе имеют разный юзернейм. Как правильно сказать модулю, что надо использовать переменную ansible_user для понимания имени пользователя? (В хост файле все юзернеймы есть)
Tadeusz
через host vars например?
Tekitai
через host vars например?
Понял, попробую
Vladislav 👻
И как запускаешь
Petr
Подскажите кто чем (с помощью каких модулей или костылей) копирует большие файлы (100Гб+), так чтобы не возникало проблем с оом?
Николай
На целевом хосте запускаю nc -l | dd, на источнике — dd | nc. Ансиблом, ага. until: ждёт, пока отработает.
inqfen
А если интернеты флапнут на 80 гб?
Николай
Если через интернеты — то веб-сервер и get_url
Николай
Да не за что. Пример реализации https://github.com/nbw74/playbooks/blob/trunk/tasks/migrator_transmit.yml
Артём
Подскажите, пожалуйста. С полным пониманием, что делаю странное, программирую на ansible и вообще лижу стакан. Раньше в плейбуке обновления сервиса использовал отдельные плеи на балансеры для ввода-вывода обновляемых сервисов, в этих плеях с помощью command вызывался скрипт, и changed_when определялся его results.stdout. Решил переделать на delegate_to с nested_loop, теперь выводом получаю, что логично, другой словарь, у которого нет на первом уровне results.stdout, но вот структуру его понять не могу. Вот его вывод в дебаге: ok: [delegate1] => { "msg": { "changed": true, "msg": "All items completed", "results": [ { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "ansible_loop_var": "item", "changed": true, "cmd": [], "delta": "0:00:00.024429", "end": "2020-04-05 20:00:39.029649", "failed": false, "invocation": { "module_args": {} }, "item": [ "host1", "delegate1" ], "rc": 0, "start": "2020-04-05 20:00:39.005220", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": [] } ] } } ok: [delegate2] => {…
Артём
Сохраняется результат в register: disable_result, и я как-то надеялся, что оно будет в disable_result.{{ item[1] }}.stdout, но нет, 'dict object' has no attribute 'delegate1'
Sergey
Сохраняется результат в register: disable_result, и я как-то надеялся, что оно будет в disable_result.{{ item[1] }}.stdout, но нет, 'dict object' has no attribute 'delegate1'
Это так не делается. Ты не можешь обратиться к методу объекта, просто подставив его название через шаблонизатор.
Артём
Это так не делается. Ты не можешь обратиться к методу объекта, просто подставив его название через шаблонизатор.
Может быть, можно пройтись по всем элементам первого уровня и их stdout’ам? Мне, в целом, changed_when нужен когда хотя бы в одном из них есть изменения.
Sergey
@aiwoosha учитывая твоё понимание про странное, стакан и вот это вот всё..... У тебя структура несколько странная, должна быть такая: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#registering-variables-with-a-loop
Sergey
Ога, пожалуйста.
Артём
Странная потому что по ссылке вывод обычного, а не nested, loop’а.
Sergey
Но тут вообще на вывод loop не похоже.
A
Какие есть способы отслеживания проваленных на хостах тасков (например, хост unreachable) и последующего перезапуска плэйбука для таких хостов из коробки? Пока что есть только мысль добавлять по мере выполнения какие-то флаги в инвентарь или host_vars.
Ждун
так логи пиши
A
Логи потом парсить на предмет failed, выделять failed хосты в группу или отдельный инвентарь - те же яйца, только в профиль. Наверняка же прорабатывался сценарий, в котором часть хостов недоступны 🤔
A
ансибл же сам создает файл .retry
Спасибо! Покопаю. По дефолту не создаёт, правда, судя по доке. Но хуже доки только поиск по ней))
Alex
а есть какая то принципиальная разница между объялением переменных в roles/vars или roles/defaults кроме как приоритетов?
Dr. L.S.Dee
Зайдем издалека. Зачем нужны значения по умолчанию ('defaults') ?
Dr. L.S.Dee
Alex
та по разному
Alex
1. Для дефолтных значений 2. Для возможности переопределять их и получить динамическую роль
Dr. L.S.Dee
Но если значения этих переменных так или иначе во всех случаях у вас будут (или вы предполагаете, что будут) одни и те же, то, наверное, можно объявить их и в дефолтах.
Dr. L.S.Dee
Вот.
Dr. L.S.Dee
Если переменные а) используются во всех ролях; б) скорее всего, значения одни и те же (хотя можно переопределить явно, да). Впрочем, я могу ошибаться.
Lamobot
а есть какая то принципиальная разница между объялением переменных в roles/vars или roles/defaults кроме как приоритетов?
Разница в порядке переопределения. https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable Если в defaults роли переменные легко переопределяются через host/group/playbook_vars , то в vars роли переменные переопределить уже сложнее (да и не нужно). defaults - для переменных по умолчанию, которые нужны в роли, и которые можно переопределять с group/host_vars vars - для внутренних переменных роли, которые извне не задаются, но используются в роли (как пример разные переменные для разных ОС итп)
Sergey
^^^ +++
Дмитрий Харитонов
Подскажите способ получить списком папки куда смонтированы диски за исключением / и /boot.