community.general.spotinst_aws_elastigroup – Создание, обновление или удаление Spotinst AWS Elastigroups
Примечание
Этот плагин входит в коллекцию community.general (версия 1.3.2).
Для его установки используйте: ansible-galaxy collection install community.general.
Для использования в playbook укажите: community.general.spotinst_aws_elastigroup.
Обзор
- Может создавать, обновлять или удалять Spotinst AWS Elastigroups. Настройка запуска (Launch configuration) является частью конфигурации elastigroup, поэтому для обработки конфигурации запуска дополнительных модулей не требуется. Вам понадобится файл с данными в этом расположении — <home>/.spotinst/credentials. Файл credentials должен содержать строку вида token = <ВАШ ТОКЕН>. Полная документация доступна по адресу https://help.spotinst.com/hc/en-us/articles/115003530285-Ansible.
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- python >= 2.7
- spotinst_sdk >= 1.0.38
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| account_id строка | (Строка) Необязательный параметр, позволяющий задать account-id в конфигурации модуля. По умолчанию он извлекается из пути к файлу с данными учетной записи. | |
| availability_vs_cost строка / обязательно | (Строка) Направление стратегии. Доступные варианты: availabilityOriented, costOriented, balanced. | |
| availability_zones список / элементы=строка / обязательно | (Список объектов) Список словарей/списков зон доступности, настроенных в elastigroup; '[{"key":"value", "key":"value"}]'; допустимые ключи: name (строка), subnet_id (строка), placement_group_name (строка), | |
| block_device_mappings список / элементы=строка | (Список объектов) Список словарей/списков отображений блочных устройств для экземпляров elastigroup; Вы можете указать виртуальные устройства и тома EBS.; '[{"key":"value", "key":"value"}]'; допустимые ключи: device_name (список строк), virtual_name (строка), no_device (строка), ebs (объект, ожидаются следующие ключи - delete_on_termination(логическое), encrypted(логическое), iops (целое число), snapshot_id(целое число), volume_type(строка), volume_size(целое число)) | |
| chef словарь | (Объект) Настройка интеграции с Chef.; Ожидаются следующие ключи - chef_server (строка), organization (строка), user (строка), pem_key (строка), chef_version (строка) | |
| credentials_path путь | По умолчанию: "~/.spotinst/credentials" | (Путь) Необязательный параметр, позволяющий задать путь к файлу с данными учетной записи, отличный от стандартного. |
| down_scaling_policies список / элементы=строка | (Список объектов) Список словарей/списков правил масштабирования для конфигурации elastigroup; '[{"key":"value", "key":"value"}]'; допустимые ключи - policy_name (строка, обязательно), namespace (строка, обязательно), metric_name (строка, обязательно), dimensions ((список объектов), Допустимые ключи name (строка, обязательно) и value (строка)), statistic (строка, обязательно), evaluation_periods (строка, обязательно), period (строка, обязательно), threshold (строка, обязательно), cooldown (строка, обязательно), unit (строка, обязательно), operator (строка, обязательно), action_type (строка, обязательно), adjustment (строка), max_target_capacity (строка), target (строка), maximum (строка), minimum (строка) | |
| draining_timeout целое число | (Целое число) Время, в секундах, для удаления экземпляра из входящих запросов и дерегистрации из ELB перед завершением. | |
| ebs_optimized логическое |
| (Логическое) Включить оптимизацию EBS для поддерживаемых экземпляров, которая по умолчанию не включена.; Примечание - будут применяться дополнительные сборы. |
| ebs_volume_pool список / элементы=строка | (Список объектов) Список словарей/списков устройств EBS для повторного подключения к elastigroup при их доступности; '[{"key":"value", "key":"value"}]'; допустимые ключи - volume_ids (список строк), device_name (строка) | |
| ecs словарь | (Объект) Настройка интеграции с ECS.; Ожидается следующий ключ - cluster_name (строка) | |
| elastic_ips список / элементы=строка | (Список строк) Список идентификаторов выделенных IP-адресов (например, eipalloc-9d4e16f8) для ассоциации с экземплярами группы. | |
| fallback_to_od логическое |
| (Логическое) В случае отсутствия доступных Spot-экземпляров Elastigroup запустит экземпляр On-demand вместо него. |
| health_check_grace_period целое число | (Целое число) Время, в секундах, после запуска экземпляра для начала и проверки его состояния. Если не указано, по умолчанию используется 300. | |
| health_check_type строка | (Строка) Сервис, используемый для проверки состояния. Доступные варианты: ELB, HCS, TARGET_GROUP, MLB, EC2. | |
| health_check_unhealthy_duration_before_replacement целое число | (Целое число) Минимальное время, в течение которого экземпляр должен быть неисправен, чтобы мы могли считать его неисправным. | |
| iam_role_arn строка | (Строка) IAM роль arn профиля экземпляра. Используйте только iam_role_arn или iam_role_name | |
| iam_role_name строка | (Строка) Имя IAM роли профиля экземпляра. Используйте только iam_role_arn или iam_role_name | |
| id строка | (Строка) Идентификатор группы, если он уже существует и вы хотите его обновить или удалить. Это не будет работать, если поле uniqueness_by не задано как id. Если это задано, и поле uniqueness_by задано, группа будет либо обновлена, либо удалена, но не создана. | |
| image_id строка / обязательно | (Строка) Идентификатор образа, используемый для запуска экземпляра.; В случае конфликта между типом экземпляра и типом образа будет возвращена ошибка. | |
| key_pair строка | (Строка) Укажите пару ключей для подключения к экземплярам. | |
| kubernetes словарь | (Объект) Настройка интеграции с Kubernetes. Ожидаются следующие ключи - api_server (строка), token (строка) | |
| lifetime_period целое число | (Целое число) Период времени жизни. | |
| load_balancers список / элементы=строка | (Список строк) Список имен классических балансировщиков нагрузки ELB. | |
| max_size целое число / обязательно | (Целое число) Максимальное число экземпляров, до которого можно масштабировать. | |
| mesosphere словарь | (Объект) Настройка интеграции с Mesosphere. Ожидается следующий ключ - api_server (строка) | |
| min_size целое число / обязательно | (Целое число) Минимальное число экземпляров, до которого можно масштабировать. | |
| monitoring строка | (Строка) Описывает, включен ли расширенный мониторинг экземпляров. | |
| name строка / обязательно | (Строка) Уникальное имя для создаваемой, обновляемой или удаляемой группы elastigroup. | |
| network_interfaces список / элементы=строка | (Список объектов) Список словарей/списков сетевых интерфейсов для добавления в elastigroup; '[{"key":"value", "key":"value"}]'; допустимые ключи - description (строка), device_index (целое число), secondary_private_ip_address_count (целое число), associate_public_ip_address (логическое), delete_on_termination (логическое), groups (список строк), network_interface_id (строка), private_ip_address (строка), subnet_id (строка), associate_ipv6_address (логическое), private_ip_addresses (список объектов, ключи: privateIpAddress (строка, обязательно) и primary (логическое)) | |
| on_demand_count целое число | (Целое число) Требуется, если параметр risk не задан. Количество экземпляров on demand, подлежащих запуску. Все остальные экземпляры будут Spot-экземплярами.; Либо установите этот параметр, либо параметр risk. | |
| on_demand_instance_type строка | (Строка) Тип экземпляра on-demand, который будет запущен. | |
| opsworks словарь | (Объект) Настройка интеграции elastigroup с OpsWorks.; Ожидается следующий ключ - layer_id (строка) | |
| persistence словарь | (Объект) Конфигурация состояния elastigroup.; Принимает следующие ключи - should_persist_root_device (логическое), should_persist_block_devices (логическое), should_persist_private_ip (логическое) | |
| product строка / обязательно | (Строка) Тип операционной системы. Доступные варианты: Linux/UNIX, SUSE Linux, Windows, Linux/UNIX (Amazon VPC, SUSE Linux (Amazon VPC). | |
| rancher словарь | (Объект) Настройка интеграции с Rancher.; Ожидаются следующие ключи - version (строка), access_key (строка), secret_key (строка), master_host (строка) | |
| right_scale словарь | (Объект) Настройка интеграции с Rightscale.; Ожидаются следующие ключи - account_id (строка), refresh_token (строка) | |
| risk целое число | (Целое число) Требуется, если параметр on demand не задан. Процент Spot-экземпляров, которые нужно запустить (0 - 100). | |
| roll_config словарь | (Объект) Настройка развёртывания.; Если вы хотите, чтобы группа развертывалась после обновления, используйте эту функцию. Принимает следующие ключи - batch_size_percentage(целое число, обязательно), grace_period - (целое число, обязательно), health_check_type(строка, необязательно) |
| scheduled_tasks list / elements=string | (Список объектов) список хэш/словаря запланированных задач для настройки в elastigroup; '[{"key":"value", "key":"value"}]'; разрешенные ключи — adjustment (Целое число), scale_target_capacity (Целое число), scale_min_capacity (Целое число), scale_max_capacity (Целое число), adjustment_percentage (Целое число), batch_size_percentage (Целое число), cron_expression (Строка), frequency (Строка), grace_period (Целое число), task_type (Строка, обязательно), is_enabled (Булево) | |
| security_group_ids list / elements=string / required | (Список строк) Один или несколько идентификаторов групп безопасности. ; В случае обновления он перепишет существующую группу безопасности новым заданным массивом | |
| shutdown_script string | (Строка) Сценарий завершения работы, закодированный в Base64, который выполняется перед завершением работы экземпляра. Кодируйте перед установкой. | |
| signals list / elements=string | (Список объектов) список хэш/словаря сигналов для настройки в elastigroup; разрешенные ключи — name (Строка, обязательно), timeout (Целое число) | |
| spin_up_time integer | (Целое число) Время подготовки экземпляра в секундах | |
| spot_instance_types list / elements=string / required | (Список строк) Тип экземпляра Spot, который будет развернут. | |
| state string |
| (Строка) создание или удаление elastigroup |
| tags list / elements=string | (Список пар ключ:значение тега) список тегов для настройки в elastigroup. Укажите список ключей и значений (ключ двоеточие значение); | |
| target integer / required | (Целое число) Количество экземпляров, которые нужно запустить | |
| target_group_arns list / elements=string | (Список строк) Список арнов целевых групп, к которым должны быть зарегистрированы экземпляры | |
| target_tracking_policies list / elements=string | (Список объектов) список хэш/словаря политик отслеживания целей для настройки в elastigroup; '[{"key":"value", "key":"value"}]'; разрешенные ключи — policy_name (Строка, обязательно), namespace (Строка, обязательно), source (Строка, обязательно), metric_name (Строка, обязательно), statistic (Строка, обязательно), unit (Строка, обязательно), cooldown (Строка, обязательно), target (Строка, обязательно) | |
| tenancy string | (Строка) выделенная или общая аренда. Доступные варианты: default, dedicated. | |
| terminate_at_end_of_billing_hour boolean |
| (Булево) завершить в конце часа выставления счетов |
| uniqueness_by string |
| (Строка) Если имена групп не уникальны, вы можете использовать эту функцию для обновления или удаления определенной группы. Всякий раз, когда эта свойство установлено, вы должны установить group_id для обновления или удаления группы, иначе группа будет создана. |
| unit string | (Строка) Единица измерения емкости для запуска экземпляров. Доступные варианты: instance, weight. | |
| up_scaling_policies list / elements=string | (Список объектов) список хэш/словаря политик масштабирования для настройки в elastigroup; '[{"key":"value", "key":"value"}]'; разрешенные ключи — policy_name (Строка, обязательно), namespace (Строка, обязательно), metric_name (Строка, обязательно), dimensions (Список объектов, разрешенные ключи name (Строка, обязательно) и value (Строка)), statistic (Строка, обязательно) evaluation_periods (Строка, обязательно), period (Строка, обязательно), threshold (Строка, обязательно), cooldown (Строка, обязательно), unit (Строка, обязательно), operator (Строка, обязательно), action_type (Строка, обязательно), adjustment (Строка), min_target_capacity (Строка), target (Строка), maximum (Строка), minimum (Строка) | |
| user_data string | (Строка) MIME-данные пользователя, закодированные в Base64. Кодируйте перед установкой значения. | |
| utilize_reserved_instances boolean |
| (Булево) В случае наличия зарезервированных экземпляров Elastigroup будет использовать ваши резервы перед покупкой экземпляров Spot. |
| wait_for_instances boolean |
| (Булево) Должны ли действия создания/обновления elastigroup ожидать загрузки экземпляров? |
| wait_timeout integer | (Целое число) Сколько времени модуль должен ждать экземпляров перед отказом от действия; Работает только если wait_for_instances равно True. |
Примеры
# Basic configuration YAML example
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
state: present
risk: 100
availability_vs_cost: balanced
availability_zones:
- name: us-west-2a
subnet_id: subnet-2b68a15c
image_id: ami-f173cc91
key_pair: spotinst-oregon
max_size: 15
min_size: 0
target: 0
unit: instance
monitoring: True
name: ansible-group
on_demand_instance_type: c3.large
product: Linux/UNIX
load_balancers:
- test-lb-1
security_group_ids:
- sg-8f4b8fe9
spot_instance_types:
- c3.large
do_not_update:
- image_id
- target
register: result
- ansible.builtin.debug: var=result
# In this example, we create an elastigroup and wait 600 seconds to retrieve the instances, and use their private ips
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
state: present
account_id: act-1a9dd2b
risk: 100
availability_vs_cost: balanced
availability_zones:
- name: us-west-2a
subnet_id: subnet-2b68a15c
tags:
- Environment: someEnvValue
- OtherTagKey: otherValue
image_id: ami-f173cc91
key_pair: spotinst-oregon
max_size: 5
min_size: 0
target: 0
unit: instance
monitoring: True
name: ansible-group-tal
on_demand_instance_type: c3.large
product: Linux/UNIX
security_group_ids:
- sg-8f4b8fe9
block_device_mappings:
- device_name: '/dev/sda1'
ebs:
volume_size: 100
volume_type: gp2
spot_instance_types:
- c3.large
do_not_update:
- image_id
wait_for_instances: True
wait_timeout: 600
register: result
- name: Store private ips to file
ansible.builtin.shell: echo {{ item.private_ip }}\n >> list-of-private-ips
with_items: "{{ result.instances }}"
- ansible.builtin.debug: var=result
# In this example, we create an elastigroup with multiple block device mappings, tags, and also an account id
# In organizations with more than one account, it is required to specify an account_id
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
state: present
account_id: act-1a9dd2b
risk: 100
availability_vs_cost: balanced
availability_zones:
- name: us-west-2a
subnet_id: subnet-2b68a15c
tags:
- Environment: someEnvValue
- OtherTagKey: otherValue
image_id: ami-f173cc91
key_pair: spotinst-oregon
max_size: 5
min_size: 0
target: 0
unit: instance
monitoring: True
name: ansible-group-tal
on_demand_instance_type: c3.large
product: Linux/UNIX
security_group_ids:
- sg-8f4b8fe9
block_device_mappings:
- device_name: '/dev/xvda'
ebs:
volume_size: 60
volume_type: gp2
- device_name: '/dev/xvdb'
ebs:
volume_size: 120
volume_type: gp2
spot_instance_types:
- c3.large
do_not_update:
- image_id
wait_for_instances: True
wait_timeout: 600
register: result
- name: Store private ips to file
ansible.builtin.shell: echo {{ item.private_ip }}\n >> list-of-private-ips
with_items: "{{ result.instances }}"
- ansible.builtin.debug: var=result
# In this example we have set up block device mapping with ephemeral devices
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
state: present
risk: 100
availability_vs_cost: balanced
availability_zones:
- name: us-west-2a
subnet_id: subnet-2b68a15c
image_id: ami-f173cc91
key_pair: spotinst-oregon
max_size: 15
min_size: 0
target: 0
unit: instance
block_device_mappings:
- device_name: '/dev/xvda'
virtual_name: ephemeral0
- device_name: '/dev/xvdb/'
virtual_name: ephemeral1
monitoring: True
name: ansible-group
on_demand_instance_type: c3.large
product: Linux/UNIX
load_balancers:
- test-lb-1
security_group_ids:
- sg-8f4b8fe9
spot_instance_types:
- c3.large
do_not_update:
- image_id
- target
register: result
- ansible.builtin.debug: var=result
# In this example we create a basic group configuration with a network interface defined.
# Each network interface must have a device index
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
state: present
risk: 100
availability_vs_cost: balanced
network_interfaces:
- associate_public_ip_address: true
device_index: 0
availability_zones:
- name: us-west-2a
subnet_id: subnet-2b68a15c
image_id: ami-f173cc91
key_pair: spotinst-oregon
max_size: 15
min_size: 0
target: 0
unit: instance
monitoring: True
name: ansible-group
on_demand_instance_type: c3.large
product: Linux/UNIX
load_balancers:
- test-lb-1
security_group_ids:
- sg-8f4b8fe9
spot_instance_types:
- c3.large
do_not_update:
- image_id
- target
register: result
- ansible.builtin.debug: var=result
# In this example we create a basic group configuration with a target tracking scaling policy defined
- hosts: localhost
tasks:
- name: Create elastigroup
community.general.spotinst_aws_elastigroup:
account_id: act-92d45673
state: present
risk: 100
availability_vs_cost: balanced
availability_zones:
- name: us-west-2a
subnet_id: subnet-79da021e
image_id: ami-f173cc91
fallback_to_od: true
tags:
- Creator: ValueOfCreatorTag
- Environment: ValueOfEnvironmentTag
key_pair: spotinst-labs-oregon
max_size: 10
min_size: 0
target: 2
unit: instance
monitoring: True
name: ansible-group-1
on_demand_instance_type: c3.large
product: Linux/UNIX
security_group_ids:
- sg-46cdc13d
spot_instance_types:
- c3.large
target_tracking_policies:
- policy_name: target-tracking-1
namespace: AWS/EC2
metric_name: CPUUtilization
statistic: average
unit: percent
target: 50
cooldown: 120
do_not_update:
- image_id
register: result
- ansible.builtin.debug: var=result
Значения возврата
Общие значения возврата описаны здесь, следующие — это поля, уникальные для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| group_id string | успех | Идентификатор созданной/обновленной группы. Пример: sig-12345 |
| instances dictionary | успех | Список активных экземпляров elastigroup и их подробностей. Пример: [{'availabilityZone': 'us-west-2b', 'createdAt': '2017-07-17T12:46:18.000Z', 'instanceId': 'i-09640ad8678234c', 'instanceType': 'm4.large', 'privateIp': '180.0.2.244', 'product': 'Linux/UNIX', 'spotInstanceRequestId': 'sir-regs25zp', 'status': 'fulfilled'}] |
Авторы
- Spotinst (@talzur)
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/general/spotinst_aws_elastigroup_module.html