Назад | Перейти на главную страницу

Контент Ansible args, перенос модуля с 1.9 на 2.x

Я переношу модуль с 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)]

В любом случае, удачи тебе, случайный человек, который сделал то же самое, что и мы.