Авторские статьи

PveSh в примерах.


Щёлкать мышой по графическому интерфейсу это конечно замечательно, но когда нужно сделать много однотипных действий над множеством серверов, то хочется завести смышлёную обезьянку или автоматизировать процесс. Proxmox VE предоставляет API, с помощью которого легко на любом языке программирования сделать требуемое. Можно даже использовать простой curl и дёргать параметры. В данной статье рассмотрен инструмент командной строки pvesh, который полезен в скриптах админа.

Массовое создание снимков перед обновлением.

Очень полезно страховаться на случай ошибок. Создание снимков (snapshot) перед обновлением виртуального сервера является хорошей идеей. Для создания снимков нужно использовать команду pvesh create /nodes/ИМЯ_НОДЫ/qemu/НОМЕР_VMID/snapshot -snapname "before_update" -vmstate false
Как получить ИМЯ_НОДЫ, на которой работает НОМЕР_VMID? Можно вызвать pvesh get /cluster/resources -type vm и получить JSON ответ в виде

   {
      "cpu" : 0,
      "disk" : 0,
      "diskread" : 32432430,
      "diskwrite" : 45654650,
      "id" : "qemu/123",
      "maxcpu" : 1,
      "maxdisk" : 34359738368,
      "maxmem" : 536870912,
      "mem" : 0,
      "name" : "server_www",
      "netin" : 3345430,
      "netout" : 54675670,
      "node" : "node1",
      "status" : "running",
      "template" : 0,
      "type" : "qemu",
      "uptime" : 0,
      "vmid" : 123
   },
...

Но лично я выбрал другой путь, возможно не идеальный. ИМЯ_НОДЫ взял из одноимённых каталогов - /etc/pve/nodes/, а НОМЕР_VMID из одноимённых конфигурационных файлов. Если вам нужно делать снимки ВСЕХ серверов, а не только ЗАПУЩЕННЫХ, то удалите защищающий if.

#!/bin/bash
for node in `ls -1 /etc/pve/nodes/`; do
    for f in `find /etc/pve/nodes/${node} -name "*.conf"`; do
        VMID=$(basename "${f}" .conf)
        path2conf=`realpath ${f}`
        nameVM=`cat ${path2conf} | grep -m 1 name | cut -d":" -f2 | tr -d ' '`
        echo "node [${node}] -> ${nameVM} (${VMID}) -> ${path2conf}"
        vmstatus=`pvesh get /nodes/${node}/qemu/${VMID}/status/current | grep -F '"status"' | cut -d'"' -f4`
        if [ ${vmstatus} == 'running' ]; then
            echo "create snapshot"
            pvesh create /nodes/${node}/qemu/${VMID}/snapshot -snapname "before_update" -vmstate false
        fi
    echo "--------------"
    done
done
exit 0

Для удаления снимков нужно использовать команду pvesh delete /nodes/ИМЯ_НОДЫ/qemu/НОМЕР_VMID/snapshot/ИМЯ_СНИМКА

#!/bin/bash
for node in `ls -1 /etc/pve/nodes/`; do
    for f in `find /etc/pve/nodes/${node} -name "*.conf"`; do
        VMID=$(basename "${f}" .conf)
        path2conf=`realpath ${f}`
        nameVM=`cat ${path2conf} | grep -m 1 name | cut -d":" -f2 | tr -d ' '`
        echo "node [${node}] -> ${nameVM} (${VMID}) -> ${path2conf}"
        vmstatus=`pvesh get /nodes/${node}/qemu/${VMID}/status/current | grep -F '"status"' | cut -d'"' -f4`
        if [ ${vmstatus} == 'running' ]; then
            echo "delete snapshot"
            pvesh delete /nodes/${node}/qemu/${VMID}/snapshot/before_update
        fi
    done
done
exit 0

Автоматизация создания виртуальных машин.

Вам нужно сделать 3 этапа:

  • Создать будущий файл-диск для ВМ. В примере подразумевается жёстко заданный VMID = 101, хотя вы должны в идеале сделать запрос на свободный номер. kvm01 - жёстко заданное имя ноды. local - используется локальное хранилище.
  • Создать саму ВМ с нужными параметрами.
  • Запустить ВМ.


pvesh create /nodes/kvm01/storage/local/content -filename vm-101-disk-0.qcow2 -format qcow2 -size 32G -vmid 101
pvesh create /nodes/kvm01/qemu -vmid 101 -memory 2048 -sockets 1 -cores 4 -net0 e1000,bridge=vmbr0 -net1 e1000,bridge=vmbr1 -ide0=local:101/vm-101-disk-0.qcow2 -ide2 local:iso/ubuntu-14.04-server-amd64.iso,media=cdrom
pvesh create /nodes/kvm01/qemu/101/status/start

Получить изображения из базы Round-robin Database (RRD).

Через веб-интерфейс Proxmox VE вы можете наблюдать графики по потреблению различных ресурсов.

Можно сделать запрос к RRD и получить готовое изображение в формате PNG. Недостаток в том, что ответ придёт в JSON и картинка будет в значении поля image. В примере подразумеваем ноду p1 и ВМ с идентификатором 107. Подробности /nodes/{node}/qemu/{vmid}/rrd

Вот так можно получить готовое изображение в виде файла.

#!/bin/sh
pvesh get /nodes/p1/qemu/107/rrd -timeframe week -ds maxmem | python -c "import json,sys; f = open('maxmem.png', 'w+'); f.write( json.loads( str(sys.stdin.read()))['image'].encode('raw_unicode_escape'))"


Proxmox VE API. Access.
Proxmox VE API. Cluster.
Proxmox VE API. Storage.
Proxmox VE API. Pools.
Proxmox VE API. Versions.
Proxmox VE API. Nodes.
Обновление Proxmox VE 3.4 до 4.
Замена сбойного диска в корне ZFS RAID 1 Proxmox 3.4.
Proxmox VE.
Отдайте моё назад.
Балансировка виртуальных машин.

Дата последней правки: 2016-01-25 09:49:53

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта