【问题标题】:Using ansible to parse and loop over a json file to post back to a curl使用 ansible 解析和循环 json 文件以回发到 curl
【发布时间】:2020-12-09 19:28:03
【问题描述】:

我正在尝试使用 ansible 解析 json,因此我可以使用 curl 命令将其发布回 API。我认为 with_together 可能是最好的方法,但我似乎无法为它找到正确的 json 路径,即使它是非常简单的 json。所以json就在这里-

{
                "deploy-account": [{
                                "role": "roles/iam.serviceAccountTokenCreator",
                                "members": [
                                        "group:group1@google.com",
                                        "group:group2@google.com"
                                ]
                        }
                ],
                "data_account": [{
                                "role": "roles/iam.serviceAccountTokenCreator",
                                "members": [
                                        "group:group1@google.com"
                                ]
                        },
                        {
                                "role": "roles/iam.serviceAccountKeyAdmin",
                                "members": [
                                        "group:group1@google.com"
                                ]
                        }
                ],
                "dataproc_account": [{
                                "role": "roles/iam.serviceAccountTokenCreator",
                                "members": [
                                        "group:group1@google.com"
                                ]
                        },
                        {
                                "role": "roles/iam.serviceAccountKeyAdmin",
                                "members": [
                                        "group:group3@google.com"
                                ]
                        }
                ]
                
        }

想法是将账户名作为一项,然后将该账户名下的所有内容(无论有多少角色或组)添加到第二项中以推送到 API。但是当我循环它时,它只从每个帐户中获取一个角色并应用它,所以我的循环一定不正确,但我不知道如何。 yml是这样的

      tasks:
      - name: access fact
        set_fact:
        access_auths: "{{ lookup('file', 'stack.json') }}"
     - name: Curl
       uri:
         url: "https://google.com/{{ item.0 }}"
         body:
           policy: 
             bindings: "{{ item.1 }}"
         body_format: json
         method: POST
         headers:
           Content-Type: "application/json"
      with_together: 
        - "{{ access_auths }}"
        - "{{ access_auths | json_query ('*') }}"

所以最终目标是会有许多 json 文件,具有不同数量的帐户,并且 json 将具有不同数量的子元素,它需要处理, 在这种情况下的想法是

item.0 - 部署帐户
item.1 - [{"role": "roles/iam.serviceAccountTokenCreator","members": [ "group:group1@google.com","group:group2@google.com"]

下一个循环
item.0 - 数据帐户
item.1 - [{"role": "roles/iam.serviceAccountTokenCreator","members": ["group:group1@google.com"]},{"role": "roles/iam.serviceAccountKeyAdmin","members ": ["group:group1@google.com"]

正如我上面所说,当我运行它时遇到的问题是,如果一个帐户分配了 2 个角色,它会循环那个角色两次并覆盖第一个角色,有没有更好的方法来访问 json 而不是我的查询? with_together 是最好的方法吗?

【问题讨论】:

    标签: json ansible


    【解决方案1】:

    我最终使用了 with_dict,因为它只需要键和值,而且它有效

    loop: "{{ lookup('dict', access_auths) }}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2018-11-04
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多