Private/New-DscManifestEntry.ps1
|
function New-DscManifestEntry { <# .SYNOPSIS Builds a single DSC v3 resource manifest entry (ordered dictionary) for one class-based DSC resource. #> [CmdletBinding()] [OutputType([System.Collections.Specialized.OrderedDictionary])] param( [Parameter(Mandatory)] [PSCustomObject]$ResourceInfo, [Parameter()] [string]$ResourceTypePrefix, [Parameter()] [string]$Version = '0.1.0', [Parameter()] [string]$Description, [Parameter()] [string]$Executable, [Parameter()] [string]$ScriptFileName, [Parameter()] [string]$ModuleFileName, [Parameter()] [switch]$UseResourceScript, [Parameter()] [switch]$AllowNullKeys ) $resourceType = if ($ResourceTypePrefix) { $trimmedPrefix = $ResourceTypePrefix.TrimEnd('/') "$trimmedPrefix/$($ResourceInfo.ClassName)" } else { $ResourceInfo.ClassName } $desc = if ($Description) { $Description } elseif ($ResourceInfo.PSObject.Properties['Synopsis'] -and $ResourceInfo.Synopsis) { $ResourceInfo.Synopsis } elseif ($ResourceInfo.PSObject.Properties['Description'] -and $ResourceInfo.Description) { $ResourceInfo.Description } else { "DSC resource for managing $($ResourceInfo.ClassName)." } $resolvedExe = if ($Executable) { $Executable } else { '<executable>' } $manifest = [ordered]@{ '$schema' = $script:DscManifestSchemaUri type = $resourceType version = $Version description = $desc exitCodes = [ordered]@{ '0' = 'Success' '1' = 'Error' '2' = 'Invalid JSON' } schema = [ordered]@{ embedded = ConvertTo-EmbeddedJsonSchema -ResourceInfo $ResourceInfo -AllowNullKeys:$AllowNullKeys } } $detectedMethods = $ResourceInfo.Methods if (-not $detectedMethods -or $detectedMethods.Count -eq 0) { $detectedMethods = @('Get', 'Set', 'Test') } foreach ($method in $detectedMethods) { $methodLower = $method.ToLower() if ($UseResourceScript) { $manifest[$methodLower] = [ordered]@{ executable = 'pwsh' args = @( '-NoLogo' '-NonInteractive' '-File' $ScriptFileName '-Operation' $methodLower '-ResourceType' $ResourceInfo.ClassName [ordered]@{ jsonInputArg = '-InputJson'; mandatory = $true } ) } } else { $manifest[$methodLower] = [ordered]@{ executable = $resolvedExe args = @( $methodLower '--resource' $resourceType [ordered]@{ jsonInputArg = '--input'; mandatory = $true } ) } } } return $manifest } |