VMware Server :: управляемся с парком машин

    Всем привет ;)

    Продолжаем… (кто пропустил шаг назад)
    Интересно, а как вы управляетесь с виртуальными машинами?!
    Каждый раз, когда Вы делаете snapshot, ставите на паузу или выключаете машину(ы) Вы тратите на это время?!

    Тогда мы идем к Вам! :)


    Попытаюсь рассказать, как лично я автоматизировал работу с виртуальными машинами.
    Многим это покажется полной тупостью, но это решение и ОНО найдено руками пользователя, а не разработчика.

    Начнем с самого болезненого, с выключения. Почему с него, да потому что обычно на него никогда не хватает время, вечно куда-то опаздываешь. Ну или, например, оставляешь коллеге, а он по забывчивости не выключает ее.
    Не знаю как у остальных, но на моей практике доказано: если выставить машину в режим самовыключения (режим On host shutdown — Shut down guest operating system), то вероятность некорректного выключения очень высока. Vmware просто не успевает корректно все остановить.
    Если у кого-то есть желание, можно испытать: берем сервер, запускаем несколько машин c ОС FreeBSD, запускаем на них нагрузочные тесты, выключаем ОС под которой крутится VM. Получаем при новом старте запуск fsck на FreeBSD.
    Итого: в таких ситуациях рекомендую VMware ставить на паузу. При снятии с паузы вам остается только синхронизировать время.

    А знаете ли вы?!: при плотной загрузке виртуальными машинами физ.сервера, происходит замедление времени на каждой из них.

    Переходим к самому интересному.
    Реализация скрипта для автоматического перехода в режим паузы, всех работающих машин.

    А знаете ли вы?!: под VMware можно разрабатывать скрипты управления машинами.
    Более подробно можно почитать на http://www.vmware.com/support/pubs/server_pubs.html


    Перед Вами представлен модифицированный пример-скрипт из поставки дистрибутива VMware (на чем он написан тут все сказано):

    Примитивный алгоритм работы:
    1. Проверка всех зарегистрированных машин (определенных в invetory).
    1.1. Машина работает.
    1.1.1 Ставим на паузу
    1.1.2 Проверяем встала или нет.

    check_vm.vbs — основной скрипт
    '
    ' VmCOM VBScript Sample Script (sample2)
    ' Copyright 1998 VMware, Inc. All rights reserved. -- VMware Confidential

    ' Permission is hereby granted, free of charge, to any person obtaining a
    ' copy of the software in this file (the "Software"), to deal in the
    ' Software without restriction, including without limitation the rights to
    ' use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    ' copies of the Software, and to permit persons to whom the Software is
    ' furnished to do so, subject to the following conditions:

    ' The above copyright notice and this permission notice shall be included in
    ' all copies or substantial portions of the Software.

    ' The names "VMware" and "VMware, Inc." must not be used to endorse or
    ' promote products derived from the Software without the prior written
    ' permission of VMware, Inc.

    ' Products derived from the Software may not be called "VMware", nor may
    ' "VMware" appear in their name, without the prior written permission of
    ' VMware, Inc.

    ' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    ' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    ' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    ' VMWARE,INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    ' IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    ' CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    '
    ' ------
    '
    ' This program is for educational purposes only.
    ' It is not to be used in production environments.
    '
    ' Description:
    '
    ' This script displays the virtual machines on the local server.
    ' It prints the configuration file path and current execution
    ' state of each VM. If a VM is in the stuck state, the current
    ' question and its choices are also printed.
    ' Additionally, if a VM is stuck on an undoable disk related
    ' question, the script automatically answers 'Keep' on a power-off
    ' and 'Append' on a power-on.
    '
    ' NOTE: the question-answering logic used is language and product
    '    dependent, and is only provided for illustration purposes only!
    '
    ' Instructions for Windows 2000 and later operating systems:
    '
    ' - save the contents of this file to a file named 'sample2.vbs'
    '  unless it's already named that way
    '
    ' - there should be an accompanying file named 'sample2.wsf'
    '  It is placed in the same directory as this file during
    '  product installation. This file is responsible for setting
    '  up the Windows Script Host environment and loading the
    '  VmCOM type library, thereby enabling this script to
    '  reference symbolic constants such as vmExecutionState_On
    '
    ' - in a command line window, type:
    '  cscript //nologo sample2.wsf
    '

    Set cp = CreateObject("VmCOM.VmConnectParams")
    Set server = CreateObject("VmCOM.VmServerCtl")

    server.Connect cp
    Set vmCollection = server.RegisteredVmNames

    for each vmName in vmCollection
      Set vm = CreateObject("VmCOM.VmCtl")
      s = "path=" & vmName
      On error resume next ' Clear error object
      vm.Connect cp,vmName
      if err.Number = vmErr_VMBUSY then
       s = s & " UNAVAILABLE (controlled by local console)"
      elseif err.Number <> 0 then
       s = s & " ERROR CONNECTING desc='" & err.Description & "'"
      else
       On error goto'Make errors fatal past this point
       s = s & " state=" & State2Str(vm) & " os=" & vm.Config("guestos")
        if vm.ExecutionState = vmExecutionState_Stuck then
         Set q = vm.PendingQuestion
         Set choices = q.choices
         s = s & " question= '" & q.text & "' choices="
         for each choice in choices
         s = s & "[" & choice & "] "
         next
     
         ' If this looks like an undoable disk save question,
         ' automatically answer 'Append' or 'Keep'
         '
         ' NOTE: this code makes alot of assumptions about the product
         '    and the language used, and may break under some environments.
         '    It is shown for illustration purposes only!

         Set r = new RegExp   
         r.pattern = "undoable disk"
         r.ignorecase = True
         Set matches = r.Execute(q.text)

         if matches.count > 0 then
          for i = 1 to choices.count
           if choices(i) = "Append" or choices(i) = "Keep" then
             WScript.Echo(s)
             s = "  --> Automatically selecting '" & q.choices(i) & "' as answer"
             vm.AnswerQuestion q,i
            exit for
            end if
          next
         end if
       end if
      end if
      WScript.Echo(s)
      Recheck(vm) 'добавляем вызов функции
    next

    function State2Str(vm)
      select case vm.ExecutionState
       case vmExecutionState_On
         State2Str = "ON"
       case vmExecutionState_Off
         State2Str = "OFF"
       case vmExecutionState_Suspended
         State2Str = "SUSPENDED"
       case vmExecutionState_Stuck
         State2Str = "STUCK"
       case else
         State2Str = "UNKNOWN"
      end select
    end function
    ' Вот и сама функция, выставления ее на паузу и повторной проверки статуса машины
    function Recheck(vm)
      if vm.ExecutionState = vmExecutionState_On then 'Проверка работы машины
             vm.Suspend (vmPowerOpMode_Hard) ' Установка паузы, в документации описаны дполнительные режимы паузы (можно использовать другие)
             WScript.Echo "Recheck this VM_machine state=" & State2Str(vm) 'вывод в лог повторной проверки
             WScript.Sleep(10000) 'Тайм аут, даем время все закрыть
       end if
    end function
    * This source code was highlighted with Source Code Highlighter.




    Далее запускаемый скрипт check_vm.wsf, от которого передается управление к основному check_vm.vbs:

    <job id="Check_vm">
      <reference object="VmCOM.VmCtl" />
      <script language="VBScript" src="check_vm.vbs" />
    </job>

    * This source code was highlighted with Source Code Highlighter.




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

    cscript check_vm.wsf >> log.txt
    shutdown -s -f -t 100


    В bat происходит вызов скрипта, с перенаправлением в лог.
    Ну shutdown, это как тюнинг на выключение. Можно попробовать поиграть в параметрами.

    Пример лога:

    path=E:\vmware\Ubuntu\Ubuntu.vmx state=ON os=ubuntu
    Recheck this VM_machine state=SUSPENDED
    path=E:\vmware\Ubuntu_Kde_4\Ubuntu.vmx state=OFF os=ubuntu
    path=E:\development\FreeBSD\FreeBSD.vmx state=ON os=freebsd
    Recheck this VM_machine state=SUSPENDED

    Вот и вроде все. :)
    Уфффф… Управились.
    Спите спокойно, а самое главное берегите нервы.
    До следующей статьи…
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 33

      –10
      Пеши исчо, кармы насыпал.
        +1
        Спасибо за поддержку. Рад, что вызвало интерес. С огромным удовольствием напишу еще (наработки есть :) ).
          –1
          Так и не понял в чем проблема выключить VMWare перед выключением сервера?
          А также не понял, как ваш скрипт этому поможет? Если вы делаете shut down серверу, то скрипт же не сработает и машины все равно не выключатся корректно.
          А если вы помните, что надо запустить скрипт, то почему не помните, что надо выключить VMWare?
            +1
            Так и не понял в чем проблема выключить VMWare перед выключением сервера?
            ===
            1.Наша рассеяность. Случайно выключили физ.машину, а виртуальную не выкл. Итог сбой.
            2.Недобросовестный коллега, на которого оставили машину, забыл выключить. Ночью отключили электричество. Потеря данных. (Коллеги бывают разные ;) )
            и.т.д случаи бывают разные.
            ===
            А также не понял, как ваш скрипт этому поможет?
            1 и 2. Выставит по запуску машину на паузу, а не будет выключаться с помощью ОС host машины. (личное мнение: это удобно и более безопасно)

            Если вы делаете shut down серверу, то скрипт же не сработает и машины все равно не выключатся корректно
            ===
            Мое понимание проблемы:
            Вариант 1 — плохой.
            1. выключается ваша host ос, подает сигнал guest ос ( если вы так настроили :), иначе все пропало )
            Вот на этом этапе может некорректно завершить VMware сессию guset ос.
            (личные наблюдения).
            Вариант 2 — мое предложение
            1. Вы выключаете не стандартным образом, а запускаете батник — он все делает за вас.

            А если вы помните, что надо запустить скрипт, то почему не помните, что надо выключить VMWare?
            1. У меня до трех машин работает, и когда я ухожу, некторые ими еще пользуются и забывают выключить. А у нас корп. стандарт — на ночь компьютер надо выключить.
            2. Иногда на физ.компе запускаются машины, о которых я даже могу и не знать :).
            Итого: скрипт поможет исключить (не на 100%) человеческий фактор и не потерять данные.
            Проблематика: Человеческий фактор — некоторые просчеты VMware Server

              +2
              Да еще вариант:
              1. Срабатывает UPS, запускается скрипт и все ставит на паузу. (помогает пауза, в том случаем, если происходит сложный стресс тест. Восстановили — пошло дальше)
                +4
                еще добавлю:
                Если при срабатывании UPS, будет выключаться host ос, при этом вызывая shutdown guest ос — это будет гораздо дольше, чем пауза guest ос — выключение host ос.
                Тут важно время — батарейка не резиновая :)
                  0
                  А кстати, как в VMWare server пауза реализована? Пауза на диск всю информацию сохраняет? После перезагрузки все полностью восстанавливается? Но тогда это должно быть что-то типа Snapshot
                    +2
                    Сохраняется образ памяти, потом восстанавливается.
                    После снятия паузы все восстанавливается.
                    Ну это не совсем Snapshot ( как архитектурно это реализовано — не копал).
                    Да, кстати, в данной версии можно сделать только 1 snapshot.

                      –2
                      Скорее всего это и есть Snapshot, просто только для текущей сессии, несохраняемый в отдельный файл.

                      >>Да, кстати, в данной версии можно сделать только 1 snapshot.
                      Что-то урезанное? Я вообще сложно представляю, как можно только с 1 снапшотом работать. У меня их десятки :)
                        +2
                        Работаем, а что делать :)
                        Не все хотят платить деньги за более продвинутые продукты.
                  +1
                  Странно — у нас тестовые компы, автобилды и т.п. на VMWare серверах именно ночью большую часть работы делают. На ночь сервера выключать — это зло, надо бы в этом начальство убедить. Электричество что ли экономят?

                  Насчет батника: если есть батник, который вы хотите запускать, то можно просто в этом батнике было посылать команду для VMWare на выключение. А также прописать shutdown через несколько минут — тогда и скрипт будет из 2-х строк всего и задача будет выполнена.
                    +2
                    Все сервера, что стоят в серверной они работаю и ночью.
                    Но некоторые не помещаются или просто используются мощные пользовательские ПК — в качестве серверов для виртуалок (ну конечно и как для работы)

                    ===

                    батник:
                    Насчет батника: если есть батник, который вы хотите запускать, то можно просто в этом батнике было посылать команду для VMWare на выключение.
                    ===
                    Не осилил этого :). Про какую команду идет речь?

                    В любом случае, для режима shutdown guest os, нужен установлен vmware tools. А он не всегда ставиться, коллегами. Представьте вы работает с машинами, их много, вы не уследите где, кто, что поставил.
                      0
                      >> Не осилил этого :). Про какую команду идет речь?

                      Код же на vbs написан — можно послать команду типа exit из меню file. Я скрипты для VMWare не изучал — точно не знаю.

                      >>В любом случае, для режима shutdown guest os, нужен установлен vmware tools
                      Вы удаленно что-ли компьютеры выключаете?
                        +2
                        Просто так послать команду не получится, ее полюбому надо вызывать через сторонние библиотеки. Так что без кода не обойтись. А в примере много кода, так как я просто переделал стандартный поставочный скрипт — минимум усилий — максимум удовольствия.
                        Замечу:
                        В поставку входит еще такой стандартный скрипт, который можно вызвать ту же самую паузу одной командой. Но надо знать полный путь к машине.
                        Вот пример ключей:
                        C:\Program Files\VMware\VMware VIX>vmrun

                        Usage: vmrun [Authentication flags] COMMAND [PARAMETERS]

                        Authentication flags
                        -h -P -u -p COMMAND PARAMETERS DESCRIPTION
                        list List all running VMs
                        start Path to vmx file Start a VM
                        stop Path to vmx file Stop a VM
                        reset Path to vmx file Reset a VM
                        suspend Path to vmx file Suspend a VM
                        upgradevm Path to vmx file Upgrade VM file format, virtual hw
                        installtools Path to vmx file Install Tools in Guest OS
                        snapshot Path to vmx file Create a snapshot of a VM
                        deleteSnapshot Path to vmx file Remove a snapshot from a VM
                        revertToSnapshot Path to vmx file Set VM state to a snapshot

                        Но тут то и оно, ты не знаешь, что у тебя за виртуалка стоит, ты не знаешь в какой точно папке.
                        Вот поэтому, мой способ просматривать все зарегистрированные машины и ставить их на паузу, более оптимален.
                        Пауза — это менее требовательная операция.
                        Выключение гостевой системы — требует многих нюансов и не всегда стабильна, поэтому более требовательна.
                        >>В любом случае, для режима shutdown guest os, нужен установлен vmware tools
                        >>Вы удаленно что-ли компьютеры выключаете?

                        Не удаленно, а в заданное время, по scheduler. Когда уже офис закроют точно. Многие сидят до 21.00.

                          0
                          Понятно. Если пауза в этой версии более стабильна, чем shutdown, то этот вариант — отличный.
                            +1
                            Добавлю: она не только стабильна, но и универсальна. :)
                0
                > Случайно выключили физ.машину, а виртуальную не выкл. Итог сбой.

                Я к сожалению не использую VMware на десктопе, вместо него активно работаю с VirtualBox
                хост машина Linux + KDE
                так вот когда её выключаешь (не через концоль введя poweroff или кнопкой питания), но через стандартный диалог завершения работы, то система не віключится пока не будут даны ответы на все вопросы завершающихся приложений. Спрашивают не все, но вот VirtualBox не входит в их число: он показывает окно в котором предлагает завершить работу системы или сохранить её состояние (последнее делается в течении нескольких секунд)

                неужели такого нет в Windows + VMvare?
                  0
                  Vmware Server может сохранить ее состояние — это режим паузы.
                  Выключение guest ос возможна при соответствующих настройках.

                  В мое примере, мы не знаем что нам надо выключать, какого типа вирт.машину. Поэтому используем паузу. Она более практична :)
                  • НЛО прилетело и опубликовало эту надпись здесь
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    Tools не всегда можно поставить. Мне например не нужны X-ы, а в FreeBSD tools их тянут.
                      0
                      Но выход есть, просто по handbook-у настроить ntp демон, так проще.
                        +1
                        Давно уже есть OpenVM tools, открытая разработка на базе vmware-tools, есть и версия без иксов.
                          0
                          Знаю о них и поглядываю периодически. У меня были какие-то проблемы почему-то где-то год назад, кажется не компилировались на FreeBSD 6.2 или конфликтовали с собранным ядром. Сейчас виртуалками меньше занимаюсь потому не нужно.
                            0
                            Год назад? Хм, их вроде не так давно открыли
                      0
                      Мое личное использование:
                      1. Сосед запускает на мне виртуальную машину.
                      2. Я не знаю как она сконфигурирована.
                      3. Мне надо выключить ПК.
                      4. Использую паузу, так как она менее требовательна к настройкам виртуал. машины соседа.
                      Рассматривался такой вариант.

                      Хотел спросить про время: при такой настройке, синхронизация происходит во время старта машины или через интервал времени?! Такую опцию никогда не использовал.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          > Если autostop настроен на остановку, она оснановится без лишних телодвижений.

                          Согласен, если только настроен :)

                          > Синхронизация происходит периодически. После запуска после паузы время корректируется на актуальное.

                          В данной ситуации можно выделить проблематику: если выполняющаяся работа зависит от времени guset ос, то подход не актуален.
                          Например: выполняется тест, в результате записываются данные о времени запросов к базе (оптимизируем 2-х часовой запрос). Вечером вирт.машина останавливается, утром включается, синхронизируется время — итого в отчет попадет неверный расчет.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              >Это проблема головотяпства того, кто проводит такие тесты.
                              Вы знаете, это наверно проблема многих русских компаний. :)
                        • НЛО прилетело и опубликовало эту надпись здесь
                        +1
                        Хорошая статья, спасибо.

                        P.S. Хорошо бы из заголовка точку убрать, глаз режет…

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое