public override OperationResult Deprovision(AddonDeprovisionRequest request) { var deprovisionResult = new ProvisionAddOnResult("") { IsSuccess = true }; deprovisionResult.ConnectionData = "deprovision"; AddonManifest manifest = request.Manifest; string connectionData = request.ConnectionData; string devOptions = request.DeveloperOptions; //string jobid = null; try { IAmazonElasticMapReduce client; //var conInfo = ConnectionInfo.Parse(connectionData); var developerOptions = EMRDeveloperOptions.Parse(devOptions); var establishClientResult = EstablishClient(manifest, developerOptions, out client); if (!establishClientResult.IsSuccess) { deprovisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(deprovisionResult); } var result = client.TerminateJobFlows(new TerminateJobFlowsRequest() { JobFlowIds = { connectionData } }); deprovisionResult.IsSuccess = true; deprovisionResult.EndUserMessage = "EMR Cluster Termination Request Successfully Invoked."; } catch (Exception) { deprovisionResult.EndUserMessage = "An error occurred during deprovisioning, please check the SOC logs for further assistance."; } return(deprovisionResult); }
private OperationResult ParseDevOptions(string developerOptions, out EMRDeveloperOptions devOptions) { devOptions = null; var result = new OperationResult() { IsSuccess = false }; var progress = ""; try { progress += "Parsing developer options...\n"; devOptions = EMRDeveloperOptions.Parse(developerOptions); } catch (ArgumentException) { result.EndUserMessage = "Placeholder for ValidateDevCreds"; return(result); } result.IsSuccess = true; result.EndUserMessage = progress; return(result); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = true }; AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { IAmazonElasticMapReduce client; EMRDeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return(provisionResult); } var establishClientResult = EstablishClient(manifest, EMRDeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(provisionResult); } var stepFactory = new StepFactory(); StepConfig enabledebugging = null; if (devOptions.EnableDebugging) { enabledebugging = new StepConfig { Name = "Enable debugging", ActionOnFailure = "TERMINATE_JOB_FLOW", HadoopJarStep = stepFactory.NewEnableDebuggingStep() }; } var installHive = new StepConfig { Name = "Install Hive", ActionOnFailure = "TERMINATE_JOB_FLOW", HadoopJarStep = stepFactory.NewInstallHiveStep() }; var instanceConfig = new JobFlowInstancesConfig { Ec2KeyName = devOptions.Ec2KeyName, HadoopVersion = "0.20", InstanceCount = devOptions.InstanceCount, // this is important. the EMR job flow must be kept alive for the application to see it during provisioning KeepJobFlowAliveWhenNoSteps = true, MasterInstanceType = devOptions.MasterInstanceType, SlaveInstanceType = devOptions.SlaveInstanceType }; var _request = new RunJobFlowRequest { Name = devOptions.JobFlowName, Steps = { enabledebugging, installHive }, // revisit this one in ne LogUri = "s3://myawsbucket", Instances = instanceConfig }; // if debugging is enabled, add to top of the list of steps. if (devOptions.EnableDebugging) { _request.Steps.Insert(0, enabledebugging); } var result = client.RunJobFlow(_request); // wait for JobFlowID to come back. while (result.JobFlowId == null) { Thread.Sleep(1000); } provisionResult.IsSuccess = true; provisionResult.ConnectionData = string.Format(result.JobFlowId); } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }