Ich versuche, ein AWS EC2 ansible Textbuch zu erstellen, dass:ansible: Der Versuch, in einem mehrere EC2-Instanzen in mehreren Regionen erstellen Schuss
1) ersten VPC jeweils auf drei Regionen zuordnet, die sind: us- West-1, Ap-Nordosten-1 und Eu-West-1.
2) Ermittelt die aktuelle ubuntu AMI für jede Region (ec2_ami_search),
3 dann) die ermittelten Ergebnisse von 1) unter Verwendung von und 2), einer EC2 Instanz pro Region mit der neuesten ubuntu AMI erstellen (zum die Region) mit Availibility Zonen us-west-1a, ap-nordost-1a und eu-west-1a, beziehungsweise.
Mit ansible hatte ich kein Problem bei Schritt 1) und 2), die war einfach:
>
tasks:
- name: create a vpc
ec2_vpc:
state: present
region: "{{ item.region }}"
internet_gateway: True
resource_tags: { env: production}
cidr_block: 10.0.0.0/16
subnets:
- cidr: 10.0.0.0/24
az: "{{ item.az }}"
resource_tags:
env: production
tier: public
route_tables:
- subnets:
- 10.0.0.0/24
routes:
- dest: 0.0.0.0/0
gw: igw
with_items:
- region: us-west-1
az: us-west-1a
- region: ap-northeast-1
az: ap-northeast-1a
- region: eu-west-1
az: eu-west-1a
...
- name: Get the ubuntu trusty AMI
ec2_ami_search: distro=ubuntu release=trusty virt=hvm region={{ item }}
with_items:
- us-west-1
- ap-northeast-1
- eu-west-1
register: ubuntu_image
...
>
und die für die ubuntu_image Variable mit Austestmodul ausgegeben:
TASK: [print out ubuntu images] ***********************************************
ok: [localhost] => {
"ubuntu_image": {
"changed": false,
"msg": "All items completed",
"results": [
{
"aki": null,
"ami": "ami-b33dccf7",
"ari": null,
"changed": false,
"invocation": {
"module_args": "distro=ubuntu release=trusty virt=hvm region=us-west-1",
"module_name": "ec2_ami_search"
},
"item": "us-west-1",
"serial": "20150629",
"tag": "release"
},
{
"aki": null,
"ami": "ami-9e5cff9e",
"ari": null,
"changed": false,
"invocation": {
"module_args": "distro=ubuntu release=trusty virt=hvm region=ap-northeast-1",
"module_name": "ec2_ami_search"
},
"item": "ap-northeast-1",
"serial": "20150629",
"tag": "release"
},
{
"aki": null,
"ami": "ami-7c4b0a0b",
"ari": null,
"changed": false,
"invocation": {
"module_args": "distro=ubuntu release=trusty virt=hvm region=eu-west-1",
"module_name": "ec2_ami_search"
},
"item": "eu-west-1",
"serial": "20150629",
"tag": "release"
}
]
}
}
jedoch I konnte nicht herausfinden, wie man Schritt 3) das Ergebnis von der ubuntu_image Registervariable nehmen und dann bestimmen, welche der 3 AMIs und Subnetze der gegebenen EC2-Instanz gehörte. Siehe unten, wo als Behelfslösung ich den ami und Subnet Wert manuell fest einprogrammiert , die ich einfach aus dem Ausdruck aus dem oben ubuntu_image Ausdruck bekam:
- name: start the instances
ec2:
image: "{{ item.ami }}" # MANUALLY HARDCODED
region: "{{ item.region }}"
instance_type: "{{ instance_type }}"
assign_public_ip: True
key_name: "{{ item.name }}"
group: ["http deployment", "ssh deployment", "outbound deployment"]
instance_tags: { Name: "{{ item.name }}", type: ss, env: production}
exact_count: "{{ count }}"
count_tag: { Name: "{{ item.name }}" }
vpc_subnet_id: "{{ item.subnet }}" #MANUALLY HARDCODED
wait: yes
register: ec2
with_items:
- region: us-west-1
name: ss12
ami: ami-b33dccf7 # MANUALLY HARDCODED
subnet: subnet-35a22550 # MANUALLY HARDCODED
- region: ap-northeast-1
name: ss21
ami: ami-9e5cff9e # MANUALLY HARDCODED
subnet: subnet-88c47dff # MANUALLY HARDCODED
- region: eu-west-1
name: ss32
ami: ami-7c4b0a0b # MANUALLY HARDCODED
subnet: subnet-23f59554 # MANUALLY HARDCODED
Während ami/Subnetz Werke hartzucodieren, können Sie eine Lösung denken für ich um diese hardcoding der ami/subnetz zu vermeiden? Ich habe versucht, mit set_fact ohne Erfolg durcheinander, wie ich es nicht ein Wörterbuch der „Region ami“ Werte-Mappings zu werden erhalten könnte zu