Я переношу модуль с ansible 1.9 на 2.x, и содержимое файла args кажется .. странным? После shlex простые строки подходят, но списки и словари выглядят как лишний мусор. Пример:
мой вызов:
тест: "пакеты = {{test.var}}"
и test.var - это список пакетов, ['one', 'two', 'three', 'foo']
доступное содержание аргументов 1.9:
пакеты = ['один', 'два', 'три', 'фу']
доступное содержимое 2.3 аргументов:
packages = '[u' "'"' one '"'" ', u' "'"' two '"'" ', u' "'"' three '"'" ', u' "'"' foo '"'" ']' "'"]' "'"]' "'"]'
Мой вопрос: "Есть ли способ элегантно или просто десериализовать эти данные args?" Я могу убрать оскорбительные побеги и цитаты, но это грубо и хрупко. В руководстве по портированию я не нашел ничего подходящего.
Хорошо, я не нашел ответа, но нашел достойный способ получить то, что хочу. Я поставлю здесь свой ответ, на случай, если кто-то наткнется на вопрос с необходимостью.
Во-первых, несбалансированные скобки исчезли в зависимости от того, как вы назвали модуль:
test: "blip={{testpackages}}"
приведет к несбалансированности скобок, но
test: blip="{{testpackages}}"
привели к сбалансированным скобкам.
Во-вторых, все становится спорным, если вы просто попросите ansible передать переменную через фильтр to_json, а затем прочитать это. Пример учебника:
- name: run test module (ansible 2.x)
test: packages='{{ testpackages| to_json }}'
when: ansible_version.major|int > 1
Пример в модуле:
packages_to_test = [x.encode('utf-8') for x in json.loads(packages)]
В любом случае, удачи тебе, случайный человек, который сделал то же самое, что и мы.