Amazon web services 使用json_查询提取2个变量

Amazon web services 使用json_查询提取2个变量,amazon-web-services,ansible,amazon-rds,aws-cli,Amazon Web Services,Ansible,Amazon Rds,Aws Cli,我试图运行这个命令,但我需要提取2个变量 - debug: msg: my DB ARNs are {{ (registered.stdout | from_json) | json_query('DBInstances[*].DBInstanceArn') }} 我需要DBInstanceArn和CACertificateIdentifier。我尝试使用aws rds describe db实例,但这不起作用,因为CACertificateIdentifier不是有效的

我试图运行这个命令,但我需要提取2个变量

- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].DBInstanceArn') }}
我需要DBInstanceArn和CACertificateIdentifier。我尝试使用aws rds describe db实例,但这不起作用,因为CACertificateIdentifier不是有效的筛选器。基本上,我只需要针对以下RDS实例!=至rds-ca-2019

然后,我将注册此数据,然后运行aws rds apply pending maintenance action(aws rds应用挂起的维护操作),并通过以前注册的数据循环此操作。在这个数据中,我只需要
DBInstanceArn

下面是代码的更新

这是为aws帐号调用API的任务

我现在在使用API调用定位的AWS帐户中担任角色

从这里,我将设置访问密钥、密钥和会话令牌的事实

我正在描述同一帐户中的RDS实例,并指定凭据

从这里我试图获取
CACertificateIdentifier
,因此我可能只针对具有
rds-ca-2015
值的rds群集rds-ca-2019
。这是一次尝试

- name: Only arns I need
  debug:
    msg: item
   loop: "{{data}}"
   when: ( 'data.CACertificateIdentifier' != 'rds-ca-2019')
但此命令返回两个RDS群集

ok: [localhost] => (item=['arn:aws:rds:us-east-2:xxx:db:test-999', 'rds-ca-2015']) => {
    "msg": "item"
}
ok: [localhost] => (item=['arn:aws:rds:us-east-2:xxx:db:test-888', 'rds-ca-2019']) => {
    "msg": "item"
}
这就是我被困的地方。我需要查询实例,只针对具有
rds-ca-2015
CACertificateIdentifier
的实例rds-ca-2019

再次感谢您的帮助

乔希

问:“我需要DBInstanceArn和CACertificateIdentifier。”

A:试试这个可以得到一个列表

- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].[DBInstanceArn, CACertificateIdentifier]') }}
或者通过这个来获取字典列表

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

问:“有没有办法告诉我正在寻找
CACertificateIdentifier!=rds-sa-2019
?”

答:可以使用来选择匹配的
数据
。例如(
=rds-ca-2015

要过滤掉匹配的
数据
请使用。例如(
!=rds-ca-2019


你能提供一份包括你的输入数据、你目前得到的结果和预期结果的报告吗?这很有效,给了我数据。有没有办法告诉它我正在寻找
CACertificateIdentifier!=rds-sa-2019
?然后注册这些数据?你知道我可以用什么方法正确过滤这些数据吗?我尝试的每一种方法都失败了。我更新了最初的问题并添加了代码运行。希望这有帮助!
- name: Only arns I need
  debug:
    msg: item
   loop: "{{data}}"
   when: ( 'data.CACertificateIdentifier' != 'rds-ca-2019')
ok: [localhost] => (item=['arn:aws:rds:us-east-2:xxx:db:test-999', 'rds-ca-2015']) => {
    "msg": "item"
}
ok: [localhost] => (item=['arn:aws:rds:us-east-2:xxx:db:test-888', 'rds-ca-2019']) => {
    "msg": "item"
}
- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].[DBInstanceArn, CACertificateIdentifier]') }}
- debug:
    msg: my DB ARNs are {{ (registered.stdout | from_json)
       | json_query('DBInstances[*].{db: DBInstanceArn, ca: CACertificateIdentifier}') }}
- set_fact:
    data_selected: "{{ data|
                       selectattr('CACertificateIdentifier',
                                  'match',
                                  '^rds-ca-2015$')|
                       list }}"
- set_fact:
    data_selected: "{{ data|
                       rejectattr('CACertificateIdentifier',
                                  'match',
                                  '^rds-ca-2019$')|
                       list }}"