Déplacement des fichiers depuis eole-one-singlenode

This commit is contained in:
Philippe Caseiro 2014-11-13 10:06:16 +01:00
commit 7a3f95db42
15 changed files with 2638 additions and 0 deletions

26
Makefile Normal file
View File

@ -0,0 +1,26 @@
################################
# Makefile pour eole-libvirt
################################
SOURCE=eole-one-master
VERSION=0.0.1
EOLE_VERSION=2.4
PKGAPPS=non
#FLASK_MODULE=<APPLICATION>
################################
# Début de zone à ne pas éditer
################################
include eole.mk
include apps.mk
################################
# Fin de zone à ne pas éditer
################################
# Makefile rules dedicated to application
# if exists
ifneq (, $(strip $(wildcard $(SOURCE).mk)))
include $(SOURCE).mk
endif

64
apps.mk Normal file
View File

@ -0,0 +1,64 @@
#
# NE PAS EDITER CE FICHIER
#
# Voir Makefile
##########################
# Application web envole #
##########################
ifneq (, $(filter oui web, $(PKGAPPS)))
#
# Sanity check
#
ifeq (, $(filter-out X.X, $(strip $(VERSION))))
$(error $$(VERSION) variable has incorrect value '$(VERSION)')
endif
# Where to store web application files
WEB_PATH := $(DESTDIR)/var/www/html
# Envole
sharenvole_PROG_DIR := $(DESTDIR)/usr/share/envole/$(SOURCE)
src_$(SOURCE)-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)
src_plugins-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/plugin
src_lang-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/lang
endif
##########################
# Application EOLE flask #
##########################
ifneq (, $(filter flask, $(PKGAPPS)))
#
# Sanity check
#
ifeq (, $(filter-out XXX, $(strip $(FLASK_MODULE))))
$(error $$(FLASK_MODULE) variable has incorrect value '$(FLASK_MODULE)')
endif
ifeq (, $(strip $(wildcard src/$(FLASK_MODULE).conf)))
$(error missing eoleflask configuration file 'src/$(FLASK_MODULE).conf')
endif
# Everything is related to mount point
APPS_MOUNT_POINT := $(shell sed -ne 's|^"MOUNT_POINT"[[:space:]]*:[[:space:]]*"/\([^"]*\)",|\1|p' \
src/$(FLASK_MODULE).conf)
ifeq (, $(strip $(APPS_MOUNT_POINT)))
$(error no "MOUNT_POINT" in eoleflask configuration file 'src/$(FLASK_MODULE).conf')
endif
# eole-flask configuration
src_DATA_DIR := $(DESTDIR)/etc/eole/flask/available
# Where to store flask application files
FLASK_PATH := $(eole_DIR)/flask/$(APPS_MOUNT_POINT)
# static files
src_$(FLASK_MODULE)_static_REC_DIR := $(FLASK_PATH)/static
src_$(FLASK_MODULE)_templates_REC_DIR := $(FLASK_PATH)/templates
src_$(FLASK_MODULE)_instance_REC_DIR := $(FLASK_PATH)/resources
endif

View File

