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
Vladislav 👻
Вместо apt install a b c
Проблема только, что если жопа, надо долго ждать, когда эта жопа придет...
И еще, я правда точно не уверен, надо последние накаты посмотреть, но вроде как yum это впихивал в одну транзакцию... 🤔
Vlad
Vitaliy
Как сделать условие по версии linux kernel?
Что-то типо
when: ansible_kernel | version_compare('4.18','>')
Vitaliy
т.е. выполнить если kernel >= 4.19
Alexander
Подскажите, как разрешается такая штука:
"{{ var | regex_replace('config','') }}"
Alexander
| здесь как pipe ?
George
это джинджа
George
| - это применить фильтр справа к значению слева
George
фильтр - это типа функция питона
Lamobot
Alexander
Спасибо, изучаю
Alexander
Понял, осознал. Можно сказать, то же самое поведение
Vitaliy
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
Sergey
Вот прямо же в тексте написано
Александр
ааааа
Александр
туплю
Александр
точно!))
Александр
спс
Timur
Timur
Timur
А в чем суть исходной задачи?
zEvilz
можно с временным файлом, но хочется без него
Timur
Timur
Зачем json файл и что за итемы?
Timur
Какое состояние вы хотите получить на таргет-системе?
zEvilz
короче, мне надо все var.results.stdout собрать в одну строку
Timur
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
может поможет...
zEvilz
Timur
Timur
А вообще, общий подход по сборке json неверен. Если на выходе нужен json, гораздо логичнее сначала собрать нужную структуру данных в определенную комбинацию словарей и списков, а потом уже выводить все это в json через фильтр типа to_json
Timur
Собирать json на уровне строк через парсинг текста - упадничество
Lamobot
Александр
> Если на выходе нужен json, гораздо логичнее сначала собрать нужную структуру данных в определенную комбинацию словарей и списков, а потом уже
примерно так оно и есть
Александр
и включается переменными по имени файла. Типа docker_listen_port = yes - значит в итоговый daemon.json включить этот фрагмент
Timur
Timur
А зачем копирование так странно сделано? Через local_action
Александр
это создаётся template который потом модулем template раскатывается на сервера
Александр
для того чтобы в этих самых кусках, работали переменные
Александр
костыль конечно, но в целом удобный
Timur
Timur
Если вся структура в объекте, который считывается через фильтр to_json
Александр
да, но переменные в этой структуре, не переменные
Sergey
Timur
Александр
в итоге на сервере мы видим не
"data-root": "/data/docker"
а
"data-root": "{{ docker_data_dir }}"
Timur
Александр
так что пришлось сохранять и использовать как template
Timur
На таргете вам нужен файл с таким содержанием?
Timur
"data-root": "{{ docker_data_dir }}" ?
Александр
ну если я делаю
- copy:
content: "{{ myjson | to_json }}"
на таргете в итоге "data-root": "{{ docker_data_dir }}"
Timur
Александр
ну а template работает только с файлами вроде
Timur
Александр
ему нельзя подсунуть переменную с содержимым
Timur
Timur
Пишите ее в темплейт - она там и будет
Timur
В чем проблема-то?
Александр
ну вот так оно и сделано))
Timur
Александр
тогда видимо я не понял вопроса. сорри
Timur
Что мешает в темплейте написать просто "{{ myjson | to_json }}", а потом в коде просто наполнить переменную myjson всем, чем нужно?