Ievgen
в експрешне?
Ievgen
нет, потому что их там не дложно быть
Sergey
я сказал "внутри ансибла", что тоже должно намекать 😉
Ievgen
блин
Ievgen
при чем сдесь key
Ievgen
если мы говорим о value
Ievgen
key нормальный
Ievgen
value стринг содержащий буквы, цифры и точку между ними
Ievgen
типа super1.2value
Ievgen
и внутри ансибл ктоьто криво написал парсинг
Ievgen
{"msg": "JMESPathError in json_query filter plugin:\nExpecting: ['quoted_identifier', 'unquoted_identifier', 'lbracket', 'lbrace'], got: number:
Ievgen
гот намбер
Ievgen
понимаешь теперь?
Ievgen
оно ломает легитимный value на две части и офигевает
Sergey
что ж тут непонятного: ждут идентификатор окавыченный или нет, или скобку прямую или фигурную, а натыкаются на число.
Ievgen
так быть не дОлжно и это однозначно баг
Ievgen
натыкаются на число потому что криво парсят value
Sergey
это говорит о том, что твоё value реально где-то мелькает как идентификатор 😊
Sergey
и получается объект super1, который имеет атрибут "2value", что не лезет ни в борщ, ни в Красную Армию
Ievgen
ну давай я тебе нарисую ) [ { "something": "xuomuo", "something_other": "100500", "something_else": "super4.1value" }, { "something": "xuomuo123", "something_other": "100600", "something_else": "super1.2value" } ]
Ievgen
вот оригинальный лист допустим
Ievgen
нормальный лист?
Ievgen
без вопросов?
Sergey
да, валидный вполне
Sergey
без вопросов
Ievgen
сгенереный из аутпута какой то супер мега хобботни
Ievgen
автоматом
Sergey
не суть
Sergey
есть лист этот из диктов, ога
Ievgen
да
Ievgen
лист из dic я писал
Sergey
угу. и?
Ievgen
теперь я хочу на него сделать не менее валидный таск: - debug: var: super_list_of_dicts|json_query(query) vars: query: "[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]"
Ievgen
при этом выше в плейбуке у меня где то set fact: problem="чтото"
Ievgen
очевидно
Ievgen
все валидно и все хорошо
Ievgen
но не работает
Ievgen
потому что ошибка выше
Ievgen
при этом если я уберу из квери
Ievgen
&& something_else == '{{ problem }}'
Ievgen
все опять збс
Ievgen
лист обрабатывается как надо
Sergey
что тебе мешает в два этапа сделать?
Ievgen
и если я в dict которые в листе в релевантные ключи запихну значения без "."
Ievgen
все будет работать
Ievgen
да хоть в 10 если по другому никак
Ievgen
я хотел всего лишь знать может кто то сталкивался и есть решение
Ievgen
ну и мне сию секунду не горит
Ievgen
горело бы накостылил бы
Ievgen
просто я не люблю делать 2 таска там где можно один
Ievgen
in general
Sergey
куда-то сюда тебе: https://github.com/ansible/ansible/issues/22346
Ievgen
так експандинг )
Sergey
не читай заголовок 😉
Ievgen
но да может там че то проскочит
Ievgen
)
Sergey
по сути у чувака тоже есть лист диктов и он его пытается отфильтровать
Sergey
и обламывается
Sergey
потому что кавычки забыл впендюрить
Ievgen
да и нет
Ievgen
если пендюрить сам квери прямо в фильтр то да там с этими кавычками черт ногу сломит
Ievgen
если сделать: - debug: var: super_list_of_dicts|json_query(query) vars: query: "[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]"
Ievgen
то все хорошо
Sergey
ну а так ты ожидаешь, что за тебя кавычки расставит дядя?
Ievgen
но кроме старой проблемы
Ievgen
query: "[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]"
Ievgen
))
Ievgen
я это уже сделал за дядю
Ievgen
если ты пихаешь в варс |json_query(query) то тут уже без кавычек
Ievgen
у чела из issue весь квери json_query()
Ievgen
типа в моем случае: super_list_of_dicts|json_query("[?(something == '{{ some_variable }}' && something_else == '{{ problem }}' && something_other < '100500')]") только мне еще придется запарится с ескейпами и кавычками
Sergey
да, именно
Ievgen
а я не парюсь и пишу в vars:
Ievgen
и повторюсь, если убрать селект по key, value kоторого содержат символы цифры и точку все окей - debug: var: super_list_of_dicts|json_query(query) vars: query: "[?(something == '{{ some_variable }}' && something_other < '100500')]"
Ievgen
более того, если value в dict - какой нибудь float, тоже все окей
Ievgen
тоесть something_other < '100.500' раскрывается корректно
Ievgen
ну короче придется как то переписать
Sergey
да это фиг с ним, это раскроется
Sergey
да, именно
Ievgen
и открыть баг