dsc/ext/PsGallery/xAzurePack.1.4.0.0/DSCResources/MSFT_xAzurePackAdmin/MSFT_xAzurePackAdmin.psm1

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [ValidateSet('Present','Absent')]
        [System.String]
        $Ensure = 'Present',

        [parameter(Mandatory = $true)]
        [System.String]
        $Principal,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $AzurePackAdminCredential,

        [parameter(Mandatory = $true)]
        [System.String]
        $SQLServer,

        [System.String]
        $SQLInstance = 'MSSQLSERVER',

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $dbUser
    )

    $ConnectionString = Get-SQLConnectionString -SQLServer $SQLServer -SQLInstance $SQLInstance -dbUser $dbUser

    $Ensure = 
    if(Get-MgmtSvcAdminUser -Principal $Principal -ConnectionString $ConnectionString)
    {
        'Present'
    }
    else
    {
        'Absent'
    }

    $returnValue = @{
        Ensure      = $Ensure
        Principal   = $Principal
        SQLServer   = $SQLServer
        SQLInstance = $SQLInstance
    }

    $returnValue
}


function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [ValidateSet('Present','Absent')]
        [System.String]
        $Ensure = 'Present',

        [parameter(Mandatory = $true)]
        [System.String]
        $Principal,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $AzurePackAdminCredential,

        [parameter(Mandatory = $true)]
        [System.String]
        $SQLServer,

        [System.String]
        $SQLInstance = 'MSSQLSERVER',

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $dbUser
    )

    $ConnectionString = Get-SQLConnectionString -SQLServer $SQLServer -SQLInstance $SQLInstance -dbUser $dbUser

    switch($Ensure)
    {
        'Present'
        {
            if(!(Get-MgmtSvcAdminUser -Principal $Principal -ConnectionString $ConnectionString))
            {
                Add-MgmtSvcAdminUser -Principal $Principal -ConnectionString $ConnectionString
            }
        }
        'Absent'
        {
            if(Get-MgmtSvcAdminUser -Principal $Principal -ConnectionString $ConnectionString)
            {
                Remove-MgmtSvcAdminUser -Principal $Principal -ConnectionString $ConnectionString
            }
        }
    }

    if(!(Test-TargetResource @PSBoundParameters))
    {
        throw 'Set-TargetResouce failed'
    }
}


function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [ValidateSet('Present','Absent')]
        [System.String]
        $Ensure = 'Present',

        [parameter(Mandatory = $true)]
        [System.String]
        $Principal,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $AzurePackAdminCredential,

        [parameter(Mandatory = $true)]
        [System.String]
        $SQLServer,

        [System.String]
        $SQLInstance = 'MSSQLSERVER',

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $dbUser
    )

    $result = ((Get-TargetResource @PSBoundParameters).Ensure -eq $Ensure)

    $result
}

Function Get-SQLConnectionString
{
    param(
        [parameter(Mandatory = $true)]
        [String]$SQLServer,
        
        [parameter(Mandatory = $true)]
        [String]$SQLInstance,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $dbUser
    )

    if($SQLInstance -eq 'MSSQLSERVER')
    {
        return "Data Source=$SQLServer;Initial Catalog=Microsoft.MgmtSvc.Store;User ID=$($dbUser.UserName);Password=$($dbUser.GetNetworkCredential().password)"
    }
    else
    {
        return "Data Source=$SQLServer\$SQLInstance;Initial Catalog=Microsoft.MgmtSvc.Store;User ID=$($dbUser.UserName);Password=$($dbUser.GetNetworkCredential().password)"
    }
}


Export-ModuleMember -Function *-TargetResource