Развертывание / обновление образа Marathon Docker с использованием API - PullRequest
0 голосов
/ 14 января 2019

Я пишу код для автоматического обновления развернутого изображения на марафоне. Я использую метод исправления REST, указанный в справочнике по API марафона http://mesosphere.github.io/marathon/api-console/index.html

    url = 'https://<my-hostname>:<my-port>/v2/apps'
    h = {'Content-type': 'application/json', 'Accept': 'application/json'}
    data = {'app': { "id": app,
                'container': {
                    'docker': {
                        'image': image}}}}
    print ('requests.patch(%s, %s)' % (url + app, json.dumps(data)))
    r = requests.patch(url + app, headers = h, auth = auth, data = json.dumps(data))
    if r.status_code == 200:
        print('Deployed %s' % app)

Код был успешно выполнен, я получил идентификатор развертывания, но ничего не изменилось из пользовательского интерфейса. Нового развертывания не происходит. Если я изменю запрос на исправление на запрос на получение без данных, я получаю изображение, которое я ранее обновлял, используя приведенный выше код.

Согласно этой аналогичной ссылке API https://docs.mesosphere.com/1.11/deploying-services/marathon-api/#/apps/V2AppsByAppId1

Там написано "Эта операция создаст развертывание", но ничего не произошло. Из графического интерфейса Marathon я не вижу изменений конфигурации вообще. Если я перезагружаюсь, то перезапускается то же самое старое развертывание. Я неправильно интерпретирую ссылку на API?

1 Ответ

0 голосов
/ 07 мая 2019

Если я правильно прочитал справочное руководство по API, тело должно быть:

{ "id": app,
  "container": {
       "docker": {
          "image": image
        }
   }
}

Протестировал это с марафоном 1.4.11, и это сработало. Не уверен, почему вы получите deploymentid, если я сделаю это так, как вы (с дополнительным слоем {"app":}), я получу ошибку 500. Кстати, я не уверен, насколько это чувствительно для одинарных и двойных кавычек.

...