ansible :任務輸出重定向到下一個任務作為輸入

ansible :任務輸出重定向到下一個任務作為輸入

您好,我可以在下面的劇本中獲得所需的輸出,其中我使用了以下 2 個任務aws-create-rdsaws-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 個不同的角色。第一個aws-create-rds和第二個是aws-create-route53-record 我希望將來在 ansible 中將它們用作獨立角色,但是我不確定如何傳遞endpoint來自aws-create-rds任務的值並將其傳遞給dns 記錄並aws-create-route53-record使用它。我檢查了 rds 模組文檔,其中沒有端點的返回值。另外還有 2 個用例,如下圖所示。valueroute53

 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 個不同的角色/任務並在劇本中呼叫它們。下面是任務。第一個稱為 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 }}"

相關內容