Aleksey
Ага и у меня
Aleksey
Но загружаемые данные это другие пакеты
Ievgen
Всем привет, кто-то сталкивался с проблемой точки в значении переменной? У меня фильтр jmespath отказывается принимать переменную значение которой в какой то момент выглядит как super1.2value
Ievgen
разбирает ее на до/после точки и шлет лесом
Ievgen
{"msg": "JMESPathError in json_query filter plugin:\nExpecting: ['quoted_identifier', 'unquoted_identifier', 'lbracket', 'lbrace'], got: number:
Ievgen
мысли бродят разные, сделать regexp_replace на переменную и как то так выйти из ситуации, но может кто то знает более другие варианты?
Ievgen
query вот такой: "[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]"
Ievgen
и если в problem прилетает super1.2value - ловим ошибку выше
Ievgen
ну теоретически можно и так
Ievgen
хотелось как то менее костыльно, мне всего то надо было пересортировать list of dicts
Ievgen
что характерно оригинальный jmespath чекер на офф сайте великолепно это делает
Ievgen
тоесть это чисто местный косяк в реализации
Ievgen
можно еще хэш сделать из something_else и '{{ problem }}'
Ievgen
и сравнивать их
Ievgen
и нифига блин не гуглится
Ievgen
короче ладно, буду копать
Ievgen
спасибо за участие )
Ievgen
походу там немного в другом дело, проблема не в том что '{{ problem }}' содержит super1.2value а в том что в выражении something_else == '{{ problem }}' - значение something_else тоже super1.2value и тут jmespath офигевает
Sergey
это значит тебе надо косвенную адресацию использовать
Sergey
хотя канеш ТАК назвать переменную это ещё как убиться надо
Ievgen
как ТАК назвать?
Sergey
с точкой в названии
Ievgen
переменная называется нормально
Ievgen
ты не вьехал
Ievgen
есть list of dicts
Ievgen
jmespath его сортирует
Ievgen
переменная в контексте нашего разговора называется '{{ problem }}' ее значение содержит точку, jmespath сравнивает значение ключа 'xuomuo': "чтото" каждого элемента листа
Ievgen
тоесть грубо делает "[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]"
Ievgen
something_else == '{{ problem }}' тут something_else это value ключа из оригинального dict
Ievgen
и это в целом нормальная ситуация
Ievgen
ничего необычного
Sergey
только один вопрос - а нахер сортировать каким-то jmespath? почему не подходит jinja-фильтр 'sort'?
Ievgen
потому что мне надо не только сортировать, а выбрать только то что подпадает под условие
Ievgen
потом еще выбрать и еще
Ievgen
и сформировать итоговый list
Ievgen
но подругому но с той же структурой
Ievgen
и jmespath это позволяет легко
Ievgen
в оригинале
Ievgen
беру орогональный лист тупо копирую сюда http://jmespath.org/
Ievgen
копирую оригинальный query
Ievgen
и все работает
Sergey
Вспомнил правило странного - "если хочется инструментом сделать что-то странное, значит, нужно выбрать другой инструмент".
Ievgen
что наталкивает меня на мысль что кто то где то в очередной раз пролюбил
Ievgen
ну понеслась )
Ievgen
jmespath фильтр в ansible есть?
Ievgen
это инструмент?
Ievgen
для осуществления манипуляций с рзными хешами итд
Sergey
в ансибле - точно нету
Sergey
в джиндже - да, поверю ещё
Ievgen
http://docs.ansible.com/ansible/latest/playbooks_filters.html#json-query-filter
Ievgen
JSON Query Filter New in version 2.2.
Ievgen
велкам из анабиоза )
Ievgen
штука хорошая, но со своей кривотой походу
Ievgen
тут вопрос как это победить не переписывая пол плейбука
Sergey
Да я это всё читал. Знаешь, я вижу между нами одну большую разницу: я решаю задачи, а ты хочешь от инструмента странного и пытаешься доказать, что кто-то где-то что-то пропустил. Сравнения строк без кавычек - это вообще из какого крутого языка?
Ievgen
о ну все ) я понял
Sergey
Переписывать не надо ничего, подумай, как нужный отбор реализовать в несколько шагов, и прицепи джинджа-фильтры последовательно.
Ievgen
а я не хочу несколько шагов там где органично делается один
Ievgen
и это не странное
Sergey
Если не гуглится - это практически однозначный показатель, что странного хочешь 😉
Ievgen
о великий решающий задачи
Ievgen
если не гуглится открывается issue
Ievgen
на github
Ievgen
я тебе специально даже ссылочку пришлю где будет написанно что это баг
Ievgen
)
Sergey
Это ты вообще-то написал, что не гуглится.
Ievgen
не гуглится толково так около похожие ситуации
Ievgen
но не то
Sergey
А я написал action_plugin, который отрендерённый шаблон грузит в переменные, и обхожусь без странных проблем.
Ievgen
Сравнения строк без кавычек - это вообще из какого крутого языка? где ты увидел сравнение строк без кавычек?
Ievgen
This example shows ports from cluster1: - name: "Display all server names from cluster1" debug: var=item with_items: "{{domain_definition|json_query(server_name_cluster1_query)}}" vars: server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port"
Ievgen
vars: server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port" как бы намекает нет?
Ievgen
"[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]" в данном случае something_else это key из dict
Ievgen
значение которого сравнивается с значением переменной
Ievgen
и это все в рамках синтаксиса
Sergey
Ну да. И внезапно у тебя key без кавычек внутри ансибла, если что. А отсюда всё превращается в тыкву.
Ievgen
да ладно
Ievgen
я пример кинул с офф сайта
Ievgen
там есть кавычки?