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 via Save-CIEMAzureAuthenticationProfile. .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 } |