2016-07-19 13 views
0

Я могу создать экземпляр, установить и создать AMI. Я застрял, когда хочу скопировать этот AMI во все доступные регионы.Ansible - EC2 Create-Install-AMI-CopyAMI

Что-то вроде:
forEach (region in regions): copy-ami to region done

Что у меня есть:
- Create Instance
- Установите материал
- Создание AMI на основе значений, возвращаемых из "Create Instance"
- Копирование AMI всех регионов основанный на «Создать AMI» - (Не работает!)

Это правильный способ сделать это? Как я буду делать это правильно?

(я знаю, что это не правильный путь, стремясь узнать, как это сделать) Пример из пьес:
- hosts: local connection: local gather_facts: no roles: - { role: copy_ami, ec2_region: [ "ap-south-1" ]}

Ошибка сбщ:
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'region'"}

Что роль выглядит :
- ec2_ami_copy: source_region: "{{ item.region }}" region: "{{ ec2_region }}" source_image_id: "{{ item.image_id }}" wait: yes tags: Name: "{{ item.tags.Name }}" description: "{{ item.tags.Name }}" with_items: "{{ec2_storm_ami}}" register: ec2_ami_copy

Спасибо,

+0

Можете ли вы показать раздел воспроизведения, в котором копируется ами, а также полученную ошибку? – linuxdynasty

+0

уверен. Я знаю, что я не делаю это правильно. Я хотел бы знать правильный путь. Я пробовал использовать вложенную петлю, но попал в тупик. В основном потому, что я не понимаю, я уверен. – Asaphe

+0

Можете ли вы отредактировать свой пост (а не комментарий), чтобы показать пьесу, а также ошибку. – linuxdynasty

ответ

0

Весь «with_items» & при использовании нескольких ролей «зарегистрировать» взял меня когда-нибудь, чтобы полностью понять, espically.

Решение: Playbook - содержащий AWS играет (Create_EC2, Установка/настройка, AMI и AMI_Copy) Роли - (Как было отмечено выше)

Как же я Переберите регионы? что оказалось проще, чем мои первоначальные попытки. Ключ должен был понять, как «зарегистрироваться» на самом деле работает и работает с результирующим JSON.

Переменная «ec2_instance» зарегистрирована как часть создания экземпляра, возможно, вы можете просто зарегистрировать «ec2_instance.instances» и сэкономить себе некоторую типизацию. (Если вы не используете другие части json)

Использование регистра означает, что переменная доступна для воспроизведения в одной и той же книжке. (Сначала был смущен этой частью)

- name: Copying AMI ec2_ami_copy: source_region: "{{ ec2_instance.instances[0].region }}" region: "{{ item }}" source_image_id: "{{ ec2_instance.instances[0].image_id }}" wait: yes with_items: - us-west-1 - eu-west-1 Возможно, вы можете использовать массив для «with_items» здесь. это просто быстро & грязный.

Надеюсь, что это поможет больше новичков в будущем.

Окончательная рекомендация: Использование: - debug: var=myvariable с различными вариантами, чтобы быть уверенным, что вы получаете то, что хотите, работает с -vvvv.

0

Согласно документам для модуля ec2_ami_copy.

- ec2_ami_copy: 
    source_region: us-east-1 
    region: eu-west-1 
    source_image_id: ami-xxxxxxx 

Поскольку вы хотите скопировать в несколько регионов. Вы можете сделать set_fact и создать список регионов в playbook. использование плагина with_items позволит вам перебирать список или словарь.

- set_fact: 
    aws_regions: 
     - us-west-1 
     - us-west-2 

- ec2_ami_copy: 
    source_region: us-east-1 
    region: "{{ item }}" 
    source_image_id: ami-xxxxxxx 
    with_items: "{{ aws_regions }}" 
+0

Выглядит отлично, и можно ли автоматизировать процесс * whole *? Значение 'source_image_id' будет взято из предыдущей роли, создавшей AMI? – Asaphe

+0

Если он находится на том же хосте, что и «да», если нет, то нет. Если вы пытаетесь получить доступ к ami_id через хосты, вам придется использовать модуль или написать собственный фильтр. модуль ec2_ami_find может помочь вам http://docs.ansible.com/ansible/ec2_ami_find_module.html#examples – linuxdynasty

+0

Итак, теперь я думаю, что я должен отделить эту роль от другой пьесы. Позвоните в ec2_ami_find, получите последнюю версию, скопируйте ее в различные регионы. Не уверен, что вы копируете во все регионы. – Asaphe

0

Было непростое время, потому что копирование было простым, но выход был жестким. Я использую var_input для amiid, а затем использую это в этой программе. Мне нужен выходной файл, который имеет информацию о регионе и ami. Вставка этой рабочей, которая поможет другим, кто хочет распечатать вывод в каком-либо файле

--- 

- ec2_ami_copy: 
    source_region: us-east-1 
    region: "{{ item }}" 
    source_image_id: "{{ amiid }}" 
    encrypted: no 
    wait: yes 
    name: "image copied from {{ amiid }} of N.Virginia" 
    description: "This is working" 
    with_items: 
    - us-west-1 
    - eu-west-1 
    register: imageid 

- name: Debug variables 
    debug: 
    msg: "{{ imageid }}" 

- name: "Write info to Region-Ami.txt " 
    lineinfile: 
    dest: "{{ playbook_dir }}/Region-AMI-Info/Region-Ami.txt" 
    regexp: "^{{ item.key }}" 
    line: "{{ item.key }}: {{ '\"' + item.value + '\"' }}" 
    with_items: 
    - { key: 'aws_region', value: "{{ imageid.results[0].item }}" } 
    - { key: 'AMI-ID', value: "{{ imageid.results[0].image_id }}" } 
    - { key: 'aws_region', value: "{{ imageid.results[1].item }}" } 
    - { key: 'AMI-ID', value: "{{ imageid.results[1].image_id }}" }