Ansible 从AWS RDS描述数据库实例访问AWS RDS Arn

Ansible 从AWS RDS描述数据库实例访问AWS RDS Arn,ansible,Ansible,我正在使用Ansible访问我帐户中的一些RDS群集。我有命令处理这个 这是输入数据 "stdout_lines": [ "{", " \"DBInstances\": [", " {", " \"PubliclyAccessible\": false, ", " \"MasterUsername\": \"xxx

我正在使用Ansible访问我帐户中的一些RDS群集。我有命令处理这个

这是输入数据

"stdout_lines": [
            "{",
            "    \"DBInstances\": [",
            "        {",
            "            \"PubliclyAccessible\": false, ",
            "            \"MasterUsername\": \"xxxxx\", ",
            "            \"MonitoringInterval\": 0, ",
            "            \"LicenseModel\": \"general-public-license\", ",
            "            \"VpcSecurityGroups\": [",
            "                {",
            "                    \"Status\": \"active\", ",
            "                    \"VpcSecurityGroupId\": \"xxxx\"",
            "                }",
            "            ], ",
            "            \"InstanceCreateTime\": \"xxxxxx\", ",
            "            \"CopyTagsToSnapshot\": false, ",
            "            \"OptionGroupMemberships\": [",
            "                {",
            "                    \"Status\": \"in-sync\", ",
            "                    \"OptionGroupName\": \"xxxxx\"",
                         ........
            "            \"DBInstanceArn\": \"arn:aws:rds:region:xxxx:db:xxxx\", ",
                          .......
运行下面的命令时,目标是数组中的[0]项,我将收到此输出

“{(registered.stdout_line | from_json)['DBInstances'][0]['DBInstanceArn']}”

我可以通过如下方式指定所需的项。我需要其中的数组ID,因为其中有3个。我尝试过以这种方式运行它。但我获得了所有数据

 - name: Show
      set_fact:
         var: "item.db_instance_arn"
       with_items: "{{rds.instances}}"
       register: variable
我也得到了我想要的事实。我只是不能输出那个单独的事实

有没有办法命中数组中的所有项并输出所需的一个变量

提前感谢。新年快乐!

您需要的是
(registed.stdout | from_json)
,而不是
(registed.stdout | from_json)}
,因为
stdout\u行
列表
str
,但是来自json的
想要一个
str
——我很惊讶你的问题没有包含你遇到的错误消息,因为它肯定会产生一个错误消息

然后,在理顺JSON解析之后,您将希望使用,因为正如您所观察到的,
DBInstances
是一个
列表,这意味着您需要像这样有效地迭代其对象:

- debug:
    msg: my DB ARNs are {{
       (registered.stdout | from_json).DBInstances
       | map(attribute="DBInstanceArn")
       | list }}
如果愿意,您可以使用使用语法的,尽管大多数时候我觉得它更不透明,而不是有用:

- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].DBInstanceArn') }}

您能编辑您的问题并添加输入数据的示例和预期结果的示例吗?谢谢。已更新。希望它现在更有意义。谢谢!什么是“rds.instances”在您的循环中?其中的数据是什么?您当前得到的结果是什么?您期望得到的结果是什么?rds是我注册的内容,来自descripe命令,instances是从数据返回的第一个值。我当前得到的结果是数组中的3个实例,后跟我要查找的值。我希望得到我想要的值。你能再次编辑你的问题并添加完整/有效的调试(可以直接在变量定义中复制/粘贴)吗
rds.instances的
和yaml或json格式的确切预期输出?您还应该花一些时间阅读网站的帮助部分,更具体地说,谢谢您!这解决了我的问题。我能够使用这两个选项并获得所需的数据。非常感谢您的帮助。现在我需要注册这些和对每个RDS实例运行任务。因此,现在我尝试运行相同的命令,但需要提取2个变量。我需要
DBInstanceArn
CACertificateIdentifier
。我尝试使用
aws RDS descripe db实例
,但这不起作用,因为
CACertificateIdentifier
不是有效的筛选器。基本上,我只需要针对RDS实例!=到RDS-ca-2019Comments不是提出新问题或发布代码的好论坛;尝试提出有关
CACertificateIdentifier
的新问题,并包括您在尝试访问它时遇到的错误谢谢。现在将进行更改。
- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].DBInstanceArn') }}