protected bool FindPricingTier(string priceTierValue, out PricingTier result)
        {
            var found = _priceTierMapper.TryGetValue(priceTierValue, out PricingTier v);

            result = v;
            return(found);
        }
 public static PricingTier GetNextTier(PricingTier tier)
 {
     if (tier.Equals(PricingTier.FreeF1) || tier.Equals(PricingTier.SharedD1))
     {
         return(PricingTier.StandardS1);
     }
     else if (tier.Equals(PricingTier.BasicB1) || tier.Equals(PricingTier.BasicB2))
     {
         return(PricingTier.BasicB3);
     }
     else if (tier.Equals(PricingTier.StandardS1) || tier.Equals(PricingTier.StandardS2))
     {
         return(PricingTier.StandardS3);
     }
     else if (tier.Equals(PricingTier.PremiumP1) || tier.Equals(PricingTier.PremiumP2))
     {
         return(PricingTier.PremiumP3);
     }
     else if (tier.Equals(PricingTier.PremiumP1v2) || tier.Equals(PricingTier.PremiumP2v2))
     {
         return(PricingTier.PremiumP3v2);
     }
     else
     {
         return(PricingTier.StandardS3);
     }
 }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log, ExecutionContext executionContext)
        {
            log.Info("SetAppService started");

            string setAppServiceRequestJson = await req.Content.ReadAsStringAsync();

            if (!string.IsNullOrEmpty(setAppServiceRequestJson))
            {
                var setAppServiceRequest = JsonConvert.DeserializeObject <SetAppServicePlanRequest>(setAppServiceRequestJson);

                var appServicePlanName = "#YOURAPPSERVICEPLANNAME#";

                var authFile = $"{Directory.GetParent(executionContext.FunctionDirectory).FullName}\\my.azureauth";

                var azure = Azure.Authenticate(authFile).WithDefaultSubscription();

                var appServicePlan = azure.AppServices.AppServicePlans.List().FirstOrDefault(x => x.Name == appServicePlanName);
                log.Info(executionContext.FunctionDirectory);

                PricingTier pricingTier = new PricingTier(setAppServiceRequest.Tier, setAppServiceRequest.Size); //Basic, B1

                int capacity = setAppServiceRequest.Capacity;

                appServicePlan?.Update()
                .WithPricingTier(pricingTier)
                .WithCapacity(capacity)
                .Apply();

                return(req.CreateResponse(HttpStatusCode.OK, "SetAppService Successfully Competed"));
            }
            else
            {
                return(req.CreateResponse(HttpStatusCode.BadRequest, "Something went wrong!"));
            }
        }
