2016-05-28 3 views
0

Я пытаюсь использовать Ansible для создания двух экземпляров, по одному в двух подсетях, используя приведенную ниже игру. Я использую exact_count с именем тега для отслеживания экземпляров. Здесь есть две проблемы:Ansible: создавать экземпляры в разных подсетях

  1. Ansible завершает создание двух экземпляров в первой подсети и сообщает [ok] для второй подсети.
  2. Ansible, похоже, не заботится о остановленных экземплярах. Он создает новые экземпляры вместо запуска существующих или по крайней мере рассматривает их как часть группы экземпляров.
- name: Create kafka instances 
    with_items: 
     - "{{ vpc_pvt_subnet_2 }}" 
     - "{{ vpc_pvt_subnet_1 }}" 
    ec2:  
     group: "{{ kafka_sg }}" 
     key_name: "{{ ec2_keypair }}" 
     region: "{{ region }}" 
     image: "{{ ami_id }}" 
     wait: true 
     instance_type: "{{ kafka_inst_type }}" 
     vpc_subnet_id: "{{ item }}" 
     instance_tags: 
     Name: "kafka-instance"   
     Owner: data 
     exact_count: 2 
     count_tag: 
     Name: "kafka-instance" 
    register: ec2 

Может кто-то пожалуйста, скажите мне, что случилось с PlayBook здесь?

ответ

2

Предполагая, что вы хотите создать экземпляр 1 EC2 в каждой подсети, одна видна ошибка в фрагменте кода вы указали, что значение exact_count должен быть установлен в 1 (не 2), потому что with_items будет цикл запустить ec2 модуль дважды ваш плейер. Вы хотите, чтобы каждая итерация создавала ровно 1 экземпляр.

Далее, я отвечу по вашим вопросам -

1] Необходимо указать zone параметр, а также для ec2 модуля. Поскольку zone динамична согласно vpc_subnet_id, я хотел бы предложить следующую структуру -

В вашем Варсе -

subnets: 
    - { zone: "us-east-1a", vpc_pvt_subnet: "subnet-abcdafa5"} 
    - { zone: "us-east-1b", vpc_pvt_subnet: "subnet-zyxwvb51"} 

В ec2 задаче -

- name: "Create kafka instances" 
    with_items: "{{ subnets }}" 
    ec2: 
    group: "{{ kafka_sg }}" 
    key_name: "{{ ec2_keypair }}" 
    region: "{{ region }}" 
    image: "{{ ami_id }}" 
    wait: true 
    instance_type: "{{ kafka_inst_type }}" 
    vpc_subnet_id: "{{ item.vpc_pvt_subnet }}" 
    zone: "{{ item.zone }}" 
    instance_tags: 
     Name: "kafka-instance" 
     Owner: "data" 
    exact_count: 1 
    count_tag: 
     Name: "kafka-instance" 
    register: ec2 

2] Да, вышеупомянутый способ всегда будет создавать новый экземпляр, даже если экземпляр уже существует в подсети с «остановленным» состоянием, как если бы этот экземпляр никогда не существовал. Если вы хотите явно запустить «остановленные» экземпляры по тегам, вы можете добиться этого, передав параметр state в новую задачу ec2 - вы не можете использовать параметры state и exact_count вместе в одной и той же задаче.

Надеюсь, это поможет!

+0

Ваш ответ на первый вопрос решил мою проблему, хотя я не уверен, почему этого недостаточно, чтобы указать только подсеть. Другими словами, почему Ansible требует, чтобы я снова упоминал зону, поскольку подсеть навсегда привязана к определенному AZ? Я попытался использовать отдельную задачу ec2 для запуска остановленных экземпляров, но у меня возникла другая проблема, которую я не могу сразу вспомнить. Я думаю, что это связано с ожиданием, чтобы экземпляры запускались перед запуском задач настройки на них. Я добавлю ответ после того, как повторю попытку (и затем отметьте это как ответ). Спасибо! – urover

+0

@urover у вас когда-нибудь была возможность проверить это? – rk2

Смежные вопросы