Я пытаюсь запустить эту команду, но мне нужно извлечь 2 переменные.
- debug:
msg: my DB ARNs are {{ (registered.stdout | from_json)
| json_query('DBInstances[*].DBInstanceArn') }}
Мне нужны DBInstanceArn и CACertificateIdentifier. Я пытался использовать aws rds description-db-instance, но это не сработало, поскольку CACertificateIdentifier не является допустимым фильтром. По сути, мне нужно настроить таргетинг только на экземпляры RDS, которые являются! = Rds-ca-2019
. Затем я зарегистрирую эти данные и затем выполню aws rds apply-pending-maintenance-action
и l oop через предыдущие зарегистрированные данные. В этих данных мне понадобится только DBInstanceArn
Ниже приведен код с кодом.
Это задача, которая вызывает API для aws номера счета
tasks:
- name: Get Account Info
uri:
url: "url"
return_content: yes
register: api
Теперь я принимаю на себя роль в указанной AWS учетной записи, которая была обнаружена с помощью вызова API.
- name: Assume Role for AWS Account
command: "aws sts assume-role --role-arn arn:aws:iam::{{api.json.id}}:role/{{api.json.roles[0]|replace('[','')|replace(']','')}} --role-session-name {{api.json.env}} --output json"
register: assumed
От здесь я устанавливаю факты для ключа доступа, секретного ключа и токена сеанса.
- name: Set access key fact
set_fact:
access_key: "{{ (assumed.stdout | from_json)['Credentials']['AccessKeyId'] }}"
- name: Set secret key fact
set_fact:
secret_key: "{{ (assumed.stdout | from_json)['Credentials']['SecretAccessKey'] }}"
- name: Set Session Token fact
set_fact:
session_token: "{{ (assumed.stdout | from_json)['Credentials']['SessionToken'] }}"
Я описываю экземпляры RDS в той же учетной записи с указанием учетных данных
- name: Describe RDS Instances
command: "aws rds describe-db-instances --output json"
environment:
AWS_ACCESS_KEY_ID: "{{access_key}}"
AWS_SECRET_ACCESS_KEY: "{{secret_key}}"
AWS_SESSION_TOKEN: "{{session_token}}"
register: aws_rds
Отсюда я пытаюсь получить CACertificateIdentifier
Так что я могу нацелиться только на кластеры rds, которые имеют значение rds-ca-2015
или != 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"
}
Вот где я застрял. Мне нужно запросить экземпляры и нацелить их только на CACertificateIdentifier
из rds-ca-2015
или != rds-ca-2019
.
Еще раз спасибо за помощь !!
Jo sh