inqfen
через джинджу
inqfen
Если a: - "b" - "c" то в джинже лист получается ['a', 'b']
inqfen
Нашел такую переменную https://docs.ansible.com/ansible/devel/reference_appendices/config.html#envvar-ANSIBLE_JINJA2_NATIVE
inqfen
выставил в environment в true, не помогло
inqfen
{{ admin_ip_addresses | to_json}} вот ответ, вдруг кому пригодится
inqfen
костыли-костылики
Anonymous
Если a: - "b" - "c" то в джинже лист получается ['a', 'b']
Лел, так эт, в одинарные ковычки оберни, типо, '"b"'
Vladislav 👻
Вместо apt install a b c
Проблема только, что если жопа, надо долго ждать, когда эта жопа придет... И еще, я правда точно не уверен, надо последние накаты посмотреть, но вроде как yum это впихивал в одну транзакцию... 🤔
Vlad
Если a: - "b" - "c" то в джинже лист получается ['a', 'b']
В одинарные кавычки или так: a: - > “B” - > “C”
Vitaliy
Как сделать условие по версии linux kernel? Что-то типо when: ansible_kernel | version_compare('4.18','>')
Vitaliy
т.е. выполнить если kernel >= 4.19
Lamobot
Как сделать условие по версии linux kernel? Что-то типо when: ansible_kernel | version_compare('4.18','>')
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#version-comparison when: ansible_kernel is version('4.18','>') - вот так не работает?
Alexander
Подскажите, как разрешается такая штука: "{{ var | regex_replace('config','') }}"
Alexander
| здесь как pipe ?
George
это джинджа
George
| - это применить фильтр справа к значению слева
George
фильтр - это типа функция питона
Alexander
Спасибо, изучаю
Alexander
Понял, осознал. Можно сказать, то же самое поведение
zEvilz
всем привет как в плейбуке выполнить скрипт в цикле с with_items, слить результаты в одну строку и зарегать переменную с результатом?
zEvilz
сейчас получаю нужные части в var.results, но мне надо слить их в одну строку
Александр
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: lookup('fileglob', '/tmp/nomad_dist_files/nomad_{{ nomad_version }}_linux_amd64.zip', wantlist=True) | length < 1 when: # if not exist in /tmp/nomad_dist_files/ - lookup('fileglob', '/tmp/nomad_dist_files/nomad_{{ nomad_version }}_linux_amd64.zip', wantlist=True) | length < 1 не понимаю, что он от меня хочет? как ещё?
Sergey
Вот прямо же в тексте написано
Александр
ааааа
Александр
туплю
Александр
точно!))
Александр
спс
Timur
Timur
А в чем суть исходной задачи?
zEvilz
А в чем суть исходной задачи?
скрипт формирует часть json файла по каждому итему. надо собрать все результаты в одну строку
zEvilz
можно с временным файлом, но хочется без него
Timur
Зачем json файл и что за итемы?
Timur
Какое состояние вы хотите получить на таргет-системе?
zEvilz
короче, мне надо все var.results.stdout собрать в одну строку
zEvilz
надо)
Timur
Ну, тогда делайте
Timur
Не вижу препятствий :)
Sergey
надо)
Прочитай правила, пожалуйста.
Александр
скрипт формирует часть json файла по каждому итему. надо собрать все результаты в одну строку
- block: - name: generate temporary template daemon.json set_fact: # комбинируем содержимое переменной daemon_json с содержимым JSON'а из файла daemon_json: "{{ daemon_json | default({}) | combine(lookup('file', item.src) | from_json) }}" # цикл по файлам (только по файлам) из каталога files/daemon.json/ loop: "{{ lookup('filetree', role_path + '/files/daemon.json/', wantlist=true) | json_query('[?state == `file`]') }}" loop_control: label: "{{ item.path }}" # если одноименная имени файла переменная объявлена и имеет значение или имя файл 'default' when: vars[item.path] | default() or item.path == "default" - name: save temporary template to file local_action: module: copy dest: "/tmp/{{ inventory_hostname }}_{{ role_name }}.tmp" content: "{{ daemon_json | to_nice_json}}\n" changed_when: false check_mode: no может поможет...
Timur
А вообще, общий подход по сборке json неверен. Если на выходе нужен json, гораздо логичнее сначала собрать нужную структуру данных в определенную комбинацию словарей и списков, а потом уже выводить все это в json через фильтр типа to_json
Timur
Собирать json на уровне строк через парсинг текста - упадничество
Александр
> Если на выходе нужен json, гораздо логичнее сначала собрать нужную структуру данных в определенную комбинацию словарей и списков, а потом уже примерно так оно и есть
Александр
оно лежит фрагментами [arulev@adm-ng ansible-ng]$ ls -l service_roles/docker/files/daemon.json total 20 -rw-r--r-- 1 arulev users 203 Jun 27 15:54 default -rw-r--r-- 1 arulev users 141 Jun 27 17:04 docker_listen_port -rw-r--r-- 1 arulev users 27 Jun 27 13:24 experimental -rw-r--r-- 1 arulev users 27 Jun 27 13:23 live_restore -rw-r--r-- 1 arulev users 152 Jun 27 13:24 nvidia [arulev@adm-ng ansible-ng]$ cat service_roles/docker/files/daemon.json/nvidia { "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" } [arulev@adm-ng ansible-ng]$ cat service_roles/docker/files/daemon.json/default { "log-driver": "json-file", "log-opts": { "max-size": "{{ max_log_size | default('256m') }}", "max-file": "{{ max_log_files | default('5') }}" }, "data-root": "{{ docker_data_dir }}" } и собирается в один daemon.json
Александр
и включается переменными по имени файла. Типа docker_listen_port = yes - значит в итоговый daemon.json включить этот фрагмент
Timur
А зачем копирование так странно сделано? Через local_action
Александр
это создаётся template который потом модулем template раскатывается на сервера
Александр
для того чтобы в этих самых кусках, работали переменные
Александр
костыль конечно, но в целом удобный
Timur
Если вся структура в объекте, который считывается через фильтр to_json
Александр
да, но переменные в этой структуре, не переменные
Александр
в итоге на сервере мы видим не "data-root": "/data/docker" а "data-root": "{{ docker_data_dir }}"
Александр
так что пришлось сохранять и использовать как template
Timur
На таргете вам нужен файл с таким содержанием?
Timur
"data-root": "{{ docker_data_dir }}" ?
Александр
ну если я делаю - copy: content: "{{ myjson | to_json }}" на таргете в итоге "data-root": "{{ docker_data_dir }}"
Александр
ну а template работает только с файлами вроде
Александр
ему нельзя подсунуть переменную с содержимым
Timur
Пишите ее в темплейт - она там и будет
Timur
В чем проблема-то?
Александр
ну вот так оно и сделано))
Александр
тогда видимо я не понял вопроса. сорри
Timur
Что мешает в темплейте написать просто "{{ myjson | to_json }}", а потом в коде просто наполнить переменную myjson всем, чем нужно?