modules/deploy/dsc/ext/PsGallery/xAzure.0.2.0.0/DSCResources/MSFT_xAzureSubscription/MSFT_xAzureSubscription.psm1

#region GET FUNCTION

function Get-TargetResource {
[CmdletBinding()]
[OutputType([Hashtable])]
param (
[Parameter(Mandatory)][string]$AzureSubscriptionName
)
    # Native Get cmdlet
    $Get = Get-AzureSubscription -Current -ErrorAction SilentlyContinue

    # Build Hashtable
    @{
        'Ensure' = If ($Get.SubscriptionName -eq $AzureSubscriptionName) {'Present'} Else {'Absent'}
        'AzureSubscriptionName' = $Get.SubscriptionName
    }

    }

# Get-TargetResource -AzureSubscriptionName 'Visual Studio Ultimate with MSDN' -Verbose
# Expectation is hashtable with subscription id, if it is registered

#endregion



#region SET FUNCTION

function Set-TargetResource {
[CmdletBinding()]
param(
[ValidateSet('Present','Absent')]
[string]$Ensure = 'Present',
[Parameter(Mandatory)][string]$AzureSubscriptionName,
[string]$AzurePublishSettingsFile
)
    switch ($Ensure) {
        'Present' {
            if ($WhatIfPreference -eq $true) {
            Write-Verbose 'What if:The Azure subscription ID is (SubscriptionID)'
                }
            else {
                Import-AzurePublishSettingsFile -PublishSettingsFile $AzurePublishSettingsFile -ErrorAction SilentlyContinue
                Select-AzureSubscription -SubscriptionName $AzureSubscriptionName -Current -ErrorAction SilentlyContinue
                $CurrentSubscription = Get-AzureSubscription -Current
                Write-Verbose "The Azure subscription ID is $($CurrentSubscription.SubscriptionID)"
                }        
            }
        'Absent' {
            Remove-AzureSubscription -SubscriptionName $AzureSubscriptionName -Force -ErrorAction SilentlyContinue
            }
        }
    }

# Set-TargetResource -Ensure 'Absent' -AzureSubscriptionName 'Visual Studio Ultimate with MSDN' -AzurePublishSettingsFile 'C:\Azure\MSDN.publishsettings' -Verbose
# Expectation is subscription woul dbe registered and set as current. Validate using Get-AzureSubscription.

#endregion



#region TEST FUNCTION

function Test-TargetResource {
[CmdletBinding()]
[OutputType([Boolean])]
param(
[ValidateSet('Present','Absent')]
[string]$Ensure = 'Present',
[Parameter(Mandatory)][string]$AzureSubscriptionName,
[string]$AzurePublishSettingsFile
)
    # Output from Get-TargetResource
    $Get = Get-TargetResource -AzureSubscriptionName $AzureSubscriptionName -ErrorAction SilentlyContinue 

    # Compare
    switch ($Ensure) {
        'Present'{$bool = $true}
        'Absent'{$bool = $false}
        }

    if ($AzureSubscriptionName -ne $Get.AzureSubscriptionName) {
            switch ($Ensure) {
                'Present'{$bool = $false}
                'Absent'{$bool = $true}
                }
            write-verbose 'Azure Subscription not set to Current.'
        }

    $bool
    }

# Test-TargetResource -Ensure 'Present' -AzureSubscriptionName 'Visual Studio Ultimate with MSDN' -AzurePublishSettingsFile 'C:\Azure\MSDN.publishsettings' -Verbose
# Expectation is boolean value representing whether subscription has been registered, depending on Present/Absent.

#endregion

Export-ModuleMember -function *-TargetResource