如何在groovy中阅读ansible yml配置文件

时间:2016-03-03 09:00:58

标签: groovy yaml ansible jenkins-job-dsl

我想在groovy中为jenkins编写一个DSL作业构建脚本,它自动为我们的项目进行部署工作。每个项目中都有一个通用的yml文件用于ansible角色和hosts参数,我想要读取它并使用其内容来配置作业。

问题是到目前为止我使用snakeyml来读取yml文件,但是它返回了一个我无法有效使用的arraylist(更像是地图)。

有谁知道更好的解决方案?

我的yml示例文件:

---
- hosts: app.host
  roles:
  - role: app-db
    db_name: myproje_db
    db_port: "3306"
    migrate_module: "my-proje-api"
  - role: java-app
    app_name: "myproje-api"
    app_artifact_name: "my-proje-api"
    app_links:
    - myproje_db

我在主要的groovy脚本中从工作区读取文件:

InputStream  configFile = streamFileFromWorkspace('data/config.yml')

并在另一个类的另一个函数中处理它:

public String configFileReader(def out, InputStream  configFile){
      def map
      Yaml configFileYml = new Yaml()
      map = configFileYml.load(configFile)
}

它将地图类类型返回为arraylist。

1 个答案:

答案 0 :(得分:2)

这是预期的输出,此配置以" - "开头。代表一个清单。它是一个主机集合,每个主机都有一组角色"。

如果你想在每个主机上进行迭代,你可以这样做:

Yaml configFileYml = new Yaml()
configFileYml.load(configFile).each { host -> ... }

当读取此配置时,它等同于以下结构(以groovy格式):

[ // collection of map (host)
 [ // 1 map for each host
  hosts:"app.host",
  roles:[ // collection of map (role)
    [ // 1 map for each role
     role: 'app-db',
     db_name: 'myproje_db',
     db_port: "3306",
     migrate_module: "my-proje-api"
    ],
    [
     role: 'java-app',
     app_name: "myproje-api",
     app_artifact_name: "my-proje-api",
     app_links:['myproje_db']
    ]
  ]
 ]
]