Ansible: доступ к значению с помощью шаблона - PullRequest
0 голосов
/ 28 августа 2018

Вот мой JSON:

{
"appId": "usecase-watchlist",
"instanceName": "usecase-watchlist-instance",
"node": "master",
"configuration": {
   "videoSensorInstance": {
       "node": "worker",
       "configuration": {
           "cameraSensor": 1
       }
   },
   "faceDetectionInstance": {
       "node": "worker",
       "configuration": {
           "cameraSensor": 1,
           "database": {
               "name": "facedetection_db",
               "dbmsName": "mongodb",
               "type": "mongodb",
               "username": "fb719a05",
               "password": "b5f64277"
          }
       }
   },
   "alerts-manager-instance": {
       "node": "worker",
       "configuration": {
         "database": {
            "name": "alerts_db",
            "dbmsName": "mongodb",
            "type": "mongodb",
            "username": "fb719a05",
            "password": "b5f64277"
          }
       }
     }
   }
 }

У меня есть переменная с именем: app_spec_contents, где присутствует содержимое этого json.

Также у меня есть словарь app_instances, который содержит:

     app_instances contains :

    "app_instances": {
    "alerts-manager": "alertsManagerInstance",
    "video-sensor": "videoSensorInstance",...
    }

Теперь я пишу ниже игру, которая создаст карту заданной формы:

#Get the configuration of instances one by one
- name: Get the configuration of instances one by one
  set_fact:
    app_configurations: "{{ app_configurations|default({}) | combine( { item.key:{ item.key + '_db_connection_string': app_spec_contents.configuration } } ) }}"
  with_items : "{{ app_instances|dict2items }}"

Я хочу указание нижеприведенного результата:

    {"alerts-manager" : { 
        "alerts-manager-instance_db_connection_string" : 
 "mongodb://fb719a05:b5f64277@172.17.0.2:27017/alerts_db",
         "name":"alerts_db" 
        },
     ... } ---> for every item in dict if database is there, like in one instance.

Кроме того, условие when должно быть записано, если экземпляр, присутствующий в app_spec_contents. {{ item.value }}, содержит в себе файл configuration.database.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 28 августа 2018

Это было решено: Ниже приведен правильный yaml:

- name: Get the configuration of instances one by one
  set_fact:
    app_configurations: "{{ app_configurations|default({}) | combine( { item.key:{ item.key + '_db_connection_string': app_spec_contents.configuration[item.value].configuration.database.dbmsName + '://' + app_spec_contents.configuration[item.value].configuration.database.username + ':' + app_spec_contents.configuration[item.value].configuration.database.password + '@172.17.0.2:27017/' + app_spec_contents.configuration[item.value].configuration.database.name , item.key + '_db_name' : app_spec_contents.configuration[item.value].configuration.database.name } } ) }}"
  when: app_spec_contents.configuration[item.value].configuration.database is defined and app_spec_contents.configuration[item.value].configuration.database.dbmsName=="mongodb"
  with_items : "{{ app_instances|dict2items }}"
...