Public/Add-DClaudeImage.ps1
|
function Add-DClaudeImage { [CmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)] [string]$Name, [Parameter(Mandatory)] [string]$Tag, [Parameter()] [string[]]$Volumes, [Parameter(Mandatory)] [ValidateSet('Windows', 'Linux')] [string]$Platform, [Parameter()] [switch]$Force ) $directory = Join-Path $HOME '.dclaude' $config = Read-SettingsFile -Directory $directory if (-not $config) { $config = [PSCustomObject]@{ images = [PSCustomObject]@{} } } if (-not $config.PSObject.Properties['images'] -or -not $config.images) { $config | Add-Member -MemberType NoteProperty -Name 'images' -Value ([PSCustomObject]@{}) -Force } # Create image entry if it doesn't exist if (-not $config.images.PSObject.Properties[$Name]) { $config.images | Add-Member -MemberType NoteProperty -Name $Name -Value ([PSCustomObject]@{}) } $platformKey = $Platform.ToLower() # Check if platform already exists for this entry if ($config.images.$Name.PSObject.Properties[$platformKey] -and -not $Force) { throw "Image '$Name' already has a '$platformKey' platform entry. Use -Force to overwrite or Remove-DClaudeImage to remove it first." } $platformEntry = [PSCustomObject]@{ tag = $Tag } if ($Volumes -and $Volumes.Count -gt 0) { $platformEntry | Add-Member -MemberType NoteProperty -Name 'volumes' -Value @($Volumes) } if ($PSCmdlet.ShouldProcess("Image '$Name' ($platformKey)", 'Add')) { $config.images.$Name | Add-Member -MemberType NoteProperty -Name $platformKey -Value $platformEntry -Force Save-SettingsFile -Directory $directory -Config $config } } |