Amazon web services 使用json_查询提取2个变量
我试图运行这个命令,但我需要提取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不是有效的
- 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 }}"