Ошибка запуска API Portainer для создания стека (на Docker Swarm) в PowerShell (API работает нормально на PostMan) - PullRequest
0 голосов
/ 05 апреля 2019

Я очень старался запустить 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
    }
}

Я видел кого-то в этой ссылке , обращеннойта же проблема, но не получил четкое представление о том, как запрос должен быть сделан.

Я давно этим занимаюсь, буду очень рад, если кто-нибудь поможет мне с решением.:)

Заранее спасибо!

...