当我使用ansible时,我发现ping.yml都可以正常工作:
- hosts: 172.16.10.104
- tasks:
- name:
ping: ''
- hosts: 172.16.10.104
tasks:
- name:
ping: ''
这意味着该任务是否为Yaml列表,都可以正常工作
但是如果我编写一个Yaml文件来创建一个像这样的虚拟机:
- 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
我尝试了很多次,似乎只有任务不是列表,这意味着它不必是“-task”,yaml文件可以工作,如果它是“-task”,我得到一个错误:字段“ hosts”为必填字段,但未设置
我使用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文件呢?
答案 0 :(得分:0)
Ansible YAML Syntax docs是一个很好的起点。
YAML POV中的剧本的结构为:
每次播放都是 YAML字典,其中包含许多键:
一个hosts
键,用于定义要针对其运行任务的主机/主机组
一个tasks
键,它是任务定义的 YAML列表,每个任务定义都定义为 YAML字典。每个任务字典都包含许多键,尤其是:
可选的name
键,whos值包含任务名称
鉴于此,您的输出格式不正确,而您需要的是:
- 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
相同。它们是任务的参数,而不是模块的参数免责声明:我对vmware_guest
模块不熟悉,所以我不能说您传递的内容是否有效。