Яндекс.Метрика

    Песочница

    Virt-manager как online-сервис

    Сложилось так что понадобился инструмент для управления своими виртуалками вне офиса и при этом не всегда под рукой была машина с ОС Linux. Раньше приходилось активно пользоваться Putty и консольной утилитой virsh, что очень напрягало даже не так управление виртуалками а как их создание. По началу писал bash скрипты для оптимизации своих действий, но не всегда это было удобно.

    Тут еще я начал попутно изучать Python, все что было наскриптовано в bash стал переводить в Python. И тогда возникла идея написать веб-интерфейс для управления своими виртуалками в офисе, ну и теми что крутится в личных целях. Так как решались личные потребности, изначально планировалось спрятать такую вещь у себя на веб-сервере, речи о паблике даже в мыслях не было. Но после двух недель интенсивной работы над задачей, когда нарисовался уже почти не большой веб проект, знакомый предложил выложить все это в открытый доступ для чего выделил мне виртуалку под проект.

    Проект


    Проект называется: Web Virtual Manager Machine. Через WEB-интерфейс можно создавать и удалять виртуальные машины. Управлять пулами ресурсов сети, хранилища. Подключение к экрану виртуальной машины по VNC через SSH туннель.

    Технологии


    Вся логика написана на языке Python с использованием фремвойка Django. Для взаимодействия Python’a с гипервизором используется библиотека Libvirt. Гипервизор по умолчанию KVM.

    Как это все настраивается


    Для работы нам понадобится сервер с установленной ОС Fedora Linux не ниже 12 билда, в Debian\Ubuntu не поддерживаются некоторые функции libvirt а именно работа с сетевыми интерфейсами eth0 и br0 на хост машине.

    Все по порядку, устанавливаем пакеты KVM и libvirt:

    # yum -y install kvm libvirt
    

    расcкоментрируем строку в файле /etc/sysconfig/libvirtd следующую строку:

    # Listen for TCP/IP connections
    # NB. must setup TLS/SSL keys prior to using this
    LIBVIRTD_ARGS="--listen"
    

    в файле /etc/libvirt/libvirtd.conf раскоментрируем строки:

    # Network connectivity controls
    #
    
    # Flag listening for secure TLS connections on the public TCP/IP port.
    # NB, must pass the --listen flag to the libvirtd process for this to
    # have any effect.
    #
    # It is necessary to setup a CA and issue server certificates before
    # using this capability.
    #
    # This is enabled by default, uncomment this to disable it
    listen_tls = 0
    
    # Listen for unencrypted TCP connections on the public TCP/IP port.
    # NB, must pass the --listen flag to the libvirtd process for this to
    # have any effect.
    #
    # Using the TCP socket requires SASL authentication by default. Only
    # SASL mechanisms which support data encryption are allowed. This is
    # DIGEST_MD5 and GSSAPI (Kerberos5)
    #
    # This is disabled by default, uncomment this to enable it.
    listen_tcp = 1
    

    запускаем демон libvirtd:

    # service libvirtd start
    

    создаем пользователя для управления вашими виртуалкаи, где fred имя пользователя:

    # saslpasswd2 -a libvirt fred
    Password: xxxxxx
    Again (for verification): xxxxxx
    

    создаем файл /etc/polkit-1/localauthority/50-local.d/libvirtd.pkla со следующий содержимым, где fred логин для управления libvirt:

    [Allow fred libvirt management permissions]
    Identity=unix-user:fred
    Action=org.libvirt.unix.manage
    ResultAny=yes
    ResultInactive=yes
    ResultActive=yes
    

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

    Дальше заходим на сам сайт регистрируемся, подтверждаем регистрацию, авторизируемся.

    Перед добавлением хост-системы сделайте тестовое подключения к вашему гипервизору из консоли:

    # virsh -c qemu+tcp://your IP address/system nodeinfo
    Please enter your authentication name: fred
    Please enter your password: 
    

    если вы не увидели ошибок, а увидели информацию о системы, то смело добавляйте свою хост-систему и управляйте своими виртуалками.

    Код проекта можно глянуть на github

    Заключение


    При написании проекта я получил реальный опыт работы с Django и Python что мне очень понравилось. Надеюсь что то что получилось принесет пользу кому то еще кроме меня, мне будет очень приятно если это действительно так. Даже если ничего не понравилось значит есть над чем работать. Если есть пожелания или рекомендации, а может быть вопросы милости просим.