Exemplo n.º 1
0
        /**
         * Azure App Service basic sample for managing web apps.
         *  - Create a SQL database in a new SQL server
         *  - Create a web app deployed with Project Nami (WordPress's SQL Server variant)
         *      that contains the app settings to connect to the SQL database
         *  - Update the SQL server's firewall rules to allow the web app to access
         *  - Clean up
         */

        public static void RunSample(IAzure azure)
        {
            string appName       = SdkContext.RandomResourceName("webapp1-", 20);
            string appUrl        = appName + Suffix;
            string sqlServerName = SdkContext.RandomResourceName("jsdkserver", 20);
            string sqlDbName     = SdkContext.RandomResourceName("jsdkdb", 20);
            string rgName        = SdkContext.RandomResourceName("rg1NEMV_", 24);

            try
            {
                //============================================================
                // Create a sql server

                Utilities.Log("Creating SQL server " + sqlServerName + "...");

                ISqlServer server = azure.SqlServers.Define(sqlServerName)
                                    .WithRegion(Region.USWest)
                                    .WithNewResourceGroup(rgName)
                                    .WithAdministratorLogin(Admin)
                                    .WithAdministratorPassword(Password)
                                    .Create();

                Utilities.Log("Created SQL server " + server.Name);

                //============================================================
                // Create a sql database for the web app to use

                Utilities.Log("Creating SQL database " + sqlDbName + "...");

                ISqlDatabase db = server.Databases.Define(sqlDbName)
                                  .Create();

                Utilities.Log("Created SQL database " + db.Name);

                //============================================================
                // Create a web app with a new app service plan

                Utilities.Log("Creating web app " + appName + "...");

                IWebApp app = azure.WebApps
                              .Define(appName)
                              .WithRegion(Region.USWest)
                              .WithExistingResourceGroup(rgName)
                              .WithNewWindowsPlan(PricingTier.StandardS1)
                              .WithPhpVersion(PhpVersion.V5_6)
                              .DefineSourceControl()
                              .WithPublicGitRepository("https://github.com/ProjectNami/projectnami")
                              .WithBranch("master")
                              .Attach()
                              .WithAppSetting("ProjectNami.DBHost", server.FullyQualifiedDomainName)
                              .WithAppSetting("ProjectNami.DBName", db.Name)
                              .WithAppSetting("ProjectNami.DBUser", Admin)
                              .WithAppSetting("ProjectNami.DBPass", Password)
                              .Create();

                Utilities.Log("Created web app " + app.Name);
                Utilities.Print(app);

                //============================================================
                // Allow web app to access the SQL server

                Utilities.Log("Allowing web app " + appName + " to access SQL server...");

                Microsoft.Azure.Management.Sql.Fluent.SqlServer.Update.IUpdate update = server.Update();
                foreach (var ip in app.OutboundIPAddresses)
                {
                    update = update.WithNewFirewallRule(ip);
                }
                server = update.Apply();

                Utilities.Log("Firewall rules added for web app " + appName);
                Utilities.PrintSqlServer(server);

                Utilities.Log("Your WordPress app is ready.");
                Utilities.Log("Please navigate to http://" + appUrl + " to finish the GUI setup. Press enter to exit.");
                Utilities.ReadLine();
            }
            finally
            {
                try
                {
                    Utilities.Log("Deleting Resource Group: " + rgName);
                    azure.ResourceGroups.DeleteByName(rgName);
                    Utilities.Log("Deleted Resource Group: " + rgName);
                }
                catch (NullReferenceException)
                {
                    Utilities.Log("Did not create any resources in Azure. No clean up is necessary");
                }
                catch (Exception g)
                {
                    Utilities.Log(g);
                }
            }
        }
        private static void ValidateMultiCreation(
            ISqlManager sqlServerManager,
            string database2Name,
            string database1InEPName,
            string database2InEPName,
            string elasticPool1Name,
            string elasticPool2Name,
            string elasticPool3Name,
            ISqlServer sqlServer,
            bool deleteUsingUpdate)
        {
            ValidateSqlServer(sqlServer);
            ValidateSqlServer(sqlServerManager.SqlServers.GetByResourceGroup(GroupName, SqlServerName));
            ValidateSqlDatabase(sqlServer.Databases.Get(SqlDatabaseName), SqlDatabaseName);
            ValidateSqlFirewallRule(sqlServer.FirewallRules.Get(SqlFirewallRuleName), SqlFirewallRuleName);

            var firewalls = sqlServer.FirewallRules.List();

            Assert.Equal(3, firewalls.Count());

            var startIPAddress = 0;
            var endIPAddress   = 0;

            foreach (ISqlFirewallRule firewall in firewalls)
            {
                if (!StringComparer.OrdinalIgnoreCase.Equals(firewall.Name, SqlFirewallRuleName))
                {
                    Assert.Equal(firewall.StartIPAddress, StartIPAddress);
                    if (StringComparer.OrdinalIgnoreCase.Equals(firewall.EndIPAddress, StartIPAddress))
                    {
                        startIPAddress++;
                    }
                    else if (StringComparer.OrdinalIgnoreCase.Equals(firewall.EndIPAddress, EndIPAddress))
                    {
                        endIPAddress++;
                    }
                }
            }

            Assert.Equal(1, startIPAddress);
            Assert.Equal(1, endIPAddress);

            Assert.NotNull(sqlServer.Databases.Get(database2Name));
            Assert.NotNull(sqlServer.Databases.Get(database1InEPName));
            Assert.NotNull(sqlServer.Databases.Get(database2InEPName));

            var ep1 = sqlServer.ElasticPools.Get(elasticPool1Name);

            ValidateSqlElasticPool(ep1, elasticPool1Name);
            var ep2 = sqlServer.ElasticPools.Get(elasticPool2Name);

            Assert.NotNull(ep2);
            Assert.Equal(ep2.Edition, ElasticPoolEditions.Premium);
            Assert.Equal(2, ep2.ListDatabases().Count());
            Assert.NotNull(ep2.GetDatabase(database1InEPName));
            Assert.NotNull(ep2.GetDatabase(database2InEPName));

            var ep3 = sqlServer.ElasticPools.Get(elasticPool3Name);

            Assert.NotNull(ep3);
            Assert.Equal(ep3.Edition, ElasticPoolEditions.Standard);

            if (!deleteUsingUpdate)
            {
                sqlServer.Databases.Delete(database2Name);
                sqlServer.Databases.Delete(database1InEPName);
                sqlServer.Databases.Delete(database2InEPName);
                sqlServer.Databases.Delete(SqlDatabaseName);

                Assert.Empty(ep1.ListDatabases());
                Assert.Empty(ep2.ListDatabases());
                Assert.Empty(ep3.ListDatabases());

                sqlServer.ElasticPools.Delete(elasticPool1Name);
                sqlServer.ElasticPools.Delete(elasticPool2Name);
                sqlServer.ElasticPools.Delete(elasticPool3Name);

                firewalls = sqlServer.FirewallRules.List();

                foreach (ISqlFirewallRule firewallRule in firewalls)
                {
                    firewallRule.Delete();
                }
            }
            else
            {
                sqlServer.Update()
                .WithoutDatabase(database2Name)
                .WithoutElasticPool(elasticPool1Name)
                .WithoutElasticPool(elasticPool2Name)
                .WithoutElasticPool(elasticPool3Name)
                .WithoutElasticPool(elasticPool1Name)
                .WithoutDatabase(database1InEPName)
                .WithoutDatabase(SqlDatabaseName)
                .WithoutDatabase(database2InEPName)
                .WithoutFirewallRule(SqlFirewallRuleName)
                .Apply();

                Assert.Empty(sqlServer.ElasticPools.List());

                firewalls = sqlServer.FirewallRules.List();
                Assert.Equal(2, firewalls.Count());
                foreach (ISqlFirewallRule firewallRule in firewalls)
                {
                    firewallRule.Delete();
                }
            }

            Assert.Empty(sqlServer.ElasticPools.List());
            // Only master database is remaining in the SQLServer.
            Assert.Single(sqlServer.Databases.List());
        }