Я використовую програматично створені іграшки Ansible. Взагалі, оскільки ігрові книги - це лише YAML, це прямо. Однак, використовуючи "просту" key=value
форму, ігрові книжки не є чистою YAML - вони містять вміст, вбудований у shlex
форму, що є частковою.
Щоб уникнути неоднозначності в цій формі (це key=value
пара в аргументі на команду чи аргумент для ansible?) Та мати лише один формат для розбору та генерації, я беззастережно використовую складний механізм аргументів, продемонстрований прикладом в ansible -сховище прикладів .
Для цього використовується синтаксис такого типу:
action: module-name
args:
key1: value1
key2: value2
... що добре і добре. Однак, намагаючись використовувати цю форму для shell
або command
модулів ( в документації яких описується фактична команда як передана в аргументі з назвою free_form
), це не працює так добре:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Після виклику це виконує наступні дії:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... що дуже не те, що я намагаюся досягти.
Який правильний спосіб використовувати модулі Ansible, що приймають команди "вільної форми", використовуючи чистий синтаксис YAML?
- shell: ...
? Якщо ця структура є чимось, що можна надійно генерувати лише вручну, це дещо перемагає суть питання.