diff --git a/drivers/aws_shell/src/driver.py b/drivers/aws_shell/src/driver.py index 986a7083..254b53a9 100644 --- a/drivers/aws_shell/src/driver.py +++ b/drivers/aws_shell/src/driver.py @@ -1,6 +1,6 @@ from cloudshell.shell.core.resource_driver_interface import ResourceDriverInterface + from cloudshell.cp.aws.aws_shell import AWSShell -from cloudshell.cp.aws.models.aws_ec2_cloud_provider_resource_model import AWSEc2CloudProviderResourceModel class AWSShellDriver(ResourceDriverInterface): @@ -32,11 +32,8 @@ def PowerCycle(self, context, ports, delay): def remote_refresh_ip(self, context, ports, cancellation_context): pass - def delete(self, context, ports): - return self.aws_shell.delete_ami(context) - def destroy_vm_only(self, context, ports): - return self.aws_shell.delete_ami(context, False) + return self.aws_shell.delete_ami(context) def ApplyConnectivityChanges(self, context, request): pass diff --git a/drivers/aws_shell/src/drivermetadata.xml b/drivers/aws_shell/src/drivermetadata.xml index cff7346b..da06a48b 100644 --- a/drivers/aws_shell/src/drivermetadata.xml +++ b/drivers/aws_shell/src/drivermetadata.xml @@ -10,9 +10,6 @@ - - - diff --git a/package/cloudshell/cp/aws/aws_shell.py b/package/cloudshell/cp/aws/aws_shell.py index 07c15ca6..3863f542 100644 --- a/package/cloudshell/cp/aws/aws_shell.py +++ b/package/cloudshell/cp/aws/aws_shell.py @@ -183,7 +183,7 @@ def power_off_ami(self, command_context): cloudshell_session.SetResourceLiveStatus(resource.fullname, "Offline", "Powered Off") return self._set_command_result(result) - def delete_ami(self, command_context, delete_resource=True): + def delete_ami(self, command_context): """ Will delete the ami instance :param bool delete_resource: @@ -200,10 +200,6 @@ def delete_ami(self, command_context, delete_resource=True): data_holder = self.model_parser.convert_app_resource_to_deployed_app(resource) result = self.delete_ami_operation.delete_instance(ec2_session, data_holder.vmdetails.uid) - # todo this is temporary for the demo - if delete_resource: - cloudshell_session.DeleteResource(resourceFullPath=resource.fullname) - return self._set_command_result(result) def get_application_ports(self, command_context): diff --git a/package/cloudshell/cp/aws/domain/ami_management/operations/delete_operation.py b/package/cloudshell/cp/aws/domain/ami_management/operations/delete_operation.py index d9d4a335..2f3a8744 100644 --- a/package/cloudshell/cp/aws/domain/ami_management/operations/delete_operation.py +++ b/package/cloudshell/cp/aws/domain/ami_management/operations/delete_operation.py @@ -4,6 +4,7 @@ class DeleteAMIOperation(object): def __init__(self, instance_service, ec2_storage_service, security_group_service): """ :param instance_service: + :type instance_service: cloudshell.cp.aws.domain.services.ec2.instance.InstanceService :param EC2StorageService ec2_storage_service: :param SecurityGroupService security_group_service: """ diff --git a/package/cloudshell/cp/aws/domain/conncetivity/operations/cleanup.py b/package/cloudshell/cp/aws/domain/conncetivity/operations/cleanup.py index 14effbbf..443e7d32 100644 --- a/package/cloudshell/cp/aws/domain/conncetivity/operations/cleanup.py +++ b/package/cloudshell/cp/aws/domain/conncetivity/operations/cleanup.py @@ -18,8 +18,8 @@ def cleanup(self, ec2_session, s3_session, bucket_name, reservation_id): if not vpc: raise ValueError('No VPC was created for this reservation') - self.key_pair_service.remove_key_pair_for_reservation(s3_session, bucket_name, reservation_id) self.vpc_service.delete_all_instances(vpc) + self.key_pair_service.remove_key_pair_for_reservation(s3_session, bucket_name, reservation_id) self.vpc_service.remove_all_security_groups(vpc) self.vpc_service.remove_all_subnets(vpc) self.vpc_service.remove_all_internet_gateways(vpc) diff --git a/package/cloudshell/cp/aws/domain/services/ec2/instance.py b/package/cloudshell/cp/aws/domain/services/ec2/instance.py index 41417930..83e0420a 100644 --- a/package/cloudshell/cp/aws/domain/services/ec2/instance.py +++ b/package/cloudshell/cp/aws/domain/services/ec2/instance.py @@ -6,7 +6,7 @@ def __init__(self, tags_creator_service, instance_waiter): :param tags_creator_service: Tags Service :type tags_creator_service: cloudshell.cp.aws.domain.services.tags.TagService :param instance_waiter: Instance Waiter - :type instance_waiter: cloudshell.cp.aws.domain.services.task_manager.instance_waiter.EC2InstanceWaiter + :type instance_waiter: cloudshell.cp.aws.domain.services.waiters.instance.InstanceWaiter """ self.instance_waiter = instance_waiter self.tags_creator_service = tags_creator_service @@ -50,7 +50,7 @@ def create_instance(self, ec2_session, name, reservation_id, ami_deployment_info return instance def terminate_instance(self, instance): - return self.terminate_instances([instance]) + return self.terminate_instances([instance])[0] def terminate_instances(self, instances): if len(instances) == 0: diff --git a/package/cloudshell/cp/aws/domain/services/ec2/security_group.py b/package/cloudshell/cp/aws/domain/services/ec2/security_group.py index eee29947..b92aed8d 100644 --- a/package/cloudshell/cp/aws/domain/services/ec2/security_group.py +++ b/package/cloudshell/cp/aws/domain/services/ec2/security_group.py @@ -6,16 +6,15 @@ class SecurityGroupService(object): CLOUDSHELL_CUSTOM_SECURITY_GROUP = "Cloudshell Custom SG {0}" CLOUDSHELL_SECURITY_GROUP_DESCRIPTION = "Cloudshell Security Group" - @staticmethod - def delete_security_group(security_group): - try: - security_group.delete() - except Exception: - raise + def delete_security_group(self, sg): + if sg.group_name != 'default': + sg.delete() + return True def delete_all_security_groups_of_instance(self, instance): - for security_group in instance.security_groups: - self.delete_security_group(security_group) + if instance.security_groups: + for security_group in instance.security_groups: + self.delete_security_group(security_group) def create_security_group(self, ec2_session, vpc_id, security_group_name): """ diff --git a/package/cloudshell/cp/aws/domain/services/ec2/vpc.py b/package/cloudshell/cp/aws/domain/services/ec2/vpc.py index 90b5732d..617760af 100644 --- a/package/cloudshell/cp/aws/domain/services/ec2/vpc.py +++ b/package/cloudshell/cp/aws/domain/services/ec2/vpc.py @@ -15,8 +15,8 @@ def __init__(self, tag_service, subnet_service, instance_service, vpc_waiter, vp :type vpc_waiter: cloudshell.cp.aws.domain.services.waiters.vpc.VPCWaiter :param vpc_peering_waiter: Vpc Peering Connection Waiter :type vpc_peering_waiter: cloudshell.cp.aws.domain.services.waiters.vpc_peering.VpcPeeringConnectionWaiter - :param sg_service: Vpc Peering Connection Waiter - :type sg_service: cloudshell.cp.aws.domain.services.waiters.vpc_peering.VpcPeeringConnectionWaiter + :param sg_service: Security Group Service + :type sg_service: cloudshell.cp.aws.domain.services.ec2.security_group.SecurityGroupService """ self.tag_service = tag_service self.subnet_service = subnet_service @@ -106,6 +106,8 @@ def get_all_internet_gateways(self, vpc): def create_and_attach_internet_gateway(self, ec2_session, vpc, reservation_id): internet_gateway = ec2_session.create_internet_gateway() + internet_gateway.reload() + tags = self.tag_service.get_default_tags("IGW {0}".format(reservation_id), reservation_id) self.tag_service.set_ec2_resource_tags( diff --git a/package/cloudshell/cp/aws/domain/services/waiters/vpc_peering.py b/package/cloudshell/cp/aws/domain/services/waiters/vpc_peering.py index ef8e3d76..361ed669 100644 --- a/package/cloudshell/cp/aws/domain/services/waiters/vpc_peering.py +++ b/package/cloudshell/cp/aws/domain/services/waiters/vpc_peering.py @@ -65,8 +65,3 @@ def wait(self, vpc_peering_connection, state, throw_on_error=True, load=False): if load: vpc_peering_connection.reload() return vpc_peering_connection - - def delete_security_group(self, sg): - if sg.group_name != 'default': - sg.delete() - return True diff --git a/package/cloudshell/cp/aws/models/__init__.py b/package/cloudshell/cp/aws/models/__init__.py index e69de29b..b50dc4a9 100644 --- a/package/cloudshell/cp/aws/models/__init__.py +++ b/package/cloudshell/cp/aws/models/__init__.py @@ -0,0 +1,3 @@ +__author__ = 'quali' +from pkgutil import extend_path +__path__ = extend_path(__path__, __name__) \ No newline at end of file diff --git a/package/tests/test_aws_shell.py b/package/tests/test_aws_shell.py index 798c486c..69f7d6be 100644 --- a/package/tests/test_aws_shell.py +++ b/package/tests/test_aws_shell.py @@ -111,7 +111,7 @@ def test_delete_ami(self): self.aws_shell_api.model_parser.convert_app_resource_to_deployed_app = Mock(return_value=deployed_model) self.aws_shell_api.delete_ami_operation.delete_instance = Mock(return_value=True) - self.aws_shell_api.delete_ami(self.command_context, False) + self.aws_shell_api.delete_ami(self.command_context) self.assertTrue( self.aws_shell_api.delete_ami_operation.delete_instance.called_with( @@ -125,7 +125,7 @@ def test_delete_ami_delete_resource(self): self.aws_shell_api.model_parser.convert_app_resource_to_deployed_app = Mock(return_value=deployed_model) self.aws_shell_api.delete_ami_operation.delete_instance = Mock(return_value=True) - self.aws_shell_api.delete_ami(self.command_context, False) + self.aws_shell_api.delete_ami(self.command_context) self.assertTrue( self.aws_shell_api.delete_ami_operation.delete_instance.called_with( diff --git a/package/tests/test_domain_services/test_instance_service.py b/package/tests/test_domain_services/test_instance_service.py index 4e1c4e2a..8d21309f 100644 --- a/package/tests/test_domain_services/test_instance_service.py +++ b/package/tests/test_domain_services/test_instance_service.py @@ -50,6 +50,7 @@ def test_get_instance_by_id(self): self.assertIsNotNone(res) def test_terminate_instance(self): + self.instance_waiter.multi_wait = Mock(return_value=[self.instance]) res = self.instance_service.terminate_instance(self.instance) self.assertTrue(self.instance.terminate.called)