DSCResources/MSFT_xAzureService/MSFT_xAzureService.psm1
#region GET FUNCTION function Get-TargetResource { [CmdletBinding()] [OutputType([HashTable])] param ( [Parameter(Mandatory)][string]$AffinityGroup, [Parameter(Mandatory)][string]$ServiceName, [string]$Description, [string]$Label ) $CurrentSubscription = Get-AzureSubscription -Current Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)" # Native Get cmdlet $Get = Get-AzureService $ServiceName -ErrorAction SilentlyContinue # Build Hashtable from native cmdlet values @{ 'Ensure' = If ($Get.ServiceName -eq $ServiceName) {'Present'} Else {'Absent'} 'AffinityGroup' = $Get.AffinityGroup 'ServiceName' = $Get.ServiceName 'Description' = $Get.Description 'Label' = $Get.Label } } # Get-TargetResource 'Present' 'TestVMsWestUS1' 'testvmsservice1' 'Test Service created for Test Virtual Machines 1' 'Test VMs Service 1' -Verbose # Expectation is a hashtable with properties of the service, if it exists. #endregion #region SET FUNCTION function Set-TargetResource { [CmdletBinding()] param( [ValidateSet('Present','Absent')] [Parameter(Mandatory)][string]$Ensure = 'Present', [Parameter(Mandatory)][string]$AffinityGroup, [Parameter(Mandatory)][string]$ServiceName, [string]$Description, [string]$Label ) $CurrentSubscription = Get-AzureSubscription -Current Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)" # Removing parameters from output $PSBoundParameters.Remove('Debug') | out-null $PSBoundParameters.Remove('ErrorAction') | out-null switch ($Ensure) { 'Present' { #Native test for name conflict $TestAzureServiceName = Test-AzureName -Name $ServiceName -Service # Validate whether New or Set is required $Get = Get-TargetResource -AffinityGroup $AffinityGroup -ServiceName $ServiceName -ErrorAction SilentlyContinue $PSBoundParameters.Remove('Ensure') | out-null if ($Get.ServiceName -eq $ServiceName) { # Native Set cmdlet $PSBoundParameters.Remove('AffinityGroup') | out-null Write-Verbose "Setting properties of Azure Service: `"$ServiceName`"" Write-Verbose 'Please be patient as the operation completes.' $CurrentSubscription = Get-AzureSubscription -Current Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)" Set-AzureService @PSBoundParameters } else{ # Native New cmdlet if ($TestAzureServiceName -eq $False){ Write-Verbose "Creating new Azure Service: `"$ServiceName`"" Write-Verbose 'Please be patient as the operation completes.' $CurrentSubscription = Get-AzureSubscription -Current Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)" New-AzureService @PSBoundParameters } else { Write-Error "Unable to create Service, the name `"$ServiceName`" is already in use" } } } 'Absent' { $CurrentSubscription = Get-AzureSubscription -Current Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)" Remove-AzureService -ServiceName $ServiceName -Force } } } # Set-TargetResource 'Present' 'TestVMsWestUS1' 'testvmsservice1' 'Test Service created for Test Virtual Machines 1' 'Test VMs Service 1' -Verbose # Expectation is the service will be created, set, or removed. Validate using Get-AzureService. #endregion #region TEST FUNCTION function Test-TargetResource { [CmdletBinding()] [OutputType([Boolean])] param( [ValidateSet('Present','Absent')] [Parameter(Mandatory)][string]$Ensure = 'Present', [Parameter(Mandatory)][string]$AffinityGroup, [Parameter(Mandatory)][string]$ServiceName, [string]$Description, [string]$Label ) $Get = Get-TargetResource -AffinityGroup $AffinityGroup -ServiceName $ServiceName -ErrorAction SilentlyContinue # Removing Cmdlet parameters from output $PSBoundParameters.Remove('Ensure') | out-null $PSBoundParameters.Remove('Verbose') | out-null $PSBoundParameters.Remove('Debug') | out-null $PSBoundParameters.Remove('ErrorAction') | out-null # Compare dictionary and hash table switch ($Ensure) { 'Present'{$bool = $true} 'Absent'{$bool = $false} } $PSBoundParameters.keys | % { if ($PSBoundParameters[$_] -ne $Get[$_]) { switch ($Ensure) { 'Present'{$bool = $false} 'Absent'{$bool = $true} } write-verbose "$($_): $($PSBoundParameters[$_]) -ne `"$($Get[$_])`"" } } $bool } # Test-TargetResource 'Present' 'TestVMsWestUS1' 'testvmsservice1' 'Test Service created for Test Virtual Machines 1' 'Test VMs Service 1' -Verbose # Expectation is True or False based on whether the service has been deployed, depending on Present/Absent. #endregion Export-ModuleMember -function *-TargetResource |