public override void ExecuteCmdlet()
 {
     base.ExecuteCmdlet();
     var freq = BackupRestoreUtils.StringToFrequencyUnit(FrequencyUnit);
     BackupSchedule schedule = new BackupSchedule(freq, FrequencyInterval, KeepAtLeastOneBackup.IsPresent,
         RetentionPeriodInDays, StartTime);
     BackupRequest request = new BackupRequest()
     {
         Location = "",
         Enabled = true,
         StorageAccountUrl = this.StorageAccountUrl,
         BackupSchedule = schedule,
         Databases = this.Databases,
         BackupRequestType = BackupRestoreOperationType.Default
     };
     WebsitesClient.UpdateWebAppBackupConfiguration(ResourceGroupName, Name, Slot, request);
     var config = new AzureWebAppBackupConfiguration()
     {
         Name = this.Name,
         ResourceGroupName = this.ResourceGroupName,
         StorageAccountUrl = this.StorageAccountUrl,
         FrequencyInterval = this.FrequencyInterval,
         FrequencyUnit = this.FrequencyUnit,
         RetentionPeriodInDays = this.RetentionPeriodInDays,
         StartTime = this.StartTime,
         KeepAtLeastOneBackup = this.KeepAtLeastOneBackup.IsPresent,
         Databases = this.Databases,
         Enabled = true
     };
     WriteObject(config);
 }
 public override void ExecuteCmdlet()
 {
     base.ExecuteCmdlet();
     BackupRequest request = new BackupRequest()
     {
         // Location is required by Resource (base class of BackupRequest)
         // to not be null, but is not actually significant for the request.
         Location = "",
         StorageAccountUrl = this.StorageAccountUrl,
         BackupRequestName = this.BackupName,
         Databases = this.Databases
     };
     var backup = WebsitesClient.BackupSite(ResourceGroupName, Name, Slot, request);
     WriteObject(BackupRestoreUtils.BackupItemToAppBackup(backup, ResourceGroupName, Name, Slot));
 }
        public static AzureWebAppBackupConfiguration BackupRequestToAppBackupConfiguration(BackupRequest configuration, string resourceGroupName, string name, string slot)
        {
            if (configuration == null)
            {
                return new AzureWebAppBackupConfiguration();
            }
            BackupSchedule schedule = configuration.BackupSchedule;
            DatabaseBackupSetting[] databases = null;
            bool? enabled = configuration.Enabled;
            if (configuration.Databases != null)
            {
                databases = configuration.Databases.ToArray();
            }

            int? frequencyInterval = null;
            string frequencyUnit = null;
            int? retentionPeriodInDays = null;
            DateTime? startTime = null;
            bool? keepAtLeastOneBackup = null;
            if (schedule != null)
            {
                frequencyInterval = schedule.FrequencyInterval;
                if (schedule.FrequencyUnit != null)
                {
                    frequencyUnit = schedule.FrequencyUnit.ToString();
                }
                retentionPeriodInDays = schedule.RetentionPeriodInDays;
                startTime = schedule.StartTime;
                keepAtLeastOneBackup = schedule.KeepAtLeastOneBackup;
            }

            return new AzureWebAppBackupConfiguration()
            {
                Name = name,
                ResourceGroupName = resourceGroupName,
                StorageAccountUrl = configuration.StorageAccountUrl,
                FrequencyInterval = frequencyInterval,
                FrequencyUnit = frequencyUnit,
                RetentionPeriodInDays = retentionPeriodInDays,
                StartTime = startTime,
                Databases = databases,
                KeepAtLeastOneBackup = keepAtLeastOneBackup,
                Enabled = enabled
            };
        }
 public BackupItem GetSiteBackupStatusSecrets(string resourceGroupName, string webSiteName, string slotName,
     string backupId, BackupRequest request = null)
 {
     string qualifiedSiteName;
     var useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);
     if (useSlot)
     {
         return WrappedWebsitesClient.Sites.GetSiteBackupStatusSecretsSlot(resourceGroupName, webSiteName,
             backupId, request, slotName);
     }
     else
     {
         return WrappedWebsitesClient.Sites.GetSiteBackupStatusSecrets(resourceGroupName, webSiteName, backupId, request);
     }
 }
 public BackupItem BackupSite(string resourceGroupName, string webSiteName, string slotName,
     BackupRequest request)
 {
     string qualifiedSiteName;
     var useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);
     if (useSlot)
     {
         var backup = WrappedWebsitesClient.Sites.BackupSiteSlot(resourceGroupName, webSiteName, request, slotName);
         return backup;
     }
     else
     {
         var backup = WrappedWebsitesClient.Sites.BackupSite(resourceGroupName, webSiteName, request);
         return backup;
     }
 }
 public BackupRequest UpdateWebAppBackupConfiguration(string resourceGroupName, string webSiteName,
     string slotName, BackupRequest newSchedule)
 {
     string qualifiedSiteName;
     var useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);
     if (useSlot)
     {
         return WrappedWebsitesClient.Sites.UpdateSiteBackupConfigurationSlot(resourceGroupName,
             webSiteName, newSchedule, slotName);
     }
     else
     {
         return WrappedWebsitesClient.Sites.UpdateSiteBackupConfiguration(resourceGroupName, webSiteName, newSchedule);
     }
 }
        public void ListBackupsAndScheduledBackupRoundTrip()
        {
            var handler = new RecordedDelegatingHandler() { StatusCodeToReturn = HttpStatusCode.OK };

            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var webSitesClient = GetWebSitesClient(handler);
                var resourcesClient = GetResourcesClient(handler);

                string farmName = TestUtilities.GenerateName("csmsf");
                string resourceGroupName = TestUtilities.GenerateName("csmrg");

                string locationName = "West US";
                string siteName = TestUtilities.GenerateName("csmws");

                resourcesClient.ResourceGroups.CreateOrUpdate(resourceGroupName,
                    new ResourceGroup
                    {
                        Location = locationName
                    });

                webSitesClient.WebHostingPlans.CreateOrUpdate(resourceGroupName, new WebHostingPlanCreateOrUpdateParameters
                {
                    WebHostingPlan = new WebHostingPlan
                    {
                        Name = farmName,
                        Location = locationName,
                        Properties = new WebHostingPlanProperties
                        {
                            NumberOfWorkers = 1,
                            WorkerSize = WorkerSizeOptions.Small
                        }
                    }
                });

                webSitesClient.WebSites.CreateOrUpdate(resourceGroupName, siteName, null, new WebSiteCreateOrUpdateParameters()
                {
                    WebSite = new WebSiteBase()
                    {
                        Name = siteName,
                        Location = locationName,
                        Properties = new WebSiteBaseProperties()
                        {
                            ServerFarm = farmName
                        }
                    }
                });

                var backupResponse = webSitesClient.WebSites.ListBackups(resourceGroupName, siteName, null);
                Assert.Equal(0, backupResponse.BackupList.Properties.Count); // , "Backup list should be empty"

                // the following URL just have a proper format, but it is not valid - for an API test it is not needed to be valid,
                // since we are just testing a roundtrip here
                string storageUrl = "https://nonexistingusername3567.blob.core.windows.net/backup/?sv=2012-02-12&st=2013-12-05T19%3A30%3A45Z&se=2017-12-04T19%3A30%3A45Z&sr=c&sp=rwdl&sig=3BY5sbzQ2NeKvdaelzxc8inxJgE1mGq2a%2BaqUeFGJYo%3D";

                var sr = new BackupRequest()
                {
                    Enabled = false,
                    BackupSchedule = new BackupSchedule()
                    {
                        FrequencyInterval = 17,
                        FrequencyUnit = FrequencyUnit.Day,
                        KeepAtLeastOneBackup = true,
                        RetentionPeriodInDays = 26,
                        StartTime = DateTime.Now.AddDays(5)
                    },
                    Name = "abc",
                    StorageAccountUrl = storageUrl
                };

                webSitesClient.WebSites.UpdateBackupConfiguration(resourceGroupName, siteName, null, new BackupRequestEnvelope()
                {
                    Location = locationName,
                    Request = sr
                });

                var backupConfiguration = webSitesClient.WebSites.GetBackupConfiguration(resourceGroupName, siteName, null);

                Assert.Equal(sr.Enabled, backupConfiguration.BackupSchedule.Properties.Enabled);
                Assert.Equal(sr.BackupSchedule.FrequencyInterval, backupConfiguration.BackupSchedule.Properties.BackupSchedule.FrequencyInterval);
                Assert.Equal(sr.BackupSchedule.FrequencyUnit, backupConfiguration.BackupSchedule.Properties.BackupSchedule.FrequencyUnit);
                Assert.Equal(sr.BackupSchedule.KeepAtLeastOneBackup, backupConfiguration.BackupSchedule.Properties.BackupSchedule.KeepAtLeastOneBackup);
                Assert.Equal(sr.Name, backupConfiguration.BackupSchedule.Properties.Name);

                webSitesClient.WebSites.Delete(resourceGroupName, siteName, null, new WebSiteDeleteParameters()
                {
                    DeleteAllSlots = true,
                    DeleteMetrics = true
                });

                webSitesClient.WebHostingPlans.Delete(resourceGroupName, farmName);

                var serverFarmResponse = webSitesClient.WebHostingPlans.List(resourceGroupName);

                Assert.Equal(0, serverFarmResponse.WebHostingPlans.Count);
            }
        }