如何使用clojure生成一个yaml文件,而不是创建一个esxi vmmachine?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用clojure生成一个yaml文件,而不是创建一个esxi vmmachine?相关的知识,希望对你有一定的参考价值。
当我使用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的剧本的结构是:
- 一个YAML的戏剧列表
- 每个播放都是一个YAML字典,其中包含许多键:
- 一个
hosts
键,用于定义运行任务的主机/主机组 tasks
密钥,它是任务定义的YAML列表,每个定义为YAML字典。每个任务字典包含许多键,特别是:- 一个可选的qazxsw poi键,其值包含任务的名称
- 一个键,其名称是ansible模块的名称。此键的值将是驱动模块的参数数据的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
模块,所以我不能说你传递的是否有效。
以上是关于如何使用clojure生成一个yaml文件,而不是创建一个esxi vmmachine?的主要内容,如果未能解决你的问题,请参考以下文章
在 Clojure 中使用 repl 而不是 println
Clojure 的 Emacs/Swank/Paredit 教程
AppEngine文档建议使用命令行标志而不是app.yaml文件元素