Example #4
0
        public ActionResult DeleteConfirmed(int id)
        {
            PricingTier pricingTier = db.PricingTiers.Find(id);

            db.PricingTiers.Remove(pricingTier);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        private async Task <IFunctionApp> CreateFunctionAppsAsync(IResourceGroup resourceGroup)
        {
            var storageAccount = await StorageManager
                                 .Authenticate(_azureCredentials, _configuration.SubscriptionId)
                                 .StorageAccounts
                                 .Define(_configuration.ResourceNamePrefix.ToLowerInvariant() + "storage")
                                 .WithRegion(_configuration.RegionName)
                                 .WithExistingResourceGroup(resourceGroup)
                                 .WithSku(StorageAccountSkuType.Standard_LRS)
                                 .CreateAsync();

            Console.WriteLine($"Successfully created or updated storage account '{storageAccount.Name}'");

            var appServiceManager = AppServiceManager.Authenticate(_azureCredentials, _configuration.SubscriptionId);
            var appServicePlan    = await appServiceManager
                                    .AppServicePlans
                                    .Define(_configuration.ResourceNamePrefix + "Plan")
                                    .WithRegion(_configuration.RegionName)
                                    .WithExistingResourceGroup(resourceGroup)
                                    .WithPricingTier(PricingTier.FromSkuDescription(new SkuDescription("Y1", "Dynamic", "Y1", "Y", 0)))
                                    .WithOperatingSystem(OperatingSystem.Windows)
                                    .CreateAsync();

            Console.WriteLine($"Successfully created or updated app service plan '{appServicePlan.Name}'");

            var functionApp = await appServiceManager
                              .FunctionApps
                              .Define(_configuration.ResourceNamePrefix + "Api")
                              .WithExistingAppServicePlan(appServicePlan)
                              .WithExistingResourceGroup(resourceGroup)
                              .WithExistingStorageAccount(storageAccount)
                              .WithSystemAssignedManagedServiceIdentity()
                              .DefineAuthentication()
                              .WithDefaultAuthenticationProvider(BuiltInAuthenticationProvider.AzureActiveDirectory)
                              .WithActiveDirectory(_configuration.CertificateAuthorityClientId, $"https://login.microsoftonline.com/{_configuration.TenantId}/v2.0")
                              .Attach()
                              .WithAppSetting("StorageConnectionString", await BuildStorageConnectionString())
                              .WithAppSetting("StorageContainerName", _configuration.FunctionStorageContainerName)
                              .WithAppSetting("RootCertificateId", BuildRootCertificateId())
                              .CreateAsync();

            Console.WriteLine($"Successfully created or updated function app '{functionApp.Name}'");
            return(functionApp);

            async Task <string> BuildStorageConnectionString()
            {
                var storageAccountKeys = await storageAccount.GetKeysAsync();

                var storageAccountKeyValue = storageAccountKeys[0].Value;

                return($"DefaultEndpointsProtocol=https;AccountName={storageAccount.Name};AccountKey={storageAccountKeyValue};EndpointSuffix=core.windows.net");
            }

            string BuildRootCertificateId() => $"https://{_configuration.ResourceNamePrefix.ToLowerInvariant()}vault.vault.azure.net/certificates/{_configuration.RootCertificateName.ToLowerInvariant()}";
        }
Example #6
0
 public ActionResult Edit([Bind(Include = "Id,Name,Description,Price,OrderInPricing,PricingId, CreateTime")] PricingTier pricingTier)
 {
     if (ModelState.IsValid)
     {
         pricingTier.UpdateTime      = DateTime.Now;
         db.Entry(pricingTier).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PricingId = new SelectList(db.Pricings, "Id", "Name", pricingTier.PricingId);
     return(View(pricingTier));
 }
        public static void ScaleUpDown(IAppServicePlan appServicePlan)
        {
            WriteSection("Applying a possible scale up/down fix");
            PricingTier _default = appServicePlan.PricingTier;
            PricingTier _next    = GetNextTier(_default);

            Log("Scaling Up App Service Plan: " + _next.ToString());
            appServicePlan.Update().WithPricingTier(_next).Apply();
            LetsWaitALittle();
            Log("Scaling Down App Service Plan: " + _default.ToString());
            appServicePlan.Update().WithPricingTier(_default).Apply();
            LetsWaitALittle();
        }
Example #8
0
        public ActionResult Create([Bind(Include = "Id,Name,Description,Price,OrderInPricing,PricingId")] PricingTier pricingTier)
        {
            if (ModelState.IsValid)
            {
                pricingTier.CreateTime = DateTime.Now;
                db.PricingTiers.Add(pricingTier);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.PricingId = new SelectList(db.Pricings, "Id", "Name", pricingTier.PricingId);
            return(View(pricingTier));
        }
Example #9
0
        // GET: PricingTier/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PricingTier pricingTier = db.PricingTiers.Find(id);

            if (pricingTier == null)
            {
                return(HttpNotFound());
            }
            return(View(pricingTier));
        }
Example #10
0
        // GET: PricingTier/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PricingTier pricingTier = db.PricingTiers.Find(id);

            if (pricingTier == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PricingId = new SelectList(db.Pricings, "Id", "Name", pricingTier.PricingId);
            return(View(pricingTier));
        }
Example #11
0
 public void Validate()
 {
     ValidateRegionName();
     AppServicePricingTier = GetAppServicePlanPricingTier();
 }
        private void PrepareResource(AzureAppService resource)
        {
            Init();
            PricingTier tier = PricingTier.FreeF1;

            switch (resource.PerformanceTier)
            {
            case "FreeF1":
                tier = PricingTier.FreeF1;
                break;

            case "BasicB1":
                tier = PricingTier.BasicB1;
                break;

            case "BasicB2":
                tier = PricingTier.BasicB2;
                break;

            case "BasicB3":
                tier = PricingTier.BasicB3;
                break;

            case "PremiumP1":
                tier = PricingTier.PremiumP1;
                break;

            case "PremiumP2":
                tier = PricingTier.PremiumP2;
                break;

            case "PremiumP3":
                tier = PricingTier.PremiumP3;
                break;

            case "SharedD1":
                tier = PricingTier.SharedD1;
                break;

            case "StandardS1":
                tier = PricingTier.StandardS1;
                break;

            case "StandardS2":
                tier = PricingTier.StandardS2;
                break;

            case "StandardS3":
                tier = PricingTier.StandardS3;
                break;
            }
            Console.WriteLine("Making app service: " + resource.Name);
            var app = _azure.WebApps
                      .Define(Guid.NewGuid().ToString("N").Substring(0, 8))
                      .WithRegion(ConfigProvider.GetValue("AzureRegion"))
                      .WithExistingResourceGroup(_resourceGroup.Name)
                      .WithNewWindowsPlan(tier)
                      .Create();

            PreparedResources.Add(resource);
            Console.WriteLine("Done: " + resource.Name);


            _webAppList.Add(resource, app);
        }