Public/New-CIEMProvider.ps1
|
function New-CIEMProvider { <# .SYNOPSIS Creates a new CIEM cloud provider. .DESCRIPTION Adds a new provider to the CIEM SQLite database. Validates name uniqueness and applies sensible defaults. Authentication is managed separately with generic authentication profile assignments. .PARAMETER Name Provider name (e.g., 'Azure', 'AWS', 'GCP'). Must be unique. .PARAMETER Enabled Whether the provider is enabled. Defaults to $true. .PARAMETER Endpoints Optional PSCustomObject with provider-specific API endpoints. .PARAMETER ResourceFilter Optional array of subscription IDs or account IDs to filter. .OUTPUTS [CIEMProvider] The new provider object with computed CheckCount. .EXAMPLE New-CIEMProvider -Name 'GCP' .EXAMPLE New-CIEMProvider -Name 'Azure' -Enabled $true #> [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Creates a configuration object in database, not a system resource')] [OutputType('CIEMProvider')] param( [Parameter(Mandatory)] [string]$Name, [Parameter()] [bool]$Enabled = $true, [Parameter()] [PSCustomObject]$Endpoints, [Parameter()] [string[]]$ResourceFilter ) $ErrorActionPreference = 'Stop' $providerId = $Name.ToLower() $providerType = $Name $now = (Get-Date).ToString('o') # Validate name uniqueness $existing = Invoke-CIEMQuery -Query "SELECT id FROM providers WHERE id = @id" -Parameters @{ id = $providerId } if ($existing) { throw "Provider '$Name' already exists. Use Update-CIEMProvider to modify it." } # Insert provider Invoke-CIEMQuery -Query @" INSERT INTO providers (id, name, type, enabled, created_at, updated_at) VALUES (@id, @name, @type, @enabled, @now, @now) "@ -Parameters @{ id = $providerId name = $Name type = $providerType enabled = if ($Enabled) { 1 } else { 0 } now = $now } -AsNonQuery | Out-Null # Return the newly created provider Get-CIEMProvider -Name $Name } |