Tôi đang sử dụng các Playbook Ansible được lập trình. Nói chung, vì playbooks chỉ là YAML, điều này rất đơn giản. Tuy nhiên, khi sử dụng key=value
hình thức "đơn giản" , Playbooks không phải là YAML thuần túy - chúng bao gồm nội dung được nhúng ở shlex
dạng có thể nhìn thấy được.
Để tránh sự nhập nhằng theo hình thức này (là key=value
cặp một cuộc tranh cãi với lệnh hoặc một cuộc tranh cãi cho ansible?), Và chỉ có một định dạng duy nhất để phân tích và tạo ra, tôi vô điều kiện sử dụng cơ chế phức tạp args chứng minh bằng ví dụ trong các ansible kho lưu trữ mẫu .
Điều này sử dụng một cú pháp của loại sau:
action: module-name
args:
key1: value1
key2: value2
... đó là tốt và tốt. Tuy nhiên, khi cố gắng sử dụng hình thức này cho shell
hay command
module ( có tài liệu mô tả các lệnh thực tế như được thông qua trong một cuộc tranh cãi mang tên free_form
), điều này không làm việc rất tốt:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Khi được gọi, điều này chạy như sau:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... đó không phải là những gì tôi đang cố gắng thực hiện.
Cách đúng đắn để sử dụng các mô-đun Ansible sử dụng các lệnh "dạng tự do" bằng cú pháp YAML thuần túy là gì?
- shell: ...
không? Nếu cấu trúc này là một cái gì đó chỉ có thể được tạo ra một cách đáng tin cậy bằng tay, điều đó phần nào đánh bại điểm của câu hỏi.