DSCResources/MSFT_xIPAddressOption/MSFT_xIPAddressOption.psm1

$modulePath = Join-Path -Path (Split-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -Parent) -ChildPath 'Modules'

# Import the Networking Common Modules
Import-Module -Name (Join-Path -Path $modulePath `
        -ChildPath (Join-Path -Path 'NetworkingDsc.Common' `
            -ChildPath 'NetworkingDsc.Common.psm1'))

# Import the Networking Resource Helper Module
Import-Module -Name (Join-Path -Path $modulePath `
        -ChildPath (Join-Path -Path 'NetworkingDsc.ResourceHelper' `
            -ChildPath 'NetworkingDsc.ResourceHelper.psm1'))

# Import Localization Strings
$localizedDataSplat = @{
    ResourceName = 'MSFT_xIPAddressOption'
    ResourcePath = (Split-Path -Parent $Script:MyInvocation.MyCommand.Path)
}
$localizedData = Get-LocalizedData @localizedDataSplat

<#
    .SYNOPSIS
    Returns the current state of an IP address option.
 
    .PARAMETER IPAddress
    The desired IP address.
 
    .PARAMETER SkipAsSource
    The skip as source option.
#>

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.String]
        $IPAddress,

        [Parameter()]
        [System.Boolean]
        $SkipAsSource = $false
    )

    Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): "
            $($LocalizedData.GettingIPAddressOptionMessage -f $IPAddress)
        ) -join '')

    $currentIPAddress = Get-NetIPAddress -IPAddress $IPAddress

    $returnValue = @{
        IPAddress    = $IPAddress
        SkipAsSource = $currentIPAddress.SkipAsSource
    }

    return $returnValue
}

<#
    .SYNOPSIS
    Set the IP address options.
 
    .PARAMETER IPAddress
    The desired IP address.
 
    .PARAMETER SkipAsSource
    The skip as source option.
#>

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.String]
        $IPAddress,

        [Parameter()]
        [System.Boolean]
        $SkipAsSource = $false
    )

    Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): "
            $($LocalizedData.ApplyingIPAddressOptionMessage -f $IPAddress)
        ) -join '')

    $currentConfig = Get-TargetResource @PSBoundParameters

    if ($currentConfig.SkipAsSource -ne $SkipAsSource)
    {
        Set-NetIPAddress -IPAddress $IPAddress -SkipAsSource $SkipAsSource
    }
}

<#
    .SYNOPSIS
    Tests the IP address options.
 
    .PARAMETER IPAddress
    The desired IP address.
 
    .PARAMETER SkipAsSource
    The skip as source option.
#>

function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.String]
        $IPAddress,

        [Parameter()]
        [System.Boolean]
        $SkipAsSource = $false
    )

    # Flag to signal whether settings are correct
    [System.Boolean] $desiredConfigurationMatch = $true

    Write-Verbose -Message ( @("$($MyInvocation.MyCommand): "
            $($LocalizedData.CheckingIPAddressOptionMessage -f $IPAddress)
        ) -join '')

    $currentConfig = Get-TargetResource @PSBoundParameters

    $desiredConfigurationMatch = $desiredConfigurationMatch -and
                                 $currentConfig.SkipAsSource -eq $SkipAsSource

    return $desiredConfigurationMatch
}

Export-ModuleMember -function *-TargetResource