public async Task ExecuteAsync()

in src/AWS.Deploy.Orchestration/DeploymentCommands/BeanstalkEnvironmentDeploymentCommand.cs [15:70]


        public async Task ExecuteAsync(Orchestrator orchestrator, CloudApplication cloudApplication, Recommendation recommendation)
        {
            if (orchestrator._interactiveService == null)
                throw new InvalidOperationException($"{nameof(orchestrator._interactiveService)} is null as part of the orchestartor object");
            if (orchestrator._awsResourceQueryer == null)
                throw new InvalidOperationException($"{nameof(orchestrator._awsResourceQueryer)} is null as part of the orchestartor object");
            if (orchestrator._awsServiceHandler == null)
                throw new InvalidOperationException($"{nameof(orchestrator._awsServiceHandler)} is null as part of the orchestartor object");

            var deploymentPackage = recommendation.DeploymentBundle.DotnetPublishZipPath;
            var environmentName = cloudApplication.Name;
            var applicationName = (await orchestrator._awsResourceQueryer.ListOfElasticBeanstalkEnvironments())
                .Where(x => string.Equals(x.EnvironmentId, cloudApplication.UniqueIdentifier))
                .FirstOrDefault()?
                .ApplicationName;

            var s3Handler = orchestrator._awsServiceHandler.S3Handler;
            var elasticBeanstalkHandler = orchestrator._awsServiceHandler.ElasticBeanstalkHandler;

            if (string.IsNullOrEmpty(applicationName))
            {
                var message = $"Could not find any Elastic Beanstalk application that contains the following environment: {environmentName}";
                throw new AWSResourceNotFoundException(DeployToolErrorCode.FailedToFindElasticBeanstalkApplication, message);
            }

            orchestrator._interactiveService.LogSectionStart($"Creating application version", "Uploading deployment bundle to S3 and create an Elastic Beanstalk application version");

            // This step is only required for Elastic Beanstalk Windows deployments since a manifest file needs to be created for that deployment.
            if (recommendation.Recipe.Id.Equals(Constants.RecipeIdentifier.EXISTING_BEANSTALK_WINDOWS_ENVIRONMENT_RECIPE_ID))
            {
                elasticBeanstalkHandler.SetupWindowsDeploymentManifest(recommendation, deploymentPackage);
            }
            else if (recommendation.Recipe.Id.Equals(Constants.RecipeIdentifier.EXISTING_BEANSTALK_ENVIRONMENT_RECIPE_ID))
            {
                elasticBeanstalkHandler.SetupProcfileForSelfContained(deploymentPackage);
            }

            var versionLabel = $"v-{DateTime.Now.Ticks}";
            var s3location = await elasticBeanstalkHandler.CreateApplicationStorageLocationAsync(applicationName, versionLabel, deploymentPackage);
            await s3Handler.UploadToS3Async(s3location.S3Bucket, s3location.S3Key, deploymentPackage);
            await elasticBeanstalkHandler.CreateApplicationVersionAsync(applicationName, versionLabel, s3location);
            var environmentConfigurationSettings = elasticBeanstalkHandler.GetEnvironmentConfigurationSettings(recommendation);


            orchestrator._interactiveService.LogSectionStart($"Deploying application version", $"Deploy new application version to Elastic Beanstalk environment {environmentName}.");
            var success = await elasticBeanstalkHandler.UpdateEnvironmentAsync(applicationName, environmentName, versionLabel, environmentConfigurationSettings);

            if (success)
            {
                orchestrator._interactiveService.LogInfoMessage($"The Elastic Beanstalk Environment {environmentName} has been successfully updated to the application version {versionLabel}" + Environment.NewLine);
            } 
            else
            {
                throw new ElasticBeanstalkException(DeployToolErrorCode.FailedToUpdateElasticBeanstalkEnvironment, "Failed to update the Elastic Beanstalk environment");
            }
        }