mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-26 20:31:27 -07:00
Add Fargate support for ECS modules
Fargate instances do not require memory and cpu descriptors. EC2 instances do require descriptions. https://botocore.readthedocs.io/en/latest/reference/services/ecs.html#ECS.Client.describe_task_definition Fargate requires that cpu and memory be defined at task definition level. EC2 launch requires them to be defined at the container level. Fargate requires the use of awsvpc for the networking_mode. Also updated, the documentation regarding where and when memory/cpu needs to the assigned. The task_definition variable for the awspvc configuration colided with the ecs_service for the bridge network. This would cause the test to fail. Add testing for fargate Add examples for fargate and ec2
This commit is contained in:
parent
8eb9cc3217
commit
fbcd6f8a65
5 changed files with 307 additions and 37 deletions
|
@ -107,9 +107,8 @@ options:
|
|||
description:
|
||||
- The launch type on which to run your service
|
||||
required: false
|
||||
version_added: 2.5
|
||||
version_added: 2.7
|
||||
choices: ["EC2", "FARGATE"]
|
||||
default: "EC2"
|
||||
extends_documentation_fragment:
|
||||
- aws
|
||||
- ec2
|
||||
|
@ -376,10 +375,12 @@ class EcsServiceManager:
|
|||
role=role,
|
||||
deploymentConfiguration=deployment_configuration,
|
||||
placementConstraints=placement_constraints,
|
||||
placementStrategy=placement_strategy,
|
||||
launchType=launch_type)
|
||||
placementStrategy=placement_strategy
|
||||
)
|
||||
if network_configuration:
|
||||
params['networkConfiguration'] = network_configuration
|
||||
if launch_type:
|
||||
params['launchType'] = launch_type
|
||||
response = self.ecs.create_service(**params)
|
||||
return self.jsonize(response['service'])
|
||||
|
||||
|
@ -441,12 +442,13 @@ def main():
|
|||
placement_constraints=dict(required=False, default=[], type='list'),
|
||||
placement_strategy=dict(required=False, default=[], type='list'),
|
||||
network_configuration=dict(required=False, type='dict'),
|
||||
launch_type=dict(required=False, choices=['EC2', 'FARGATE'], default='EC2')
|
||||
launch_type=dict(required=False, choices=['EC2', 'FARGATE'])
|
||||
))
|
||||
|
||||
module = AnsibleAWSModule(argument_spec=argument_spec,
|
||||
supports_check_mode=True,
|
||||
required_if=[('state', 'present', ['task_definition', 'desired_count'])],
|
||||
required_if=[('state', 'present', ['task_definition', 'desired_count']),
|
||||
('launch_type', 'FARGATE', ['network_configuration'])],
|
||||
required_together=[['load_balancers', 'role']])
|
||||
|
||||
service_mgr = EcsServiceManager(module)
|
||||
|
@ -468,10 +470,16 @@ def main():
|
|||
module.fail_json(msg="Exception describing service '" + module.params['name'] + "' in cluster '" + module.params['cluster'] + "': " + str(e))
|
||||
|
||||
results = dict(changed=False)
|
||||
|
||||
if module.params['launch_type']:
|
||||
if not module.botocore_at_least('1.8.4'):
|
||||
module.fail_json(msg='botocore needs to be version 1.8.4 or higher to use launch_type')
|
||||
|
||||
if module.params['state'] == 'present':
|
||||
|
||||
matching = False
|
||||
update = False
|
||||
|
||||
if existing and 'status' in existing and existing['status'] == "ACTIVE":
|
||||
if service_mgr.is_matching_service(module.params, existing):
|
||||
matching = True
|
||||
|
@ -501,18 +509,21 @@ def main():
|
|||
if 'containerPort' in loadBalancer:
|
||||
loadBalancer['containerPort'] = int(loadBalancer['containerPort'])
|
||||
# doesn't exist. create it.
|
||||
response = service_mgr.create_service(module.params['name'],
|
||||
module.params['cluster'],
|
||||
module.params['task_definition'],
|
||||
loadBalancers,
|
||||
module.params['desired_count'],
|
||||
clientToken,
|
||||
role,
|
||||
deploymentConfiguration,
|
||||
module.params['placement_constraints'],
|
||||
module.params['placement_strategy'],
|
||||
network_configuration,
|
||||
module.params['launch_type'])
|
||||
try:
|
||||
response = service_mgr.create_service(module.params['name'],
|
||||
module.params['cluster'],
|
||||
module.params['task_definition'],
|
||||
loadBalancers,
|
||||
module.params['desired_count'],
|
||||
clientToken,
|
||||
role,
|
||||
deploymentConfiguration,
|
||||
module.params['placement_constraints'],
|
||||
module.params['placement_strategy'],
|
||||
network_configuration,
|
||||
module.params['launch_type'])
|
||||
except botocore.exceptions.ClientError as e:
|
||||
module.fail_json(msg=e.message)
|
||||
|
||||
results['service'] = response
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue