Я знаю, что это связано с другими вопросами, которые задавались в прошлом, но я чувствую, что это не так.Вы будете судить об этом.
Я использую Ansible уже 1,5 года и знаю, что это не лучший инструмент для обеспечения инфраструктуры, но для моих нужд этого достаточно.
Я использую AWS в качестве своего облачного провайдера
Есть ли способ заставить Ansible предоставлять несколько точечных экземпляров одного типа (аналогично атрибуту count в ec2 ответный модуль) с instance_interruption_behavior , установленным в stop (поведение) вместо значения по умолчанию , прекращается?
Моя цель:
Настройка нескольких экземпляров EC2 с различными ec2_spot_requests для Amazon.(выборочный запрос для каждого экземпляра) Но вместо использования по умолчанию instance_interruption_behavior , который завершается, я хочу установить его на останов (поведение)
Что я сделал до сих пор:
Я знаю, что Ansible имеет следующий модуль для управления инфраструктурой ec2.В основном это
ec2. https://docs.ansible.com/ansible/latest/modules/ec2_module.html
Не следует путать с ec2_instance module .
https://docs.ansible.com/ansible/latest/modules/ec2_instance_module.html
Я мог бы использовать модуль ec2 для настройки точечных экземпляров, как я уже сделал, следующим образом:
ec2:
key_name: mykey
region: us-west-1
instance_type: "{{ instance_type }}"
image: "{{ instance_ami }}"
wait: yes
wait_timeout: 100
spot_price: "{{ spot_bid }}"
spot_wait_timeout: 600
spot_type: persistent
group_id: "{{ created_sg.group_id }}"
instance_tags:
Name: "Name"
count: "{{ my_count }}"
vpc_subnet_id: " {{ subnet }}"
assign_public_ip: yes
monitoring: no
volumes:
- device_name: /dev/sda1
volume_type: gp2
volume_size: "{{ volume_size }}"
Pre Problem:
Приведенный выше пример модуля хорош и чист и позволяет мне настроить точечный экземпляр в соответствии с моими требованиями, используя ec2 модуль и атрибут count .
Тем не менее, он не позволяет мне установить instance_interruption_behavior для остановки(если я не беспокоюсь), это просто по умолчанию, чтобы прекратить.
Другие модули:
Будет выпущено Доступная версия 2.8.0 (В настоящее времядоступен только в разработке), есть новый модуль под названием: ec2_launch_template
https://docs.ansible.com/ansible/devel/modules/ec2_launch_template_module.html
Этот модуль дает вам больше атрибутов, что позволяетВы, с помощью комбинации модуля ec2_instance, установите желаемое значение instance_interruption_behavior для остановки (поведение).Вот что я сделал:
- hosts: 127.0.0.1
connection: local
gather_facts: True
vars_files:
- vars/main.yml
tasks:
- name: "create security group"
include_tasks: tasks/create_sg.yml
- name: "Create launch template to support interruption behavior 'STOP' for spot instances"
ec2_launch_template:
name: spot_launch_template
region: us-west-1
key_name: mykey
instance_type: "{{ instance_type }}"
image_id: "{{ instance_ami }}"
instance_market_options:
market_type: spot
spot_options:
instance_interruption_behavior: stop
max_price: "{{ spot_bid }}"
spot_instance_type: persistent
monitoring:
enabled: no
block_device_mappings:
- device_name: /dev/sda1
ebs:
volume_type: gp2
volume_size: "{{ manager_instance_volume_size }}"
register: my_template
- name: "setup up a single spot instance"
ec2_instance:
instance_type: "{{ instance_type }}"
tags:
Name: "My_Spot"
launch_template:
id: "{{ my_template.latest_template.launch_template_id }}"
security_groups:
- "{{ created_sg.group_id }}"
Основная проблема:
Как видно из приведенного выше фрагмента кода, ec2_launch_template Ansible модуль не поддерживает атрибут count , а модуль ec2_instance не позволяетэто либо.
Есть ли какой-либо способ заставить ansible предоставить несколько экземпляров одного типа (аналогично атрибуту count в модуле ec2 ansible)?