Ansible -Слияние двух вложенных json файлов в один файл формата Json - PullRequest
1 голос
/ 19 марта 2020

У меня есть два json и я хочу добавить одно в другое и сохранить их в одном файле. Я сделал набор фактов, чтобы прочитать значения и поместить их в переменную, используя следующее:

- name: Set json combine to add new event
  set_fact:
     event_json_create: "{{ lookup('file', 'event_template.json') }}" 

- name: Set json combine to get the existing list of events
  set_fact:
     event_json_existing: "{{ lookup('file', 'notification.json') }}" 

Теперь я хочу добавить event_json_create к event_json_existing.

Event_json_create выглядит следующим образом:

"event_json_create": {
    "LambdaFunctionConfigurations": [{
        "Events": [
            "s3:ObjectCreated:*"
        ],
        "Filter": {
            "Key": {
                "FilterRules": [{
                    "Name": "prefix",
                    "Value": [
                        "keying_service/response/"
                    ]
                }]
            }
        },
        "LambdaFunctionArn": "arn:aws:lambda:us-east-1:*******:function:xyz"
    }]
}

Event_json_existing выглядит следующим образом:

"event_json_existing": {
           "LambdaFunctionConfigurations": [
               {
                   "Events": [
                       "s3:ObjectCreated:*"
                   ],
                   "Filter": {
                       "Key": {
                           "FilterRules": [
                               {
                                   "Name": "Prefix",
                                   "Value": "staging/inbound/Source_Contact/ac/input_fia/"
                               }
                           ]
                       }
                   },
                   "Id": "Eventtry",
                   "LambdaFunctionArn": "arn:aws:lambda:us-east-1:******:function:abc"
               }
           ]
       }

Как добавить два json в ansible, гарантируя, что оба json находятся в основной группе: LambdaFunctionConfigurations и тогда я могу записать это в json файл. Поэтому на выходе я ожидаю:

{
    "LambdaFunctionConfigurations": [{
            "Events": [
                "s3:ObjectCreated:*"
            ],
            "Filter": {
                "Key": {
                    "FilterRules": [{
                        "Name": "prefix",
                        "Value": [
                            "keying_service/response/"
                        ]
                    }]
                }
            },
            "LambdaFunctionArn": "arn:aws:lambda:us-east-1:*******:function:xyz"
        },
        {
            "Events": [
                "s3:ObjectCreated:*"
            ],
            "Filter": {
                "Key": {
                    "FilterRules": [{
                        "Name": "Prefix",
                        "Value": "staging/inbound/Source_Contact/ac/input_fia/"
                    }]
                }
            },
            "Id": "Eventtry",
            "LambdaFunctionArn": "arn:aws:lambda:us-east-1:*******:function:abc"
        }
    ]
}

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

1 Ответ

2 голосов
/ 19 марта 2020

Этот шаблон

shell> cat events.json.j2
{{ events|to_nice_json }}

и задачи ниже

    - set_fact:
        events: "{{ {'LambdaFunctionConfigurations':
                     ([event_json_create.LambdaFunctionConfigurations.0] +
                      [event_json_existing.LambdaFunctionConfigurations.0])} }}"
    - template:
        src: events.json.j2
        dest: events.json

дают

shell> cat events.json 
{
    "LambdaFunctionConfigurations": [
        {
            "Events": [
                "s3:ObjectCreated:*"
            ],
            "Filter": {
                "Key": {
                    "FilterRules": [
                        {
                            "Name": "prefix",
                            "Value": [
                                "keying_service/response/"
                            ]
                        }
                    ]
                }
            },
            "LambdaFunctionArn": "arn:aws:lambda:us-east-1:*******:function:xyz"
        },
        {
            "Events": [
                "s3:ObjectCreated:*"
            ],
            "Filter": {
                "Key": {
                    "FilterRules": [
                        {
                            "Name": "Prefix",
                            "Value": "staging/inbound/Source_Contact/ac/input_fia/"
                        }
                    ]
                }
            },
            "Id": "Eventtry",
            "LambdaFunctionArn": "arn:aws:lambda:us-east-1:******:function:abc"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...