Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    [РЕШЕНО] REST API не устанавливает IPv4-адрес для контейнера LXC

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [РЕШЕНО] REST API не устанавливает IPv4-адрес для контейнера LXC, Proxmox Виртуальная Среда
     
    simonjcarr
    Guest
    #1
    0
    09.02.2022 00:09:00
    У меня работает подключение к proxmox через REST API. Я могу создавать и клонировать LXC-контейнеры без проблем с помощью API. После клонирования контейнера я пытаюсь через REST API изменить IP-адрес контейнера, но ничего не выходит. Мой код на NodeJS ниже.

    Код:  
    let formBody = await this.getFormBody({net0: "name=eth0,bridge=vmbr99,ip=192.168.22.1/20,gw=192.168.16.1"})  
    const proxmoxResponse = await fetch(`https://cloud1.xxxxx.com:8006/api2/json/nodes/cloud1/lxc/${vmid}/config/`, {  
       method: "PUT",  
       headers: {  
           Authorization: "PVEAPIToken=simon@pam!xxxxxx-automation=xxxxxxxxxxxxxxxxxx",  
           "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",  
           Accept: "application/json"  
       },  
       body: formBody  
    })  
    const responseData = await proxmoxResponse.json()  
    console.log("issueIpV4: ", responseData)

    Ответ от сервера выглядит так:  
    Код: { data: null }

    Я уверен, что вызываю правильный API-эндпоинт, потому что если изменить имя поля с net0 на что-то, что API не распознаёт, ему возвращается ошибка  

    Код:  
    {  
     data: null,  
     errors: {  
       ffnet0: 'property is not defined in schema and the schema does not allow additional properties'  
     }  
    }

    Может кто-то привести пример, как изменить IP-адрес LXC-контейнера через REST API?
     
     
     
    fabian
    Guest
    #2
    0
    21.03.2024 11:13:00
    Как я уже говорил, вы можете контролировать это поведение, используя нужный форматировщик (часть сразу после api2 в URL). Веб-интерфейс использует форматировщик "extjs", который вернёт 200 и поместит такие ошибки в возвращаемый объект.
     
     
     
    bl4ckarch
    Guest
    #3
    0
    21.03.2024 11:35:00
    Спасибо за помощь и время, что поддерживали меня на протяжении всего этого.
     
     
     
    bl4ckarch
    Guest
    #4
    0
    21.03.2024 09:28:00
    Ну, я не знаю, стоит ли создавать отдельный тикет, но это как раз под эту категорию попадает. В общем, я пишу веб-сервис, используя этот Proxmox API, и при создании виртуальной машины (LXC контейнеры) — когда создание действительно проходит успешно — я получаю в ответ {UPID:eh017:000E0A66:2787A3E3:65FBEC07:vzcreate:1015:API@pve:}. То есть это значит, что всё сработало. Но вот в чём проблема: если контейнер LXC уже существует или если нет доступного шаблона, то я не получаю корректного ответа с причиной, почему вызов не удался. Это немного неудобно, ведь нет нормального отладочного ответа, как будто я пытаюсь создать через графический интерфейс.
     
     
     
    fabian
    Guest
    #5
    0
    21.03.2024 09:33:00
    Пожалуйста, проверьте полный ответ, как я писал выше, в зависимости от используемого форматтера ошибка может быть либо в теле, либо в заголовке.
     
     
     
    bl4ckarch
    Guest
    #6
    0
    21.03.2024 10:44:00
    Да, я пытаюсь сказать, что на самом деле задача не создаётся, когда возникает такая ошибка типа (возможно, API просто не отвечает полноценно) или же потому, что в графическом интерфейсе вообще нельзя создать LXC с CTID, который уже существует, только через панель создания.
     
     
     
    fabian
    Guest
    #7
    0
    21.03.2024 11:01:00
    Да, если обработчик API столкнётся с критической ошибкой до того, как запустит воркер-задачу, то задачи не будет, но запрос к API всё равно вернёт ошибку.
     
     
     
    fabian
    Guest
    #8
    0
    21.03.2024 11:04:00
    например, с использованием форматтера extjs, прямо в возвращаемом объекте:  
    Код:  
    < HTTP/1.1 200 OK  
    < Cache-Control: max-age=0  
    < Connection: close  
    < Connection: Keep-Alive  
    < Date: Thu, 21 Mar 2024 10:03:46 GMT  
    < Pragma: no-cache  
    < Server: pve-api-daemon/3.0  
    < Content-Length: 115  
    < Content-Type: application/json;charset=UTF-8  
    < Expires: Thu, 21 Mar 2024 10:03:46 GMT  
    <  
    * Closing connection 0  
    * TLSv1.3 (OUT), TLS alert, close notify (256):  
    {"data":null,"message":"невозможно создать VM 105 — VM 105 уже существует на узле 'yuna'\n","success":0,"status":500}%  

    с json-форматтером, как часть ответа:  
    Код:  
    < HTTP/1.1 500 невозможно создать VM 105 — VM 105 уже существует на узле 'yuna'  
    < Cache-Control: max-age=0  
    < Connection: close  
    < Date: Thu, 21 Mar 2024 10:02:58 GMT  
    < Pragma: no-cache  
    < Server: pve-api-daemon/3.0  
    < Content-Length: 13  
    < Content-Type: application/json;charset=UTF-8  
    < Expires: Thu, 21 Mar 2024 10:02:58 GMT  
    <  
    * Closing connection 0  
    * TLSv1.3 (OUT), TLS alert, close notify (256):  
    {"data":null}%  

    это пример с curl, но любой HTTP-клиент должен позволять вам получить эту информацию где-то в ответе...
     
     
     
    bl4ckarch
    Guest
    #9
    0
    21.03.2024 11:09:00
    Да, это правда, что для API ответ фактически содержится в HTTP-заголовке, и я взял его оттуда. Я понял, что PVE API возвращает сообщение об ошибке в «строке статуса» HTTP-ответа. Это была моя ошибка — не заметить это раньше, и, если честно, я никогда раньше не видел, чтобы API-сервер так делал. Поэтому я всё время путался из-за пустого тела ответа, не осознавая, что сообщение об ошибке находится именно в строке статуса, а не в теле. Теперь всё стало понятно:

    ```
    "success": false,
    "errors": [
     {
       "code": 0,
       "message": "HTTP Status Line: 500 0"
     },
     {
       "code": 0,
       "message": "Response Headers: HTTP/1.1 500 CT 1013 already exists on node 'eh017'\r\nCache-Control: max-age=0\r\nConnection: close\r\nDate: Thu, 21 Mar 2024 10:04:48 GMT\r\nPragma: no-cache\r\nServer: pve-api-daemon/3.0\r\nContent-Length: 13\r\nContent-Type: application/json;charset=UTF-8\r\nExpires: Thu, 21 Mar 2024 10:04:48 GMT\r\n\r\n"
     },
    ]
    ```
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры