如何读取 groovy 中的 ansible yml 配置文件

how to read ansible yml config file in groovy

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

问题是到目前为止,我使用 snakeyml 来读取 yml 文件,但它 returns 是一个我无法有效使用的数组列表(更像是地图)。

有人知道更好的解决方案吗?

我的 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')

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

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

it returns map class type as arraylist.

这是预期的输出,此配置以代表列表的“-”开头。这是 "a collection of hosts, and each host have a set of roles".

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

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']
    ]
  ]
 ]
]