
Hallo, ich kann die gewünschte Ausgabe in meinem Playbook unten erhalten, wo ich 2 Aufgaben wie folgt verwende aws-create-rds
undaws-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
Die Aufgabendefinition hierfür aws-create-rds
lautet wie folgt:
---
- 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
Da es in dieser Aufgabe nun zwei Aufgaben gibt, möchte ich sie in zwei verschiedene Rollen aufteilen. Die erste aws-create-rds
und die zweite aws-create-route53-record
möchte ich in Zukunft als unabhängige Rollen in Ansible verwenden, bin mir jedoch nicht sicher, wie ich endpoint
den Wert aus aws-create-rds
der Aufgabe übergeben und ihn als DNS-Eintrag aws-create-route53-record
verwenden kann . Ich habe die Dokumentation des RDS-Moduls geprüft und es gibt darin keinen Rückgabewert für den Endpunkt. Außerdem gibt es dafür zwei Anwendungsfälle, die unten angegeben sind.value
route53
1. route53 record value can be passed through group_vars OR
2. route53 record value can be passed from any previous ansible task executed.
Ich möchte beide Bedingungen in der aws-create-route53-record
Aufgabe behandeln. Irgendeine Ahnung, wie das erreicht werden kann? Umgebungsvariable oder so. Vielen Dank im Voraus.
Antwort1
Um dies zu erreichen, habe ich 2 verschiedene Rollen/Aufgaben geschrieben und sie in einem Playbook aufgerufen. Unten sind die Aufgaben. Die erste heißt 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 }}"
Und die zweite Aufgabe ist 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 }}"