如何使用特定数据附加 JSON 数组 [英] How to append JSON array with specific data

查看:32
本文介绍了如何使用特定数据附加 JSON 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行:

- name: Describe config aggregator
  shell: >
    aws configservice describe-configuration-aggregators --configuration-aggregator-name test-config
  register: config_ouput
    

以下是生成的数据.

    {
        "ConfigurationAggregators": [
            {
                "ConfigurationAggregatorName": "test-config",
                "ConfigurationAggregatorArn": "arn:aws:config:us-east-1:4567:config-aggregator/config-aggregator-uw2o9pzf",
                "AccountAggregationSources": [
                    {
                        "AccountIds": [
                            "895677"
                        ],
                        "AllAwsRegions": true
                    }
                ],
                "CreationTime": 1624454176.124,
                "LastUpdatedTime": 1626426755.504
            }
        ]
    }

现在我想将上面的 accountIds 附加到任何新帐户上,比如 1234567 这应该给我结果,例如

Now I want to append the accountIds above with any new account say 1234567 which should give me result such as

{
    "ConfigurationAggregators": [
        {
            "ConfigurationAggregatorName": "test-config",
            "ConfigurationAggregatorArn": "arn:aws:config:us-east-1:8778:config-aggregator/test-config-pzf",
            "AccountAggregationSources": [
                {
                    "AccountIds": [
                        "895677,1234567"
                    ],
                    "AllAwsRegions": true
                }
            ],
            "CreationTime": 1624454176.124,
            "LastUpdatedTime": 1626426755.504
        }
    ]
}

我想做的是:

- name: Export results to JSON
  set_fact:
    config_ouput_json: "{{ config_ouput + [{"AccountIds": "1234567","AllAwsRegions": true}]}}"

但这不起作用,请告诉我正确的语法.

but this doesn't work, please let me know the right syntax.

推荐答案

基本上你需要一些 JSON 操作来完成你的任务.

Basically you require bit of JSON manipulation to achieve your task.

步骤:

  1. 将第一个命令的输出存储在某个 json 文件中.在您的情况下,您可以将其保留为 ansible 的注册变量.

  1. Store output of first command in some json file. In your case you can keep that as registered variable of ansible.

获取某个变量中现有的account_ids.

Get existing account_ids in some variable.

创建一个 list 新帐户作为 ansible 中的变量.

Create a list of new accounts as variables in ansible.

迭代新的 account_id 并添加到现有的 account_id.

Iterate over new account_ids and add to existing account_ids.

更新 aws 配置命令.

Update the aws config command.

示例代码:

- name: initial validation
  hosts: localhost
  connection: local
  vars:
    newAccountIds:
      - "123456"
      - "566544"
      - "555445"

  tasks:
  - name: register json file
    include_vars:
      file: 'abc.json'
      name: bundle

  - name: set value
    set_fact:
      values: "{{ bundle['ConfigurationAggregators'][0]['AccountAggregationSources'][0]['AccountIds'] }}"

  - set_fact:
      values: "{{ (values | default([])) + [item] }}"
    with_items: "{{ newAccountIds }}"

  - debug:
      msg: "{{ values }}"

  - debug:
      msg: '"aws configservice put-configuration-aggregator --configuration-aggregator-name test-config --account-aggregation-sources "[{"AccountIds": {{ values | to_json }},"AwsRegions": ["us-east-1"]}]\""'

样本输出:

PLAY [initial validation] ********************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [localhost]

TASK [register json file] ********************************************************************************************
ok: [localhost]

TASK [set value] *****************************************************************************************************
ok: [localhost]

TASK [set_fact] ******************************************************************************************************
ok: [localhost] => (item=123456)
ok: [localhost] => (item=566544)
ok: [localhost] => (item=555445)

TASK [debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": [
        "895677",
        "123456",
        "566544",
        "555445"
    ]
}

TASK [debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "\"aws configservice put-configuration-aggregator --configuration-aggregator-name test-config --account-aggregation-sources \"[{\"AccountIds\": [\"895677\", \"123456\", \"566544\", \"555445\"],\"AwsRegions\": [\"us-east-1\"]}]\\\"\""}

PLAY RECAP ***********************************************************************************************************
localhost                  : ok=6    changed=0    unreachable=0    failed=0

这篇关于如何使用特定数据附加 JSON 数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