Déplacement des fichiers depuis eole-one-singlenode
This commit is contained in:
446
postservice/30-one-mng
Executable file
446
postservice/30-one-mng
Executable file
@ -0,0 +1,446 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function error()
|
||||
{
|
||||
MSG=${1}
|
||||
echo "[ERROR][${MSG}]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
function get_user_home()
|
||||
{
|
||||
HOMEDIR=$(getent passwd ${1} | cut -d ':' -f 6)
|
||||
echo ${HOMEDIR}
|
||||
}
|
||||
|
||||
function get_one_auth()
|
||||
{
|
||||
CMD="cat"
|
||||
HOME=$(get_user_home oneadmin)
|
||||
FILE="${HOME}/.one/one_auth"
|
||||
${CMD} ${FILE}
|
||||
}
|
||||
|
||||
function check_cluster()
|
||||
{
|
||||
name="${1}"
|
||||
cmd="onecluster"
|
||||
opt="list"
|
||||
auth=$(get_one_auth)
|
||||
|
||||
res=0
|
||||
clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
|
||||
for hst in ${clst_list}
|
||||
do
|
||||
[[ "${NAME}" = "${hst}" ]] && res=$((res+1))
|
||||
done
|
||||
return ${res}
|
||||
}
|
||||
|
||||
function manage_cluster()
|
||||
{
|
||||
NAME="${1}"
|
||||
CMD="onecluster create"
|
||||
AUTH=$(get_one_auth)
|
||||
|
||||
check_cluster ${clst_name}
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
crt=$(${CMD} --user ${AUTH%:*} --password ${AUTH#*:} ${NAME})
|
||||
if [[ ${?} -ne 0 ]]
|
||||
then
|
||||
error "Cluster create failed"
|
||||
else
|
||||
echo "Cluster ${NAME} created"
|
||||
fi
|
||||
else
|
||||
echo "Cluster \"${NAME}\" already exist"
|
||||
fi
|
||||
}
|
||||
|
||||
function check_host()
|
||||
{
|
||||
name="${1}"
|
||||
cmd="onehost"
|
||||
opt="list"
|
||||
auth=$(get_one_auth)
|
||||
|
||||
res=0
|
||||
clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
|
||||
for hst in ${clst_list}
|
||||
do
|
||||
[[ "${NAME}" = "${hst}" ]] && res=$((res+1))
|
||||
done
|
||||
return ${res}
|
||||
}
|
||||
|
||||
function manage_host()
|
||||
{
|
||||
NAME=${1}
|
||||
CMD="onehost"
|
||||
IM_MAD='kvm'
|
||||
VM_MAD='kvm'
|
||||
VNET_MAD='ovswitch'
|
||||
OPT="create ${NAME} -i ${IM_MAD} -v ${VM_MAD} -n ${VNET_MAD}"
|
||||
AUTH=$(get_one_auth)
|
||||
|
||||
check_host ${NAME}
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
res=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
|
||||
if [[ ${?} -ne 0 ]]
|
||||
then
|
||||
error "Host creation failed"
|
||||
else
|
||||
echo "Host ${NAME} created"
|
||||
fi
|
||||
else
|
||||
echo "Host ${NAME} already exist"
|
||||
fi
|
||||
}
|
||||
|
||||
function get_cluster_id_by_name()
|
||||
{
|
||||
name=${1}
|
||||
cmd="onecluster"
|
||||
opt="show ${name}"
|
||||
|
||||
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep ID)
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
echo ${res#*:}
|
||||
return 0
|
||||
else
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Get Host ID by a name
|
||||
#
|
||||
function get_host_id_by_name()
|
||||
{
|
||||
name=${1}
|
||||
cmd="onehost"
|
||||
opt="show ${name}"
|
||||
|
||||
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
echo ${res#*:}
|
||||
return 0
|
||||
else
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Get Datastore ID by a name
|
||||
#
|
||||
function get_ds_id_by_name()
|
||||
{
|
||||
name=${1}
|
||||
cmd="onedatastore"
|
||||
opt="show ${name}"
|
||||
|
||||
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
echo ${res#*:}
|
||||
return 0
|
||||
else
|
||||
echo "ERR"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# check_host_in_cluster
|
||||
# if host is attached to cluster : return 0
|
||||
# if host not attached to cluster : return 1
|
||||
#
|
||||
function check_host_in_cluster()
|
||||
{
|
||||
hst=${1}
|
||||
clst=${2}
|
||||
auth=$(get_one_auth)
|
||||
cmd="onehost"
|
||||
opt="show ${hst} --user ${AUTH%:*} --password ${AUTH#*:}"
|
||||
|
||||
RES=$(${cmd} ${opt} | grep CLUSTER)
|
||||
cluster=${RES#*:}
|
||||
# clean Outpu
|
||||
cluster="${cluster#"${cluster%%[![:space:]]*}"}" # remove leading whitespace characters
|
||||
cluster="${cluster%"${cluster##*[![:space:]]}"}" # remove trailing whitespace characters
|
||||
if [[ "${cluster}" = "${clst}" ]]
|
||||
then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Attach a host to a cluster
|
||||
#
|
||||
function attach_host()
|
||||
{
|
||||
HOST=${1}
|
||||
CLST=${2}
|
||||
CLST_ID=$(get_cluster_id_by_name ${CLST})
|
||||
HST_ID=$(get_host_id_by_name ${HOST})
|
||||
AUTH=$(get_one_auth)
|
||||
CMD="onecluster"
|
||||
OPT="addhost ${CLST_ID} ${HST_ID}"
|
||||
|
||||
check_host_in_cluster ${HOST} ${CLST}
|
||||
if [[ ${?} -eq 1 ]]
|
||||
then
|
||||
if [[ -n ${CLST_ID} ]]
|
||||
then
|
||||
if [[ -n ${HST_ID} ]]
|
||||
then
|
||||
RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
|
||||
if [[ ${?} -ne 0 ]]
|
||||
then
|
||||
error "Attaching ${HOST} to ${CLST} failed"
|
||||
else
|
||||
echo "${HOST} attached to ${CLST}"
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
error "No host id for ${HOST}"
|
||||
fi
|
||||
else
|
||||
error "No Cluster id for ${CLST}"
|
||||
fi
|
||||
else
|
||||
echo "Host ${HOST} already present in cluster ${CLST}"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
#
|
||||
# Attach a datastore to a cluster
|
||||
#
|
||||
function attach_ds_to_cluster()
|
||||
{
|
||||
DS=${1}
|
||||
CLST=${2}
|
||||
CLST_ID=$(get_cluster_id_by_name ${CLST})
|
||||
DS_ID=$(get_ds_id_by_name ${ds_name})
|
||||
AUTH=$(get_one_auth)
|
||||
CMD="onecluster"
|
||||
OPT="adddatastore ${CLST_ID} ${DS_ID}"
|
||||
|
||||
RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
|
||||
if [[ ${?} -ne 0 ]]
|
||||
then
|
||||
error "Attaching ${DS} to ${CLST} failed."
|
||||
else
|
||||
echo "Datastore ${DS} attached to ${CLST}."
|
||||
return 0
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function create_datastore()
|
||||
{
|
||||
ds_type="${1}"
|
||||
ds_name="${2}"
|
||||
ds_cluster="${3}"
|
||||
|
||||
if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]]
|
||||
then
|
||||
SYS_TM_MAD='ssh'
|
||||
ISO_TM_MAD='ssh'
|
||||
IMG_TM_MAD='ssh'
|
||||
else
|
||||
SYS_TM_MAD='shared'
|
||||
ISO_TM_MAD='shared'
|
||||
IMG_TM_MAD='qcow2'
|
||||
fi
|
||||
|
||||
echo "Creating datastore ${ds_name}"
|
||||
TMPL_FILE=$(mktemp)
|
||||
case ${ds_type} in
|
||||
"SYSTEM")
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
TM_MAD = ${SYS_TM_MAD}
|
||||
TYPE = SYSTEM_DS
|
||||
__EOF__
|
||||
;;
|
||||
"ISO")
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
DS_MAD = fs
|
||||
TM_MAD = ${ISO_TM_MAD}
|
||||
TYPE = IMAGE_DS
|
||||
__EOF__
|
||||
;;
|
||||
"IMAGE")
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
DS_MAD = fs
|
||||
TM_MAD = ${ISO_TM_MAD}
|
||||
TYPE = IMAGE_DS
|
||||
__EOF__
|
||||
;;
|
||||
|
||||
*) echo "Nothing to do with ${ds_type}"
|
||||
;;
|
||||
esac
|
||||
|
||||
auth=$(get_one_auth)
|
||||
cmd="onedatastore"
|
||||
#opt="create --user ${AUTH%:*} --password ${AUTH#*:} -c ${ds_cluster} ${TMPL_FILE}"
|
||||
opt="create --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
|
||||
RUN=$(${cmd} ${opt})
|
||||
if [[ ${?} -eq 0 ]]
|
||||
then
|
||||
attach_ds_to_cluster ${ds_name} ${ds_cluster}
|
||||
rm ${TMPL_FILE}
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function update_datastore()
|
||||
{
|
||||
local auth=${1}
|
||||
local ds_id=${2}
|
||||
local cmd="onedatastore"
|
||||
local opt="show"
|
||||
local multinode=$(CreoleGet activer_multinode 2>&1)
|
||||
ds_type=""
|
||||
ds_mad=""
|
||||
ds_name=""
|
||||
|
||||
TMPL_FILE=$(mktemp)
|
||||
|
||||
if [[ ${multinode} == 'oui' ]]
|
||||
then
|
||||
SYS_TM_MAD='ssh'
|
||||
ISO_TM_MAD='ssh'
|
||||
IMG_TM_MAD='ssh'
|
||||
else
|
||||
SYS_TM_MAD='shared'
|
||||
ISO_TM_MAD='shared'
|
||||
IMG_TM_MAD='qcow2'
|
||||
fi
|
||||
|
||||
out=$(${cmd} ${opt} ${ds_id} --user ${auth%:*} --password ${auth#*:} | \
|
||||
awk -F ':' '/^DATASTORE.*INFORMATION/,/DATASTORE CAPACITY/ {gsub(" |\t",""); print $1 ":" $2 " " }')
|
||||
for line in ${out}
|
||||
do
|
||||
[[ ${line} =~ ^TM_MAD ]] && ds_mad=${line#*:}
|
||||
[[ ${line} =~ ^NAME ]] && ds_name=${line#*:}
|
||||
[[ ${line} =~ ^TYPE ]] && ds_type=${line#*:}
|
||||
done
|
||||
|
||||
if [[ ${ds_name} == "$(CreoleGet one_ds_system_prefix 2>&1)$(CreoleGet one_cluster_name 2>&1)" ]]
|
||||
then
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
TM_MAD = ${SYS_TM_MAD}
|
||||
TYPE = SYSTEM_DS
|
||||
__EOF__
|
||||
elif [[ ${ds_name} == "$(CreoleGet one_ds_iso_name 2>&1)" ]]
|
||||
then
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
DS_MAD = fs
|
||||
TM_MAD = ${ISO_TM_MAD}
|
||||
TYPE = IMAGE_DS
|
||||
__EOF__
|
||||
elif [[ ${ds_name} == "$(CreoleGet one_ds_image_name 2>&1)" ]]
|
||||
then
|
||||
cat <<__EOF__ > ${TMPL_FILE}
|
||||
NAME = ${ds_name}
|
||||
DS_MAD = fs
|
||||
TM_MAD = ${ISO_TM_MAD}
|
||||
TYPE = IMAGE_DS
|
||||
__EOF__
|
||||
else
|
||||
echo "Nothing to do with ${ds_name}"
|
||||
fi
|
||||
|
||||
if [[ -s ${TMPL_FILE} ]]
|
||||
then
|
||||
echo "Updating ${ds_name} datastore"
|
||||
opt="update ${ds_id} --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
|
||||
RUN=$(${cmd} ${opt})
|
||||
rm ${TMPL_FILE}
|
||||
return ${?}
|
||||
else
|
||||
rm ${TMPL_FILE}
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function manage_datastores()
|
||||
{
|
||||
cluster=${1}
|
||||
AUTH=$(get_one_auth)
|
||||
|
||||
SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')${cluster}"
|
||||
ISO_DS=$(CreoleGet 'one_ds_iso_name')
|
||||
IMAGE_DS=$(CreoleGet 'one_ds_image_name')
|
||||
|
||||
echo "Configuring datastores for Cluster"
|
||||
sid=$(get_ds_id_by_name ${SYSTEM_DS})
|
||||
if [[ ${sid} = "ERR" ]]
|
||||
then
|
||||
create_datastore "SYSTEM" "${SYSTEM_DS}" "${cluster}"
|
||||
else
|
||||
update_datastore ${AUTH} ${sid}
|
||||
fi
|
||||
|
||||
imgid=$(get_ds_id_by_name ${IMAGE_DS})
|
||||
if [[ ${imgid} = "ERR" ]]
|
||||
then
|
||||
create_datastore "IMAGE" "${IMAGE_DS}" "${cluster}"
|
||||
else
|
||||
update_datastore ${AUTH} ${imgid}
|
||||
fi
|
||||
|
||||
isoid=$(get_ds_id_by_name ${ISO_DS})
|
||||
if [[ ${isoid} = "ERR" ]]
|
||||
then
|
||||
create_datastore "ISO" "${ISO_DS}" "${cluster}"
|
||||
else
|
||||
update_datastore ${AUTH} ${isoid}
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function main()
|
||||
{
|
||||
#
|
||||
# Creating Cluster
|
||||
#
|
||||
clst_name=$(CreoleGet one_cluster_name)
|
||||
manage_cluster ${clst_name}
|
||||
|
||||
#
|
||||
# Creating Host
|
||||
#
|
||||
host=$(CreoleGet nom_machine)
|
||||
manage_host ${host}
|
||||
|
||||
#
|
||||
# Attaching Host to the Cluster
|
||||
#
|
||||
attach_host ${host} ${clst_name}
|
||||
|
||||
#
|
||||
# Création des Datastores
|
||||
#
|
||||
manage_datastores ${clst_name}
|
||||
}
|
||||
|
||||
main
|
345
postservice/31-one-netmng
Executable file
345
postservice/31-one-netmng
Executable file
@ -0,0 +1,345 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from pyeole import ihm
|
||||
from pyeole import process
|
||||
from creole.client import CreoleClient
|
||||
from tempfile import mkstemp
|
||||
|
||||
import sys
|
||||
import os
|
||||
import csv
|
||||
import logging
|
||||
|
||||
LOG_FILE = '/var/log/one/eole-one-node.log'
|
||||
|
||||
#= Configure Logger ===
|
||||
logger = logging.getLogger(__name__)
|
||||
#std_handler = logging.StreamHandler(sys.stdout)
|
||||
file_handler = logging.FileHandler(LOG_FILE)
|
||||
|
||||
logger.setLevel(logging.INFO)
|
||||
#std_handler.setLevel(logging.INFO)
|
||||
file_handler.setLevel(logging.DEBUG)
|
||||
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
#std_handler.setFormatter(formatter)
|
||||
file_handler.setFormatter(formatter)
|
||||
|
||||
#logger.addHandler(std_handler)
|
||||
logger.addHandler(file_handler)
|
||||
#= End Logger ===
|
||||
|
||||
|
||||
class RunCmdError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class OneClient():
|
||||
|
||||
def __init__(self, user):
|
||||
self.user = None
|
||||
self.auth = None
|
||||
self.root = '/var/lib/one'
|
||||
|
||||
if user:
|
||||
self.user = user
|
||||
else:
|
||||
self.user = 'oneadmin'
|
||||
|
||||
user_info = process.system_out(['getent', 'passwd', user])[1]
|
||||
if user_info:
|
||||
self.root = user_info.split(':')[5]
|
||||
|
||||
command = ['cat', u'{0}/.one/one_auth'.format(self.root)]
|
||||
res = process.system_out(command)
|
||||
if res[0] == 0:
|
||||
self.auth = res[1].split(':')
|
||||
|
||||
def __run_cmd__(self, cmd):
|
||||
cmd.extend(['--user', self.auth[0]])
|
||||
cmd.extend(['--password', self.auth[1]])
|
||||
|
||||
res = process.system_out(cmd)
|
||||
if res[0] == 0:
|
||||
if 'list' in cmd:
|
||||
out_lines = []
|
||||
if res:
|
||||
for line in res[1].split('\n'):
|
||||
if len(line) == 0:
|
||||
next
|
||||
elif 'ID' in line:
|
||||
next
|
||||
else:
|
||||
out_lines.append(line.split())
|
||||
return out_lines
|
||||
else:
|
||||
return res
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_hosts(self):
|
||||
""" get the list of hosts
|
||||
"""
|
||||
cmd = ['onehost', 'list']
|
||||
cmd.extend(['-l', 'ID,NAME'])
|
||||
res = self.__run_cmd__(cmd)
|
||||
return(res)
|
||||
|
||||
def get_clusters(self):
|
||||
""" get the cluster list
|
||||
"""
|
||||
cmd = ['onecluster', 'list']
|
||||
cmd.extend(['-l', 'ID,NAME'])
|
||||
return self.__run_cmd__(cmd)
|
||||
|
||||
def get_networks(self):
|
||||
""" get the virtual network list
|
||||
"""
|
||||
cmd = ['onevnet', 'list']
|
||||
cmd.extend(['-l', 'ID,NAME'])
|
||||
return self.__run_cmd__(cmd)
|
||||
|
||||
def get_cluster_id_by_name(self, name):
|
||||
cmd = ['onecluster', 'list']
|
||||
cmd.extend(['-f', 'NAME={0}'.format(name)])
|
||||
res = self.__run_cmd__(cmd)
|
||||
ID = res[0][0]
|
||||
return ID
|
||||
|
||||
def get_vnet_id_by_name(self, name):
|
||||
cmd = ['onevnet', 'list']
|
||||
cmd.extend(['-f', 'NAME={0}'.format(name)])
|
||||
res = self.__run_cmd__(cmd)
|
||||
ID = res[0][0]
|
||||
return ID
|
||||
|
||||
def create_network(self, templatefile, cluster, vnet_name):
|
||||
""" Create a network
|
||||
"""
|
||||
cmd = ['onevnet', 'create']
|
||||
cmd.extend(['--user', self.auth[0]])
|
||||
cmd.extend(['--password', self.auth[1][:-1]])
|
||||
#cmd.extend(['-c', cluster])
|
||||
cmd.append(templatefile)
|
||||
res = process.system_out(cmd)
|
||||
if res[0] == 0:
|
||||
clt_id = self.get_cluster_id_by_name(cluster)
|
||||
vnet_id = self.get_vnet_id_by_name(vnet_name)
|
||||
res = self.__run_cmd__(['onecluster', 'addvnet', clt_id, vnet_id])
|
||||
os.remove(templatefile)
|
||||
if not res:
|
||||
print("Error attaching {0} vnet to {1} cluster".format(vnet_name, cluster))
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
else:
|
||||
logger.error("Creation of virtual network with template {0} failed".format(templatefile))
|
||||
return False
|
||||
|
||||
def update_network(self, templatefile, cluster, vnet_name):
|
||||
""" Update a network
|
||||
"""
|
||||
vnet_id = self.get_vnet_id_by_name(vnet_name)
|
||||
cmd = ['onevnet', 'update']
|
||||
cmd.extend(['--user', self.auth[0]])
|
||||
cmd.extend(['--password', self.auth[1][:-1]])
|
||||
cmd.extend([vnet_id, templatefile])
|
||||
|
||||
res = process.system_out(cmd)
|
||||
if res[0] == 0:
|
||||
os.remove(templatefile)
|
||||
return True
|
||||
else:
|
||||
logger.error("Update of virtual network with template {0} failed".format(templatefile))
|
||||
return False
|
||||
|
||||
def delete_network(self, vnet_id):
|
||||
cmd = ['onevnet', 'delete']
|
||||
cmd.extend(['--user', self.auth[0]])
|
||||
cmd.extend(['--password', self.auth[1][:-1]])
|
||||
cmd.append(vnet_id)
|
||||
|
||||
res = process.system_out(cmd)
|
||||
if res[0] == 0:
|
||||
ihm.print_line("Network {0} deleted".format(vnet_id))
|
||||
return True
|
||||
else:
|
||||
logger.error("Error deleting network {0}".format(vnet_id))
|
||||
ihm.print_line("Error deleting network {0}".format(vnet_id))
|
||||
return False
|
||||
|
||||
|
||||
class OneNetwork():
|
||||
def create(self, one_client):
|
||||
tmpl_file = self.create_template()
|
||||
if one_client.create_network(tmpl_file, self.cluster, self.zone):
|
||||
ihm.print_line("Virtual network {0} created".format(self.zone))
|
||||
return True
|
||||
else:
|
||||
ihm.print_line("Error Creating virtual network {0}".format(self.zone))
|
||||
return False
|
||||
|
||||
def update(self, one_client):
|
||||
tmpl_file = self.create_template()
|
||||
if one_client.update_network(tmpl_file, self.cluster, self.zone):
|
||||
ihm.print_line("Virtual network {0} updated".format(self.zone))
|
||||
return True
|
||||
else:
|
||||
ihm.print_line("Error Updating virtual network {0}".format(self.zone))
|
||||
return False
|
||||
|
||||
def manage(self, one_client):
|
||||
found = False
|
||||
vnet = one_client.get_networks()
|
||||
network_name = self.zone
|
||||
for net in vnet:
|
||||
if network_name in net:
|
||||
found = True
|
||||
break
|
||||
|
||||
if not found:
|
||||
return self.create(one_client)
|
||||
else:
|
||||
return self.update(one_client)
|
||||
|
||||
class OneNetworkL3(OneNetwork):
|
||||
def __init__(self, net_info, cluster):
|
||||
self.swname = net_info[0]
|
||||
self.zone = u'{0}{1}'.format(net_info[10], net_info[1])
|
||||
self.vlan = net_info[2]
|
||||
self.vnet_addr = net_info[3]
|
||||
self.vnet_mask = net_info[4]
|
||||
self.vnet_gw = net_info[5]
|
||||
self.vnet_rg_start = net_info[6]
|
||||
self.vnet_rg_end = net_info[7]
|
||||
self.vnet_dns = net_info[8]
|
||||
self.vnet_trunk = net_info[9]
|
||||
self.cluster = cluster
|
||||
|
||||
def create_template(self):
|
||||
fd, tmp_path = mkstemp(prefix='oneVnet-')
|
||||
template = open(tmp_path, 'w')
|
||||
template.write('NAME = "{0}"\n'.format(self.zone))
|
||||
if self.vnet_rg_start and self.vnet_rg_end:
|
||||
template.write('TYPE = RANGED\n')
|
||||
template.write('IP_START = {0}\n'.format(self.vnet_rg_start))
|
||||
template.write('IP_END = {0}\n'.format(self.vnet_rg_end))
|
||||
else:
|
||||
template.write('TYPE = FIXED\n')
|
||||
|
||||
if self.vlan:
|
||||
template.write('VLAN = yes\n')
|
||||
template.write('VLAN_ID = {0}\n'.format(self.vlan))
|
||||
|
||||
if self.vnet_trunk:
|
||||
template.write('VLAN_TAGGED_ID = {0}\n'.format(self.vnet_trunk))
|
||||
|
||||
template.write('BRIDGE = {0}\n'.format(self.swname))
|
||||
template.write('NETWORK_ADDRESS = {0}\n'.format(self.vnet_addr))
|
||||
template.write('NETWORK_MASK = {0}\n'.format(self.vnet_mask))
|
||||
template.write('GATEWAY = {0}\n'.format(self.vnet_gw))
|
||||
template.write('DNS = {0}\n'.format(self.vnet_dns))
|
||||
template.close()
|
||||
return tmp_path
|
||||
|
||||
|
||||
class OneNetworkL2(OneNetwork):
|
||||
def __init__(self, net_info, cluster):
|
||||
self.swname = net_info[0]
|
||||
self.zone = u'{0}{1}'.format(net_info[6], net_info[1])
|
||||
self.net_size = net_info[2]
|
||||
self.first_mac = net_info[3]
|
||||
self.tag = net_info[4]
|
||||
self.trunk = net_info[5]
|
||||
self.cluster = cluster
|
||||
|
||||
def create_template(self):
|
||||
fd, tmp_path = mkstemp(prefix='oneVnet-')
|
||||
template = open(tmp_path, 'w')
|
||||
template.write('NAME = "{0}"\n'.format(self.zone))
|
||||
template.write('TYPE = ETHER\n')
|
||||
template.write('SIZE = "{0}"\n'.format(self.net_size))
|
||||
|
||||
if self.tag:
|
||||
template.write('VLAN = yes\n')
|
||||
template.write('VLAN_ID = {0}\n'.format(self.tag))
|
||||
|
||||
if self.trunk:
|
||||
template.write('VLAN_TAGGED_ID = {0}\n'.format(self.trunk))
|
||||
|
||||
template.write('BRIDGE = {0}\n'.format(self.swname))
|
||||
template.close()
|
||||
return tmp_path
|
||||
|
||||
def main():
|
||||
client = CreoleClient()
|
||||
one_client = OneClient('oneadmin')
|
||||
networks = []
|
||||
cluster = client.get_creole('one_cluster_name')
|
||||
swname = client.get_creole('ovs_sw_name')
|
||||
zones = client.get_creole('vnets')
|
||||
vlans = client.get_creole('vnet_vlan_tag')
|
||||
vnet_addr = client.get_creole('vnet_network_addr')
|
||||
vnet_mask = client.get_creole('vnet_network_mask')
|
||||
vnet_dns = client.get_creole('vnet_network_dns')
|
||||
vnet_gw = client.get_creole('vnet_network_gw')
|
||||
vnet_rg_start = client.get_creole('vnet_range_start')
|
||||
vnet_rg_end = client.get_creole('vnet_range_end')
|
||||
vnet_trunk = client.get_creole('vnet_vlan_trunk')
|
||||
|
||||
l2_vnet = client.get_creole('l2_vnets')
|
||||
l2_vnet_size = client.get_creole('l2_vnet_size')
|
||||
l2_vnet_vlan_tag = client.get_creole('l2_vnet_vlan_tag')
|
||||
l2_vnet_vlan_trunk = client.get_creole('l2_vnet_vlan_trunk')
|
||||
l2_vnet_first_mac = client.get_creole('l2_vnet_first_mac')
|
||||
|
||||
net_prefix = "CR_"
|
||||
|
||||
processed = []
|
||||
for cpt in range(len(zones)):
|
||||
if zones[cpt] not in processed:
|
||||
info = []
|
||||
info.append(swname)
|
||||
info.append(zones[cpt])
|
||||
info.append(vlans[cpt])
|
||||
info.append(vnet_addr[cpt])
|
||||
info.append(vnet_mask[cpt])
|
||||
info.append(vnet_gw[cpt])
|
||||
info.append(vnet_rg_start[cpt])
|
||||
info.append(vnet_rg_end[cpt])
|
||||
info.append(vnet_dns[cpt])
|
||||
info.append(vnet_trunk[cpt])
|
||||
info.append(net_prefix)
|
||||
networks.append(OneNetworkL3(info, cluster))
|
||||
processed.append(zones[cpt])
|
||||
|
||||
for i in range(len(l2_vnet)):
|
||||
if l2_vnet[i] not in processed:
|
||||
net_info = []
|
||||
net_info.append(swname)
|
||||
net_info.append(l2_vnet[i])
|
||||
net_info.append(l2_vnet_size[i])
|
||||
net_info.append(l2_vnet_first_mac[i])
|
||||
net_info.append(l2_vnet_vlan_tag[i])
|
||||
net_info.append(l2_vnet_vlan_trunk[i])
|
||||
net_info.append(net_prefix)
|
||||
networks.append(OneNetworkL2(net_info, cluster))
|
||||
processed.append(l2_vnet[i])
|
||||
|
||||
if client.get_creole('activer_openvswitch'):
|
||||
for network in networks:
|
||||
if not network.manage(one_client):
|
||||
exit(1)
|
||||
else:
|
||||
ihm.print_line(u'Open vSwitch disabled no need to configure virtual networks')
|
||||
|
||||
networks = one_client.get_networks()
|
||||
for net in networks:
|
||||
name = net[1]
|
||||
if name.startswith(net_prefix):
|
||||
if not name[3:] in zones and not name[3:] in l2_vnet:
|
||||
one_client.delete_network(net[0])
|
||||
|
||||
exit(0)
|
||||
|
||||
main()
|
Reference in New Issue
Block a user