AzSDK.Test/TestCases/SVT/AppService/AppServiceResource.ps1

Set-StrictMode -Version Latest 
class AppServiceResource:TestResource{
    [bool] $RetainResource = $false    
    AppServiceResource([TestCase] $testcase, [TestSettings] $testsettings):Base($testcase, $testsettings){
     
    }

    #Setting the properties as required by this resource type.
    [void]SetDerivedResourceProps(){
        $this.SetSubscriptionId()
        #Fetch the resource name from Template file if its not null
        if(![string]::IsNullOrEmpty($this.Template)){
                $this.ResourceName = $this.GetResourceNameFromARMJson($this.Template, "ResourceName","defaultValue")
            }
        else{
            $this.ResourceName = "azsdktestappservice" #Else set the default resource name
        }
        $this.ResourceType = "Microsoft.Web/sites" 
    }

    #Since app service is upgradable, ARM deploy it to assign new properties instead of running any other functions.
    [void] InitializeResource( ){
        $this.ARMDeployResource()    
    }

    #Set App backup
    [void] SetAppBackup(){
        try{
            $StorageAccountContainerName = "appservicebackup"
            $storageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $this.ResourceGroupName -Name $this.Settings.CommonStorageAcctName
            $context = New-AzureStorageContext -StorageAccountName $this.Settings.CommonStorageAcctName -StorageAccountKey $storageAccountKey[0].Value
            $token = New-AzureStorageContainerSASToken -Name $StorageAccountContainerName -Permission rwdl -Context $context -ExpiryTime (Get-Date).AddMonths(1)
            $sasUrl = $context.BlobEndPoint + $StorageAccountContainerName + $token

            Edit-AzureRmWebAppBackupConfiguration -FrequencyInterval 1 -FrequencyUnit "Day" -RetentionPeriodInDays "0" -StartTime $(Get-Date) -KeepAtLeastOneBackup -ResourceGroupName $this.ResourceGroupName -Name $this.ResourceName -StorageAccountUrl $sasUrl
        }
        catch{            
            $_
        }

    }

    #Add WEBSITE_LOAD_CERTIFICATES
    [void] AddWebsiteLoadCertificates(){
        try{
            $AppSettings = @{"WEBSITE_LOAD_CERTIFICATES" = "*"}
            Set-AzureRmWebAppSlot -ResourceGroupName $this.ResourceGroupName -Name $this.ResourceName -Slot 'Production' -AppSettings $AppSettings
        }
        catch{            
            $_
        }
    }

    #Set App backup
    [void] RemoveAppBackup(){
        try{
            $StorageAccountContainerName = "appservicebackup"
            $storageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $this.ResourceGroupName -Name $this.Settings.CommonStorageAcctName
            $context = New-AzureStorageContext -StorageAccountName $this.Settings.CommonStorageAcctName -StorageAccountKey $storageAccountKey[0].Value
            $token = New-AzureStorageContainerSASToken -Name $StorageAccountContainerName -Permission rwdl -Context $context -ExpiryTime (Get-Date).AddMonths(1)
            $sasUrl = $context.BlobEndPoint + $StorageAccountContainerName + $token

            Edit-AzureRmWebAppBackupConfiguration -FrequencyInterval 1 -FrequencyUnit "Day" -RetentionPeriodInDays "10" -StartTime $(Get-Date) -KeepAtLeastOneBackup -ResourceGroupName $this.ResourceGroupName -Name $this.ResourceName -StorageAccountUrl $sasUrl
        }
        catch{            
            $_
        }

    }

    #Add WEBSITE_LOAD_CERTIFICATES
    [void] RemoveWebsiteLoadCertificates(){
        try{
            $AppSettings = @{"WEBSITE_LOAD_CERTIFICATES" = ""}
            Set-AzureRmWebAppSlot -ResourceGroupName $this.ResourceGroupName -Name $this.ResourceName -Slot 'Production' -AppSettings $AppSettings
        }
        catch{            
            $_
        }
    }

    #Setting the Subscription Id in App Service ARM template
    [void] SetSubscriptionId(){
        try{
            $templateFile = [CommonHelper]::GetRootPath() + "\TestCases\"+$this.TestCase.Feature+"\"+$this.TestCase.ModuleName+"\TestData\"+$this.TestCase.TemplateFileName
            if(!([string]::IsNullOrEmpty($templateFile))){
            [CommonHelper]::SetValueIntoJson($templateFile, "subscriptionId", "defaultValue", $this.settings.SubscriptionId)
            }
        }
        catch{
            [CommonHelper]::Log("Failed to set subscription id in template file!", [MessageType]::Error)
        }
    }
}