ansible: Перенаправление выходных данных задачи на следующую задачу в качестве входных данных

ansible: Перенаправление выходных данных задачи на следующую задачу в качестве входных данных

Привет, я могу получить желаемый результат в моем плейбуке ниже, где я использую 2 задачи следующим образом aws-create-rdsиaws-create-route53-record

---
# Playbook for creating aws rds instance and then creating route53 dns record.

- name: setup aws-rds-instances
  hosts: localhost
  roles:
     - aws-create-rds

Определение задачи выглядит aws-create-rdsследующим образом.

---

- name: create an rds instance
  rds:
    command: create
    aws_access_key: "{{ aws_create_rds.access_key }}"
    aws_secret_key: "{{ aws_create_rds.secret_key }}"
    db_name: "{{ aws_create_rds.db_name }}"
    instance_name: "{{ aws_create_rds.name }}"
    db_engine: "{{ aws_create_rds.db_engine }}"
    size: "{{ aws_create_rds.db_size }}"
    instance_type: "{{ aws_create_rds.instance_type }}"
    username: "{{ aws_create_rds.username }}"
    password: "{{ aws_create_rds.password }}"
    subnet: "{{ aws_create_rds.subnet }}"
    region: "{{ aws_create_rds.region }}"
    zone: "{{ aws_create_rds.zone }}"
    publicly_accessible: "{{ aws_create_rds.access }}"
    backup_retention: "{{ aws_create_rds.retention }}"
    vpc_security_groups: "{{ aws_create_rds.aws_sg_name }}"
    port: "{{ aws_create_rds.port }}"
    wait: yes
    wait_timeout: 900
    tags:
      created_by: ansible
  register: rds



 - name: Create a route53 record for RDS instance.
      route53:
        state: present
        aws_access_key: "{{ aws_create_route53_record.access_key }}"
        aws_secret_key: "{{ aws_create_route53_record.secret_key }}"
        zone: "{{ aws_create_route53_record.zone }}"
        hosted_zone_id: "{{ aws_create_route53_record.id }}"
        type:  "{{ aws_create_route53_record.type }}"
        value: "{{ rds.instance.endpoint }}"
        record: "{{  aws_create_route53_record.record }}"
        private_zone: "{{  aws_create_route53_record.private_zone }}"
        ttl: 30

Теперь, поскольку в этой задаче есть 2 задачи, я хочу разделить их на 2 разные роли. 1-я как aws-create-rdsи 2-я как aws-create-route53-record я хотел бы использовать их как независимые роли в ansible в будущем, однако я не уверен, как я могу передать endpointзначение, поступающее из aws-create-rdsзадачи, и передать его aws-create-route53-recordи использовать его как valueв route53записи DNS. Я проверил документацию модуля rds, и в ней нет возвращаемого значения для конечной точки. Также есть 2 варианта использования для этого, как указано ниже.

 1. route53 record value can be passed through group_vars OR
 2. route53 record value can be passed from any previous ansible task executed.

Я хочу обработать оба условия в aws-create-route53-recordзадаче. Есть ли подсказка, как этого можно добиться. Переменная окружения или что-то еще. Заранее спасибо.

решение1

Чтобы добиться этого, я написал 2 разные роли/задачи и назвал их в playbook. Ниже приведены задачи. Первая называется aws-create-rds

- name: create an rds instance
  rds:
    command: create
    aws_access_key: "{{ aws_create_rds.access_key }}"
    aws_secret_key: "{{ aws_create_rds.secret_key }}"
    db_name: "{{ aws_create_rds.db_name }}"
    instance_name: "{{ aws_create_rds.name }}"
    db_engine: "{{ aws_create_rds.db_engine }}"
    size: "{{ aws_create_rds.db_size }}"
    instance_type: "{{ aws_create_rds.instance_type }}"
    username: "{{ aws_create_rds.username }}"
    password: "{{ aws_create_rds.password }}"
    subnet: "{{ aws_create_rds.subnet }}"
    region: "{{ aws_create_rds.region }}"
    publicly_accessible: "{{ aws_create_rds.publicly_access }}"
    backup_retention: "{{ aws_create_rds.retention }}"
    vpc_security_groups: "{{ aws_create_rds.aws_sg_name }}"
    multi_zone: "{{ aws_create_rds.multi_zone }}"
    port: "{{ aws_create_rds.port }}"
    wait: yes
    wait_timeout: 900
    tags:
      created_by: ansible
  register: rds

- name: Assigning rds endpoint value to variable.
  set_fact:
    endpoint_host: "{{ rds.instance.endpoint }}"

И вторая задача — aws-create-route53-record.

---
-
  name: "Set facts of record value"
  set_fact:
    record_value: "{{ aws_create_route53_record.value }}"
-
  name: "If record value not present, Look for endpoint-host variable"
  set_fact:
    record_value: "{{ endpoint_host }}"
  when: "aws_create_route53_record.value == \"\""
-
  name: "Create a route53 record for RDS instance."
  route53:
    aws_access_key: "{{ aws_create_route53_record.access_key }}"
    aws_secret_key: "{{ aws_create_route53_record.secret_key }}"
    hosted_zone_id: "{{ aws_create_route53_record.hosted_zone_id }}"
    private_zone: "{{  aws_create_route53_record.private_zone }}"
    record: "{{  aws_create_route53_record.record }}"
    state: present
    ttl: 30
    type: "{{ aws_create_route53_record.type }}"
    value: "{{ record_value }}"
    zone: "{{ aws_create_route53_record.zone }}"

Связанный контент