Programlı olarak oluşturulmuş Ansible playbook'ları kullanıyorum. Genel olarak, oyun kitapları sadece YAML olduğundan, bu basittir. Bununla birlikte, "basit" key=value
formu kullanırken, playbooklar saf YAML değildir - içeriğe gömülebilir bir shlex
form içerirler.
Bu formda belirsizlik önlemek için (yani key=value
? Çifti komutu için bir bağımsız değişken ya da yanıtlayıcı 'için bir argüman) ve ayrıştırma ve şartsız olarak, örneğin gösterdiği kompleks bağımsız değişken mekanizması kullanıyorum oluşturmak için sadece tek bir biçime sahip yanıtlayıcı' -örnek deposu .
Bu, aşağıdaki türde bir sözdizimi kullanır:
action: module-name
args:
key1: value1
key2: value2
... ki bu iyi ve iyi. Ancak, bu formu shell
veya belgelericommand
( belgelerinde gerçek komutu adlı bir bağımsız değişkende iletildiğini açıklayan) kullanmaya çalışırken free_form
, bu çok iyi çalışmaz:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Çağrıldığında, bu aşağıdakileri çalıştırır:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... yapmaya çalıştığım şey bu değil.
Saf YAML sözdizimini kullanarak "serbest biçimli" komutlar alan Ansible modüllerini kullanmanın doğru yolu nedir?
- shell: ...
? Bu yapı sadece elle güvenilir bir şekilde oluşturulabilecek bir şeyse, bu sorunun amacını bir şekilde yener.