Использование json_query для извлечения 2 переменных - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь запустить эту команду, но мне нужно извлечь 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

1 Ответ

0 голосов
/ 08 января 2020

Q: "Мне нужны 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}') }}

Q: "Есть ли способ сказать, что я ищу CACertificateIdentifier != rds-sa-2019?"

A: Можно использовать selectattr для выбора соответствующего data. Например (= rds-ca-2015)

- set_fact:
    data_selected: "{{ data|
                       selectattr('CACertificateIdentifier',
                                  'match',
                                  '^rds-ca-2015$')|
                       list }}"

Чтобы отфильтровать совпадения data, используйте rejectattr . Например (!= rds-ca-2019)

- set_fact:
    data_selected: "{{ data|
                       rejectattr('CACertificateIdentifier',
                                  'match',
                                  '^rds-ca-2019$')|
                       list }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...