null

Клонируем виртуальные машины в VirtualBox для курсов

Так как у нас проводится множество разных курсов и мастер-классов, требуется плодить кучу вирталок для каждого из них. Раньше, когда для этого использовалась машинка в демо-центре с VirtualBox внутри, клонирование образов было не очерь удобно:

  •  После клонирования MAC-адрес всех VM совпадает, также совпадает порт VRDE для удаленного доступа через rdesktop
  •  После загрузки машина получает IP-адрес DHCP, который нужно вручную смотреть для всех VM
  •  После загрузки желательно подменить hostname в операционной системе

    
Чтобы решить эти проблемы я написал систему авто-регистрации и клонирования виртуальных машин на языке Python. Она состоит из трех частей:

  1.     XML-RPC сервер вместе с локальной базой хостов (хранится в файле CSV)
  2.     Административные утилиты (arhostadm, gen-vbox-vms.py)
  3.     Агент, выполняющийся на операционной системе внутри VM

Сейчас все плавно переехало в VMWare, а скрипты остались. smiley
    
В качестве ID хоста в данном случае выступает MAC-адрес его первого интерфейса (захардкожено в агенте: e1000g0 или eth0), записанный в виде 080027C91726. Агент и сервер взаимодействуют так:

  1.    При клонировании виртуальной машины скрипт gen-vbox-vms.py устанавливает имя хоста виртуальной машины в базе данных хостов и переводит запись в состояние registered
  2.    При первом запуске клона запускается агент, обращается к AutoReg-серверу (адрес сервера должен быть "вшит" в самого агента).
  3.    Агент рапортует о полученном по DHCP IP-адресе проверяет состояние записи и если оно registered, то:
  • Прописывает hostname в виртуальной машине
  • Создает лок-файл /etc/autoreg.lock
  • Перезагружает VM
  1.  После перезагрузки агент обнаруживает, что состояние записи - configured и ничего не делает. Это можно изменить, вручную перенициализировав запись:

        $ arhostadm unconfigure 080027C91726
        $ arhostadm ... (переконфигурация записи)
        $ arhostadm register 080027C91726


Протокол взаимодействия агента и сервера довольно гибок и может включать дополнительные этапы конфигурации через переменные Extra Vars в базе узлов.

HowTo

Файлы доступны в GitHub-репозитории: https://github.com/myaut/tdc-autoreg
Можно также скачать архив с нашего сервера:  tdc-autoreg-0.6.tar.gz

Установите и запустите сервер
$ cd autoreg
$ tar xzvf ar-server.tar
$ touch hostsdb.dat
$ ./autoreg-srv.py &


В другом терминале проверьте работоспособность сервера
$ export PATH=$PATH:<путь до autoreg>
$ archeck
Server is alive
$ arhostadm list
No hosts in database


Установка агента в VM:
# mkdir -p /opt/autoreg
# cd /opt/autoreg
# tar xzvf ar-agent.tgz


На Solaris просто создайте символическую ссылку:
# ln -s /opt/autoreg/S99autoreg /etc/rc3.d/

На RHEL-подобных системах нужно еще и рассказать о нашем скрипте утилите chkconfig:
# ln -s /opt/autoreg/autoreg /etc/init.d
# chkconfig --add autoreg
# chkconfig autoreg on


Теперь можно останавливать сконфигурированную VM и выполнять export в OVA.

Клонирование виртуальных машин:
$ gen-vbox-vms.py -i ./java.ova -n java-test -c 1 -p 4020 -s tdcsrv.tdc:8765

Здесь:

    -i - Путь до образа ova
    -n - Префикс для имени виртуальной машины и имени хоста
    -c - Количество виртуальных машин
    -p - Номер VRDE-порта (Все виртуальные машины получат этот номер + номер машины)
    -s - Адрес сервера autoreg (опционально)

$ arhostadm list
              HOSTID             HOSTNAME           IPADDR STATE
-------------------- -------------------- ---------------- -----
        0800276823F8               java-1   192.168.50.185     C
        080027AFC52F               java-5   192.168.50.177     C
        080027BAFE62               java-4   192.168.50.186     C
        08002751F252          java-test-1                      R
<cut>

        
Запустите виртуальную машину и дождитесь ее перезагрузки. После перезагрузки она получит правильный hostname и запишет свой IP в базу узлов:
$ arhostadm list
              HOSTID             HOSTNAME           IPADDR STATE
-------------------- -------------------- ---------------- -----
        0800276823F8               java-1   192.168.50.185     C
        080027AFC52F               java-5   192.168.50.177     C
        080027BAFE62               java-4   192.168.50.186     C
        08002751F252          java-test-1   192.168.50.188     C

        
Ну или что-нибудь по дороге сломается и вы напишите гневный комментарий с этой заметке angry

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs