Здесь размещено описание одного из функциональных блоков инструкции с примером управления виртуальными машинами "Qemu-KVM" через простейшие BASH-скрипты. Отдельно неприменимо.
Пример опций конфигурационного файла виртуальной машины:
# vi /usr/local/etc/kvm/cnf.d/mashine0.cnf
....
# Параметр, определяющий возможность запуска {yes|no}
run=yes
# Параметр, определяющий режим запуска {auto|manual}
run.mode=auto
....
# Параметр, определяющий возможность запуска {yes|no}
run=yes
# Параметр, определяющий режим запуска {auto|manual}
run.mode=auto
....
Фрагмент кода с функциями контроля подсистемы виртуализации:
# vi /etc/kvm/fnc.d/2.precheck.fnc
#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell)
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell)
# Функция предварительной проверки
function start-precheck() {
# Если скрипт исполняется не от имени суперпользователя, заменяем имя пользователя по умолчанию "kvm" на имя пользователя, которым запускается скрипт
[ "`id --user`" != "0" ] && USER=`whoami`
# Получаем флаг разрешения запускать машину
RUN=`grep --ignore-case "^run=" "${CNF}" | awk -F = '{print $2}'`
# Решаем, можно ли запускать машину (останавливать её можно в любом случае)
[ "${RUN}" == "no" ] && return 1
# Получаем флаг режима запуска машины
RMODE=`grep --ignore-case "^run.mode=" "${CNF}" | awk -F = '{print $2}'`
# Решаем, можно ли запускать машину в заданном режиме (останавливать её можно в любом случае)
[ "${RMODE}" == "manual" -a "${TARGET}" == "" ] && return 1
# Проверяем, не запущена ли уже целевая виртуальная машина
STATE=`ps wax | grep --invert-match grep | grep --ignore-case --count --extended-regexp "kvm[ ]+\-name[ ]+${NAME}[ ]+"`
if [ ${STATE} -ne 0 ]; then
# Прекращаем работу функции запуска виртуальной машины
echo "${DATE}: The virtual machine ${NAME} is already running." | tee -a "${LOGT}"
return 1
fi
return 0
}
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell)
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell)
# Функция предварительной проверки
function start-precheck() {
# Если скрипт исполняется не от имени суперпользователя, заменяем имя пользователя по умолчанию "kvm" на имя пользователя, которым запускается скрипт
[ "`id --user`" != "0" ] && USER=`whoami`
# Получаем флаг разрешения запускать машину
RUN=`grep --ignore-case "^run=" "${CNF}" | awk -F = '{print $2}'`
# Решаем, можно ли запускать машину (останавливать её можно в любом случае)
[ "${RUN}" == "no" ] && return 1
# Получаем флаг режима запуска машины
RMODE=`grep --ignore-case "^run.mode=" "${CNF}" | awk -F = '{print $2}'`
# Решаем, можно ли запускать машину в заданном режиме (останавливать её можно в любом случае)
[ "${RMODE}" == "manual" -a "${TARGET}" == "" ] && return 1
# Проверяем, не запущена ли уже целевая виртуальная машина
STATE=`ps wax | grep --invert-match grep | grep --ignore-case --count --extended-regexp "kvm[ ]+\-name[ ]+${NAME}[ ]+"`
if [ ${STATE} -ne 0 ]; then
# Прекращаем работу функции запуска виртуальной машины
echo "${DATE}: The virtual machine ${NAME} is already running." | tee -a "${LOGT}"
return 1
fi
return 0
}