Terry
добрый день какие бест практики по поиску и удалению из файла нескольких строк конфига, само собой на удаленных серверах ? есть код в файле nginx.conf: log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"body_bytes_sent": $body_bytes_sent, ' '"request_time": $request_time, ' '"response_status": $status, ' '"request": "$request", ' '"request_method": "$request_method", ' '"host": "$host",' '"upstream_cache_status": "$upstream_cache_status",' '"upstream_addr": "$upstream_addr",' '"http_x_forwarded_for": "$http_x_forwarded_for",' '"http_referrer": "$http_referer", ' '"http_user_agent": "$http_user_agent" }'; # replace the hostnames with the IP or hostname of your Graylog2 server access_log syslog:server=ip:12301 graylog2_json; error_log syslog:server=ip:12302 error; как его найти и удалить? обносить регулярками?
Terry
https://docs.ansible.com/ansible/2.6/modules/lineinfile_module.html
Terry
как тут
bebebe
все ОЧЕНЬ плохо
bebebe
добрый день какие бест практики по поиску и удалению из файла нескольких строк конфига, само собой на удаленных серверах ? есть код в файле nginx.conf: log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"body_bytes_sent": $body_bytes_sent, ' '"request_time": $request_time, ' '"response_status": $status, ' '"request": "$request", ' '"request_method": "$request_method", ' '"host": "$host",' '"upstream_cache_status": "$upstream_cache_status",' '"upstream_addr": "$upstream_addr",' '"http_x_forwarded_for": "$http_x_forwarded_for",' '"http_referrer": "$http_referer", ' '"http_user_agent": "$http_user_agent" }'; # replace the hostnames with the IP or hostname of your Graylog2 server access_log syslog:server=ip:12301 graylog2_json; error_log syslog:server=ip:12302 error; как его найти и удалить? обносить регулярками?
shell: "sed -i'' '/log_format graylog2_json escape=json/,/error_log syslog:server=ip:12302 error;/d' nginx.conf" лучшего не дано
Aleksandr
а почему не https://docs.ansible.com/ansible/2.6/modules/lineinfile_module.html ?
Aleksandr
там же поиск по регулярке и state absent
bebebe
там же поиск по регулярке и state absent
я предположил что нужно удалить строки между двумя паттернами
Sergey
а почему не https://docs.ansible.com/ansible/2.6/modules/lineinfile_module.html ?
я бы сказал - https://docs.ansible.com/ansible/2.6/modules/blockinfile_module.html
Sergey
прям этот блок туда ухнуть
Anonymous
Подскажите пожалуйста. Есть у меня таска на обновление всех пакетов в ОС. И есть несколько групп серверов, на которых нужно исключить определённые пакеты из списка обновляемых. Решается в принципе таким образом - https://gist.github.com/RenderQwerty/dc70a6927d6313f2b36a9d7d486f8fe2 Вопрос вот в чём - каким образом можно добиться того, чтобы этот таск выполнялся корректно на остальных серверах, где нет никаких пакетов в exclude? Сейчас на таких ansible логично падает с ошибкой, что exclude_soft'' is undefined'
Anonymous
сам exclude_soft задаётся в group_vars, там где нужно
Mikhail
возможно, уже спрашивали, но 10к сообщений листать не вариант. Как более удобно в инвентори расписать сотню хостов по разным группам? Причем один хост может быть в одной или нескольких группах. Без дублирования никак?
Anonymous
в видюшках есть
Anonymous
вон выше закреплены
Mikhail
пока рабочая идея: отдельно файл в инвентори со списком хостов в yaml-формате и отдельно файлики с группами в формате [groupname]
Div
добрый день, коллеги. подскажите пожалуйста, возможно ли подменить переменную в цикле если условие не соблюдено?
Div
для примера, я стягиваю с сервера кучу репов гит и все должны быть в ветке dev но в одном эта ветка просто не существует и цикл падает
Vadim
надо failed_when указывать и там решать когда таске падать а когда нет
O
народ, а кто в курсе что это может быть за прикол когда в версии 2.6.4 на include_tasks вешаешь when: inventory_hostname in groups['test1','test2','test3'] кидает ERROR что типа использую тиРе.... если оставляю только test1 группу все нормально проходит... есть предположение ?
O
откат на 2.5.6 - и о чудо, все работает... что же снова сломали ?!
O
на 2.5.6 я сидел - все работало, решил обновиться - огреб нежданчиков, в changelog есть только фиксы core modules, ну то есть меня по большей степени обновление само не затронуло. Кроме вот таких нежданчиков
O
подозреваю что они какие-то неочевидные
O
Version 2.6 is largely going to be a stabilization release for Core code. Some of the items covered in this release, but are not limited to are the following: ansible-inventory import_* include_* Test coverage Performance Testing
inqfen
Всем привет
inqfen
А можно ли в таск загнать переменную таким образом - name: module docker-container: {{var}}: {{var2}} ?
inqfen
Конкретно в этом примере - где-то нужен expose, а где-то ports
inqfen
Чтобы не плодить пустые переменные
bebebe
попробуйте ковычки
Vadim
только если отдельно соберешь параметры в dict и передашь его в docker-container
inqfen
Все равно говорит, что у модуля нет параметра {{var}}
bebebe
а это вы хотите как параметр модулю передать, тогда не выйдет
bebebe
если очень хочется, то можно затемплейтить, и потом заинклудить
bebebe
и никому не показывать
inqfen
печально, как-то они это не продумали, с учетом того, что параметры могут требоваться разные
bebebe
ну это метапрограммирование уже
bebebe
тут с jinja2 фильтрами проблемы возникают 😉
Alesha
вопрос, где можно поглядеть плейбуки для винды?
cent
вопрос, где можно поглядеть плейбуки для винды?
github ? ansible windows site:github.com Хотя, я не уверен, что там будет так же красиво как для linux )
Constantin
они почти такие же как и для всего остального, только модули с префиксом win_
Alesha
хмм, спасибо
inqfen
вопрос, где можно поглядеть плейбуки для винды?
А чего на них смотреть, они особо не отличаются
Aleksey
А можно ли в таск загнать переменную таким образом - name: module docker-container: {{var}}: {{var2}} ?
- name: Create cron.d file cron: name: '{{ item.name }}' cron_file: '{{ item.cron_file | d(omit) }}' minute: '{{ item.minute | d(omit) }}' hour: '{{ item.hour | d(omit) }}' user: '{{ item.user | d("root") }}' job: '{{ item.job }}' with_items: - { name: "backup_nvr", cron_file: "backup_nvr", minute: "59", hour: "2", job: "/usr/local/bin/nvr_backup.py docker" } может вот так пойдёт
Maksim
Всем привет. Есть такая таска https://pastebin.com/g5xgUG75 значения setup_mode и mainrole определяются в inventory. В данном виде условие не отрабатывает, но если указать так setup_mode == "yes" or ( mainrole == "frontend" or mainrole == "balancer" ) то условие обрабатывается и таска выполняется. Подскажите, пожалуйста, почему оно может игнорироваться в оригинальном случае (см.код)?
Sergey
Всем привет. Есть такая таска https://pastebin.com/g5xgUG75 значения setup_mode и mainrole определяются в inventory. В данном виде условие не отрабатывает, но если указать так setup_mode == "yes" or ( mainrole == "frontend" or mainrole == "balancer" ) то условие обрабатывается и таска выполняется. Подскажите, пожалуйста, почему оно может игнорироваться в оригинальном случае (см.код)?
Не надо так. Список каталогов передавай как параметр-переменную в роль, а в inventory через group_vars обозначь, что для двух указанных групп эти списки есть, а для остальных - нет. Тогда проверка с when сильно упростится, если не сказать - исчезнет (цикл по пустому списку не будет выполняться вообще ни одного раза).
Div
господа, доброго дня. кто знает как сделать банальный перебор переменных для таска?
O
with_items
только для списков, не ?
Danis
только для списков, не ?
Нет, если использовать item.key Тогда в vars должно быть такое: mainvar: var1: gghh var2: dghtrr
O
словари - да... но наверное он имел ввиду все переменные таска ?
Pavel
заранее извиняюсь за тупой вопрос - replace если не находит выражение вообще ничего не делает или в конец файла добавляет?
Pavel
Ничего не добавляет
спс, это как бы ожидаемо...
Евгений
спс, это как бы ожидаемо...
в конец lineinfile ставит, или куда укажешь.
Pavel
если не находит после какой строкой ставить - в конец
Евгений
если не находит после какой строкой ставить - в конец
Вот это не уверен, он же регекс ищет - а значит саму строку, а не соседние.
Pavel
Вот это не уверен, он же регекс ищет - а значит саму строку, а не соседние.
он ищет "после какой" вставить, а когда не находит - ставит в конец
Евгений
А, не вниматено прочитал. Это да.
O
список - тебе выше кинули with_items, словарь также
Div
спасибо
Евгений
он ищет "после какой" вставить, а когда не находит - ставит в конец
У меня целая костыльная эпопея с этими модулями) replase я использую чтоб удалить искомую строку, если она закоментирована, следующий replase ищет эту же строку если она не закоментирована и мне не нравится параметр (active = yes например) и в конце lineinfile - если этой строки вообще ни в каком виде нет, и нужно добавить. https://pastebin.com/fGaKLKzc
Евгений
а регулярку состряпать универсальную не пробовал?
Редектируя неизвестный мне файл заранее нельзя было сказать, есть там строка или нет, чтоб однозначно использовать либо replase либо lineinfile. По отдельности минусы - replase -не добавит строку, lineinfile - не раскоментирует, хотя возможно, это мои придирки. Основная проблема в том, что если lineinfile не находит точно строку как я описал regexp-ом, он добавит новую. А в существующей строке может просто параметры местами были поменяны. Получаются 2 строки описывающие одно и то же. И ошибка перезапуска сервиса. Поэтому такие костыли.
Sergey
Зрите в корень)
Отнюдь. Скорее предупреждаю о боли ;-)
Евгений
Отнюдь. Скорее предупреждаю о боли ;-)
Хорошо, я перестану называть свое решение костылем и скажу, что так я ответственно обработал большинство исключений)
Nklya
кривые абстракции имеют свойство протекать, а потом вся индустрия в 💩
Евгений
Взорвётся на сроках хотя бы от года.
Поэтому ценится только опыт. Больше опыта - больше обработанных заранее исключений.