Modules/AzureDevOpsDsc.Common/Api/Functions/Private/Api/TaskGroup/New-DevOpsTaskGroup.ps1
|
Function New-DevOpsTaskGroup { [CmdletBinding()] param( [Parameter(Mandatory)][string]$ApiUri, [Parameter(Mandatory)][string]$ProjectName, [Parameter(Mandatory)][string]$TaskGroupName, [Parameter()][string]$Description, [Parameter()][string]$Category = 'Deploy', [Parameter()][hashtable[]]$Tasks = @(), [Parameter()][hashtable[]]$Inputs = @(), [Parameter()][string]$ApiVersion = '7.1-preview.1' ) # Map caller-friendly flat task hashtables to the Azure DevOps API shape: # { task: { id, versionSpec, definitionType }, displayName, enabled, inputs, ... } $apiTasks = $Tasks | ForEach-Object { $t = $_ $taskDef = @{ id = if ($t.taskId) { $t.taskId } elseif ($t.id) { $t.id } else { $t.task.id } versionSpec = if ($t.version) { $t.version } elseif ($t.versionSpec) { $t.versionSpec } else { $t.task.versionSpec } definitionType = if ($t.definitionType) { $t.definitionType } else { 'task' } } $entry = @{ task = $taskDef displayName = if ($t.displayName) { $t.displayName } else { $t.name } enabled = if ($null -ne $t.enabled) { $t.enabled } else { $true } inputs = if ($t.inputs) { $t.inputs } else { @{} } } # Pass through any other keys the caller supplied foreach ($key in $t.Keys) { if ($key -notin @('taskId','id','version','versionSpec','definitionType','displayName','name','enabled','inputs')) { $entry[$key] = $t[$key] } } $entry } $params = @{ Uri = '{0}/{1}/_apis/distributedtask/taskgroups?api-version={2}' -f $ApiUri.TrimEnd('/'), $ProjectName, $ApiVersion Method = 'POST' ContentType = 'application/json' Body = @{ name = $TaskGroupName description = $Description category = $Category tasks = @($apiTasks) inputs = $Inputs } | ConvertTo-Json -Depth 10 } try { return Invoke-AzDevOpsApiRestMethod @params } catch { Throw "[New-DevOpsTaskGroup] Failed to create task group '$TaskGroupName': $_" } } |