如何通过clojure写一个Ansible Yaml文件?

时间:2019-01-22 08:18:15

标签: clojure yaml

我有这个简单的ansml yaml文件,它工作正常:

--- 
- hosts: 172.16.10.104 
- tasks: 
  - name: ping 
    ping: ''

我使用clojure https://github.com/owainlewis/yaml使用clojure生成此Yaml文件:

(defn -main
    [& args]
    (def data [{:hosts "172.16.10.104"} {:tasks ""}     {:name "ping",:ping ""} ])
    (def a (yaml/generate-string data :dumper-options {:flow-style :block}))
    (println a)
)

此代码可以生成yaml文件:

- hosts: 172.16.10.104
- tasks: ''
- name: ping
  ping: ''

它不起作用,“-名称”必须超过“-任务”的两个字符

如果我这样定义数据:

(def data [{:hosts "172.16.10.104"}  {:tasks ""} [{:name "ping",:ping ""}]])

它生成此:

- hosts: 172.16.10.104
- tasks: ''
- - name: ping
    ping: ''

它也不能工作

我不知道如何编写clojure文件来生成yaml文件,谢谢!

2 个答案:

答案 0 :(得分:1)

尝试嵌套:name地图:

  (let [data [{:hosts "172.16.10.104"}
              {:tasks [{:name "ping"}
                       {:ping ""}]}]]
    (println (yaml/generate-string data)))

结果:

- {hosts: 172.16.10.104}
- tasks:
  - {name: ping}
  - {ping: ''}

答案 1 :(得分:1)

此外,您可能要考虑使用github.com/clj-commons/clj-yaml。这是lib circle-ci用于其Yaml的东西