@ -0,0 +1,90 @@
#!/bin/bash
. /usr/lib/eole/diagnose.sh
eKO() {
EchoRouge "Erreur"
}
eOK() {
EchoVert "Ok"
}
one()
{
su oneadmin -s /bin/sh -c "$@"
}
TestServiceStatus() {
printf ". %${len_pf}s => " "$1"
/etc/init.d/$2 status >/dev/null 2>&1
if [ $? -eq 0 ] ; then
eOK
else
eKO
fi
}
eOneStatus() {
[ "$1" = "STOPPED" -o "$1" = "UNKNOWN" ] && EchoRouge "$1" && return
[ "$1" = "ACTIVE" ] && EchoVert "$1" && return
EchoOrange "$1"
}
EchoGras "*** Virtualisation"
if [ "$(CreoleGet 'activer_openvswitch')" != "oui" ]; then
printf ". %${len_pf}s => " "Virutalisation"
EchoOrange "Non actif"
fi
TestServiceStatus "libvirt" libvirt-bin
TestServiceStatus "OpenNebula" opennebula
TestService "XMLRPC" "localhost:2633"
TestService "Sunstone" $(CreoleGet "ip_sunstone"):$(CreoleGet "port_sunstone")
TestService "Proxy VNC" $(CreoleGet "ip_sunstone"):$(CreoleGet "vnc_proxy_port_sunstone")
if [ "$(CreoleGet 'activer_oneflow')" == 'oui' ]; then
TestService "OneFlow" $(CreoleGet "ip_oneflow"):$(CreoleGet "port_oneflow")
fi
echo ""
TestServiceStatus "OpenVswitch" openvswitch-switch
echo ""
if [[ $(CreoleGet activer_onesinglenode 2>&1) == 'oui' ]]
then
EchoGras "*** Noeuds du cluster Hâpy"
NODES=$(one 'onehost list -l ID,NAME,STAT' | awk '!/ID.*NAME.*STAT/ {print $1 ":" $2 ":" $3}')
for elm in ${NODES}
do
node=(${elm//:/ })
id=${node[0]}
name=${node[1]}
state=${node[2]}
printf ". %${len_pf}s => " "$name"
eOneStatus "${state}"
done
fi
EchoGras "*** Machines Virtuelles"
# Les machines virtuelles se terminant par -TEST ne sont pas vérifiées
VMs=$( one 'onevm list -l ID,NAME,STAT' | tail -n +2 | grep -ve '\-TEST ' | awk '{print $1}' )
if [[ -z ${VMs} ]]
then
printf ". %${len_pf}s " "Pas de machines virtuelles instanciées"
else
for VM in $VMs ; do
NAME=$( one "onevm show $VM" | grep 'NAME' | cut -d: -f2 )
STAT=$(one "onevm show $VM" | grep '^STATE' | cut -d: -f2 | tr -d ' ' )
printf ". %${len_pf}s => " "$NAME"
eOneStatus "$STAT"
done
fi
echo ""

159
dicos/99_one-master.xml Normal file
View File

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<files>
<!--file filelist='onesinglenode' name='/etc/one/sunstone-server.conf' rm='True' mkdir='True'/-->
<file filelist='onesinglenode' name='/etc/one/vmm_exec/vmm_exec_kvm.conf' rm='True' mkdir='True'/>
<file filelist='onesinglenode' name='/etc/one/oned.conf' rm='True' mkdir='True'/>
<service type='service'>opennebula</service>
<service_access service='one-ssh'>
<tcpwrapper>sshd</tcpwrapper>
</service_access>
<service_restriction service='one-ssh'>
<ip interface='eth0' ip_type='SymLinkOption'>adresse_ip_eth0</ip>
</service_restriction>
</files>
<variables>
<family name='general'>
<variable name='nom_machine' redefine='True' auto_freeze='True'/>
</family>
<family name='Virtualisation'>
<variable name='activer_onesinglenode' type='oui/non' description="Activer le serveur de virtualisation" mode='expert'>
<value>oui</value>
</variable>
<variable name='one_cluster_name' type='string' description="Nom de la grappe OpenNebula" mode='expert' auto_freeze='True' mandatory="True">
<value></value>
</variable>
<variable name='vnets' type='string' description='Réseaux virtuels Niveau 3' multi='True'/>
<variable name='vnet_network_addr' type='ip' description='Adresse du réseau'/>
<variable name='vnet_network_mask' type='netmask' description='Masque du réseau'/>
<variable name='vnet_network_dns' type='ip' description='Adresse du serveur DNS'/>
<variable name='vnet_network_gw' type='ip' description='Passerelle du réseau'/>
<variable name='vnet_range_start' type='ip' description='Première IP de la plage (si nécessaire)'/>
<variable name='vnet_range_end' type='ip' description='Dernière IP de la plage (si nécessaire)'/>
<variable name='vnet_vlan_tag' type='number' description='Numéro du VLAN'/>
<variable name='vnet_vlan_trunk' type='number' description="VLAN à transporter (trunk)" mode='expert'/>
<variable name='l2_vnets' type='string' description='Réseaux virtuels Niveau 2' multi='True'/>
<variable name='l2_vnet_first_mac' type='string' description='Première adresse MAC' mode='expert'/>
<variable name='l2_vnet_size' type='number' description="Taille du réseau (en nombre d'adresse MAC)"/>
<variable name='l2_vnet_vlan_tag' type='number' description='Numéro du VLAN'/>
<variable name='l2_vnet_vlan_trunk' type='number' description="VLAN à transporter (trunk)" mode='expert'/>
<variable name='one_ds_system_prefix' description="Préfix de l'espace de stockage système" mode='expert' auto_freeze='True'>
<value>system-</value>
</variable>
<variable name='one_ds_iso_name' description="Nom de l'espace de stockage des ISO" mode='expert' auto_freeze='True'>
<value>iso-images</value>
</variable>
<variable name='one_ds_image_name' description="Nom de l'espace de stockage de images disque" mode='expert' auto_freeze='True'>
<value>images-disques</value>
</variable>
<variable name='one_disk_cache' type='oui/non' description='Activer le cache pour les images qcow2 ?' mode='expert'>
<value>oui</value>
</variable>
<variable name='one_video_driver' type='string' description='Driver video par défaut' mode='expert'>
<value>vga</value>
</variable>
<variable name='activer_multinode' description='Activer le mode multi-noeud' mode='expert' type='oui/non'>
<value>non</value>
</variable>
<variable name='one_nodes' type='string' description='Noeud voisin du Cluster' multi='True'/>
<variable name='node_ip' type='ip' description='Adresse IP du noeud' multi='True'/>
</family>
</variables>
<constraints>
<fill name='concat' target='one_cluster_name'>
<param>CL-</param>
<param type='eole'>numero_etab</param>
</fill>
<check name='valid_enum' target='one_video_driver'>
<param>['qxl','vga','std','cirrus']</param>
<param name='checkval'>False</param>
</check>
<condition name='disabled_if_in' source='activer_onesinglenode'>
<param>non</param>
<target type='filelist'>onesinglenode</target>
<target type='variable'>one_cluster_name</target>
<target type='variable'>one_ds_system_prefix</target>
<target type='variable'>one_ds_iso_name</target>
<target type='variable'>one_ds_image_name</target>
<target type='variable'>vnets</target>
<target type='variable'>vnet_network_addr</target>
<target type='variable'>vnet_network_mask</target>
<target type='variable'>vnet_network_dns</target>
<target type='variable'>vnet_network_gw</target>
<target type='variable'>vnet_range_start</target>
<target type='variable'>vnet_range_end</target>
<target type='variable'>vnet_vlan_tag</target>
<target type='variable'>vnet_vlan_trunk</target>
<target type='variable'>activer_multinode</target>
<target type='variable'>l2_vnets</target>
<target type='variable'>l2_vnet_first_mac</target>
<target type='variable'>l2_vnet_size</target>
<target type='variable'>l2_vnet_vlan_tag</target>
<target type='variable'>l2_vnet_vlan_trunk</target>
</condition>
<condition name='disabled_if_in' source='activer_multinode'>
<param>non</param>
<target type='variable'>one_nodes</target>
<target type='variable'>node_ip</target>
</condition>
<group master='vnets'>
<slave>vnet_network_addr</slave>
<slave>vnet_network_dns</slave>
<slave>vnet_network_mask</slave>
<slave>vnet_network_gw</slave>
<slave>vnet_range_start</slave>
<slave>vnet_range_end</slave>
<slave>vnet_vlan_tag</slave>
<slave>vnet_vlan_trunk</slave>
</group>
<group master='l2_vnets'>
<slave>l2_vnet_first_mac</slave>
<slave>l2_vnet_size</slave>
<slave>l2_vnet_vlan_tag</slave>
<slave>l2_vnet_vlan_trunk</slave>
</group>
<group master='one_nodes'>
<slave>node_ip</slave>
</group>
<check name='valid_enum' target='vnets'>
<param>['internet','admin','pedago','dmzpub','dmzpriv','wifi']</param>
<param name='checkval'>False</param>
</check>
<check name='valid_enum' target='l2_vnets'>
<param>['internet','admin','pedago','dmzpub','dmzpriv','wifi']</param>
<param name='checkval'>False</param>
</check>
<condition name='disabled_if_in' source='activer_openvswitch'>
<param>non</param>
<target type='variable'>vnet_network_addr</target>
<target type='variable'>vnet_network_dns</target>
<target type='variable'>vnet_network_mask</target>
<target type='variable'>vnet_network_gw</target>
<target type='variable'>vnet_range_start</target>
<target type='variable'>vnet_range_end</target>
<target type='variable'>vnet_vlan_tag</target>
<target type='variable'>vnet_vlan_trunk</target>
<target type='variable'>l2_vnet_first_mac</target>
<target type='variable'>l2_vnet_size</target>
<target type='variable'>l2_vnet_vlan_tag</target>
<target type='variable'>l2_vnet_vlan_trunk</target>
</condition>
</constraints>
<help>
<variable name='activer_onesinglenode'>Interface d'administration du Cluster OpenNebula.</variable>
</help>
</creole>

4
eole-one-master.mk Normal file
View File

@ -0,0 +1,4 @@
# eole-one-singlenode specific rules
hooks_PROG_DIR := $(DESTDIR)/var/lib/one/remotes/hooks/eole
init_PROG_DIR := $(DESTDIR)/etc/init.d

200
eole.mk Normal file
View File

@ -0,0 +1,200 @@
#
# NE PAS EDITER CE FICHIER
#
# Utiliser <appli>.mk à inclure à la fin de Makefile
#################
# Sanity checks #
#################
ifeq (, $(DESTDIR))
$(warning $$(DESTDIR) is empty, installation will be done in /)
endif
ifeq (, $(filter-out XXX-XXX, $(strip $(SOURCE))))
$(error $$(SOURCE) variable has incorrect value '$(SOURCE)')
endif
#########################
# Variables definitions #
#########################
INSTALL := install
INSTALL_DATA := install -m 644
INSTALL_PROGRAM := install -m 755
INSTALL_DIRECTORY := install -m 755 -d
INSTALL_RECURSIVE := cp -dr --no-preserve=ownership
# Standard path
bin_PROG_DIR := $(DESTDIR)/usr/bin
sbin_PROG_DIR := $(DESTDIR)/usr/sbin
man8_DATA_DIR := $(DESTDIR)/usr/share/man/fr.UTF-8/man8
# Base
eole_DIR := $(DESTDIR)/usr/share/eole
ifeq ($(strip $(EOLE_VERSION)), 2.3)
diagnose_PROG_DIR := $(eole_DIR)/diagnose/module
else
diagnose_PROG_DIR := $(eole_DIR)/diagnose/
endif
# Creole
creole_DIR := $(eole_DIR)/creole
dicos_DATA_DIR := $(creole_DIR)/dicos
tmpl_DATA_DIR := $(creole_DIR)/distrib
pretemplate_PROG_DIR := $(eole_DIR)/pretemplate
posttemplate_PROG_DIR := $(eole_DIR)/posttemplate
preservice_PROG_DIR := $(eole_DIR)/preservice
postservice_PROG_DIR := $(eole_DIR)/postservice
firewall_DATA_DIR := $(eole_DIR)/firewall
bacula_restore_DATA_DIR := $(eole_DIR)/bacula/restore
bacula_fichier_DATA_DIR := $(DESTDIR)/etc/bacula/baculafichiers.d
ifeq ($(strip $(EOLE_VERSION)), 2.3)
schedule_pre_PROG_DIR := $(eole_DIR)/schedule/pre
schedule_post_PROG_DIR := $(eole_DIR)/schedule/post
else
schedule_scripts_PROG_DIR := $(eole_DIR)/schedule/scripts
endif
extra_REC_DIR := $(creole_DIR)/extra
# Zéphir
zephir_DATA_DIR := $(DESTDIR)/usr/share/zephir
zephir_configs_DATA_DIR := $(zephir_DATA_DIR)/monitor/configs
zephir_srv_DATA_DIR := $(zephir_configs_DATA_DIR)/services
zephir_scripts_PROG_DIR := $(zephir_DATA_DIR)/scripts
# SSO
sso_DATA_DIR := $(DESTDIR)/usr/share/sso
sso_filtres_DATA_DIR := $(sso_DATA_DIR)/app_filters
sso_user-info_DATA_DIR := $(sso_DATA_DIR)/user_infos
# EAD
ead_DATA_DIR := $(DESTDIR)/usr/share/ead2/backend/config
ead_actions_DATA_DIR := $(ead_DATA_DIR)/actions
ead_perms_DATA_DIR := $(ead_DATA_DIR)/perms
ead_roles_DATA_DIR := $(ead_DATA_DIR)/roles
# Program libraries goes under /usr/lib/<PROGRAM>/
lib_$(SOURCE)_DATA_DIR := $(DESTDIR)/usr/lib/$(SOURCE)
# Scripts Eole
scripts_PROG_DIR := $(eole_DIR)/sbin
lib_eole_DATA_DIR := $(DESTDIR)/usr/lib/eole
# LDAP
ldap_passwords_DATA_DIR := $(eole_DIR)/annuaire/password_files
# LXC
lxc_DATA_DIR := $(eole_DIR)/lxc
lxc_fstab_DATA_DIR := $(lxc_DATA_DIR)/fstab
lxc_hosts_DATA_DIR := $(lxc_DATA_DIR)/hosts
# SQL
sql_DATA_DIR := $(eole_DIR)/mysql/$(SOURCE)
sql_gen_DATA_DIR := $(sql_DATA_DIR)/gen
sql_updates_DATA_DIR := $(sql_DATA_DIR)/updates
sql_conf_gen_DATA_DIR := $(eole_DIR)/applications/gen
sql_conf_passwords_DATA_DIR := $(eole_DIR)/applications/passwords
sql_conf_updates_DATA_DIR := $(eole_DIR)/applications/updates/$(SOURCE)
# Certifs
certs_DATA_DIR := $(eole_DIR)/certs
# Logrotate
logrotate_DATA_DIR := $(DESTDIR)/etc/logrotate.d
# Cron
cron_PROG_DIR := $(DESTDIR)/etc/cron.daily
# Python modules
ifneq ($(DESTDIR),)
PYTHON_OPTS := --root $(DESTDIR)
endif
#############################################
# Common directories and files installation #
#############################################
all:
install:: install-dirs install-files
# $1 = command to run
# $2 = source directory
# $3 = destination directory
define fc_install_file
if [ -d $2 ]; then \
for file in `ls -1 $2/`; do \
$1 $2/$$file $3 || true; \
done; \
fi
endef
##
## Directory creation
##
# use % to catch local name in $*
# data, program and recursive directory require a corresponding
# directory in local sources
%_DATA_DIR %_PROG_DIR %REC_DIR:
test ! -d $(subst _,/,$*) || $(INSTALL_DIRECTORY) $($@)
# Create the directory referenced by the variable without a local one.
%_DIR:
$(INSTALL_DIRECTORY) $($@)
##
## Install files present directly under data, program and recursive directories
##
# $* : name of variable
# $($*): value of variable
%-instdata:
$(call fc_install_file, $(INSTALL_DATA), $(subst _,/,$(subst _DATA_DIR,,$*)), $($*))
%-instprog:
$(call fc_install_file, $(INSTALL_PROGRAM), $(subst _,/,$(subst _PROG_DIR,,$*)), $($*))
%-instrec:
$(call fc_install_file, $(INSTALL_RECURSIVE), $(subst _,/,$(subst _REC_DIR,,$*)), $($*))
# Use second expansion as variables may be created in included
# Makefiles
.SECONDEXPANSION:
# List of all directories
installdirs_LIST = $(foreach V, $(filter %_DIR, $(.VARIABLES)), \
$(if $(filter file, $(origin $(V))), \
$(V)))
# List of data directories
installdata_LIST = $(filter %_DATA_DIR, $(installdirs_LIST))
# List of program directories
installprog_LIST = $(filter %_PROG_DIR, $(installdirs_LIST))
# List of recursive directories
installrec_LIST = $(filter %_REC_DIR, $(installdirs_LIST))
# Expand directories to create as dependency
# Use double-colon to permit user to define additionnal install-dirs
install-dirs:: $$(installdirs_LIST)
# Expand files to install as dependency
# Use double-colon to permit user to define additionnal install-files
install-files:: install-data-files install-prog-files install-rec-dirs
install-data-files: $$(patsubst %,%-instdata,$$(installdata_LIST))
install-prog-files: $$(patsubst %,%-instprog,$$(installprog_LIST))
install-rec-dirs: $$(patsubst %,%-instrec,$$(installrec_LIST))
# Installation of python modules
ifeq ($(shell test -f setup.py && echo 0), 0)
install-files::
python setup.py install --no-compile --install-layout=deb $(PYTHON_OPTS)
endif
.PHONY: install install-dirs install-files install-data-files install-prog-files install-rec-dirs

76
hooks/graphicsfw Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
SELF_DIR="$(dirname $(readlink -e ${0}))"
BASE_DIR="$(dirname $(dirname ${SELF_DIR}))"
SCRIPTCOMMON="${BASE_DIR}/scripts_common.sh"
. ${SCRIPTCOMMON}
IPTABLES="sudo iptables"
XPATH="${BASE_DIR}/datastore/xpath.rb --stdin --base64"
RULES_FILE="/run/one/one_graphics_rules"
function one_get_port()
{
${XPATH} ${1} '/VM/TEMPLATE/GRAPHICS/PORT'
}
function open_port()
{
declare -a authorized_ip
declare -a authorized_netmask
vm_port=$(one_get_port ${1})
[[ -z "${vm_port}" ]] && return 2
authorized_ip=( $(CreoleGet ip_ssh_eth0) )
[[ -z "${authorized_ip}" ]] && return 2
authorized_netmask=( $(CreoleGet netmask_ssh_eth0) )
[[ -z "${authorized_netmask}" ]] && return 2
for ((i = 0; i < ${#authorized_ip[*]}; i +=1))
do
${IPTABLES} -I eth0-root -s ${authorized_ip[$i]}/${authorized_netmask[$i]} -p tcp -m tcp --dport ${vm_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
if [[ $? -eq 0 ]]
then
echo "/sbin/iptables -A eth0-root -s ${authorized_ip[$i]}/${authorized_netmask[$i]} -p tcp -m tcp --dport ${vm_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT" >> "${RULES_FILE}"
fi
${IPTABLES} -I eth0-root -s $(CreoleGet one_master_ip) -p tcp -m tcp --dport ${vm_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
[[ ${?} -eq 0 ]] && echo "/sbin/iptables -A eth0-root -s $(CreoleGet one_master_ip) -p tcp -m tcp --dport ${vm_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT" >> "${RULES_FILE}"
done
}
function close_port()
{
vm_port=$(one_get_port ${1})
[[ -n "${vm_port}" ]] || return 2
rule_ids=$(${IPTABLES} -n --line-numbers -L eth0-root | awk "/dpt:${vm_port}/ {print \$1}")
for rule_id in ${rule_ids}
do
${IPTABLES} -D eth0-root ${rule_id}
if [[ $? -eq 0 ]]
then
sed -i "/--dport ${vm_port}/d" "${RULES_FILE}"
fi
done
}
action=${1}
template=${2}
case $action in
open)
open_port ${template}
exit $?
;;
close)
close_port ${template}
exit $?
;;
*)
echo "Unknown action '$action'" >&2
exit 127
;;
esac

83
init/onenode Executable file
View File

@ -0,0 +1,83 @@
#! /bin/sh
### BEGIN INIT INFO
# Provides: onenode
# Required-Start: creoled libvirt-bin opennebula openvswitch-switch
# Required-Stop: creoled libvirt-bin opennebula openvswitch-switch
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Node vm management
# Description: Suspend and resume VM of OpenNebula node
### END INIT INFO
# Author: Jaime Melis <jmelis@opennebula.org>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="OpenNebula Node"
NAME=onevm-all
DAEMON=/usr/share/eole/sbin/$NAME
DAEMON_ARGS="-w"
SCRIPTNAME=/etc/init.d/onenode
PID_FILE=/var/run/one/onenode
CREDS=/var/lib/one/.one/one_auth
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
${DAEMON} ${DAEMON_ARGS} -c ${CREDS} -a "resume"
}
#
# Function that stops the daemon/service
#
do_stop()
{
${DAEMON} ${DAEMON_ARGS} -c ${CREDS} -a "suspend"
}
do_status()
{
${DAEMON} ${DAEMON_ARGS} -c ${CREDS} -a "status"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
do_status
;;
restart|force-reload)
echo "Not supported action"
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:

446
postservice/30-one-mng Executable file
View File

@ -0,0 +1,446 @@
#!/usr/bin/env bash
function error()
{
MSG=${1}
echo "[ERROR][${MSG}]"
exit 1
}
function get_user_home()
{
HOMEDIR=$(getent passwd ${1} | cut -d ':' -f 6)
echo ${HOMEDIR}
}
function get_one_auth()
{
CMD="cat"
HOME=$(get_user_home oneadmin)
FILE="${HOME}/.one/one_auth"
${CMD} ${FILE}
}
function check_cluster()
{
name="${1}"
cmd="onecluster"
opt="list"
auth=$(get_one_auth)
res=0
clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
for hst in ${clst_list}
do
[[ "${NAME}" = "${hst}" ]] && res=$((res+1))
done
return ${res}
}
function manage_cluster()
{
NAME="${1}"
CMD="onecluster create"
AUTH=$(get_one_auth)
check_cluster ${clst_name}
if [[ ${?} -eq 0 ]]
then
crt=$(${CMD} --user ${AUTH%:*} --password ${AUTH#*:} ${NAME})
if [[ ${?} -ne 0 ]]
then
error "Cluster create failed"
else
echo "Cluster ${NAME} created"
fi
else
echo "Cluster \"${NAME}\" already exist"
fi
}
function check_host()
{
name="${1}"
cmd="onehost"
opt="list"
auth=$(get_one_auth)
res=0
clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
for hst in ${clst_list}
do
[[ "${NAME}" = "${hst}" ]] && res=$((res+1))
done
return ${res}
}
function manage_host()
{
NAME=${1}
CMD="onehost"
IM_MAD='kvm'
VM_MAD='kvm'
VNET_MAD='ovswitch'
OPT="create ${NAME} -i ${IM_MAD} -v ${VM_MAD} -n ${VNET_MAD}"
AUTH=$(get_one_auth)
check_host ${NAME}
if [[ ${?} -eq 0 ]]
then
res=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
if [[ ${?} -ne 0 ]]
then
error "Host creation failed"
else
echo "Host ${NAME} created"
fi
else
echo "Host ${NAME} already exist"
fi
}
function get_cluster_id_by_name()
{
name=${1}
cmd="onecluster"
opt="show ${name}"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep ID)
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo ""
return 1
fi
}
#
# Get Host ID by a name
#
function get_host_id_by_name()
{
name=${1}
cmd="onehost"
opt="show ${name}"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo ""
return 1
fi
}
#
# Get Datastore ID by a name
#
function get_ds_id_by_name()
{
name=${1}
cmd="onedatastore"
opt="show ${name}"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo "ERR"
return 1
fi
}
#
# check_host_in_cluster
# if host is attached to cluster : return 0
# if host not attached to cluster : return 1
#
function check_host_in_cluster()
{
hst=${1}
clst=${2}
auth=$(get_one_auth)
cmd="onehost"
opt="show ${hst} --user ${AUTH%:*} --password ${AUTH#*:}"
RES=$(${cmd} ${opt} | grep CLUSTER)
cluster=${RES#*:}
# clean Outpu
cluster="${cluster#"${cluster%%[![:space:]]*}"}" # remove leading whitespace characters
cluster="${cluster%"${cluster##*[![:space:]]}"}" # remove trailing whitespace characters
if [[ "${cluster}" = "${clst}" ]]
then
return 0
else
return 1
fi
}
#
# Attach a host to a cluster
#
function attach_host()
{
HOST=${1}
CLST=${2}
CLST_ID=$(get_cluster_id_by_name ${CLST})
HST_ID=$(get_host_id_by_name ${HOST})
AUTH=$(get_one_auth)
CMD="onecluster"
OPT="addhost ${CLST_ID} ${HST_ID}"
check_host_in_cluster ${HOST} ${CLST}
if [[ ${?} -eq 1 ]]
then
if [[ -n ${CLST_ID} ]]
then
if [[ -n ${HST_ID} ]]
then
RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
if [[ ${?} -ne 0 ]]
then
error "Attaching ${HOST} to ${CLST} failed"
else
echo "${HOST} attached to ${CLST}"
return 0
fi
else
error "No host id for ${HOST}"
fi
else
error "No Cluster id for ${CLST}"
fi
else
echo "Host ${HOST} already present in cluster ${CLST}"
fi
return 0
}
#
# Attach a datastore to a cluster
#
function attach_ds_to_cluster()
{
DS=${1}
CLST=${2}
CLST_ID=$(get_cluster_id_by_name ${CLST})
DS_ID=$(get_ds_id_by_name ${ds_name})
AUTH=$(get_one_auth)
CMD="onecluster"
OPT="adddatastore ${CLST_ID} ${DS_ID}"
RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
if [[ ${?} -ne 0 ]]
then
error "Attaching ${DS} to ${CLST} failed."
else
echo "Datastore ${DS} attached to ${CLST}."
return 0
fi
return 0
}
function create_datastore()
{
ds_type="${1}"
ds_name="${2}"
ds_cluster="${3}"
if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]]
then
SYS_TM_MAD='ssh'
ISO_TM_MAD='ssh'
IMG_TM_MAD='ssh'
else
SYS_TM_MAD='shared'
ISO_TM_MAD='shared'
IMG_TM_MAD='qcow2'
fi
echo "Creating datastore ${ds_name}"
TMPL_FILE=$(mktemp)
case ${ds_type} in
"SYSTEM")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
TM_MAD = ${SYS_TM_MAD}
TYPE = SYSTEM_DS
__EOF__
;;
"ISO")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
;;
"IMAGE")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
;;
*) echo "Nothing to do with ${ds_type}"
;;
esac
auth=$(get_one_auth)
cmd="onedatastore"
#opt="create --user ${AUTH%:*} --password ${AUTH#*:} -c ${ds_cluster} ${TMPL_FILE}"
opt="create --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
RUN=$(${cmd} ${opt})
if [[ ${?} -eq 0 ]]
then
attach_ds_to_cluster ${ds_name} ${ds_cluster}
rm ${TMPL_FILE}
return 0
else
return 1
fi
}
function update_datastore()
{
local auth=${1}
local ds_id=${2}
local cmd="onedatastore"
local opt="show"
local multinode=$(CreoleGet activer_multinode 2>&1)
ds_type=""
ds_mad=""
ds_name=""
TMPL_FILE=$(mktemp)
if [[ ${multinode} == 'oui' ]]
then
SYS_TM_MAD='ssh'
ISO_TM_MAD='ssh'
IMG_TM_MAD='ssh'
else
SYS_TM_MAD='shared'
ISO_TM_MAD='shared'
IMG_TM_MAD='qcow2'
fi
out=$(${cmd} ${opt} ${ds_id} --user ${auth%:*} --password ${auth#*:} | \
awk -F ':' '/^DATASTORE.*INFORMATION/,/DATASTORE CAPACITY/ {gsub(" |\t",""); print $1 ":" $2 " " }')
for line in ${out}
do
[[ ${line} =~ ^TM_MAD ]] && ds_mad=${line#*:}
[[ ${line} =~ ^NAME ]] && ds_name=${line#*:}
[[ ${line} =~ ^TYPE ]] && ds_type=${line#*:}
done
if [[ ${ds_name} == "$(CreoleGet one_ds_system_prefix 2>&1)$(CreoleGet one_cluster_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
TM_MAD = ${SYS_TM_MAD}
TYPE = SYSTEM_DS
__EOF__
elif [[ ${ds_name} == "$(CreoleGet one_ds_iso_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
elif [[ ${ds_name} == "$(CreoleGet one_ds_image_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
else
echo "Nothing to do with ${ds_name}"
fi
if [[ -s ${TMPL_FILE} ]]
then
echo "Updating ${ds_name} datastore"
opt="update ${ds_id} --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
RUN=$(${cmd} ${opt})
rm ${TMPL_FILE}
return ${?}
else
rm ${TMPL_FILE}
return 1
fi
}
function manage_datastores()
{
cluster=${1}
AUTH=$(get_one_auth)
SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')${cluster}"
ISO_DS=$(CreoleGet 'one_ds_iso_name')
IMAGE_DS=$(CreoleGet 'one_ds_image_name')
echo "Configuring datastores for Cluster"
sid=$(get_ds_id_by_name ${SYSTEM_DS})
if [[ ${sid} = "ERR" ]]
then
create_datastore "SYSTEM" "${SYSTEM_DS}" "${cluster}"
else
update_datastore ${AUTH} ${sid}
fi
imgid=$(get_ds_id_by_name ${IMAGE_DS})
if [[ ${imgid} = "ERR" ]]
then
create_datastore "IMAGE" "${IMAGE_DS}" "${cluster}"
else
update_datastore ${AUTH} ${imgid}
fi
isoid=$(get_ds_id_by_name ${ISO_DS})
if [[ ${isoid} = "ERR" ]]
then
create_datastore "ISO" "${ISO_DS}" "${cluster}"
else
update_datastore ${AUTH} ${isoid}
fi
return 0
}
function main()
{
#
# Creating Cluster
#
clst_name=$(CreoleGet one_cluster_name)
manage_cluster ${clst_name}
#
# Creating Host
#
host=$(CreoleGet nom_machine)
manage_host ${host}
#
# Attaching Host to the Cluster
#
attach_host ${host} ${clst_name}
#
# Création des Datastores
#
manage_datastores ${clst_name}
}
main

345
postservice/31-one-netmng Executable file
View File

@ -0,0 +1,345 @@
#!/usr/bin/env python
from pyeole import ihm
from pyeole import process
from creole.client import CreoleClient
from tempfile import mkstemp
import sys
import os
import csv
import logging
LOG_FILE = '/var/log/one/eole-one-node.log'
#= Configure Logger ===
logger = logging.getLogger(__name__)
#std_handler = logging.StreamHandler(sys.stdout)
file_handler = logging.FileHandler(LOG_FILE)
logger.setLevel(logging.INFO)
#std_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#std_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
#logger.addHandler(std_handler)
logger.addHandler(file_handler)
#= End Logger ===
class RunCmdError(Exception):
pass
class OneClient():
def __init__(self, user):
self.user = None
self.auth = None
self.root = '/var/lib/one'
if user:
self.user = user
else:
self.user = 'oneadmin'
user_info = process.system_out(['getent', 'passwd', user])[1]
if user_info:
self.root = user_info.split(':')[5]
command = ['cat', u'{0}/.one/one_auth'.format(self.root)]
res = process.system_out(command)
if res[0] == 0:
self.auth = res[1].split(':')
def __run_cmd__(self, cmd):
cmd.extend(['--user', self.auth[0]])
cmd.extend(['--password', self.auth[1]])
res = process.system_out(cmd)
if res[0] == 0:
if 'list' in cmd:
out_lines = []
if res:
for line in res[1].split('\n'):
if len(line) == 0:
next
elif 'ID' in line:
next
else:
out_lines.append(line.split())
return out_lines
else:
return res
else:
return False
def get_hosts(self):
""" get the list of hosts
"""
cmd = ['onehost', 'list']
cmd.extend(['-l', 'ID,NAME'])
res = self.__run_cmd__(cmd)
return(res)
def get_clusters(self):
""" get the cluster list
"""
cmd = ['onecluster', 'list']
cmd.extend(['-l', 'ID,NAME'])
return self.__run_cmd__(cmd)
def get_networks(self):
""" get the virtual network list
"""
cmd = ['onevnet', 'list']
cmd.extend(['-l', 'ID,NAME'])
return self.__run_cmd__(cmd)
def get_cluster_id_by_name(self, name):
cmd = ['onecluster', 'list']
cmd.extend(['-f', 'NAME={0}'.format(name)])
res = self.__run_cmd__(cmd)
ID = res[0][0]
return ID
def get_vnet_id_by_name(self, name):
cmd = ['onevnet', 'list']
cmd.extend(['-f', 'NAME={0}'.format(name)])
res = self.__run_cmd__(cmd)
ID = res[0][0]
return ID
def create_network(self, templatefile, cluster, vnet_name):
""" Create a network
"""
cmd = ['onevnet', 'create']
cmd.extend(['--user', self.auth[0]])
cmd.extend(['--password', self.auth[1][:-1]])
#cmd.extend(['-c', cluster])
cmd.append(templatefile)
res = process.system_out(cmd)
if res[0] == 0:
clt_id = self.get_cluster_id_by_name(cluster)
vnet_id = self.get_vnet_id_by_name(vnet_name)
res = self.__run_cmd__(['onecluster', 'addvnet', clt_id, vnet_id])
os.remove(templatefile)
if not res:
print("Error attaching {0} vnet to {1} cluster".format(vnet_name, cluster))
return False
else:
return True
else:
logger.error("Creation of virtual network with template {0} failed".format(templatefile))
return False
def update_network(self, templatefile, cluster, vnet_name):
""" Update a network
"""
vnet_id = self.get_vnet_id_by_name(vnet_name)
cmd = ['onevnet', 'update']
cmd.extend(['--user', self.auth[0]])
cmd.extend(['--password', self.auth[1][:-1]])
cmd.extend([vnet_id, templatefile])
res = process.system_out(cmd)
if res[0] == 0:
os.remove(templatefile)
return True
else:
logger.error("Update of virtual network with template {0} failed".format(templatefile))
return False
def delete_network(self, vnet_id):
cmd = ['onevnet', 'delete']
cmd.extend(['--user', self.auth[0]])
cmd.extend(['--password', self.auth[1][:-1]])
cmd.append(vnet_id)
res = process.system_out(cmd)
if res[0] == 0:
ihm.print_line("Network {0} deleted".format(vnet_id))
return True
else:
logger.error("Error deleting network {0}".format(vnet_id))
ihm.print_line("Error deleting network {0}".format(vnet_id))
return False
class OneNetwork():
def create(self, one_client):
tmpl_file = self.create_template()
if one_client.create_network(tmpl_file, self.cluster, self.zone):
ihm.print_line("Virtual network {0} created".format(self.zone))
return True
else:
ihm.print_line("Error Creating virtual network {0}".format(self.zone))
return False
def update(self, one_client):
tmpl_file = self.create_template()
if one_client.update_network(tmpl_file, self.cluster, self.zone):
ihm.print_line("Virtual network {0} updated".format(self.zone))
return True
else:
ihm.print_line("Error Updating virtual network {0}".format(self.zone))
return False
def manage(self, one_client):
found = False
vnet = one_client.get_networks()
network_name = self.zone
for net in vnet:
if network_name in net:
found = True
break
if not found:
return self.create(one_client)
else:
return self.update(one_client)
class OneNetworkL3(OneNetwork):
def __init__(self, net_info, cluster):
self.swname = net_info[0]
self.zone = u'{0}{1}'.format(net_info[10], net_info[1])
self.vlan = net_info[2]
self.vnet_addr = net_info[3]
self.vnet_mask = net_info[4]
self.vnet_gw = net_info[5]
self.vnet_rg_start = net_info[6]
self.vnet_rg_end = net_info[7]
self.vnet_dns = net_info[8]
self.vnet_trunk = net_info[9]
self.cluster = cluster
def create_template(self):
fd, tmp_path = mkstemp(prefix='oneVnet-')
template = open(tmp_path, 'w')
template.write('NAME = "{0}"\n'.format(self.zone))
if self.vnet_rg_start and self.vnet_rg_end:
template.write('TYPE = RANGED\n')
template.write('IP_START = {0}\n'.format(self.vnet_rg_start))
template.write('IP_END = {0}\n'.format(self.vnet_rg_end))
else:
template.write('TYPE = FIXED\n')
if self.vlan:
template.write('VLAN = yes\n')
template.write('VLAN_ID = {0}\n'.format(self.vlan))
if self.vnet_trunk:
template.write('VLAN_TAGGED_ID = {0}\n'.format(self.vnet_trunk))
template.write('BRIDGE = {0}\n'.format(self.swname))
template.write('NETWORK_ADDRESS = {0}\n'.format(self.vnet_addr))
template.write('NETWORK_MASK = {0}\n'.format(self.vnet_mask))
template.write('GATEWAY = {0}\n'.format(self.vnet_gw))
template.write('DNS = {0}\n'.format(self.vnet_dns))
template.close()
return tmp_path
class OneNetworkL2(OneNetwork):
def __init__(self, net_info, cluster):
self.swname = net_info[0]
self.zone = u'{0}{1}'.format(net_info[6], net_info[1])
self.net_size = net_info[2]
self.first_mac = net_info[3]
self.tag = net_info[4]
self.trunk = net_info[5]
self.cluster = cluster
def create_template(self):
fd, tmp_path = mkstemp(prefix='oneVnet-')
template = open(tmp_path, 'w')
template.write('NAME = "{0}"\n'.format(self.zone))
template.write('TYPE = ETHER\n')
template.write('SIZE = "{0}"\n'.format(self.net_size))
if self.tag:
template.write('VLAN = yes\n')
template.write('VLAN_ID = {0}\n'.format(self.tag))
if self.trunk:
template.write('VLAN_TAGGED_ID = {0}\n'.format(self.trunk))
template.write('BRIDGE = {0}\n'.format(self.swname))
template.close()
return tmp_path
def main():
client = CreoleClient()
one_client = OneClient('oneadmin')
networks = []
cluster = client.get_creole('one_cluster_name')
swname = client.get_creole('ovs_sw_name')
zones = client.get_creole('vnets')
vlans = client.get_creole('vnet_vlan_tag')
vnet_addr = client.get_creole('vnet_network_addr')
vnet_mask = client.get_creole('vnet_network_mask')
vnet_dns = client.get_creole('vnet_network_dns')
vnet_gw = client.get_creole('vnet_network_gw')
vnet_rg_start = client.get_creole('vnet_range_start')
vnet_rg_end = client.get_creole('vnet_range_end')
vnet_trunk = client.get_creole('vnet_vlan_trunk')
l2_vnet = client.get_creole('l2_vnets')
l2_vnet_size = client.get_creole('l2_vnet_size')
l2_vnet_vlan_tag = client.get_creole('l2_vnet_vlan_tag')
l2_vnet_vlan_trunk = client.get_creole('l2_vnet_vlan_trunk')
l2_vnet_first_mac = client.get_creole('l2_vnet_first_mac')
net_prefix = "CR_"
processed = []
for cpt in range(len(zones)):
if zones[cpt] not in processed:
info = []
info.append(swname)
info.append(zones[cpt])
info.append(vlans[cpt])
info.append(vnet_addr[cpt])
info.append(vnet_mask[cpt])
info.append(vnet_gw[cpt])
info.append(vnet_rg_start[cpt])
info.append(vnet_rg_end[cpt])
info.append(vnet_dns[cpt])
info.append(vnet_trunk[cpt])
info.append(net_prefix)
networks.append(OneNetworkL3(info, cluster))
processed.append(zones[cpt])
for i in range(len(l2_vnet)):
if l2_vnet[i] not in processed:
net_info = []
net_info.append(swname)
net_info.append(l2_vnet[i])
net_info.append(l2_vnet_size[i])
net_info.append(l2_vnet_first_mac[i])
net_info.append(l2_vnet_vlan_tag[i])
net_info.append(l2_vnet_vlan_trunk[i])
net_info.append(net_prefix)
networks.append(OneNetworkL2(net_info, cluster))
processed.append(l2_vnet[i])
if client.get_creole('activer_openvswitch'):
for network in networks:
if not network.manage(one_client):
exit(1)
else:
ihm.print_line(u'Open vSwitch disabled no need to configure virtual networks')
networks = one_client.get_networks()
for net in networks:
name = net[1]
if name.startswith(net_prefix):
if not name[3:] in zones and not name[3:] in l2_vnet:
one_client.delete_network(net[0])
exit(0)
main()

10
preservice/30-one-auth Normal file
View File

@ -0,0 +1,10 @@
#!/bin/bash
auth_mode="$(CreoleGet sunstone_auth_modes)"
unlink /var/lib/one/remotes/auth/default 2>/dev/null
if [ -z "${auth_mode}" ]; then
ln -s /var/lib/one/remotes/auth/{dummy,default}
else
ln -s /var/lib/one/remotes/auth/{${auth_mode},default}
fi

116
scripts/onehost_create_all Executable file
View File

@ -0,0 +1,116 @@
#!/usr/bin/env bash
#
# Register all Hâpy Cluster Nodes
#
. /usr/lib/eole/ihm.sh
#
# NAME: copy_ssh_id
# AIM: Copy the ssh key on the host
# PARAM: the hostname of the node
#
function copy_ssh_id()
{
local ip=${1}
su - ${ONEUSER} -c "ssh-copy-id ${ip}"
}
#
# NAME: register_node
# AIM: register the node in OpenNebula master
# PARAM: the node hostname
#
function register_node()
{
cmd="onehost create -i kvm -v kvm -n ovswitch -c \"$(CreoleGet one_cluster_name)\" ${1}"
ret=$(su - ${ONEUSER} -c -- "${cmd}")
return $?
}
#
# NAME: wait_node_ok
# AIM: Wait until the node is OK or ERROR
# PARAM: The node name
#
function wait_node_ok()
{
local RET=0
local cmd="onehost show ${1} | awk '/^STATE/ {print \$3}'"
local spinstr='|/-\'
local delay=0.75
while [ 1 ]
do
st=$(su - ${ONEUSER} -c "${cmd}")
[[ ${st} == "MONITORED" ]] && break
[[ ${st} == '' ]] && break
if [[ ${st} == "ERROR" ]]
then
RET=2
break
fi
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
return ${RET}
}
#
# MAIN
#
HAPY_ACTIF=$(echo $(CreoleGet activer_onesinglenode))
if [[ $HAPY_ACTIF == "non" ]]
then
EchoRouge "Le serveur de virtualisation n'est pas activé dans l'interface de configuration du module"
exit 1
fi
HAPY_NODE_SUPPORT=$(echo $(CreoleGet activer_multinode))
if [[ $HAPY_NODE_SUPPORT == "non" ]]
then
EchoRouge "Le mode multi-noeuds n'est pas activé dans l'interface de configuration du module"
exit 1
fi
declare -a HAPY_SLV=('')
declare -a HAPY_SLV_IP=('')
ONEUSER=$(CreoleGet virt_user)
HAPY_SLV=$(echo $(CreoleGet one_nodes) | sed -e "s/\n/ /g")
HAPY_SLV_IP=$(echo $(CreoleGet node_ip) | sed -e "s/\n/ /g")
echo -e "\n"
EchoBleu "Vous allez inscrire un noeud dans une grappe Hâpy"
EchoBleu "Pour ce faire vous devez vous munir du mot de passe de l'utilisateur 'oneadmin' de chacun des noeuds"
Question_ouinon "Voulez-vous commencer ?" 'True' "oui"
if [[ $? -ne 0 ]]
then
EchoOrange "Abandon de l'enregistrement"
exit 1
fi
for ((i = 0; i < ${#HAPY_SLV[*]}; i +=1))
do
echo -e "\n"
EchoOrange "Traitement du noeud ${HAPY_SLV[${i}]}"
echo
EchoVert " * Gestion des clés SSH"
echo
copy_ssh_id ${HAPY_SLV_IP[${i}]}
EchoVert " * Enregistrement du noeud"
register_node ${HAPY_SLV[${i}]}
wait_node_ok ${HAPY_SLV[${i}]}
if [[ ${?} -ne 0 ]]
then
EchoRouge "Erreur lors de l'enregistrement du noeud ${HAPY_SLV[${i}]} !"
fi
done
echo -e "\n"
EchoVert "Enregistrement des noeuds terminé"

181
scripts/onevm-all Executable file
View File

@ -0,0 +1,181 @@
#!/usr/bin/env ruby
##############################################################################
# Environment Configuration
##############################################################################
ONE_LOCATION=ENV["ONE_LOCATION"]
USER=ENV["user"]
if !ONE_LOCATION
RUBY_LIB_LOCATION="/usr/lib/one/ruby"
else
RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
end
$: << RUBY_LIB_LOCATION
##############################################################################
# Required libraries
##############################################################################
require 'opennebula'
require 'optparse'
include OpenNebula
MAXWAIT=60
INTERVAL=1
def _wait(vm, st)
wait = 0
while vm.status != st
vm.info
if vm.status == 'unkn'
break
end
wait += INTERVAL
sleep(INTERVAL)
if wait >= MAXWAIT
break
end
end
end
def CreoleGet(variable)
begin
value = `CreoleGet #{variable}`
return value
rescue
return nil
end
end
#
# NAME: _do_suspend
# PARAM: OpenNebula::VirtualMachine object
# AIM: Suspend a virtual machine
#
def _do_suspend(vm, wait)
if vm.status == "runn"
puts("Suspending #{vm.name} ...")
vm.suspend
if wait
_wait(vm, "susp")
end
end
end
#
# NAME: _do_resume
# PARAM: OpenNebula::VirtualMachine object
# AIM: Resum a suspended virtual machines
#
def _do_resume(vm, wait)
if vm.status == "susp"
puts("Resume on #{vm.name}")
vm.resume
elsif vm.status == 'unkn'
puts("Boot on #{vm.name}")
vm.boot
else
return -1
end
if wait
_wait(vm, "runn")
end
end
options = {:creds => nil, :action => nil, :endpoint => nil}
parser = OptionParser.new do|opts|
opts.banner = "Usage: #{File.basename(__FILE__)} [options]"
opts.on('-c', '--creds file', 'Crediential file') do |value|
options[:creds] = value;
end
opts.on('-a', '--action action', 'Action to run') do |value|
options[:action] = value;
end
opts.on('-e', '--end-point url', 'End point URL') do |value|
options[:endpoint] = value;
end
opts.on('-w', '--wait', 'Wait for action ends') do |w|
options[:wait] = w
end
opts.on('-h', '--help', 'Displays Help') do
puts opts
exit
end
end
parser.parse!
# OpenNebula credentials
if not options[:creds]
options[:creds] = "/var/lib/one/.one/one_auth"
end
if not options[:action]
options[:action] = "status"
end
if not options[:endpoint]
ip = CreoleGet('adresse_ip_eth0').chomp
options[:endpoint] = "http://#{ip}:2633/RPC2"
end
# Actions
SUPPORTED = ['status', 'boot', 'resume', 'shutdown', 'suspend']
if not SUPPORTED.include?(options[:action])
puts("Action : #{options[:action]}) is not supported")
exit -1
end
begin
File.readlines(options[:creds]).each do |line|
CREDENTIALS = line
end
rescue
puts("#{options[:creds]}: Problem loading credentials, check if file exists.")
exit -1
end
begin
client = Client.new(CREDENTIALS, options[:endpoint])
vm_pool = VirtualMachinePool.new(client, -1)
rc = vm_pool.info
if OpenNebula.is_error?(rc)
puts rc.message
exit -1
end
vm_pool.each do |vm|
case options[:action]
when "status"
puts("#{vm.name}\t#{vm.status}")
when "boot"
if vm.status == "unkn"
puts("Booting #{vm.name} ...")
vm.boot
end
when "suspend"
_do_suspend(vm, options[:wait])
when "resume"
_do_resume(vm, options[:wait])
else
puts("#{vm.name}\t#{vm.status}")
end
end
rescue Exception => e
puts e.message
exit -1
end
exit 0

792
tmpl/oned.conf Normal file
View File

@ -0,0 +1,792 @@
#*******************************************************************************
# OpenNebula Configuration file
#*******************************************************************************
#*******************************************************************************
# Daemon configuration attributes
#-------------------------------------------------------------------------------
# MANAGER_TIMER: Time in seconds the core uses to evaluate periodical functions.
# MONITORING_INTERVAL cannot have a smaller value than MANAGER_TIMER.
#
# MONITORING_INTERVAL: Time in seconds between host and VM monitorization.
#
# MONITORING_THREADS: Max. number of threads used to process monitor messages
#
# HOST_PER_INTERVAL: Number of hosts monitored in each interval.
# HOST_MONITORING_EXPIRATION_TIME: Time, in seconds, to expire monitoring
# information. Use 0 to disable HOST monitoring recording.
#
# VM_INDIVIDUAL_MONITORING: VM monitoring information is obtained along with the
# host information. For some custom monitor drivers you may need activate the
# individual VM monitoring process.
# VM_PER_INTERVAL: Number of VMs monitored in each interval, if the individual
# VM monitoring is set to yes.
# VM_MONITORING_EXPIRATION_TIME: Time, in seconds, to expire monitoring
# information. Use 0 to disable VM monitoring recording.
#
# SCRIPTS_REMOTE_DIR: Remote path to store the monitoring and VM management
# scripts.
#
# PORT: Port where oned will listen for xmlrpc calls.
#
# DB: Configuration attributes for the database backend
# backend : can be sqlite or mysql (default is sqlite)
# server : (mysql) host name or an IP address for the MySQL server
# port : (mysql) port for the connection to the server.
# If set to 0, the default port is used.
# user : (mysql) user's MySQL login ID
# passwd : (mysql) the password for user
# db_name : (mysql) the database name
#
# VNC_BASE_PORT: VNC ports for VMs can be automatically set to VNC_BASE_PORT +
# VMID
#
# LOG: Configuration for the logging system
# system: defines the logging system:
# file to log in the oned.log file
# syslog to use the syslog facilities
# debug_level: 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG
#
# VM_SUBMIT_ON_HOLD: Forces VMs to be created on hold state instead of pending.
# Values: YES or NO.
#*******************************************************************************
LOG = [
system = "file",
debug_level = 3
]
#MANAGER_TIMER = 30
MONITORING_INTERVAL = 60
MONITORING_THREADS = 50
#HOST_PER_INTERVAL = 15
#HOST_MONITORING_EXPIRATION_TIME = 43200
#VM_INDIVIDUAL_MONITORING = "no"
#VM_PER_INTERVAL = 5
#VM_MONITORING_EXPIRATION_TIME = 14400
SCRIPTS_REMOTE_DIR=/var/tmp/one
PORT = 2633
DB = [ backend = "sqlite" ]
# Sample configuration for MySQL
# DB = [ backend = "mysql",
# server = "localhost",
# port = 0,
# user = "oneadmin",
# passwd = "oneadmin",
# db_name = "opennebula" ]
VNC_BASE_PORT = 5900
#VM_SUBMIT_ON_HOLD = "NO"
#*******************************************************************************
# Federation configuration attributes
#-------------------------------------------------------------------------------
# Control the federation capabilities of oned. Operation in a federated setup
# requires a special DB configuration.
#
# FEDERATION: Federation attributes
# MODE: Operation mode of this oned.
# STANDALONE no federated.This is the default operational mode
# MASTER this oned is the master zone of the federation
# SLAVE this oned is a slave zone
# ZONE_ID: The zone ID as returned by onezone command
# MASTER_ONED: The xml-rpc endpoint of the master oned, e.g.
# http://master.one.org:2633/RPC2
#*******************************************************************************
FEDERATION = [
MODE = "STANDALONE",
ZONE_ID = 0,
MASTER_ONED = ""
]
#*******************************************************************************
# XML-RPC server configuration
#-------------------------------------------------------------------------------
# These are configuration parameters for oned's xmlrpc-c server
#
# MAX_CONN: Maximum number of simultaneous TCP connections the server
# will maintain
#
# MAX_CONN_BACKLOG: Maximum number of TCP connections the operating system
# will accept on the server's behalf without the server accepting them from
# the operating system
#
# KEEPALIVE_TIMEOUT: Maximum time in seconds that the server allows a
# connection to be open between RPCs
#
# KEEPALIVE_MAX_CONN: Maximum number of RPCs that the server will execute on
# a single connection
#
# TIMEOUT: Maximum time in seconds the server will wait for the client to
# do anything while processing an RPC
#
# RPC_LOG: Create a separated log file for xml-rpc requests, in
# "/var/log/one/one_xmlrpc.log".
#
# MESSAGE_SIZE: Buffer size in bytes for XML-RPC responses. Only relevant for
# slave zones.
#*******************************************************************************
#MAX_CONN = 15
#MAX_CONN_BACKLOG = 15
#KEEPALIVE_TIMEOUT = 15
#KEEPALIVE_MAX_CONN = 30
#TIMEOUT = 15
#RPC_LOG = NO
#MESSAGE_SIZE = 1073741824
#*******************************************************************************
# Physical Networks configuration
#*******************************************************************************
# NETWORK_SIZE: Here you can define the default size for the virtual networks
#
# MAC_PREFIX: Default MAC prefix to be used to create the auto-generated MAC
# addresses is defined here (this can be overrided by the Virtual Network
# template)
#*******************************************************************************
NETWORK_SIZE = 254
MAC_PREFIX = "02:00"
#*******************************************************************************
# DataStore Configuration
#*******************************************************************************
# DATASTORE_LOCATION: *Default* Path for Datastores in the hosts. It IS the
# same for all the hosts in the cluster. DATASTORE_LOCATION IS ONLY FOR THE
# HOSTS AND *NOT* THE FRONT-END. It defaults to /var/lib/one/datastores (or
# $ONE_LOCATION/var/datastores in self-contained mode)
#
# You can define a different DATASTORE_LOCATION in each cluster by updating
# its properties with onecluster update.
#
# DATASTORE_BASE_PATH: This is the base path for the SOURCE attribute of
# the images registered in a Datastore. This is a default value, that can be
# changed when the datastore is created.
#
# DATASTORE_CAPACITY_CHECK: Checks that there is enough capacity before
# creating a new imag. Defaults to Yes
#
# DEFAULT_IMAGE_TYPE: This can take values
# OS Image file holding an operating system
# CDROM Image file holding a CDROM
# DATABLOCK Image file holding a datablock,
# always created as an empty block
#
# DEFAULT_DEVICE_PREFIX: This can be set to
# hd IDE prefix
# sd SCSI
# xvd XEN Virtual Disk
# vd KVM virtual disk
#
# DEFAULT_CDROM_DEVICE_PREFIX: Same as above but for CDROM devices.
#*******************************************************************************
#DATASTORE_LOCATION = /var/lib/one/datastores
#DATASTORE_BASE_PATH = /var/lib/one/datastores
DATASTORE_CAPACITY_CHECK = "yes"
DEFAULT_IMAGE_TYPE = "OS"
DEFAULT_DEVICE_PREFIX = "hd"
DEFAULT_CDROM_DEVICE_PREFIX = "hd"
#*******************************************************************************
# Information Driver Configuration
#*******************************************************************************
# You can add more information managers with different configurations but make
# sure it has different names.
#
# name : name for this information manager
#
# executable: path of the information driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
#
# arguments : for the driver executable, usually a probe configuration file,
# can be an absolute path or relative to $ONE_LOCATION/etc (or
# /etc/one/ if OpenNebula was installed in /)
#*******************************************************************************
#-------------------------------------------------------------------------------
# Information Collector for KVM and Xen IM's.
#-------------------------------------------------------------------------------
# This driver CANNOT BE ASSIGNED TO A HOST, and needs to be used with KVM or
# Xen drivers
# -h prints this help.
# -a Address to bind the collectd sockect (defults 0.0.0.0)
# -p UDP port to listen for monitor information (default 4124)
# -f Interval in seconds to flush collected information (default 5)
# -t Number of threads for the server (defult 50)
# -i Time in seconds of the monitorization push cycle. This parameter must
# be smaller than MONITORING_INTERVAL, otherwise push monitorization will
# not be effective.
#-------------------------------------------------------------------------------
IM_MAD = [
name = "collectd",
executable = "collectd",
arguments = "-p 4124 -f 5 -t 50 -i 20" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# KVM UDP-push Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
IM_MAD = [
name = "kvm",
executable = "one_im_ssh",
arguments = "-r 3 -t 15 kvm" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# KVM SSH-pull Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
# IM_MAD = [
# name = "kvm",
# executable = "one_im_ssh",
# arguments = "-r 3 -t 15 kvm-probes" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# XEN UDP-push Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
# Driver for Xen 3.x
#IM_MAD = [
# name = "xen",
# executable = "one_im_ssh",
# arguments = "-r 3 -t 15 xen3" ]
# Driver for Xen 4.x
#IM_MAD = [
# name = "xen",
# executable = "one_im_ssh",
# arguments = "-r 3 -t 15 xen4" ]
#-------------------------------------------------------------------------------
# XEN SSH-pull Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
# Driver for Xen 3.x
#IM_MAD = [
# name = "xen",
# executable = "one_im_ssh",
# arguments = "-r 0 -t 15 xen3-probes" ]
# Driver for Xen 4.x
#IM_MAD = [
# name = "xen",
# executable = "one_im_ssh",
# arguments = "-r 0 -t 15 xen4-probes" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# VMware Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
#IM_MAD = [
# name = "vmware",
# executable = "one_im_sh",
# arguments = "-c -t 15 -r 0 vmware" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# EC2 Information Driver Manager Configuration
#-------------------------------------------------------------------------------
#IM_MAD = [
# name = "ec2",
# executable = "one_im_sh",
# arguments = "-c -t 1 -r 0 ec2" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Dummy Information Driver Manager Configuration
#-------------------------------------------------------------------------------
#IM_MAD = [ name="dummy", executable="one_im_dummy"]
#-------------------------------------------------------------------------------
#*******************************************************************************
# Virtualization Driver Configuration
#*******************************************************************************
# You can add more virtualization managers with different configurations but
# make sure it has different names.
#
# name : name of the virtual machine manager driver
#
# executable: path of the virtualization driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
#
# arguments : for the driver executable
#
# default : default values and configuration parameters for the driver, can
# be an absolute path or relative to $ONE_LOCATION/etc (or
# /etc/one/ if OpenNebula was installed in /)
#
# type : driver type, supported drivers: xen, kvm, xml
#*******************************************************************************
#-------------------------------------------------------------------------------
# KVM Virtualization Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
# -l <actions[=command_name]> actions executed locally, command can be
# overridden for each action.
# Valid actions: deploy, shutdown, cancel, save, restore, migrate, poll
# An example: "-l migrate=migrate_local,save"
#
# Note: You can use type = "qemu" to use qemu emulated guests, e.g. if your
# CPU does not have virtualization extensions or use nested Qemu-KVM hosts
#-------------------------------------------------------------------------------
VM_MAD = [
name = "kvm",
executable = "one_vmm_exec",
arguments = "-t 15 -r 0 kvm",
default = "vmm_exec/vmm_exec_kvm.conf",
type = "kvm" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# XEN Virtualization Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
# -l <actions[=command_name]> actions executed locally, command can be
# overridden for each action.
# Valid actions: deploy, shutdown, cancel, save, restore, migrate, poll
# An example: "-l migrate,save"
#-------------------------------------------------------------------------------
# Driver for Xen 3.x
#VM_MAD = [
# name = "xen",
# executable = "one_vmm_exec",
# arguments = "-t 15 -r 0 xen3",
# default = "vmm_exec/vmm_exec_xen3.conf",
# type = "xen" ]
# Driver for Xen 4.x
#VM_MAD = [
# name = "xen",
# executable = "one_vmm_exec",
# arguments = "-t 15 -r 0 xen4",
# default = "vmm_exec/vmm_exec_xen4.conf",
# type = "xen" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# VMware Virtualization Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
#VM_MAD = [
# name = "vmware",
# executable = "one_vmm_sh",
# arguments = "-t 15 -r 0 vmware -s sh",
# default = "vmm_exec/vmm_exec_vmware.conf",
# type = "vmware" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# EC2 Virtualization Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of actions performed at the same time
#-------------------------------------------------------------------------------
#VM_MAD = [
# name = "ec2",
# executable = "one_vmm_sh",
# arguments = "-t 15 -r 0 ec2",
# type = "xml" ]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Dummy Virtualization Driver Configuration
#-------------------------------------------------------------------------------
#VM_MAD = [ name="dummy", executable="one_vmm_dummy", type="xml" ]
#-------------------------------------------------------------------------------
#*******************************************************************************
# Transfer Manager Driver Configuration
#*******************************************************************************
# You can add more transfer managers with different configurations but make
# sure it has different names.
# name : name for this transfer driver
#
# executable: path of the transfer driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
# arguments :
# -t: number of threads, i.e. number of transfers made at the same time
# -d: list of transfer drivers separated by commas, if not defined all the
# drivers available will be enabled
#*******************************************************************************
TM_MAD = [
executable = "one_tm",
arguments = "-t 15 -d dummy,lvm,shared,fs_lvm,qcow2,ssh,vmfs,ceph"
]
#*******************************************************************************
# Datastore Driver Configuration
#*******************************************************************************
# Drivers to manage the datastores, specialized for the storage backend
# executable: path of the transfer driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
#
# arguments : for the driver executable
# -t number of threads, i.e. number of repo operations at the same time
# -d datastore mads separated by commas
#*******************************************************************************
DATASTORE_MAD = [
executable = "one_datastore",
arguments = "-t 15 -d dummy,fs,vmfs,lvm,ceph"
]
#*******************************************************************************
# Hook Manager Configuration
#*******************************************************************************
# The Driver (HM_MAD)
# -----------------------------------------------
#
# Used to execute the Hooks:
# executable: path of the hook driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
#
# arguments : for the driver executable, can be an absolute path or relative
# to $ONE_LOCATION/etc (or /etc/one/ if OpenNebula was installed
# in /)
#
# Virtual Machine Hooks (VM_HOOK)
# -------------------------------
#
# Defined by:
# name : for the hook, useful to track the hook (OPTIONAL)
# on : when the hook should be executed,
# - CREATE, when the VM is created (onevm create)
# - PROLOG, when the VM is in the prolog state
# - RUNNING, after the VM is successfully booted
# - UNKNOWN, when the VM is in the unknown state
# - SHUTDOWN, after the VM is shutdown
# - STOP, after the VM is stopped (including VM image transfers)
# - DONE, after the VM is deleted or shutdown
# - FAILED, when the VM enters the failed state
# - CUSTOM, user defined specific STATE and LCM_STATE combination
# of states to trigger the hook.
# command : path is relative to $ONE_LOCATION/var/remotes/hook
# (self-contained) or to /var/lib/one/remotes/hook (system-wide).
# That directory will be copied on the hosts under
# SCRIPTS_REMOTE_DIR. It can be an absolute path that must exist
# on the target host
# arguments : for the hook. You can access to VM information with $
# - $ID, the ID of the virtual machine
# - $TEMPLATE, the VM template in xml and base64 encoded
# - $PREV_STATE, the previous STATE of the Virtual Machine
# - $PREV_LCM_STATE, the previous LCM STATE of the Virtual Machine
# remote : values,
# - YES, The hook is executed in the host where the VM was
# allocated
# - NO, The hook is executed in the OpenNebula server (default)
#
# Example Virtual Machine Hook
# ----------------------------
#
# VM_HOOK = [
# name = "advanced_hook",
# on = "CUSTOM",
# state = "ACTIVE",
# lcm_state = "BOOT_UNKNOWN",
# command = "log.rb",
# arguments = "$ID $PREV_STATE $PREV_LCM_STATE" ]
#
# Host Hooks (HOST_HOOK)
# -------------------------------
#
# Defined by:
# name : for the hook, useful to track the hook (OPTIONAL)
# on : when the hook should be executed,
# - CREATE, when the Host is created (onehost create)
# - ERROR, when the Host enters the error state
# - DISABLE, when the Host is disabled
# command : path is relative to $ONE_LOCATION/var/remotes/hook
# (self-contained) or to /var/lib/one/remotes/hook (system-wide).
# That directory will be copied on the hosts under
# SCRIPTS_REMOTE_DIR. It can be an absolute path that must exist
# on the target host.
# arguments : for the hook. You can use the following Host information:
# - $ID, the ID of the host
# - $TEMPLATE, the Host template in xml and base64 encoded
# remote : values,
# - YES, The hook is executed in the host
# - NO, The hook is executed in the OpenNebula server (default)
#
# Virtual Network (VNET_HOOK)
# User (USER_HOOK)
# Group (GROUP_HOOK)
# Image (IMAGE_HOOK)
# -------------------------------
#
# These hooks are executed when one of the referring entities are created or
# removed. Each hook is defined by:
# name : for the hook, useful to track the hook (OPTIONAL)
# on : when the hook should be executed,
# - CREATE, when the vnet is created
# - REMOVE, when the vnet is removed
# command : path is relative to $ONE_LOCATION/var/remotes/hook
# (self-contained) or to /var/lib/one/remotes/hook (system-wide).
# That directory will be copied on the hosts under
# SCRIPTS_REMOTE_DIR. It can be an absolute path that must exist
# on the target host.
# arguments : for the hook. You can use the following Host information:
# - $ID, the ID of the host
# - $TEMPLATE, the vnet template in xml and base64 encoded
#-------------------------------------------------------------------------------
VM_HOOK = [
name = "open_ports",
on = "RUNNING",
command = "eole/graphicsfw",
arguments = "open $TEMPLATE",
remote = "YES"
]
VM_HOOK = [
name = "close_ports",
on = "DONE",
command = "eole/graphicsfw",
arguments = "close $TEMPLATE",
remote = "YES"
]
VM_HOOK = [
name = "close_ports",
on = "STOP",
command = "eole/graphicsfw",
arguments = "close $TEMPLATE",
remote = "YES"
]
VM_HOOK = [
name = "close_ports",
on = "SHUTDOWN",
command = "eole/graphicsfw",
arguments = "close $TEMPLATE",
remote = "YES"
]
HM_MAD = [
executable = "one_hm" ]
#*******************************************************************************
# Fault Tolerance Hooks
#*******************************************************************************
# This hook is used to perform recovery actions when a host fails.
# Script to implement host failure tolerance
# It can be set to
# -r recreate VMs running in the host
# -d delete VMs running in the host
# Additional flags
# -f force resubmission of suspended VMs
# -p <n> avoid resubmission if host comes
# back after n monitoring cycles
#*******************************************************************************
#
#HOST_HOOK = [
# name = "error",
# on = "ERROR",
# command = "ft/host_error.rb",
# arguments = "$ID -r",
# remote = "no" ]
#-------------------------------------------------------------------------------
# These two hooks can be used to automatically delete or resubmit VMs that reach
# the "failed" state. This way, the administrator doesn't have to interact
# manually to release its resources or retry the deployment.
#
#
# Only one of them should be uncommented.
#-------------------------------------------------------------------------------
#
#VM_HOOK = [
# name = "on_failure_delete",
# on = "FAILED",
# command = "/usr/bin/env onevm delete",
# arguments = "$ID" ]
#
#VM_HOOK = [
# name = "on_failure_recreate",
# on = "FAILED",
# command = "/usr/bin/env onevm delete --recreate",
# arguments = "$ID" ]
#-------------------------------------------------------------------------------
#*******************************************************************************
# Auth Manager Configuration
#*******************************************************************************
# AUTH_MAD: The Driver that will be used to authenticate (authn) and
# authorize (authz) OpenNebula requests. If defined OpenNebula will use the
# built-in auth policies.
#
# executable: path of the auth driver executable, can be an
# absolute path or relative to $ONE_LOCATION/lib/mads (or
# /usr/lib/one/mads/ if OpenNebula was installed in /)
#
# authn : list of authentication modules separated by commas, if not
# defined all the modules available will be enabled
# authz : list of authentication modules separated by commas
#
# SESSION_EXPIRATION_TIME: Time in seconds to keep an authenticated token as
# valid. During this time, the driver is not used. Use 0 to disable session
# caching
#
# ENABLE_OTHER_PERMISSIONS: Whether or not users can set the permissions for
# 'other', so publishing or sharing resources with others. Users in the oneadmin
# group will still be able to change these permissions. Values: YES or NO.
#
# DEFAULT_UMASK: Similar to Unix umask, sets the default resources permissions.
# Its format must be 3 octal digits. For example a umask of 137 will set
# the new object's permissions to 640 "um- u-- ---"
#*******************************************************************************
AUTH_MAD = [
executable = "one_auth_mad",
authn = "server_cipher,default,%%sunstone_auth_modes"
]
SESSION_EXPIRATION_TIME = 900
#ENABLE_OTHER_PERMISSIONS = "YES"
DEFAULT_UMASK = 177
#*******************************************************************************
# OneGate
# ONEGATE_ENDPOINT: The URL for the onegate server (the Gate to OpenNebula for
# VMs). The onegate server is started using a separate command. The endpoint
# MUST be consistent with the values in onegate-server.conf
#*******************************************************************************
#ONEGATE_ENDPOINT = "http://frontend:5030"
#*******************************************************************************
# Restricted Attributes Configuration
#*******************************************************************************
# The following attributes are restricted to users outside the oneadmin group
#*******************************************************************************
VM_RESTRICTED_ATTR = "CONTEXT/FILES"
VM_RESTRICTED_ATTR = "NIC/MAC"
VM_RESTRICTED_ATTR = "NIC/VLAN_ID"
VM_RESTRICTED_ATTR = "NIC/BRIDGE"
#VM_RESTRICTED_ATTR = "RANK"
#VM_RESTRICTED_ATTR = "SCHED_RANK"
#VM_RESTRICTED_ATTR = "REQUIREMENTS"
#VM_RESTRICTED_ATTR = "SCHED_REQUIREMENTS"
IMAGE_RESTRICTED_ATTR = "SOURCE"
#*******************************************************************************
# Inherited Attributes Configuration
#*******************************************************************************
# The following attributes will be copied from the resource template to the
# instantiated VMs. More than one attribute can be defined.
#
# INHERIT_IMAGE_ATTR: Attribute to be copied from the Image template
# to each VM/DISK.
#
# INHERIT_DATASTORE_ATTR: Attribute to be copied from the Datastore template
# to each VM/DISK.
#
# INHERIT_VNET_ATTR: Attribute to be copied from the Network template
# to each VM/NIC.
#*******************************************************************************
#INHERIT_IMAGE_ATTR = "EXAMPLE"
#INHERIT_IMAGE_ATTR = "SECOND_EXAMPLE"
#INHERIT_DATASTORE_ATTR = "COLOR"
#INHERIT_VNET_ATTR = "BANDWIDTH_THROTTLING"
INHERIT_DATASTORE_ATTR = "CEPH_HOST"
INHERIT_DATASTORE_ATTR = "CEPH_SECRET"
INHERIT_DATASTORE_ATTR = "CEPH_USER"
INHERIT_DATASTORE_ATTR = "RBD_FORMAT"
INHERIT_DATASTORE_ATTR = "GLUSTER_HOST"
INHERIT_DATASTORE_ATTR = "GLUSTER_VOLUME"
INHERIT_VNET_ATTR = "VLAN_TAGGED_ID"
#*******************************************************************************
# Transfer Manager Driver Behavior Configuration
#*******************************************************************************
# The configuration for each driver is defined in TM_MAD_CONF. These
# values are used when creating a new datastore and should not be modified
# since they define the datastore behavior.
# name : name of the transfer driver, listed in the -d option of the
# TM_MAD section
# ln_target : determines how the persistent images will be cloned when
# a new VM is instantiated.
# NONE: The image will be linked and no more storage capacity will be used
# SELF: The image will be cloned in the Images datastore
# SYSTEM: The image will be cloned in the System datastore
# clone_target : determines how the non persistent images will be
# cloned when a new VM is instantiated.
# NONE: The image will be linked and no more storage capacity will be used
# SELF: The image will be cloned in the Images datastore
# SYSTEM: The image will be cloned in the System datastore
# shared : determines if the storage holding the system datastore is shared
# among the different hosts or not. Valid values: "yes" or "no"
#*******************************************************************************
TM_MAD_CONF = [
name = "dummy", ln_target = "NONE", clone_target = "SYSTEM", shared = "yes"
]
TM_MAD_CONF = [
name = "lvm", ln_target = "NONE", clone_target = "SELF", shared = "yes"
]
TM_MAD_CONF = [
name = "shared", ln_target = "NONE", clone_target = "SYSTEM", shared = "yes"
]
TM_MAD_CONF = [
name = "fs_lvm", ln_target = "SYSTEM", clone_target = "SYSTEM", shared="yes"
]
TM_MAD_CONF = [
name = "qcow2", ln_target = "NONE", clone_target = "SYSTEM", shared = "yes"
]
TM_MAD_CONF = [
name = "ssh", ln_target = "SYSTEM", clone_target = "SYSTEM", shared = "no"
]
TM_MAD_CONF = [
name = "vmfs", ln_target = "NONE", clone_target= "SYSTEM", shared = "yes"
]
TM_MAD_CONF = [
name = "ceph", ln_target = "NONE", clone_target = "SELF", shared = "yes"
]

46
tmpl/vmm_exec_kvm.conf Normal file
View File

@ -0,0 +1,46 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
# Default configuration attributes for the KVM driver
# (all domains will use these values as defaults). These values can
# be overridden in each VM template. Valid atributes are:
# - emulator
# - os [kernel,initrd,boot,root,kernel_cmd,arch]
# - vcpu
# - features [acpi, pae]
# - disk [driver, cache, io]
# - nic [filter, model]
# - raw
#EMULATOR = /usr/libexec/qemu-kvm
#VCPU = 1
OS = [ boot = "hd", arch = "x86_64" ]
FEATURES = [ PAE = "no", ACPI = "yes" ]
NIC = [ model = "virtio" ]
%if %%getVar('activer_onesinglenode','non') == 'oui'
%if %%getVar('one_disk_cache','non') == 'oui'
DISK = [ driver = "qcow2" , cache = "writeback", DEV_PREFIX="vd" ]
%else
DISK = [ driver = "qcow2" , cache = "none", DEV_PREFIX="vd" ]
%end if
%if %%getVar('one_video_driver', False)
RAW = "<devices><video><model type='%%one_video_driver' heads='1'/></video></devices>"
%end if
%end if