Владимир
спасибо, мне такая инфо и нужна была
Ivan
Desdichado
Timur
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?
A
Чтобы в консоли не возиться. Смотрел на Semaphore, Polemarch, Rundeck, AWX, но хз насчёт плюсов-минусов
inqfen
Потому что если есть ошибка - то stderr не пустая строка
inqfen
Соответственно true
Udjin
inqfen
Если ошибок нет - то пустая, то есть false
Udjin
inqfen
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 и выводит аутпут. Если всё ок - то всё ок)
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
по всему интернету
Udjin
Tekitai
Привет товарищи. Дэбильный вопросик. Ансибл дестрибьютит с помощью модуля Authorized_keys ссш ключи по хостам - все ок. Маленько необычная задача для меня. - Все хосты в системе имеют разный юзернейм. Как правильно сказать модулю, что надо использовать переменную ansible_user для понимания имени пользователя? (В хост файле все юзернеймы есть)
Tadeusz
через host vars например?
Tekitai
Денис
Антон
Vladislav 👻
Vladislav 👻
И как запускаешь
Petr
Подскажите кто чем (с помощью каких модулей или костылей) копирует большие файлы (100Гб+), так чтобы не возникало проблем с оом?
Николай
На целевом хосте запускаю nc -l | dd, на источнике — dd | nc. Ансиблом, ага. until: ждёт, пока отработает.
inqfen
А если интернеты флапнут на 80 гб?
Николай
Если через интернеты — то веб-сервер и get_url
Petr
Николай
Да не за что. Пример реализации 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
Sergey
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 хосты в группу или отдельный инвентарь - те же яйца, только в профиль. Наверняка же прорабатывался сценарий, в котором часть хостов недоступны 🤔
Никита
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
Если переменные а) используются во всех ролях; б) скорее всего, значения одни и те же (хотя можно переопределить явно, да).
Впрочем, я могу ошибаться.
Alex
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
^^^ +++
Alex
Дмитрий Харитонов
Подскажите способ получить списком папки куда смонтированы диски за исключением / и /boot.
username