Déplacement des fichiers depuis eole-one-singlenode
This commit is contained in:
commit
7a3f95db42
|
@ -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
|
|
@ -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
|
|
@ -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 ""
|
||||
|
||||
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
||||
:
|
|
@ -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
|
|
@ -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()
|
|
@ -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
|
|
@ -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é"
|
|
@ -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
|
|
@ -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"
|
||||
]
|
|
@ -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
|
Loading…
Reference in New Issue