DSCResources/DSC_WaitForNetworkTeam/DSC_WaitForNetworkTeam.psm1
# Suppressed as per PSSA Rule Severity guidelines for unit/integration tests: # https://github.com/PowerShell/DscResources/blob/master/PSSARuleSeverities.md [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] param () $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-Module -Name (Join-Path -Path $modulePath -ChildPath 'DscResource.Common') # Import Localization Strings $script:localizedData = Get-LocalizedData -DefaultUICulture 'en-US' <# .SYNOPSIS Returns the current state of the wait for network team resource. .PARAMETER Name Specifies the name of the network team to wait for. #> function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [System.String] $Name ) Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.GettingWaitForNetworkTeamStatusMessage -f $Name) ) -join '' ) $null = Get-NetLbfoTeamStatus -Name $Name $returnValue = @{ Name = $Name RetryIntervalSec = $null RetryCount = $null } return $returnValue } # function Get-TargetResource <# .SYNOPSIS Sets the current state of the wait for network team resource. .PARAMETER Name Specifies the name of the network team to wait for. .PARAMETER RetryIntervalSec Specifies the number of seconds to wait for the network team to become available. .PARAMETER RetryCount The number of times to loop the retry interval while waiting for the network team. #> function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter()] [System.UInt32] $RetryIntervalSec = 10, [Parameter()] [System.UInt32] $RetryCount = 60 ) Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.SettingWaitForNetworkTeamStatusMessage -f $Name) ) -join '' ) $lbfoTeamUp = $false for ($count = 0; $count -lt $RetryCount; $count++) { $lbfoTeamStatus = Get-NetLbfoTeamStatus -Name $Name if ($lbfoTeamStatus -eq 'Up') { Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.NetworkTeamUpMessage -f $Name) ) -join '' ) $lbfoTeamUp = $true break } else { Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.NetworkTeamNotUpRetryingMessage -f $Name, $RetryIntervalSec) ) -join '' ) Start-Sleep -Seconds $RetryIntervalSec } # if } # for if ($lbfoTeamUp -eq $false) { New-InvalidOperationException ` -Message ($script:localizedData.NetworkTeamNotUpAfterError -f $Name, $RetryCount) } # if } # function Set-TargetResource <# .SYNOPSIS Tests the current state of the wait for network team resource. .PARAMETER Name Specifies the name of the network team to wait for. .PARAMETER RetryIntervalSec Specifies the number of seconds to wait for the network team to become available. .PARAMETER RetryCount The number of times to loop the retry interval while waiting for the network team. #> function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter()] [System.UInt32] $RetryIntervalSec = 10, [Parameter()] [System.UInt32] $RetryCount = 60 ) Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.TestingWaitForNetworkTeamStatusMessage -f $Name) ) -join '' ) $lbfoTeamStatus = Get-NetLbfoTeamStatus -Name $Name if ($lbfoTeamStatus -eq 'Up') { Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.NetworkTeamUpMessage -f $Name) ) -join '' ) return $true } Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.NetworkTeamNotUpMessage -f $Name) ) -join '' ) return $false } # function Test-TargetResource <# .SYNOPSIS Returns the current status of a network team. 'Up' indicates that the network team is acive. 'Degraded' indicates that the network team is not yet available. If the network team does not exist an exception will be thrown. .PARAMETER Name Specifies the name of the network team to get the status of. #> function Get-NetLbfoTeamStatus { [CmdletBinding()] [OutputType([System.String])] param ( [Parameter(Mandatory = $true)] [System.String] $Name ) try { $lbfoTeam = Get-NetLbfoTeam -Name $Name Write-Verbose -Message ( @( "$($MyInvocation.MyCommand): " $($script:localizedData.NetworkTeamFoundMessage -f $Name) ) -join '' ) } catch [Microsoft.PowerShell.Cmdletization.Cim.CimJobException] { New-InvalidOperationException ` -Message ($script:localizedData.NetworkTeamNotFoundMessage -f $Name) } return $lbfoTeam.Status } Export-ModuleMember -Function *-TargetResource |