28 lines
2.0 KiB
PowerShell
28 lines
2.0 KiB
PowerShell
param(
|
|
[ValidateSet('test')][string]$Environment = 'test',
|
|
[Parameter(Mandatory)][string]$ServerAddr,
|
|
[string]$Group = 'BAIYUE',
|
|
[Parameter(Mandatory)][string]$Namespace,
|
|
[string]$Username = $env:NACOS_USERNAME,
|
|
[string]$Password = $env:NACOS_PASSWORD,
|
|
[switch]$DryRun
|
|
)
|
|
$ErrorActionPreference = 'Stop'
|
|
if ([string]::IsNullOrWhiteSpace($Namespace) -or $Namespace -eq 'public') { throw 'Supply the actual TEST Namespace ID, not public or a display name' }
|
|
$projectRoot = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)
|
|
$configRoot = Join-Path $projectRoot 'config/nacos/test'
|
|
$files = Get-ChildItem -LiteralPath $configRoot -File -Filter '*.yml' | Sort-Object @{Expression={if ($_.Name -eq 'baiyue-common.yml') {0} else {1}}}, Name
|
|
if ($files.Count -ne 14) { throw 'Expected common configuration and 13 retained services' }
|
|
if ($DryRun) { $files | ForEach-Object { Write-Host "Would publish $($_.Name) -> $Namespace / $Group" }; return }
|
|
if (-not $Username -or -not $Password) { throw 'NACOS_USERNAME and NACOS_PASSWORD are required' }
|
|
$base = "http://$ServerAddr/nacos"
|
|
$login = Invoke-RestMethod -Method Post -Uri "$base/v1/auth/login" -Body @{username=$Username; password=$Password} -TimeoutSec 10
|
|
if (-not $login.accessToken) { throw 'Nacos authentication failed' }
|
|
foreach ($file in $files) {
|
|
$body = @{dataId=$file.Name; group=$Group; tenant=$Namespace; type='yaml'; content=(Get-Content -LiteralPath $file.FullName -Raw -Encoding UTF8); accessToken=$login.accessToken}
|
|
$pairs = foreach ($entry in $body.GetEnumerator()) { [uri]::EscapeDataString([string]$entry.Key) + '=' + [uri]::EscapeDataString([string]$entry.Value) }
|
|
$result = Invoke-RestMethod -Method Post -Uri "$base/v1/cs/configs" -ContentType 'application/x-www-form-urlencoded; charset=UTF-8' -Body ($pairs -join '&') -TimeoutSec 10
|
|
if ([string]$result -ne 'true') { throw "Publish failed: $($file.Name)" }
|
|
Write-Host "Published $($file.Name) -> $Namespace / $Group"
|
|
}
|