private async Task <DockerHost> CreateAWSHost(CreateOptimizedExperimentCommand request, Guid templateId)
        {
            var template = await _awsVMRepo.GetByIdAsync(templateId);

            var dockerHost = new DockerHost
            {
                Name          = request.Name,
                Location      = "Ireland",
                CloudProvider = Enums.CloudProvider.AWS,
                HostName      = "localhost",
                vCPU          = template.vCPUs,
                Memory        = template.Memory,
                PortNumber    = 2376,
                Storage       = template.DiskSize
            };

            var awsHost = new AWSHost
            {
                DockerHost  = dockerHost,
                Credentials = _awsCredsRepo.GetAll().FirstOrDefault(),
                DestroyResourcesAfterBenchmark = true,
                IPAddress = "127.0.0.1",
                Template  = template,
                Name      = "AWSHost" + request.Name.Replace(" ", "", StringComparison.CurrentCulture) + DateTime.Now.Ticks
            };

            dockerHost.AWSHost = awsHost;

            await _dockerHostRepo.AddAsync(dockerHost);

            return(dockerHost);
        }
        private async Task <string> SetupHost(AWSHost host)
        {
            Guard.Against.Null(host, nameof(host));

            //Flag for Application Layer
            host.ResourceCreationStarted = true;
            await _awsHostRepo.UpdateAsync(host);

            try
            {
                var stackDeleteRequest = await _awsResourceService.DeleteStack(host.DockerHost.StackResourceName, host.Credentials.Id);
            }
            catch (Exception ex)
            {
                //
            }

            await Task.Delay(120000);

            var parameters = new List <Amazon.CloudFormation.Model.Parameter>();

            _mapper.Map(host.Template.Parameters, parameters);

            var ipAddress = await _awsResourceService.CreateDockerVM(host.DockerHost.StackResourceName, host.Template.Template, parameters, host.Credentials.Id);

            host.IPAddress         = ipAddress;
            host.ResourceCreatedAt = DateTimeOffset.Now;
            host.ResourcedCreated  = true;

            await _awsHostRepo.UpdateAsync(host);

            return(ipAddress);
        }