// Testing Instance // Input: AddonTestRequest request // Output: OperationResult public override OperationResult Test(AddonTestRequest request) { var testResult = new OperationResult {IsSuccess = false}; var apr = new AddonProvisionRequest { DeveloperParameters = request.DeveloperParameters, Manifest = request.Manifest }; var dpr = new AddonDeprovisionRequest { DeveloperParameters = request.DeveloperParameters, Manifest = request.Manifest }; var provisionTest = Provision(apr); if (!provisionTest.IsSuccess) { return provisionTest; } var testProgress = provisionTest.EndUserMessage; var deprovisionTest = Deprovision(dpr); if (!deprovisionTest.IsSuccess) { return deprovisionTest; } testProgress += deprovisionTest.EndUserMessage; testResult.IsSuccess = true; testResult.EndUserMessage = testProgress; return testResult; }
public static void Main(string[] args) { try { var addonRequest = new AddonProvisionRequest { Manifest = SetupPropertiesAndParameters(), DeveloperParameters = addParameters() }; var output = new AzureStorageAddon().Provision(addonRequest); Console.Out.WriteLine(output.IsSuccess); Console.Out.WriteLine(output.ConnectionData); Console.Out.WriteLine(output.EndUserMessage); Console.Out.Write("Working. Press any key to exit."); Console.ReadKey(); } catch (Exception e) { Console.Out.WriteLine(e.Message); Console.Out.WriteLine(e.Data); Console.Out.WriteLine(e.StackTrace); } }
// Testing Instance // Input: AddonTestRequest request // Output: OperationResult public override OperationResult Test(AddonTestRequest request) { var testResult = new OperationResult { IsSuccess = false }; var apr = new AddonProvisionRequest { DeveloperParameters = request.DeveloperParameters, Manifest = request.Manifest }; var dpr = new AddonDeprovisionRequest { DeveloperParameters = request.DeveloperParameters, Manifest = request.Manifest }; var provisionTest = Provision(apr); if (!provisionTest.IsSuccess) { return(provisionTest); } var testProgress = provisionTest.EndUserMessage; var deprovisionTest = Deprovision(dpr); if (!deprovisionTest.IsSuccess) { return(deprovisionTest); } testProgress += deprovisionTest.EndUserMessage; testResult.IsSuccess = true; testResult.EndUserMessage = testProgress; return(testResult); }
public static void TestSuccessfulProvisioning() { var addon = new Addon(); var manifest = GetAWSAddonManifest(); manifest.Properties.First(p => p.Key == "requireDevCredentials").Value = "false"; manifest.ProvisioningUsername = awsAccessKey; manifest.ProvisioningPassword = awsSecretKey; string devOptions = ""; devOptions += "Engine=sqlserver-se"; devOptions += "&DbInstanceClass=db.m1.large"; devOptions += "&DbInstanceIdentifier=db2"; devOptions += "&DBAUsername=Abe"; devOptions += "&DBAPassword=password"; devOptions += "&AllocatedStorage=200"; devOptions += "&LicenseModel=license-included"; var request = new AddonProvisionRequest { Manifest = manifest, DeveloperOptions = devOptions }; var result = addon.Provision(request); Assert.IsTrue(result.IsSuccess, result.EndUserMessage); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = false }; var manifest = request.Manifest; var developerParameters = request.DeveloperParameters; var developerOptions = GoogleCloudDeveloperOptions.Parse(developerParameters); try { //add instance var op = new InstanceOperations(manifest, developerOptions); op.AddInstance(); provisionResult.IsSuccess = true; provisionResult.ConnectionData = "InstanceName=" + developerOptions.InstanceName + "&Zone=" + developerOptions.Zone; provisionResult.EndUserMessage = "Successfully added instance " + developerOptions.InstanceName + "\n"; } catch (Exception e) { provisionResult.EndUserMessage = e.Message; provisionResult.IsSuccess = false; } return(provisionResult); }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = false }; var manifest = request.Manifest; var developerOptions = request.DeveloperOptions; try { AmazonS3Client client; S3DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, S3DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.PutBucket(new PutBucketRequest { BucketName = devOptions.BucketName, BucketRegion = S3Region.US }); if (response.HttpStatusCode != HttpStatusCode.OK) { provisionResult.EndUserMessage = response.HttpStatusCode.ToString(); return provisionResult; } var verificationResponse = client.ListBuckets(new ListBucketsRequest()); var bucket = verificationResponse.Buckets.Find(m => m.BucketName.Equals(devOptions.BucketName)); if (bucket == null) { provisionResult.EndUserMessage = "We aren't getting the bucket filtered here correctly."; return provisionResult; } provisionResult.ConnectionData = "BucketName=" + devOptions.BucketName; } catch (Exception e) { Console.WriteLine(e.StackTrace); Log.Error(e.Message + "\n" + e.StackTrace); provisionResult.EndUserMessage = e.Message + "\n" + e.StackTrace; } provisionResult.IsSuccess = true; return provisionResult; }
static void Main(string[] args) { var addonparameterlist = new List <AddonParameter> { new AddonParameter() { Key = "newstorageaccount", Value = "true" }, new AddonParameter() { Key = "storageaccountname", Value = "axafinancial" }, new AddonParameter() { Key = "containername", Value = "axablob" } }; var provisioningrequest = new AddonProvisionRequest() { DeveloperParameters = addonparameterlist, Manifest = new AddonManifest() { AllowUserDefinedParameters = true, Author = "Chris Dutra", IsEnabled = true, Version = "1.1", Vendor = "Apprenda", Properties = new List <AddonProperty>() { new AddonProperty() { Key = "AzureManagementSubscriptionID", Value = "4b446bb7-79db-49e1-b5b9-5c3f2cc08a58" }, new AddonProperty() { Key = "AzureAuthenticationKey", Value = "C:/users/cdutra/desktop/cdutra.cer" }, new AddonProperty() { Key = "AzureURL", Value = "https://management.core.windows.net" }, new AddonProperty() { Key = "GeoReplicationEnabled", Value = "true" }, new AddonProperty() { Key = "Location", Value = "East US" } } } }; var storageAddon = new AzureStorageAddon(); var response = storageAddon.Provision(provisioningrequest); Console.Read(); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult(""); var manifest = request.Manifest; var inputDevParams = request.DeveloperParameters; try { // parse required options here, use developer options class to do so. var manifestProperties = manifest.GetProperties(); // Developer Options will be instantiated first time here (hence, null). var devParams = DeveloperParameters.Parse(inputDevParams, manifestProperties); // establish MSFT Azure Storage client var client = EstablishClient(devParams); // ok now we need to understand what the developer wants to do. // ------------------------------------------------------------ // logic: // - if the developer wishes to create a storage account, we go that route first // - if a storage account exists, test it (including above) // - create the blob container // ------------------------------------------------------------ var parameters = CreateStorageAccountParameters(devParams); var mResponse = client.StorageAccounts.Create(parameters); do { StorageAccountGetResponse verificationResponse = client.StorageAccounts.Get(parameters.Name); if (verificationResponse.StorageAccount.Properties.Status.Equals(StorageAccountStatus.Created)) { StorageAccountGetResponse azureconnectioninfo = client.StorageAccounts.Get(devParams.StorageAccountName); StorageAccountGetKeysResponse keysForStorageUnit = client.StorageAccounts.GetKeys(devParams.StorageAccountName); var connectionInfo = new ConnectionInfo { PrimaryKey = keysForStorageUnit.PrimaryKey, SecondaryKey = keysForStorageUnit.SecondaryKey, StorageAccountName = azureconnectioninfo.StorageAccount.Name, URI = keysForStorageUnit.Uri.ToString() }; provisionResult.ConnectionData = connectionInfo.ToString(); // deprovision request of storage account was successful. provisionResult.IsSuccess = true; break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult(""); var manifest = request.Manifest; var inputDevParams = request.DeveloperParameters; try { // parse required options here, use developer options class to do so. var manifestProperties = manifest.GetProperties(); // Developer Options will be instantiated first time here (hence, null). var devParams = DeveloperParameters.Parse(inputDevParams,manifestProperties); // establish MSFT Azure Storage client var client = EstablishClient(devParams); // ok now we need to understand what the developer wants to do. // ------------------------------------------------------------ // logic: // - if the developer wishes to create a storage account, we go that route first // - if a storage account exists, test it (including above) // - create the blob container // ------------------------------------------------------------ var parameters = CreateStorageAccountParameters(devParams); var mResponse = client.StorageAccounts.Create(parameters); do { StorageAccountGetResponse verificationResponse = client.StorageAccounts.Get(parameters.Name); if (verificationResponse.StorageAccount.Properties.Status.Equals(StorageAccountStatus.Created)) { StorageAccountGetResponse azureconnectioninfo = client.StorageAccounts.Get(devParams.StorageAccountName); StorageAccountGetKeysResponse keysForStorageUnit = client.StorageAccounts.GetKeys(devParams.StorageAccountName); var connectionInfo = new ConnectionInfo { PrimaryKey = keysForStorageUnit.PrimaryKey, SecondaryKey = keysForStorageUnit.SecondaryKey, StorageAccountName = azureconnectioninfo.StorageAccount.Name, URI = keysForStorageUnit.Uri.ToString() }; provisionResult.ConnectionData = connectionInfo.ToString(); // deprovision request of storage account was successful. provisionResult.IsSuccess = true; break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { /*The Provision method provisions the instance for the service you are setting up. Within this method, you can access the information * requested from the developer (if any) by iterating through the request.DeveloperParameters object. * At the end of the provisioning process, simply return the connection information for the service that was provisioned.*/ //Retrieving developer parameters var parameter = request.DeveloperParameters.First(param => param.Key == "RequiredParameter"); var result = new ProvisionAddOnResult(string.Format("addon-location: {0}", parameter.Value), true, string.Format("The Add-On was provisioned successfully.")); return(result); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { try { return(new ProvisionAddOnResult(GetListenerUrl(request.Manifest), true, "AddOn successfully provisioned!")); } catch (Exception ex) { return(new ProvisionAddOnResult(null, false, $"AddOn provisioning failed with message {ex.Message}. StackTrace: {ex.StackTrace}")); } }
public RabbitMQConfig(AddonProvisionRequest request) { Hostname = request.Manifest.Properties.Single(p => p.Key == RabbitEndpointKey).Value; var portString = request.Manifest.Properties.Single(p => p.Key == RabbitPortKey).Value; Port = int.Parse(portString); var adminPortString = request.Manifest.Properties.Single(p => p.Key == RabbitAdminPortKey).Value; AdminPort = int.Parse(adminPortString); AdminUser = request.Manifest.Properties.Single(p => p.Key == RabbitAdminUserKey).Value; AdminPassword = request.Manifest.Properties.Single(p => p.Key == RabbitAdminPasswordKey).Value; }
public void SetupManifest() { ProvisionRequest = new AddonProvisionRequest { Manifest = SetupPropertiesAndParameters() }; DeprovisionRequest = new AddonDeprovisionRequest { Manifest = SetupPropertiesAndParameters() }; TestRequest = new AddonTestRequest { Manifest = SetupPropertiesAndParameters() }; }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // TODO // load developer options and items from manifest var developerOptions = DeveloperOptions.Parse(request.DeveloperOptions); developerOptions.LoadItemsFromManifest(request.Manifest); var ec2Response = Ec2AmiFactory.StartServer(developerOptions); return(null); }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonGlacierClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, manifest, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return(provisionResult); } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(provisionResult); } var response = client.CreateVault(CreateVaultRequest(devOptions)); // fix 5/22/14 resolves amazon aws deprecation // wait for response to come back with a location while (true) { if (response.Location != null) { var conInfo = new ConnectionInfo() { AccountId = devOptions.AccountId, VaultName = devOptions.VaultName, Location = response.Location }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(10); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonGlacierClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, manifest, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.CreateVault(CreateVaultRequest(devOptions)); // fix 5/22/14 resolves amazon aws deprecation // wait for response to come back with a location while (true) { if (response.Location != null) { var conInfo = new ConnectionInfo() { AccountId = devOptions.AccountId, VaultName = devOptions.VaultName, Location = response.Location }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(10); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
public static void Main([NotNull] string[] args) { AddonManifest.Properties.Add(new AddonProperty{Key="clustermgtendpoint", Value=ConfigurationManager.AppSettings["ClusterMgtEndpoint"]}); AddonManifest.Properties.Add(new AddonProperty { Key = "shareendpoint", Value = ConfigurationManager.AppSettings["ShareEndpoint"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "adminusername", Value = ConfigurationManager.AppSettings["AdminUsername"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "adminpassword", Value = ConfigurationManager.AppSettings["AdminPassword"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "vserver", Value = ConfigurationManager.AppSettings["VServer"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultprotocol", Value = ConfigurationManager.AppSettings["DefaultProtocol"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultaggregate", Value = ConfigurationManager.AppSettings["DefaultAggregate"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultRootPath", Value = ConfigurationManager.AppSettings["DefaultRootPath"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapenable", Value = ConfigurationManager.AppSettings["SnapEnable"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "vaultenable", Value = ConfigurationManager.AppSettings["VaultEnable"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapvaultschedule", Value = ConfigurationManager.AppSettings["SnapVaultSchedule"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapmirrorschedule", Value = ConfigurationManager.AppSettings["SnapMirrorSchedule"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapvaultpolicyname", Value = ConfigurationManager.AppSettings["SnapVaultPolicyName"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapmirrorpolicyname", Value = ConfigurationManager.AppSettings["SnapMirrorPolicyName"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snaptype", Value = ConfigurationManager.AppSettings["SnapType"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "maxallocatedstorage", Value = ConfigurationManager.AppSettings["MaxAllocatedStorage"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "scriptrepo", Value = ConfigurationManager.AppSettings["ScriptRepo"] }); try { var addon = new NetAppAddon(); var prequest = new AddonProvisionRequest { DeveloperParameters = new List<AddonParameter> { new AddonParameter() { Key = "name", Value = ConfigurationManager.AppSettings["VolumeName"] }, new AddonParameter() { Key = "size", Value = ConfigurationManager.AppSettings["Size"] } }, Manifest = AddonManifest }; var result = addon.Provision(prequest); Console.Out.Write(result.IsSuccess); Console.Out.Write(result.EndUserMessage); Console.Out.Write(result.ConnectionData); } catch (Exception e) { Console.Out.Write(e); } }
public void TestProvisioningMethods() { var request = new AddonProvisionRequest(); var properties = new List <AddonProperty>(); properties.Add(new AddonProperty() { Key = "RabbitEndpoint", Value = "hqs-engineer15.apprendalabs.local" }); properties.Add(new AddonProperty() { Key = "RabbitAdminPort", Value = "15672" }); properties.Add(new AddonProperty() { Key = "RabbitPort", Value = "5672" }); properties.Add(new AddonProperty() { Key = "RabbitAdminUser", Value = "guest" }); properties.Add(new AddonProperty() { Key = "RabbitAdminPassword", Value = "guest" }); properties.Add(new AddonProperty() { Key = "DeveloperAlias", Value = "unit" }); properties.Add(new AddonProperty() { Key = "InstanceAlias", Value = "sampleId" }); request.Manifest = ReadTestManifest("UnitTestAddOnManifest.xml"); request.Manifest.Properties = properties; var addon = new RabbitMQAddOn.RabbitMQAddOn(); var result = addon.Provision(request); Assert.IsTrue(result.IsSuccess); var deprovisionRequest = new AddonDeprovisionRequest(); deprovisionRequest.Manifest = ReadTestManifest("UnitTestAddOnManifest.xml"); deprovisionRequest.Manifest.Properties = properties; var deprovisionResult = addon.Deprovision(deprovisionRequest); Assert.IsTrue(deprovisionResult.IsSuccess); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult(""); try { var devParameters = DeveloperParameters.Parse(request.DeveloperParameters, request.Manifest.GetProperties()); SubscriptionCloudCredentials creds = CertificateAuthenticationHelper.GetCredentials(devParameters.AzureManagementSubscriptionId, devParameters.AzureAuthenticationKey, devParameters.PFXPassword); // ok so if we need a storage account, we need to use the storage management client. if (devParameters.NewStorageAccountFlag) { var client = new StorageManagementClient(creds); var parameters = CreateStorageAccountParameters(devParameters); client.StorageAccounts.Create(parameters); do { var verificationResponse = client.StorageAccounts.Get(parameters.Name); if (verificationResponse.StorageAccount.Properties.Status.Equals(StorageAccountStatus.Created)) { var azureconnectioninfo = client.StorageAccounts.Get(devParameters.StorageAccountName); var keysForStorageUnit = client.StorageAccounts.GetKeys(devParameters.StorageAccountName); var connectionInfo = new ConnectionInfo { PrimaryKey = keysForStorageUnit.PrimaryKey, SecondaryKey = keysForStorageUnit.SecondaryKey, StorageAccountName = azureconnectioninfo.StorageAccount.Name, Uri = keysForStorageUnit.Uri.ToString() }; provisionResult.ConnectionData = connectionInfo.ToString(); provisionResult.IsSuccess = true; break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.IsSuccess = false; provisionResult.EndUserMessage = e.Message + "\n We're in an error\n"; } return(provisionResult); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { /*The Provision method provisions the instance for the service you are setting up. Within this method, you can access the information * requested from the developer (if any) by iterating through the request.DeveloperParameters object. * At the end of the provisioning process, simply return the connection information for the service that was provisioned.*/ //Retrieving developer parameters //var parameter = request.DeveloperParameters.First(param => param.Key == "RequiredParameter"); // Retrieving manifest properties var splunkURL = request.Manifest.Properties.First(param => param.Key == "SplunkServerURL"); var splunkToken = request.Manifest.Properties.First(param => param.Key == "SplunkHTTPToken"); var result = new ProvisionAddOnResult(string.Format("{{'SplunkEndpoint': '{0}', 'AccessToken': '{1}'}}", splunkURL.Value, splunkToken.Value), true, string.Format("The Add-On was provisioned successfully.")); return(result); }
/// <summary> /// Provision the Syslog endpoint into a connection string, serialized as a JSON blob for portability. /// </summary> /// <param name="request">The provisioning request from the developer portal</param> /// <returns>A platform event result containing the connection details.</returns> public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request), "The Syslog Addon received a provisioning call without a valid Request"); } var host = request.Manifest.Properties.First(p => p.Key.Equals("Host")).Value; var port = request.Manifest.Properties.First(p => p.Key.Equals("Port")).Value; var protocol = request.Manifest.Properties.First(p => p.Key.Equals("Protocol")).Value; var mapType = request.Manifest.Properties.First(p => p.Key.Equals("MapType")).Value; var flavor = request.Manifest.Properties.First(p => p.Key.Equals("Flavor")).Value; var result = JsonConvert.SerializeObject(new { protocol, host, port, mapType, flavor }).Replace('"', '\''); return(new ProvisionAddOnResult(result)); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult(""); try { var devParameters = DeveloperParameters.Parse(request.DeveloperParameters, request.Manifest.GetProperties()); SubscriptionCloudCredentials creds = CertificateAuthenticationHelper.GetCredentials(devParameters.AzureManagementSubscriptionId, devParameters.AzureAuthenticationKey); // ok so if we need a storage account, we need to use the storage management client. if (devParameters.NewStorageAccountFlag) { var client = new StorageManagementClient(creds); var parameters = CreateStorageAccountParameters(devParameters); client.StorageAccounts.Create(parameters); do { var verificationResponse = client.StorageAccounts.Get(parameters.Name); if (verificationResponse.StorageAccount.Properties.Status.Equals(StorageAccountStatus.Created)) { var azureconnectioninfo = client.StorageAccounts.Get(devParameters.StorageAccountName); var keysForStorageUnit = client.StorageAccounts.GetKeys(devParameters.StorageAccountName); var connectionInfo = new ConnectionInfo { PrimaryKey = keysForStorageUnit.PrimaryKey, SecondaryKey = keysForStorageUnit.SecondaryKey, StorageAccountName = azureconnectioninfo.StorageAccount.Name, Uri = keysForStorageUnit.Uri.ToString() }; provisionResult.ConnectionData = connectionInfo.ToString(); provisionResult.IsSuccess = true; break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.IsSuccess = false; provisionResult.EndUserMessage = e.Message + "\n We're in an error\n"; } return provisionResult; }
public void SetupTest() { var manifest = new AddonManifest { Parameters = new ParameterList(), AllowUserDefinedParameters = false, Author = "Chris Dutra", Properties = new List<AddonProperty> { // properties go here new AddonProperty() { Key = "", Value = "" } }, DeploymentNotes = "", Description = "", DeveloperHelp = "", IsEnabled = true, ManifestVersionString = "2", Name = "Altibase", ProvisioningLocation = "", ProvisioningPassword = "", ProvisioningUsername = "", Vendor = "Apprenda", Version = "1.0" }; _request = new AddonProvisionRequest { DeveloperParameters = new List<AddonParameter> { new AddonParameter() { Key = "asodfasod", Value = "aodifsad" }, new AddonParameter() { Key = "", Value = "" } }, Manifest = manifest }; }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { /*The Provision method provisions the instance for the service you are setting up. Within this method, you can access the information * requested from the developer (if any) by iterating through the request.DeveloperParameters object. * At the end of the provisioning process, simply return the connection information for the service that was provisioned.*/ //Retrieving developer parameters //var parameter = request.DeveloperParameters.First(param => param.Key == "RequiredParameter"); // Retrieving manifest properties var accessKey = request.Manifest.ProvisioningUsername; var secretAccessKey = request.Manifest.ProvisioningPassword; var regionEndpoint = request.Manifest.Properties.First(param => param.Key == "AWSRegion"); var result = new ProvisionAddOnResult(string.Format("{{'AWSAccessKey': '{0}', 'AWSSecretAccessKey': '{1}', 'AWSRegionEndpoint': '{2}'}}", accessKey, secretAccessKey, regionEndpoint.Value), true, string.Format("The Add-On was provisioned successfully.")); return(result); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest _request) { /*The Provision method provisions the instance for the service you are setting up. Within this method, you can access the information * requested from the developer (if any) by iterating through the request.DeveloperParameters object. * At the end of the provisioning process, simply return the connection information for the service that was provisioned.*/ //Retrieving developer parameters //var parameter = request.DeveloperParameters.First(param => param.Key == "RequiredParameter"); var provisionResult = new ProvisionAddOnResult(string.Empty) { IsSuccess = false }; var manifest = _request.Manifest; var devParameters = _request.DeveloperParameters; var devOptions = WCDeveloperOptions.Parse(devParameters, manifest); var appURL = ""; cloud_url = devOptions.cloudurl; appname = devOptions.name; appalias = devOptions.alias; JObject instanceDetails = new JObject(); try { var token = authenticate(devOptions.apprendausername, devOptions.apprendapassword, devOptions.apprendatenant); createApp(token, appname, appalias, "NodeJS API Server for Watson Conversation"); var archivePath = createArchive(devOptions.workspace, devOptions.conversationusername, devOptions.conversationpassword); setArchive(token, appalias, valias, archivePath); promoteApp(token, appalias, valias); appURL = getAppURL(token, appalias, valias); log.Info("WatsonConversationAddon Provisioned Successfully"); } catch (Exception ex) { var errorMessage = string.Format("WatsonConversationAddon Provisioning Error: {0}\n{1}", ex, ex.StackTrace); log.Error(errorMessage); provisionResult.EndUserMessage = errorMessage; return(provisionResult); } provisionResult.IsSuccess = true; provisionResult.ConnectionData = appURL; return(provisionResult); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { try { var parameters = DeveloperParameters.Parse(request.Manifest, request.DeveloperParameters); // todo check parameters // creates a secure password of length 16. we can customize this further if needed. var secPw = "a" + RandoPW.GetUniqueKey(20); var connectionString = $"DSN=altibase-lab;Uid={parameters.AltibaseUsername};Pwd={parameters.AltibasePassword}"; var queryString = $"create user {parameters.SchemaName} identified by {secPw}"; var cmd = new OdbcCommand(queryString); using (var connection = new OdbcConnection(connectionString)) { cmd.Connection = connection; connection.Open(); cmd.ExecuteNonQuery(); connection.Close(); } return new ProvisionAddOnResult("") { ConnectionData = (new ConnectionInfo { jdbcConnectionString = $"jdbc:Altibase//{parameters.AltibaseHost}:{parameters.AltibasePort}/{parameters.AltibaseDB}", jdbcUsername = $"{parameters.SchemaName}", jdbcPassword = $"{secPw}", odbcConnectionString = $"Dsn={{ALTIBASE}};UID={parameters.SchemaName};PWD={secPw};Database={parameters.AltibaseDB}", // this is used for deprov (just easier). schemaName = $"{parameters.SchemaName}" }).ToString(), IsSuccess = true, EndUserMessage = "Provisioned OK." }; } catch (Exception e) { Log.Error(e.Message + "\n" + e.InnerException); return new ProvisionAddOnResult("") { IsSuccess = false, EndUserMessage = e.Message }; } }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { return(Task.Run(async() => { try { var volumeSize = request.DeveloperParameters.First(p => p.Key == "VolumeSize").Value; await new Logic(request.Manifest).ProvisionVolume( request.Manifest.InstanceAlias, volumeSize); return ProvisionAddOnResult.Success(request.Manifest.InstanceAlias); } catch (Exception ex) { return ProvisionAddOnResult.Failure($"Error provisioning Kubernetes volume: {ex}"); } }).GetAwaiter().GetResult()); }
// Provision NetApp Volume // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") {IsSuccess = false}; try { var developerParameters = DeveloperParameters.Parse(request.DeveloperParameters, request.Manifest); var netappresponse = NetAppFactory.CreateVolume(developerParameters); provisionResult = netappresponse.ToAddOnResult(); // this appears to be wrong. we need to check what's coming back from the powershell script //provisionResult.IsSuccess = true; provisionResult.ConnectionData = developerParameters.VolumeToProvision.BuildConnectionString(); } catch (Exception e) { provisionResult.IsSuccess = false; provisionResult.EndUserMessage = e.Message + "\n" + e.StackTrace; } return provisionResult; }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var result = new ProvisionAddOnResult(); try { NewDatabase = GetDatabaseName(request.Manifest); NewUserId = GetNewUsername(request.Manifest); NewPassword = GetPassword(); log.InfoFormat("Creating MsSql database: {0}", NewDatabase); using (var connection = GetConnection(request.Manifest.Properties)) { CreateDatabase(connection); CreateUser(connection); GrantPrivileges(connection); } result.IsSuccess = true; result.ConnectionData = NewConnectionString; result.EndUserMessage = "Successfully created a MsSql database."; log.InfoFormat("Successfully created MsSql database: {0}", NewDatabase); } catch (Exception ex) { result.IsSuccess = false; result.ConnectionData = ""; result.EndUserMessage = ex.Message; log.ErrorFormat("Failed to create MsSql database '{0}': {1}", NewDatabase, ex.Message); log.Error(ex.StackTrace); } return(result); }
public override ProvisionAddOnResult Provision(AddonProvisionRequest _request) { var provisionResult = new ProvisionAddOnResult(string.Empty) { IsSuccess = false }; var manifest = _request.Manifest; var devParameters = _request.DeveloperParameters; var devOptions = BMDeveloperOptions.Parse(devParameters, manifest); end_point = devOptions.api_url; bm_version = devOptions.api_version; string instanceDetails = ""; try { var token = authenticate(devOptions.bluemixuser, devOptions.bluemixpass); var servicePlansURL = getServicePlansURL(token, devOptions.servicename); var servicePlanGUID = getServicePlanGUID(token, servicePlansURL); string name = devOptions.name; var spaceGUID = getSpaceGuid(token, devOptions.space); var serviceInstanceGUID = createServiceInstance(token, name, servicePlanGUID, spaceGUID); instanceDetails = createInstanceDetails(token, name, serviceInstanceGUID); log.Info("BluemixAddon Provisioned Successfully"); } catch (Exception ex) { var errorMessage = string.Format("BluemixAddon Provisioning Error: {0}\n{1}", ex, ex.StackTrace); log.Error(errorMessage); provisionResult.EndUserMessage = errorMessage; return(provisionResult); } provisionResult.IsSuccess = true; provisionResult.ConnectionData = instanceDetails; return(provisionResult); }
// Provision NetApp Volume // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = false }; try { var developerParameters = DeveloperParameters.Parse(request.DeveloperParameters, request.Manifest); var netappresponse = NetAppFactory.CreateVolume(developerParameters); provisionResult = netappresponse.ToAddOnResult(); // this appears to be wrong. we need to check what's coming back from the powershell script //provisionResult.IsSuccess = true; provisionResult.ConnectionData = developerParameters.VolumeToProvision.BuildConnectionString(); } catch (Exception e) { provisionResult.IsSuccess = false; provisionResult.EndUserMessage = e.Message + "\n" + e.StackTrace; } return(provisionResult); }
// Provision SNS Topic // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonSimpleNotificationServiceClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.CreateTopic(CreateTopicRequest(devOptions)); do { var verificationResponse = client.GetTopicAttributes(new GetTopicAttributesRequest() { TopicArn = response.TopicArn }); // ok so the attributes works as follows: // attributes[0] - topicarn // attributes[1] - owner // attributes[2] - policy // attributes[3] - displayname // attributes[4] - subscriptionspending // attributes[5] - subscriptionsconfirmed // attributes[6] - subscriptionsdeleted // attributes[7] - deliverypolicy // attributes[8] - effectivedeliverypolicy if (verificationResponse.Attributes["TopicArn"].Equals(response.TopicArn)) { var conInfo = new ConnectionInfo() { TopicArn = verificationResponse.Attributes["TopicArn"], QueueName = verificationResponse.Attributes["DisplayName"] }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
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); }
public static void Main([NotNull] string[] args) { AddonManifest.Properties.Add(new AddonProperty { Key = "clustermgtendpoint", Value = ConfigurationManager.AppSettings["ClusterMgtEndpoint"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "shareendpoint", Value = ConfigurationManager.AppSettings["ShareEndpoint"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "adminusername", Value = ConfigurationManager.AppSettings["AdminUsername"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "adminpassword", Value = ConfigurationManager.AppSettings["AdminPassword"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "vserver", Value = ConfigurationManager.AppSettings["VServer"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultprotocol", Value = ConfigurationManager.AppSettings["DefaultProtocol"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultaggregate", Value = ConfigurationManager.AppSettings["DefaultAggregate"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "defaultRootPath", Value = ConfigurationManager.AppSettings["DefaultRootPath"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapenable", Value = ConfigurationManager.AppSettings["SnapEnable"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "vaultenable", Value = ConfigurationManager.AppSettings["VaultEnable"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapvaultschedule", Value = ConfigurationManager.AppSettings["SnapVaultSchedule"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapmirrorschedule", Value = ConfigurationManager.AppSettings["SnapMirrorSchedule"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapvaultpolicyname", Value = ConfigurationManager.AppSettings["SnapVaultPolicyName"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snapmirrorpolicyname", Value = ConfigurationManager.AppSettings["SnapMirrorPolicyName"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "snaptype", Value = ConfigurationManager.AppSettings["SnapType"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "maxallocatedstorage", Value = ConfigurationManager.AppSettings["MaxAllocatedStorage"] }); AddonManifest.Properties.Add(new AddonProperty { Key = "scriptrepo", Value = ConfigurationManager.AppSettings["ScriptRepo"] }); try { var addon = new NetAppAddon(); var prequest = new AddonProvisionRequest { DeveloperParameters = new List <AddonParameter> { new AddonParameter() { Key = "name", Value = ConfigurationManager.AppSettings["VolumeName"] }, new AddonParameter() { Key = "size", Value = ConfigurationManager.AppSettings["Size"] } }, Manifest = AddonManifest }; var result = addon.Provision(prequest); Console.Out.Write(result.IsSuccess); Console.Out.Write(result.EndUserMessage); Console.Out.Write(result.ConnectionData); } catch (Exception e) { Console.Out.Write(e); } }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonSQSClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.CreateQueue(CreateQueueRequest(devOptions)); // fix 5/22/14 resolves amazon aws deprecation if (response.QueueUrl != null) { //var conInfo = new ConnectionInfo() //{ // DbInstanceIdentifier = devOptions.DbInstanceIndentifier //}; //provisionResult.IsSuccess = true; //provisionResult.ConnectionData = conInfo.ToString(); //Thread.Sleep(TimeSpan.FromMinutes(6)); do { var verificationResponse = client.GetQueueAttributes(new GetQueueAttributesRequest() { QueueUrl = response.QueueUrl }); // fix on next few lines 5/22/14 resolve amazon aws deprecation. if(verificationResponse.Attributes != null) { var conInfo = new ConnectionInfo() { queueName = devOptions.QueueName, queueURL = response.QueueUrl }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonRDSClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.CreateDBInstance(CreateDbInstanceRequest(devOptions)); // fix 5/22/14 resolves amazon aws deprecation if (response.DBInstance != null) { //var conInfo = new ConnectionInfo() //{ // DbInstanceIdentifier = devOptions.DbInstanceIndentifier //}; //provisionResult.IsSuccess = true; //provisionResult.ConnectionData = conInfo.ToString(); //Thread.Sleep(TimeSpan.FromMinutes(6)); do { var verificationResponse = client.DescribeDBInstances(new DescribeDBInstancesRequest() { DBInstanceIdentifier = devOptions.DbInstanceIdentifier }); // fix on next few lines 5/22/14 resolve amazon aws deprecation. if (verificationResponse.DBInstances.Any() && verificationResponse.DBInstances[0].DBInstanceStatus == "available") { var dbInstance = verificationResponse.DBInstances[0]; var conInfo = new ConnectionInfo() { DbInstanceIdentifier = devOptions.DbInstanceIdentifier, EndpointAddress = dbInstance.Endpoint.Address, EndpointPort = dbInstance.Endpoint.Port }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
/// <summary> /// Provisions an instance of this add-on. /// </summary> /// <param name="_request">A request object encapsulating all the parameters available to provision an add-on.</param> /// <returns> /// A <see cref="T:Apprenda.SaaSGrid.Addons.ProvisionAddOnResult"/> object containing the results of the operation as well as the data needed to connect to / use the newly provisioned instance. /// </returns> public override ProvisionAddOnResult Provision(AddonProvisionRequest _request) { if (_request == null) { throw new ArgumentNullException("_request"); } // developerOptions is a string of arbitrary arguments used at provisioning time. // In this case, we need to know the username and password of the user to be assigned to this DB. // The expected format is: username=<username>,password=<password> // // NOTE: In the real world it may not be the best idea to pass in the username and password. // Instead they could be derived and guaranteed unique from data in the manifest. // However, this illustrates how one might use the developerOptions parameter. var parameters = DeveloperParameters.Parse(_request.DeveloperParameters, _request.Manifest.Properties); // since there is no connection data yet, this constructor doesn't make sense. but just throw an empty string for now. var result = new ProvisionAddOnResult("", false, ""); try { string port; try { port = _request.Manifest.Properties.Find(_x => _x.Key.Equals("port")).Value; } catch (ArgumentNullException) { port = "27017"; } //var connectionString = string.Format("mongodb://{0}:{1}", _request.Manifest.ProvisioningLocation, port); var connectionString = GetConnectionString(_request.Manifest.ProvisioningLocation, port, _request.Manifest.ProvisioningUsername, _request.Manifest.ProvisioningPassword); var client = new MongoClient(connectionString); var databaseName = GetDatabaseName(_request.Manifest, parameters); var database = client.GetDatabase(databaseName); var document = CreateUserAdd(parameters.Username, parameters.Password, databaseName); database.RunCommand <BsonDocument>(document); // creates a new database. note - the database will not be created until something is written to it var newCollection = database.GetCollection <ProvisioningData>("__provisioningData"); newCollection.InsertOne(new ProvisioningData()); // Set the connection string that the app will use. // This connection string includes the username and password given for this instance. result.ConnectionData = GetConnectionString(_request.Manifest.ProvisioningLocation, port, parameters.Username, parameters.Password, databaseName); //result.ConnectionData = string.Format("mongodb://{0}:{1}/{2}", _request.Manifest.ProvisioningLocation, port, databaseName); result.IsSuccess = true; } catch (MongoException mongoException) { Logger.ErrorFormat("Error occurred during provisioning: {0} \n {1}", mongoException.Message, mongoException.StackTrace); result.EndUserMessage = mongoException.Message; result.IsSuccess = false; } catch (Exception e) { result.IsSuccess = false; Logger.ErrorFormat("General error occurred during provisioning: {0} \n {1}", e.Message, e.StackTrace); } return(result); }
// Provision RDS Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonRDSClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return(provisionResult); } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(provisionResult); } var response = client.CreateDBInstance(CreateDbInstanceRequest(devOptions)); // fix 5/22/14 resolves amazon aws deprecation if (response.DBInstance != null) { //var conInfo = new ConnectionInfo() //{ // DbInstanceIdentifier = devOptions.DbInstanceIndentifier //}; //provisionResult.IsSuccess = true; //provisionResult.ConnectionData = conInfo.ToString(); //Thread.Sleep(TimeSpan.FromMinutes(6)); do { var verificationResponse = client.DescribeDBInstances(new DescribeDBInstancesRequest() { DBInstanceIdentifier = devOptions.DbInstanceIdentifier }); // fix on next few lines 5/22/14 resolve amazon aws deprecation. if (verificationResponse.DBInstances.Any() && verificationResponse.DBInstances[0].DBInstanceStatus == "available") { var dbInstance = verificationResponse.DBInstances[0]; var conInfo = new ConnectionInfo() { DbInstanceIdentifier = devOptions.DbInstanceIdentifier, EndpointAddress = dbInstance.Endpoint.Address, EndpointPort = dbInstance.Endpoint.Port }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }
// Provision Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public abstract override ProvisionAddOnResult Provision(AddonProvisionRequest request);
// Provision SNS Topic // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { // i think this is a bug. but I'm going to throw an empty string to it to clear the warning. var provisionResult = new ProvisionAddOnResult(""); AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonSimpleNotificationServiceClient client; DeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return(provisionResult); } var establishClientResult = EstablishClient(manifest, DeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(provisionResult); } var response = client.CreateTopic(CreateTopicRequest(devOptions)); do { var verificationResponse = client.GetTopicAttributes(new GetTopicAttributesRequest() { TopicArn = response.TopicArn }); // ok so the attributes works as follows: // attributes[0] - topicarn // attributes[1] - owner // attributes[2] - policy // attributes[3] - displayname // attributes[4] - subscriptionspending // attributes[5] - subscriptionsconfirmed // attributes[6] - subscriptionsdeleted // attributes[7] - deliverypolicy // attributes[8] - effectivedeliverypolicy if (verificationResponse.Attributes["TopicArn"].Equals(response.TopicArn)) { var conInfo = new ConnectionInfo() { TopicArn = verificationResponse.Attributes["TopicArn"], QueueName = verificationResponse.Attributes["DisplayName"] }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }
public void SetupManifest() { ProvisionRequest = new AddonProvisionRequest {Manifest = SetupPropertiesAndParameters()}; DeprovisionRequest = new AddonDeprovisionRequest {Manifest = SetupPropertiesAndParameters()}; TestRequest = new AddonTestRequest {Manifest = SetupPropertiesAndParameters()}; }
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; }
// Provision Redshift Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = false }; AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonRedshiftClient client; RedshiftDeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return provisionResult; } var establishClientResult = EstablishClient(manifest, RedshiftDeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return provisionResult; } var response = client.CreateCluster(CreateClusterRequest(devOptions)); // modified 5/22/14 to fix amazon aws deprecation if (response.Cluster != null) { //var conInfo = new ConnectionInfo() //{ // DbInstanceIdentifier = devOptions.DbInstanceIndentifier //}; //provisionResult.IsSuccess = true; //provisionResult.ConnectionData = conInfo.ToString(); //Thread.Sleep(TimeSpan.FromMinutes(6)); do { var verificationResponse = client.DescribeClusters(new DescribeClustersRequest() { ClusterIdentifier = devOptions.ClusterIdentifier }); // next few lines fixed 5/22/14 to resolve amazon aws deprecation if (verificationResponse.Clusters.Any() && verificationResponse.Clusters[0].ClusterStatus == "available") { var dbInstance = verificationResponse.Clusters[0]; var conInfo = new ConnectionInfo() { ClusterIdentifier = devOptions.ClusterIdentifier, EndpointAddress = dbInstance.Endpoint.Address, EndpointPort = dbInstance.Endpoint.Port }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return provisionResult; }
static void Main(string[] args) { var parameters = new List<AddonParameter> { new AddonParameter { Key = "schemaname", Value = "" } }; var request = new AddonProvisionRequest { Manifest = new AddonManifest { Parameters = new ParameterList(), Properties = new List<AddonProperty> { new AddonProperty { Key = "AltibaseHost", Value = "54.91.16.224" }, new AddonProperty { Key = "AltibasePort", Value = "20300" }, new AddonProperty { Key = "AltibaseUsername", Value = "sys" }, new AddonProperty { Key = "AltibasePassword", Value = "manager" }, new AddonProperty { Key="altibasedb", Value="mydb" } }, ProvisioningLocation = "", ProvisioningUsername = "", Description = "", Version = "1.0", Name = "Altibase", DeveloperHelp = "", ProvisioningPasswordHasValue = false, AllowUserDefinedParameters = true, ProvisioningPassword = "", Author = "Chris Dutra", ManifestVersionString = "2", Vendor = "Apprenda", DeploymentNotes = "", IsEnabled = true }, DeveloperParameters = new List<AddonParameter> { new AddonParameter { Key = "schemaname", Value = "dutra2" } } }; request.Manifest.Parameters.Items = parameters.ToArray() as IAddOnParameterDefinition[]; var output = new AltibaseAddon().Provision(request); Console.WriteLine(output.IsSuccess); Console.WriteLine(output.EndUserMessage); Console.WriteLine(output.ConnectionData); Console.ReadKey(); }
// Provision Redshift Instance // Input: AddonDeprovisionRequest request // Output: ProvisionAddOnResult public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var provisionResult = new ProvisionAddOnResult("") { IsSuccess = false }; AddonManifest manifest = request.Manifest; string developerOptions = request.DeveloperOptions; try { AmazonRedshiftClient client; RedshiftDeveloperOptions devOptions; var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage; return(provisionResult); } var establishClientResult = EstablishClient(manifest, RedshiftDeveloperOptions.Parse(developerOptions), out client); if (!establishClientResult.IsSuccess) { provisionResult.EndUserMessage = establishClientResult.EndUserMessage; return(provisionResult); } var response = client.CreateCluster(CreateClusterRequest(devOptions)); // modified 5/22/14 to fix amazon aws deprecation if (response.Cluster != null) { //var conInfo = new ConnectionInfo() //{ // DbInstanceIdentifier = devOptions.DbInstanceIndentifier //}; //provisionResult.IsSuccess = true; //provisionResult.ConnectionData = conInfo.ToString(); //Thread.Sleep(TimeSpan.FromMinutes(6)); do { var verificationResponse = client.DescribeClusters(new DescribeClustersRequest() { ClusterIdentifier = devOptions.ClusterIdentifier }); // next few lines fixed 5/22/14 to resolve amazon aws deprecation if (verificationResponse.Clusters.Any() && verificationResponse.Clusters[0].ClusterStatus == "available") { var dbInstance = verificationResponse.Clusters[0]; var conInfo = new ConnectionInfo() { ClusterIdentifier = devOptions.ClusterIdentifier, EndpointAddress = dbInstance.Endpoint.Address, EndpointPort = dbInstance.Endpoint.Port }; provisionResult.IsSuccess = true; provisionResult.ConnectionData = conInfo.ToString(); break; } Thread.Sleep(TimeSpan.FromSeconds(10d)); } while (true); } } catch (Exception e) { provisionResult.EndUserMessage = e.Message; } return(provisionResult); }
// Testing Instance // Input: AddonTestRequest request // Output: OperationResult public override OperationResult Test(AddonTestRequest request) { var provisionRequest = new AddonProvisionRequest { Manifest = request.Manifest, DeveloperOptions = request.DeveloperOptions }; var manifest = request.Manifest; var developerOptions = request.DeveloperOptions; var testResult = new OperationResult { IsSuccess = false }; var testProgress = ""; if (manifest.Properties != null && manifest.Properties.Any()) { S3DeveloperOptions devOptions; testProgress += "Evaluating required manifest properties...\n"; if (!ValidateManifest(manifest, out testResult)) { return testResult; } var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions); if (!parseOptionsResult.IsSuccess) { return parseOptionsResult; } testProgress += parseOptionsResult.EndUserMessage; try { testProgress += "Establishing connection to AWS...\n"; AmazonS3Client client; var establishClientResult = EstablishClient(manifest, devOptions, out client); if (!establishClientResult.IsSuccess) { return establishClientResult; } testProgress += establishClientResult.EndUserMessage; testProgress += "Successfully connected. \n"; testResult.IsSuccess = true; testResult.EndUserMessage = testProgress; // ok and let let's try provisioning var result = Provision(provisionRequest); testResult.EndUserMessage += result.IsSuccess + "\n"; testResult.EndUserMessage += result.ConnectionData + "\n"; testResult.EndUserMessage += result.EndUserMessage + "\n"; var depResult = Deprovision(new AddonDeprovisionRequest { ConnectionData = result.ConnectionData, DeveloperOptions = provisionRequest.DeveloperOptions, Manifest = provisionRequest.Manifest }); if (depResult == null) { throw new ArgumentNullException("request"); } testResult.EndUserMessage += depResult.IsSuccess + "\n"; testResult.EndUserMessage += depResult.EndUserMessage; } catch (Exception e) { testResult.EndUserMessage = e.Message + e.StackTrace; } } else { testResult.EndUserMessage = "Missing required manifest properties (requireDevCredentials)"; } return testResult; }
public override ProvisionAddOnResult Provision(AddonProvisionRequest request) { var rabbitConfig = new RabbitMQConfig(request); var client = new RestClient(rabbitConfig.ManagementUri); client.Authenticator = new HttpBasicAuthenticator(rabbitConfig.AdminUser, rabbitConfig.AdminPassword); // Create new user var user = request.Manifest.CallingDeveloperAlias + "_" + request.Manifest.InstanceAlias; var pass = Guid.NewGuid().ToString("N"); var createUserPath = $"users/{user}"; var createUserBody = new { password = pass, tags = "monitoring,management,administrator" }; var createUserRequest = new RestRequest(createUserPath, Method.PUT) { RequestFormat = DataFormat.Json }; createUserRequest.AddBody(createUserBody); createUserRequest.AddHeader("content-type", "application/json"); log.DebugFormat("The following user is being created: {0} using the following URI: ", user, createUserPath.ToString()); var createUserResponse = client.Execute(createUserRequest); log.DebugFormat("The response code for the user creation REST call is: {0}", createUserResponse.StatusCode); if (createUserResponse.StatusCode != HttpStatusCode.Created) { return(ProvisionAddOnResult.Failure("Unable to create user")); } Thread.Sleep(5000); // Create new vhost var vhostName = request.Manifest.CallingDeveloperAlias + "_" + request.Manifest.InstanceAlias; var createVhostPath = $"vhosts/{vhostName}"; var createVhostRequest = new RestRequest(createVhostPath, Method.PUT) { RequestFormat = DataFormat.Json }; createVhostRequest.AddHeader("content-type", "application/json"); log.DebugFormat("The following vhost is being created: {0} using the following URI:", vhostName, createVhostPath.ToString()); var createVhostResponse = client.Execute(createVhostRequest); log.DebugFormat("The response code for the vhost creationg REST call is: {0}", createVhostResponse.StatusCode); if (createVhostResponse.StatusCode != HttpStatusCode.Created) { //If this fails, we need to clean up the previous command // Delete user var deleteUserPath = $"users/{user}"; var deleteUserRequest = new RestRequest(deleteUserPath, Method.DELETE) { RequestFormat = DataFormat.Json }; deleteUserRequest.AddHeader("content-type", "application/json"); var deleteUserResponse = client.Execute(deleteUserRequest); return(ProvisionAddOnResult.Failure("Unable to create vhost")); } Thread.Sleep(5000); // Set permissions var permissionsPath = $"permissions/{vhostName}/{user}"; var permissionsBody = new { configure = ".*", write = ".*", read = ".*" }; var permissionsRequest = new RestRequest(permissionsPath, Method.PUT) { RequestFormat = DataFormat.Json }; permissionsRequest.AddHeader("content-type", "application/json"); permissionsRequest.AddBody(permissionsBody); log.DebugFormat("The permissions are being configuring using the following URI: {0}", permissionsPath); var permissionsResponse = client.Execute(permissionsRequest); log.DebugFormat("The response code for configuring the permissions is: {0}", permissionsResponse.StatusCode); if (permissionsResponse.StatusCode != HttpStatusCode.Created) { //If this fails, we need to clean up the previous command // Delete user var deleteUserPath = $"users/{user}"; var deleteUserRequest = new RestRequest(deleteUserPath, Method.DELETE) { RequestFormat = DataFormat.Json }; deleteUserRequest.AddHeader("content-type", "application/json"); var deleteUserResponse = client.Execute(deleteUserRequest); // Delete Vhost var deleteVhostPath = $"vhosts/{vhostName}"; var deleteVhostRequest = new RestRequest(deleteVhostPath, Method.DELETE) { RequestFormat = DataFormat.Json }; deleteVhostRequest.AddHeader("content-type", "application/json"); var deleteVhostResponse = client.Execute(deleteVhostRequest); return(ProvisionAddOnResult.Failure("Unable to set permissions")); } var connectionString = $"amqp://{user}:{pass}@{rabbitConfig.Hostname}:{rabbitConfig.Port}/{vhostName}"; return(ProvisionAddOnResult.Success(connectionString)); }