как прочитать конфигурационный файл ansible yml в groovy

Я хочу написать сценарий сборки задания DSL для jenkins в groovy, который автоматически запускает задание развертывания для наших проектов. В каждом проекте есть общий файл yml для доступных ролей и параметров хостов, который я хочу прочитать и использовать его содержимое для настройки задания.

Проблема в том, что до сих пор я использую змейку для чтения yml-файла, но он возвращает массив (больше похожий на карту), который я не могу использовать эффективно.

кто-нибудь знает лучшее решение?

мой образец файла 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.


person Fezo    schedule 03.03.2016    source источник


Ответы (1)


Это ожидаемый результат, эта конфигурация начинается с "-", который представляет собой список. Это «набор хостов, и у каждого хоста есть набор ролей».

Если вы хотите выполнить итерацию на каждом хосте, вы можете сделать:

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']
    ]
  ]
 ]
]
person Jérémie B    schedule 03.03.2016
comment
Заранее спасибо, я понял свою ошибку. Не могли бы вы написать полный пример кода для этого yaml? например, как я могу получить доступ к элементу myproje_db в app_links роли java-приложения? потому что пример кода у меня не сработал, и он дает мне ошибку при приведении указателя к строке. - person Fezo; 06.03.2016
comment
также что делать, если я не знаю название свойства? например, я не знаю, есть ли свойство migrate_module, но я пишу эти свойства в другом файле конфигурации или делаю его карту. Я очень ценю любую подсказку, которую вы могли бы дать мне по этому поводу. - person Fezo; 06.03.2016
comment
Я добавил отображение в структуру groovy при чтении конфигурации. Это просто набор карт. - person Jérémie B; 06.03.2016