// 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;
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        // 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);
        }
示例#5
0
        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);
        }
示例#6
0
        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;
        }
示例#8
0
        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);
        }
示例#10
0
        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;
        }
示例#11
0
        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}"));
     }
 }
示例#13
0
        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;
        }
示例#14
0
 public void SetupManifest()
 {
     ProvisionRequest = new AddonProvisionRequest {
         Manifest = SetupPropertiesAndParameters()
     };
     DeprovisionRequest = new AddonDeprovisionRequest {
         Manifest = SetupPropertiesAndParameters()
     };
     TestRequest = new AddonTestRequest {
         Manifest = SetupPropertiesAndParameters()
     };
 }
示例#15
0
        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);
        }
示例#16
0
        // 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);
            }
            
        }
示例#19
0
        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);
        }
示例#21
0
        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;
        }
示例#24
0
        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
                };
            }
        }
示例#28
0
        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;
 }
示例#30
0
        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);
        }
示例#32
0
        // 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;
        }
示例#34
0
        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;
        }
示例#38
0
        /// <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);
        }
示例#39
0
        // 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);
        }
示例#40
0
 // Provision Instance
 // Input: AddonDeprovisionRequest request
 // Output: ProvisionAddOnResult
 public abstract override ProvisionAddOnResult Provision(AddonProvisionRequest request);
示例#41
0
        // 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);
        }
示例#42
0
 public void SetupManifest()
 {
     ProvisionRequest = new AddonProvisionRequest {Manifest = SetupPropertiesAndParameters()};
     DeprovisionRequest = new AddonDeprovisionRequest {Manifest = SetupPropertiesAndParameters()};
     TestRequest = new AddonTestRequest {Manifest = SetupPropertiesAndParameters()};
 }
示例#43
0
        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;
        }
示例#45
0
        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();
        }
示例#46
0
 // Provision Instance
 // Input: AddonDeprovisionRequest request
 // Output: ProvisionAddOnResult
 public abstract override ProvisionAddOnResult Provision(AddonProvisionRequest request);
示例#47
0
        // 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));
        }