Я очень старался запустить Portainer API для создания стека в моем Docker Swarm в PowerShell.Я пробовал несколько способов, но всегда получаю сообщение об ошибке:
Invoke-RestMethod : {"err":"Invalid request payload","details":"Invalid stack name"}
Поскольку API работает на Postman, я попытался отладить запуск API (postman vs powershell) на Fiddler.Я заметил, что Content-Length отличается для обоих запусков API.
При чтении этого вот что я пытался (но все еще получаю ошибки):
$ymlFileName = "someyml.yml"
$ymlFilePath = "C:\ymlFiles\" + $ymlFileName
if(Test-Path -path $ymlFilePath) {
#getSwarmID is a function that runs the api to fetch swarm ID
$swarmID = getSwarmID;
if($swarmID) {
$headers = @{"Authorization"="Bearer $sessionVar";}
$url = $portainerURL + "/api/stacks?method=file&type=1&endpointId=" + $endpoint
$fileBinary = [IO.File]::ReadAllBytes($ymlFilePath)
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
$fileEnc = $enc.GetString($fileBinary)
$boundary = [System.Guid]::NewGuid().ToString()
$boundary = "--------------------------" + $boundary
write-host $boundary
$LF = "`n"
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"$ymlFileName`"",
"Content-Type: text/yaml$LF",
$fileEnc,
"$boundary",
"Content-Disposition: form-data; name=`"SwarmID`"$LF",
$swarmID,
"$boundary",
"Content-Disposition: form-data; name=`"Name`"$LF",
$stackName,
"$boundary--$LF"
) -join $LF
Invoke-RestMethod -Uri $url -headers $headers -Method Post -ContentType "multipart/form-data; boundary=$boundary" -Body $bodyLines | ConvertFrom-Json
}
}
Я видел кого-то в этой ссылке , обращеннойта же проблема, но не получил четкое представление о том, как запрос должен быть сделан.
Я давно этим занимаюсь, буду очень рад, если кто-нибудь поможет мне с решением.:)
Заранее спасибо!