与使用esxi vmmachine相比,如何使用clojure生成yaml文件?

时间:2019-01-22 11:19:56

标签: clojure ansible yaml

当我使用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文件呢?

1 个答案:

答案 0 :(得分:0)

Ansible YAML Syntax docs是一个很好的起点。

YAML POV中的剧本的结构为:

  • YAML播放列表
  • 每次播放都是 YAML字典,其中包含许多键:

  • 一个hosts键,用于定义要针对其运行任务的主机/主机组

  • 一个tasks键,它是任务定义的 YAML列表,每个任务定义都定义为 YAML字典。每个任务字典都包含许多键,尤其是:

  • 可选的name键,whos值包含任务名称

  • 一个键,其名称为ansible模块的名称。此项的值将是驱动模块的参数数据的 YAML字典

鉴于此,您的输出格式不正确,而您需要的是:

- 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_toregister的缩进必须与namevmware_guest相同。它们是任务的参数,而不是模块的参数

免责声明:我对vmware_guest模块不熟悉,所以我不能说您传递的内容是否有效。