community.general.spotinst_aws_elastigroup module – Create, update or delete Spotinst AWS Elastigroups
Note
This module is part of the community.general collection (version 8.6.8).
You might already have this collection installed if you are using the ansible
package.
It is not included in ansible-core
.
To check whether it is installed, run ansible-galaxy collection list
.
To install it, use: ansible-galaxy collection install community.general
.
You need further requirements to be able to use this module,
see Requirements for details.
To use it in a playbook, specify: community.general.spotinst_aws_elastigroup
.
Synopsis
Can create, update, or delete Spotinst AWS Elastigroups Launch configuration is part of the elastigroup configuration, so no additional modules are necessary for handling the launch configuration. You will have to have a credentials file in this location - <home>/.spotinst/credentials The credentials file must contain a row that looks like this token = <YOUR TOKEN> Full documentation available at https://help.spotinst.com/hc/en-us/articles/115003530285-Ansible-
Aliases: cloud.spotinst.spotinst_aws_elastigroup
Requirements
The below requirements are needed on the host that executes this module.
spotinst_sdk >= 1.0.38
Parameters
Parameter |
Comments |
---|---|
Optional parameter that allows to set an account-id inside the module configuration. By default this is retrieved from the credentials path. |
|
The strategy orientation. The choices available are: |
|
A list of hash/dictionaries of Availability Zones that are configured in the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are name (String), subnet_id (String), placement_group_name (String), |
|
A list of hash/dictionaries of Block Device Mappings for elastigroup instances; You can specify virtual devices and EBS volumes.; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are device_name (List of Strings), virtual_name (String), no_device (String), ebs (Object, expects the following keys- delete_on_termination(Boolean), encrypted(Boolean), iops (Integer), snapshot_id(Integer), volume_type(String), volume_size(Integer)) |
|
The Chef integration configuration.; Expects the following keys - chef_server (String), organization (String), user (String), pem_key (String), chef_version (String) |
|
Optional parameter that allows to set a non-default credentials path. Default: |
|
TODO document. Default: |
|
A list of hash/dictionaries of scaling policies to configure in the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - policy_name (String, required), namespace (String, required), metric_name (String, required), dimensions ((List of Objects), Keys allowed are name (String, required) and value (String)), statistic (String, required), evaluation_periods (String, required), period (String, required), threshold (String, required), cooldown (String, required), unit (String, required), operator (String, required), action_type (String, required), adjustment (String), max_target_capacity (String), target (String), maximum (String), minimum (String) |
|
Time for instance to be drained from incoming requests and deregistered from ELB before termination. |
|
Enable EBS optimization for supported instances which are not enabled by default.; Note - additional charges will be applied. Choices:
|
|
A list of hash/dictionaries of EBS devices to reattach to the elastigroup when available; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - volume_ids (List of Strings), device_name (String) |
|
The ECS integration configuration.; Expects the following key - cluster_name (String) |
|
Placeholder parameter for future implementation of Elastic Beanstalk configurations. |
|
List of ElasticIps Allocation Ids (example |
|
In case of no spots available, Elastigroup will launch an On-demand instance instead Choices:
|
|
The amount of time, in seconds, after the instance has launched to start and check its health. If not specified, it defaults to |
|
The service to use for the health check. The choices available are: |
|
Minimal mount of time instance should be unhealthy for us to consider it unhealthy. |
|
The instance profile iamRole arn Only use iam_role_arn, or iam_role_name |
|
The instance profile iamRole name Only use iam_role_arn, or iam_role_name |
|
The group id if it already exists and you want to update, or delete it. This will not work unless the uniqueness_by field is set to id. When this is set, and the uniqueness_by field is set, the group will either be updated or deleted, but not created. |
|
The image Id used to launch the instance.; In case of conflict between Instance type and image type, an error will be returned |
|
Specify a Key Pair to attach to the instances |
|
The Kubernetes integration configuration. Expects the following keys - api_server (String), token (String) |
|
Lifetime period |
|
List of classic ELB names |
|
The upper limit number of instances that you can scale up to |
|
The Mesosphere integration configuration. Expects the following key - api_server (String) |
|
The lower limit number of instances that you can scale down to |
|
Describes whether instance Enhanced Monitoring is enabled |
|
Configuration parameters for Multai load balancers. |
|
Token used for Multai configuration. |
|
Unique name for elastigroup to be created, updated or deleted |
|
A list of hash/dictionaries of network interfaces to add to the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - description (String), device_index (Integer), secondary_private_ip_address_count (Integer), associate_public_ip_address (Boolean), delete_on_termination (Boolean), groups (List of Strings), network_interface_id (String), private_ip_address (String), subnet_id (String), associate_ipv6_address (Boolean), private_ip_addresses (List of Objects, Keys are privateIpAddress (String, required) and primary (Boolean)) |
|
Required if risk is not set Number of on demand instances to launch. All other instances will be spot instances.; Either set this parameter or the risk parameter |
|
On-demand instance type that will be provisioned |
|
The elastigroup OpsWorks integration configuration.; Expects the following key - layer_id (String) |
|
The Stateful elastigroup configuration.; Accepts the following keys - should_persist_root_device (Boolean), should_persist_block_devices (Boolean), should_persist_private_ip (Boolean) |
|
Operation system type. Available choices are: |
|
The Rancher integration configuration.; Expects the following keys - version (String), access_key (String), secret_key (String), master_host (String) |
|
The Rightscale integration configuration.; Expects the following keys - account_id (String), refresh_token (String) |
|
Required if on demand is not set. The percentage of Spot instances to launch (0 - 100). |
|
Roll configuration.; If you would like the group to roll after updating, please use this feature. Accepts the following keys - batch_size_percentage(Integer, Required), grace_period - (Integer, Required), health_check_type(String, Optional) |
|
A list of hash/dictionaries of scheduled tasks to configure in the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - adjustment (Integer), scale_target_capacity (Integer), scale_min_capacity (Integer), scale_max_capacity (Integer), adjustment_percentage (Integer), batch_size_percentage (Integer), cron_expression (String), frequency (String), grace_period (Integer), task_type (String, required), is_enabled (Boolean) |
|
One or more security group IDs. ; In case of update it will override the existing Security Group with the new given array |
|
The Base64-encoded shutdown script that executes prior to instance termination. Encode before setting. |
|
A list of hash/dictionaries of signals to configure in the elastigroup; keys allowed are - name (String, required), timeout (Integer) |
|
Spin up time, in seconds, for the instance |
|
Spot instance type that will be provisioned. |
|
Create or delete the elastigroup Choices:
|
|
A list of tags to configure in the elastigroup. Please specify list of keys and values (key colon value); |
|
The number of instances to launch |
|
List of target group arns instances should be registered to |
|
A list of hash/dictionaries of target tracking policies to configure in the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - policy_name (String, required), namespace (String, required), source (String, required), metric_name (String, required), statistic (String, required), unit (String, required), cooldown (String, required), target (String, required) |
|
Dedicated vs shared tenancy. The available choices are: |
|
Terminate at the end of billing hour Choices:
|
|
A Personal API Access Token issued by Spotinst. When not specified, the module will try to obtain it, in that order, from: environment variable |
|
If your group names are not unique, you may use this feature to update or delete a specific group. Whenever this property is set, you must set a group_id in order to update or delete a group, otherwise a group will be created. Choices:
|
|
The capacity unit to launch instances by. The available choices are: |
|
A list of hash/dictionaries of scaling policies to configure in the elastigroup; ‘[{“key”:”value”, “key”:”value”}]’; keys allowed are - policy_name (String, required), namespace (String, required), metric_name (String, required), dimensions (List of Objects, Keys allowed are name (String, required) and value (String)), statistic (String, required) evaluation_periods (String, required), period (String, required), threshold (String, required), cooldown (String, required), unit (String, required), operator (String, required), action_type (String, required), adjustment (String), min_target_capacity (String), target (String), maximum (String), minimum (String) |
|
Base64-encoded MIME user data. Encode before setting the value. |
|
In case of any available Reserved Instances, Elastigroup will utilize your reservations before purchasing Spot instances. Choices:
|
|
Whether or not the elastigroup creation / update actions should wait for the instances to spin Choices:
|
|
How long the module should wait for instances before failing the action.; Only works if wait_for_instances is True. |
Attributes
Attribute |
Support |
Description |
---|---|---|
Support: none |
Can run in |
|
Support: none |
Will return details on what has changed (or possibly needs changing in |
Examples
# 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
Return Values
Common return values are documented here, the following are the fields unique to this module:
Key |
Description |
---|---|
Created / Updated group’s ID. Returned: success Sample: |
|
List of active elastigroup instances and their details. Returned: success Sample: |