public/New-PulpRepo.ps1
# .ExternalHelp powershell-pulp-help.xml Function New-PulpRepo { [Cmdletbinding(DefaultParameterSetName='Strings')] Param( [Parameter(Mandatory=$false)] [string]$Server = (Get-PulpLocalConfig -Server).Server, [Parameter(Mandatory=$false)] [int]$Port = (Get-PulpLocalConfig -Port).Port, [Parameter(Mandatory=$false)] [string]$Protocol = (Get-PulpLocalConfig -Protocol).Protocol, [Parameter(Mandatory=$false)] [string]$AuthenticationMethod = (Get-PulpLocalConfig -AuthenticationMethod).AuthenticationMethod, [Parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName="Objects")] [object[]]$Repo, [Parameter(Mandatory=$true, Position=0, ParameterSetName="Strings")] [string]$Id, # API: id [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$DisplayName, # API: display_name [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$Description, # API: description [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$Note, # API: notes[] [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$Feed, # API: importer_config.feed [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$Validate, # API: importer_config.validate [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$FeedCaCert, # API: importer_config.ssl_ca_cert [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$VerifyFeedSsl, # API: importer_config.ssl_validation [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$FeedCert, # API: importer_config.ssl_client_cert [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$FeedKey, # API: importer_config.ssl_client_key [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$ProxyHost, # API: importer_config.proxy_host [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$ProxyPort, # API: importer_config.proxy_port [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$ProxyUser, # API: importer_config.proxy_username [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$ProxyPass, # API: importer_config.proxy_password [Parameter(Mandatory=$false, ParameterSetName="Strings")] [int]$MaxDownloads, # API: importer_config.max_downloads [Parameter(Mandatory=$false, ParameterSetName="Strings")] [int]$MaxSpeed, # API: importer_config.max_speed [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$ServeHttp, # API (rpm): distributors[].distributor_config.http # API (iso and puppet): distributors[].distributor_config.serve_http # rpm default: false # iso default: not set # puppet default: not set [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$ServeHttps, # API (rpm): distributors[].distributor_config.https # API (iso and puppet): distributors[].distributor_config.serve_https # Default (rpm): true # Default (iso): not set # Default (puppet): not set [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$RemoveMissing, # Only: rpm, iso # API: importer_config.remove_missing [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$AuthCa, # Only: rpm, iso # API: distributors[].distributor_config.auth_ca [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$Skip, # Only: rpm # API: importer_config.type_skip_list[] # Valid: 'rpm', 'drpm', 'distribution', 'erratum' [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$BasicauthUser, # Only: rpm # API: importer_config.basic_auth_username [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$BasicauthPass, # Only: rpm # API: importer_config.basic_auth_password [Parameter(Mandatory=$false, ParameterSetName="Strings")] [int]$RetainOldCount, # Only: rpm # API: importer_config.retain_old_count [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$RelativeUrl, # Only: rpm # API: distributors[].distributor_config.relative_url [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$ChecksumType, # Only: rpm # API: distributors[].distributor_config.checksum_type [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$GpgKey, # Only: rpm # API: distributors[].distributor_config.gpgkey [Parameter(Mandatory=$false, ParameterSetName="Strings")] [bool]$GenerateSqlite, # Only: rpm # API: distributors[].distributor_config.generate_sqlite [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$HostCa, # Only: rpm # API: distributors[].distributor_config.https_ca [Parameter(Mandatory=$false, ParameterSetName="Strings")] [string]$AuthCert, # Only: rpm # API: distributors[].distributor_config.auth_cert [Parameter(Mandatory=$false)] [switch]$NoPublish, [Parameter(Mandatory=$true)] [string]$Type ) Begin {} Process { $defaultRepo = @{} $defaultRepo.'rpm' = ConvertFrom-Json @' { "id":"__ID__", "display_name":null, "description":null, "notes":{ "_repo-type":"rpm-repo" }, "importer_type_id":"yum_importer", "importer_config":{}, "distributors":[ { "distributor_id":"yum_distributor", "distributor_type_id":"yum_distributor", "auto_publish":true, "distributor_config":{ "http":false, "relative_url":"__RELATIVE_URL__", "https":true } }, { "distributor_id":"export_distributor", "distributor_type_id":"export_distributor", "auto_publish":false, "distributor_config":{ "http":false, "relative_url":"__RELATIVE_URL__", "https":true } } ] } '@ $defaultRepo.'iso' = ConvertFrom-Json @' { "id":"__ID__", "display_name":null, "description":null, "notes":{ "_repo-type":"iso-repo" }, "importer_type_id":"iso_importer", "importer_config":{}, "distributors":[ { "distributor_id":"iso_distributor", "distributor_type_id":"iso_distributor", "auto_publish":true, "distributor_config":{} } ] } '@ $defaultRepo.'puppet' = ConvertFrom-Json @' { "id":"_ID_", "display_name":null, "description":null, "notes":{ "_repo-type":"puppet-repo" }, "importer_type_id":"puppet_importer", "importer_config":{}, "distributors":[ { "distributor_id":"puppet_distributor", "distributor_type_id":"puppet_distributor", "auto_publish":true, "distributor_config":{} } ] } '@ If ($Repo) { Foreach ($repoItem in ($Repo | Where-Object {$_.notes.'_repo-type' -eq "${Type}-repo"}) ){ $newRepo = $defaultRepo."${Type}" Foreach ($attribute in 'id','display_name','description','notes'){ If ($repoItem.$attribute){ $newRepo.$attribute = $repoItem.$attribute } } If ($repoItem.importers) { If ($repoItem.importers[0].importer_type_id){ $newRepo.importer_type_id = $repoItem.importers[0].importer_type_id } If ($repoItem.importers[0].config){ $newRepo.importer_config = $repoItem.importers[0].config } } For ($i=0; $i -le $newRepo.distributors.count; $i++){ If ($repoItem.distributors | Where-Object {$_.distributor_type_id -eq $newRepo.distributors[$i].distributor_type_id}) { $newRepo.distributors[$i] = ($repoItem.distributors | Where-Object {$_.distributor_type_id -eq $newRepo.distributors[$i].distributor_type_id}) | Select-Object distributor_type_id, auto_publish, @{Name='distributor_config'; Expression={$_.config}}, @{Name="distributor_id";Expression={$_."id"}} } } $uri = '/pulp/api/v2/repositories/' $body = ConvertTo-Json $newRepo -Depth 20 $null = Invoke-PulpRestMethod -Server $Server -Port $Port ` -AuthenticationMethod $AuthenticationMethod ` -Protocol $Protocol -Uri $uri -Method Post -body $body If (!$NoPublish) { $null = Publish-PulpRepo -Server $Server -Port $Port ` -Protocol $Protocol ` -AuthenticationMethod $AuthenticationMethod -Id $newRepo.id ` -Type $Type } Get-PulpRepo -Server $Server -Port $Port ` -Protocol $Protocol -Id $newRepo.id } } Else { $newRepo = $defaultRepo."${Type}" # REST attributes for all repo types $newRepo.id = $Id If ($DisplayName) {$newRepo.display_name = $DisplayName} If ($Description) {$newRepo.description = $Description} If ($Note){ Foreach ($noteItem in ($Note -replace '\s').split(",")){ $noteName = $noteItem.split("=")[0] $noteValue = $noteItem.split("=")[1] Add-Member -InputObject $newRepo.notes -MemberType NoteProperty -Name $noteName -Value $noteValue } } If ($Feed) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'feed' -Value $feed } If ($FeedCaCert) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'ssl_ca_cert' -Value $FeedCaCert } If ($FeedCert) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'ssl_client_cert' -Value $FeedCert } If ($FeedKey) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'ssl_client_key' -Value $FeedKey } If ($ProxyHost) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'proxy_host' -Value $ProxyHost } If ($ProxyPort) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'proxy_port' -Value $ProxyPort } If ($ProxyUser) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'proxy_username' -Value $ProxyUser } If ($ProxyPass) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'proxy_password' -Value $ProxyPass } If ($MaxDownloads) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'max_downloads' -Value $MaxDownloads } If ($MaxSpeed) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'max_speed' -Value $MaxSpeed } If ($PSBoundParameters.ContainsKey('Validate')) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'validate' -Value $Validate } If ($PSBoundParameters.ContainsKey('VerifyFeedSsl')) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'ssl_validation' -Value $VerifyFeedSsl } # REST attributes for iso and puppet repos only If ($Type -eq 'puppet' -or $Type -eq 'iso') { Foreach ($distributor in $newRepo.distributors) { If ($PSBoundParameters.ContainsKey('ServeHttp')) { Add-Member -Force -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'serve_http' -Value $ServeHttp } If ($PSBoundParameters.ContainsKey('ServeHttps')) { Add-Member -Force -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'serve_https' -Value $ServeHttps } } } # REST attributes for iso and rpm repos only If ($Type -eq 'rpm' -or $Type -eq 'iso') { If ($PSBoundParameters.ContainsKey('RemoveMissing')) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'remove_missing' -Value $RemoveMissing } Foreach ($distributor in $newRepo.distributors) { If ($auth_ca){ Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'auth_ca' -Value $AuthCa } } } # REST attributes for rpm repos only If ($Type -eq 'rpm') { If ($BasicauthUser) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'basic_auth_username' -Value $BasicauthUser } If ($BasicauthPass) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'basic_auth_password' -Value $BasicauthPass } If ($RetainOldCount) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'retain_old_count' -Value $RetainOldCount } If ($Skip) { Add-Member -InputObject $newRepo.importer_config -MemberType NoteProperty -Name 'skip' -Value ($Skip -replace '\s').split(',') } Foreach ($distributor in $newRepo.distributors) { $distributor.distributor_config.relative_url = $Id If ($Feed) { $distributor.distributor_config.relative_url = ($feed.split("/")[3..($feed.split("/").length)] -join "/") } If ($RelativeUrl){ $distributor.distributor_config.relative_url = $RelativeUrl } If ($ChecksumType){ Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'checksum_type' -Value $ChecksumType } If ($GpgKey){ Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'gpgkey' -Value $GpgKey } If ($HostCa){ Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'https_ca' -Value $HostCa } If ($AuthCert){ Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'auth_cert' -Value $AuthCert } If ($PSBoundParameters.ContainsKey('GenerateSqlite')) { Add-Member -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'generate_sqlite' -Value $GenerateSqlite } If ($PSBoundParameters.ContainsKey('ServeHttp')) { Add-Member -Force -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'http' -Value $ServeHttp } If ($PSBoundParameters.ContainsKey('ServeHttps')) { Add-Member -Force -InputObject $distributor.distributor_config -MemberType NoteProperty -Name 'https' -Value $ServeHttps } } } $uri = '/pulp/api/v2/repositories/' $body = ConvertTo-Json $newRepo -Depth 20 $null = Invoke-PulpRestMethod -Server $Server -Port $Port ` -AuthenticationMethod $AuthenticationMethod ` -Protocol $Protocol -Uri $uri -Method Post -body $body If (!$NoPublish) { $null = Publish-PulpRepo -Server $Server -Port $Port ` -Protocol $Protocol ` -AuthenticationMethod $AuthenticationMethod -Id $Id -Type $Type } Get-PulpRepo -Server $Server -Port $Port ` -Protocol $Protocol -Id $Id } } } |