DSCResources/MSFT_AzureConnectedMachineAgentDsc/MSFT_AzureConnectedMachineAgentDsc.psm1

Import-Module $PSScriptRoot\..\Helpers.psm1 -Force

function Get-TargetResource {
    [OutputType([Hashtable])]
    param(
        [Parameter(Mandatory = $true)]
        [string]$TenantId,

        [Parameter(Mandatory = $true)]
        [string]$SubscriptionId,

        [Parameter(Mandatory = $true)]
        [string]$ResourceGroup,

        [Parameter(Mandatory = $true)]
        [string]$Location,

        [string]$Tags,

        [Parameter(Mandatory = $true)]
        [PSCredential]$Credential
    )

    $AzConnectedMachineAgent = Get-AzConnectedMachineAgent
    $code = 'AzureConnectedMachineAgentdsc:AzureConnectedMachineAgentdsc:'

    $reasons = @()

    $TenantId = @{
        code   = $code + 'tenantid'
        phrase = "The Tenant Id returned: $($return.TenantId)"
    }
    $reasons += $TenantId

    $ResourceGroup = @{
        code   = $code + 'subscriptionid'
        phrase = "The Subscription Id returned: $($return.SubscriptionId)"
    }
    $reasons += $ResourceGroup

    $ResourceGroup = @{
        code   = $code + 'resourcegroup'
        phrase = "The Resource Group returned: $($return.ResourceGroup)"
    }
    $reasons += $ResourceGroup

    $Location = @{
        code   = $code + 'location'
        phrase = "The Location returned: $($return.Location)"
    }
    $reasons += $Location

    $Tags = @{
        code   = $code + 'tags'
        phrase = "The Tags returned: $($return.Tags)"
    }
    $reasons += $Tags

    $ConnectionStatus = @{
        code   = $code + 'connectionstatus'
        phrase = "The connection status of the agent returned: $($return.AgentStatus)"
    }
    $reasons += $ConnectionStatus

    $return = @{
        TenantId       = $AzConnectedMachineAgent.TenantId
        SubscriptionId = $AzConnectedMachineAgent.SubscriptionId
        ResourceGroup  = $AzConnectedMachineAgent.ResourceGroup
        Location       = $AzConnectedMachineAgent.Location
        Tags           = $AzConnectedMachineAgent.Tags
        Reasons        = $reasons
    }

    return $return
}

function Set-TargetResource {
    param(
        [Parameter(Mandatory = $true)]
        [string]$TenantId,

        [Parameter(Mandatory = $true)]
        [string]$SubscriptionId,

        [Parameter(Mandatory = $true)]
        [string]$ResourceGroup,

        [Parameter(Mandatory = $true)]
        [string]$Location,

        [string]$Tags,

        [Parameter(Mandatory = $true)]
        [PSCredential]$Credential
    )

    Connect-AzConnectedMachineAgent @PSBoundParameters
}

function Test-TargetResource {
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory = $true)]
        [string]$TenantId,

        [Parameter(Mandatory = $true)]
        [string]$SubscriptionId,

        [Parameter(Mandatory = $true)]
        [string]$ResourceGroup,

        [Parameter(Mandatory = $true)]
        [string]$Location,

        [string]$Tags,

        [Parameter(Mandatory = $true)]
        [PSCredential]$Credential
    )
    $Params =
    @{
        TenantId       = $TenantId
        SubscriptionId = $SubscriptionId
        ResourceGroup  = $ResourceGroup
        Location       = $Location
        Tags           = $Tags
    }

    Test-AzConnectedMachineAgent @Params
}

Export-ModuleMember -Function *-TargetResource