Andor
да не, ретраев сделаю, пусть долбится
Дойду до дома - скину пример кода, как я это делаю сейчас
Sergei
Ретрай на проверку хелсчеков - это нормально
ладно, умеешь уговорить. Сделал с хелсчеком. Посмотрим сейчас как оно роботое
Anonymous
@Andorka , вспоминаю про --- в начале каждого yml файла. оно сейчас нужно, нет?
Anonymous
Почему ты у меня спрашиваешь?
хотел продолжить тему про yaml программирование. много было странного и сейчас есть странное в тех же фильтрах
Andor
Каких фильтрах? В yaml нет фильтров
Anonymous
Каких фильтрах? В yaml нет фильтров
да, неверно выразил мысль. В python/jinja2 фильтрах, которые в yaml
Egor
--- - по спеке должно быть, как метка начала файла, ибо в ямле может дофига файлов бандлом быть
Sergey
^^^ ++++++++
Egor
то, что ансиблу пофиг - уже дело десятое, и так делать не надо
Egor
контента
Andor
Забыл как называется
Anonymous
Не файла ;)
какой дотошный ))
Egor
сути этого не меняет
Alex
подскажите, service_facts возвращает такие данные xray-indexer: name: xray-indexer source: sysv state: running xray-indexer.service: name: xray-indexer.service source: systemd state: stopped как все таки определять, сервис запущен или нет?
Egor
ну это как гопники в моём городе раньше докапывались в стиле "ты с какого года? 85-того? а спорим ты пиздишь? ты с 1985"
Andor
документа
Точно, документ. А в одном стриме (файле) может быть более одного документа
Egor
если системд - то у неё
Egor
source же подписан
Alex
просто смущает тот факт, что у 2х сорсов разные стейты для одного и того же сервиса
Aleksey
то, что ансиблу пофиг - уже дело десятое, и так делать не надо
пример можно чего угодно для ансибла - плейбука, роли, таск/вар файла? Где реально использовалось начало второго фрагмента.
Aleksey
Не для того чтобы поспорить, а из реального интереса.
🦆Nikita
Привет! Может кто знает как сделать. Нужно искать в цикле имя файла в папке пока не будет хоть 1 совпадение. Имя берёться из json массива. Пробывал так: - name: 19. Поиск файла конфигурации узла wait_for: path: /etc/ansible/roles/win_backup/tmp/{{ item }} timeout: 300 msg: "Not find file IP for {{ inventory_hostname }}" loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined register: check_file delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item.macaddress }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json).ansible_interfaces }}" # register: check_file # delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # with_first_found: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" # when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined # register: check_file # delegate_to: 127.0.0.1
Aleksey
У меня просто такой необходимости не было и в чужих ролях я такого не видел.
Sergey
Привет! Может кто знает как сделать. Нужно искать в цикле имя файла в папке пока не будет хоть 1 совпадение. Имя берёться из json массива. Пробывал так: - name: 19. Поиск файла конфигурации узла wait_for: path: /etc/ansible/roles/win_backup/tmp/{{ item }} timeout: 300 msg: "Not find file IP for {{ inventory_hostname }}" loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined register: check_file delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item.macaddress }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json).ansible_interfaces }}" # register: check_file # delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # with_first_found: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" # when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined # register: check_file # delegate_to: 127.0.0.1
Как задача выглядит?
Egor
пример можно чего угодно для ансибла - плейбука, роли, таск/вар файла? Где реально использовалось начало второго фрагмента.
не видел, но это не отменяет необходимости соотвесттвовать стандарту yaml, раз он используется
Aleksey
Просто если инструменту на это всё-равно, и необходимости задействовать это тоже нет, то.. зачем? Вот забрал ты например из гелакси роль, а там нет --- - ты будешь их туда добавлять?
Timur
Привет! Может кто знает как сделать. Нужно искать в цикле имя файла в папке пока не будет хоть 1 совпадение. Имя берёться из json массива. Пробывал так: - name: 19. Поиск файла конфигурации узла wait_for: path: /etc/ansible/roles/win_backup/tmp/{{ item }} timeout: 300 msg: "Not find file IP for {{ inventory_hostname }}" loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined register: check_file delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item.macaddress }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # loop: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json).ansible_interfaces }}" # register: check_file # delegate_to: 127.0.0.1 # - name: 19. Поиск файла конфигурации узла # wait_for: # path: /etc/ansible/roles/win_backup/tmp/{{ item }} # timeout: 300 # msg: "Not find file IP for {{ inventory_hostname }}" # with_first_found: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }}" # when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ item }}) | from_json).ip is undefined # register: check_file # delegate_to: 127.0.0.1
Господи, какая дичь. А можно узнать суть задачи исходной?
Timur
И если там косяки, то роль теряет score из-за штрафных баллов
Sergey
Просто если инструменту на это всё-равно, и необходимости задействовать это тоже нет, то.. зачем? Вот забрал ты например из гелакси роль, а там нет --- - ты будешь их туда добавлять?
Ну если ты к себе тянешь в проект роль - да, стоит смотреть и доводить до нормы. Иначе можно налипнуть на сложности. Ты слышал о миграции 1.9 -> 2.0, когда чутка ужесточили требования к плейбукам? Там столько батхёрта по интернетам летало....
🦆Nikita
Как задача выглядит?
Ансибл забирает факты об удалённом хосте, потом мой скрипт переконфигурирует(по факту ставит другу ОС) ОС на машинке и меняет домен. После чего меняеться ip, имя узла. Скрипт создаёт файл на ansible у которого в качестве имени MAC-адрес удалённого хоста. ansible забирает из собарнных фактов все MAC-адреса узла и ждёт появление файл с таким именем в папке: # cat /etc/ansible/roles/win_backup/tmp/00\:50\:56\:95\:2E\:25 {"ip": "192.168.204.238"} {{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/{{ inventory_hostname }}.txt') | from_json | json_query('ansible_interfaces[*].macaddress')) | list }} => { "msg": [ "00:50:56:95:2E:26", "00:50:56:95:2E:25" ] } это пздц, но другого решения пока не вижу
Anonymous
Ну если ты к себе тянешь в проект роль - да, стоит смотреть и доводить до нормы. Иначе можно налипнуть на сложности. Ты слышал о миграции 1.9 -> 2.0, когда чутка ужесточили требования к плейбукам? Там столько батхёрта по интернетам летало....
Сейчас доставляет, что не так давно ввели обязательное указание типа каждого параметра в документации. Кидаешь PR на какую-нибудь мелочь, а CI тебе предлагает исправить "всю" документацию модуля 😂
Timur
Зачем ансиблу нужен этот файл?
🦆Nikita
А зачем это нужно-то? Непонятно
Миграция ос. Я думал как-то отправлять статус рестом. Но нужно это делать в рамках одной роли чтоб видеть на каком этапе произошла ошибка
⪓⚝⪔
Не понимаете вы, человек с майкрософта приезжать собирается к новому году
⪓⚝⪔
Государство обязывает
🦆Nikita
Зачем ансиблу нужен этот файл?
если у узла несколько интерфейсов т.е. несколько mac-адресов, что-бы понять через какой интерфейс ansible может достучаться до узла по ip. зная ip можно узнать уже всё остальное т.е. у меня есть mac-адрес, надо передать его ip в ansible для связи с узлом
⪓⚝⪔
А зачем много интерфейсов? Можно dhcp настроить так чтобы выдавал прежний адрес, если мак не менялся
🦆Nikita
А зачем много интерфейсов? Можно dhcp настроить так чтобы выдавал прежний адрес, если мак не менялся
там идёт много узлов с разными dhcp серверами, доменми, конфигурациями и.т.п. проще настроить получение ip по mac адресу чем искать и лезть в конфиги каждого AD. Смысл что-бы можно было смигрировать любую машинку, даже есди она не в AD.
Alex
Всем привет, чё то у меня проблемы( Мне нужно отредактировать через ансибл json файл на сервере, но пока не получается. Пробовал отсюда подход: https://stackoverflow.com/questions/46025695/best-way-to-modify-json-in-ansible Вот мой плейбук: --- - name: Install and configure zabbix server hosts: "localhost" vars: dnsmasq: domainName: "{{ inventory_hostname }}" type: "dnsname" tasks: - name: Find out what the remote machine's mounts are slurp: src: "/etc/cni/net.d/87-podman-bridge.conflist" register: podman_bridge - json_modify: data: "{{ podman_bridge['content'] | b64decode }}" pointer: "/plugins" action: append append: "{{ dnsmasq }}" register: result - debug: var: result.result А в выводе у меня некорректное экранирование: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, "{'type': 'dnsname', 'domainName': 'localhost'}" ] } } Должно получиться вот так: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, { "type": "dnsname", "domainName": "localhost" } ] } }
Logan
Панкратов? подозрительно знакомые обороты
🦆Nikita
Какое то универсальное "лекарство" в любую инфраструктуру ? Мощно однако
уже около 700 строк только .yml, получаеться какая-то дичь. Оно и не удивительно.
⪓⚝⪔
уже около 700 строк только .yml, получаеться какая-то дичь. Оно и не удивительно.
А после миграции оно существует на той же инфраструктуре? AD?
🦆Nikita
А после миграции оно существует на той же инфраструктуре? AD?
нет, отдельная AD под эти узлы, инфраструктура остаёться та-же ну там скриптом всё переноситься(УЗ пользователя, файлы, принтеры и.т.п)
Logan
уже около 700 строк только .yml, получаеться какая-то дичь. Оно и не удивительно.
у меня есть четкое ощущение, что вы в булочную на самосвале едете. Вот прямо четкое. Но подтвердить не получается
Andor
если юникс-сокет не нужен, то всё намного проще
Anonymous
Всем привет, чё то у меня проблемы( Мне нужно отредактировать через ансибл json файл на сервере, но пока не получается. Пробовал отсюда подход: https://stackoverflow.com/questions/46025695/best-way-to-modify-json-in-ansible Вот мой плейбук: --- - name: Install and configure zabbix server hosts: "localhost" vars: dnsmasq: domainName: "{{ inventory_hostname }}" type: "dnsname" tasks: - name: Find out what the remote machine's mounts are slurp: src: "/etc/cni/net.d/87-podman-bridge.conflist" register: podman_bridge - json_modify: data: "{{ podman_bridge['content'] | b64decode }}" pointer: "/plugins" action: append append: "{{ dnsmasq }}" register: result - debug: var: result.result А в выводе у меня некорректное экранирование: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, "{'type': 'dnsname', 'domainName': 'localhost'}" ] } } Должно получиться вот так: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, { "type": "dnsname", "domainName": "localhost" } ] } }
может добавить | to_json ?
Andor
Всем привет, чё то у меня проблемы( Мне нужно отредактировать через ансибл json файл на сервере, но пока не получается. Пробовал отсюда подход: https://stackoverflow.com/questions/46025695/best-way-to-modify-json-in-ansible Вот мой плейбук: --- - name: Install and configure zabbix server hosts: "localhost" vars: dnsmasq: domainName: "{{ inventory_hostname }}" type: "dnsname" tasks: - name: Find out what the remote machine's mounts are slurp: src: "/etc/cni/net.d/87-podman-bridge.conflist" register: podman_bridge - json_modify: data: "{{ podman_bridge['content'] | b64decode }}" pointer: "/plugins" action: append append: "{{ dnsmasq }}" register: result - debug: var: result.result А в выводе у меня некорректное экранирование: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, "{'type': 'dnsname', 'domainName': 'localhost'}" ] } } Должно получиться вот так: ok: [localhost] => { "result.result": { "cniVersion": "0.3.0", "name": "podman", "plugins": [ { "bridge": "cni0", "ipMasq": true, "ipam": { "routes": [ { "dst": "0.0.0.0/0" } ], "subnet": "10.88.0.0/16", "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, { "type": "dnsname", "domainName": "localhost" } ] } }
а может ты можешь контролировать этот жсон-файл целиком?
Sergei
https://gist.github.com/Andor/1bc704e7a382ccf2ce5b8e8b55c45ebb
ну ничоси, спасибо,схоронил
Andor
command можно упростить и сильно, в зависимости от юзкейса
Alex
может добавить | to_json ?
Пробовал, не помогло.
Anonymous
Пробовал, не помогло.
заменить append на extend
Timur
у меня есть четкое ощущение, что вы в булочную на самосвале едете. Вот прямо четкое. Но подтвердить не получается
Аналогично. У меня пока картинка не складывается. Если бы задачу детальнее описали - можно было бы подумать над вариантом решения
Alex
заменить append на extend
Нашёл как, ща расскажу)
Timur
Но для этого нужно понять: что за задача решается, как выглядит инфраструктура, что происходит с машинами в ходе миграции и на каком этапе там вообще появляется ансибл
Timur
Alex
ждем, ждем
Взял ансибл модуль, который скорее всего появится в 2.10 Вот начальный issue: https://github.com/ansible/ansible/issues/49071 Вот пулреквест: https://github.com/ansible/ansible/pull/52931 Вот мой плейбук, который корректно отрабатывает: --- - name: Configure podman hosts: "localhost" vars: dnsmasq: domainName: "{{ inventory_hostname }}" type: "dnsname" tasks: - name: Add dnsname plugin to default cni configuration json_patch: src: "/root/test.json" pretty: true operations: - op: add path: "/plugins/0" value: "{{ dnsmasq }}"
Alex
не могу понять, почему сервисы не запускаются через модуль service, смотрю статус через service_facts msg: name: xray-server.service source: systemd state: stopped стартую сам сервис ok: [jfxr_master] => changed=false name: xray-server state: started status: ActiveEnterTimestamp: Mon 2019-10-07 16:07:28 UTC ActiveEnterTimestampMonotonic: '34361376870' ActiveExitTimestamp: Mon 2019-10-07 16:02:14 UTC ActiveExitTimestampMonotonic: '34047716112' ActiveState: active ... WantedBy: multi-user.target graphical.target Wants: network-online.target WatchdogTimestampMonotonic: '0' WatchdogUSec: '0' проверяю статус через service_facts msg: name: xray-server.service source: systemd state: stopped
Andor
.service из имени убери
Alex
.service из имени убери
он тогда берет sysv, а у меня то systemd
Andor
Инфа соточка?
Alex
Ubuntu 16