当我使用ansible时,我发现ping.yml都可以正常工作:
- hosts: 172.16.10.104
- tasks:
- name:
ping: ''
- hosts: 172.16.10.104
tasks:
- name:
ping: ''
这意味着如果任务是一个yaml列表,它都可以正常工作
但如果我写一个yaml文件来创建这样的vm:
- hosts: localhost
tasks:
name: ''
vmware_guest:
hostname:
cluster:
name: testvm_6
validate_certs: 'no'
template: ubuntu16
password:
disk:
- size_gb: '200'
type: thin
datastore: JH5020VMSAS01
datacenter: thevmware
folder: /
username:
delegate_to: localhost
register: deploy
我已经尝试了很多次,似乎只有任务不是列表,这意味着它不是“ - 任务”,yaml文件可以工作,如果它是“ - 任务”,我收到一个错误:字段'主机'是必需的,但未设定
我使用clojure和clojure项目https://github.com/owainlewis/yaml来生成yaml文件,那么两个如何修复问题呢?
是否有一种可以修复主机问题的安全方式?
或者是否有一种clojure方式,可以生成yaml文件,主机之后的任务不能是一个列表?我试过但失败了:
(def data [{:hosts "172.16.10.104",
{:tasks [{:name "ping",:ping ""}]}}])
得到错误:地图文字必须包含偶数
如果我写这个:
(def data [
{:hosts "localhost"}
{:tasks
[{:name "",
:vmware_guest
{:hostname "172.16.10.15",
:username "",
:password "",
:datacenter "thevmware",
:cluster "JMoeDataCenterA1",
:validate_certs "no",
:folder "/",
:name "testvm_6",
:template "ubuntu16",
:disk,
[{:size_gb "200",
:type "thin",
:datastore "JH5020VMSAS01"
}]}
:delegate_to "localhost",
:register "deploy"
}]}])
任务是“ - 任务”,创建虚拟失败
那么如何使用clojure生成可以创建vm表单模板的yaml文件呢?谢谢!
Ansible YAML Syntax docs是一个很好的起点。
来自YAML POV的剧本的结构是:
hosts
键,用于定义运行任务的主机/主机组tasks
密钥,它是任务定义的YAML列表,每个定义为YAML字典。每个任务字典包含许多键,特别是:鉴于此,您的输出格式不正确,而您需要的是:
name
特别是在你的情况下:
- hosts: <some_hosts>
tasks:
- name: Task 1
some_ansible_module:
ansible_module_param1: value 1
ansible_module_param2: value 2
ansible_module_param3: value 3
delegate_to: <some_host>
register: task_1_var
- name: Task 2
some_ansible_module:
ansible_module_param1: value 1
ansible_module_param2: value 2
ansible_module_param3: value 3
参数需要' - '插在它前面name
需要缩进到与vmware_guest
相同的位置name
的所有参数都需要相对于vmware_guest
缩进vmware_guest
的情况下,传递给它的列表需要缩进disk
和delegate_to
需要和register
和name
一样。它们是任务的参数,而不是模块免责声明:我不熟悉vmware_guest
模块,所以我不能说你传递的是否有效。