1
0
mirror of https://github.com/OpenNebula/one.git synced 2024-12-23 17:33:56 +03:00

ElasticHost drivers incorporation to main distribution of OpenNebula

git-svn-id: http://svn.opennebula.org/one/trunk@706 3034c82b-c49b-4eb3-8279-a7acafdc01c0
This commit is contained in:
Constantino Vázquez Blanco 2009-07-20 14:34:10 +00:00
parent b5135febfa
commit 2e0f4709e5
9 changed files with 397 additions and 8 deletions

View File

@ -115,9 +115,11 @@ SHARE_DIRS="$SHARE_LOCATION/examples \
ETC_DIRS="$ETC_LOCATION/im_kvm \
$ETC_LOCATION/im_xen \
$ETC_LOCATION/im_ec2 \
$ETC_LOCATION/im_eh \
$ETC_LOCATION/vmm_kvm \
$ETC_LOCATION/vmm_xen \
$ETC_LOCATION/vmm_ec2 \
$ETC_LOCATION/vmm_eh \
$ETC_LOCATION/tm_nfs \
$ETC_LOCATION/tm_ssh \
$ETC_LOCATION/tm_dummy \
@ -157,13 +159,15 @@ INSTALL_ETC_FILES[0]="ETC_FILES:$ETC_LOCATION"
INSTALL_ETC_FILES[1]="VMM_XEN_ETC_FILES:$ETC_LOCATION/vmm_xen"
INSTALL_ETC_FILES[2]="VMM_KVM_ETC_FILES:$ETC_LOCATION/vmm_kvm"
INSTALL_ETC_FILES[3]="VMM_EC2_ETC_FILES:$ETC_LOCATION/vmm_ec2"
INSTALL_ETC_FILES[4]="IM_XEN_ETC_FILES:$ETC_LOCATION/im_xen"
INSTALL_ETC_FILES[5]="IM_KVM_ETC_FILES:$ETC_LOCATION/im_kvm"
INSTALL_ETC_FILES[6]="IM_EC2_ETC_FILES:$ETC_LOCATION/im_ec2"
INSTALL_ETC_FILES[7]="TM_NFS_ETC_FILES:$ETC_LOCATION/tm_nfs"
INSTALL_ETC_FILES[8]="TM_SSH_ETC_FILES:$ETC_LOCATION/tm_ssh"
INSTALL_ETC_FILES[9]="TM_DUMMY_ETC_FILES:$ETC_LOCATION/tm_dummy"
INSTALL_ETC_FILES[10]="HM_ETC_FILES:$ETC_LOCATION/hm"
INSTALL_ETC_FILES[4]="VMM_EH_ETC_FILES:$ETC_LOCATION/vmm_eh"
INSTALL_ETC_FILES[5]="IM_XEN_ETC_FILES:$ETC_LOCATION/im_xen"
INSTALL_ETC_FILES[6]="IM_KVM_ETC_FILES:$ETC_LOCATION/im_kvm"
INSTALL_ETC_FILES[7]="IM_EC2_ETC_FILES:$ETC_LOCATION/im_ec2"
INSTALL_ETC_FILES[8]="IM_EH_ETC_FILES:$ETC_LOCATION/im_eh"
INSTALL_ETC_FILES[9]="TM_NFS_ETC_FILES:$ETC_LOCATION/tm_nfs"
INSTALL_ETC_FILES[10]="TM_SSH_ETC_FILES:$ETC_LOCATION/tm_ssh"
INSTALL_ETC_FILES[11]="TM_DUMMY_ETC_FILES:$ETC_LOCATION/tm_dummy"
INSTALL_ETC_FILES[12]="HM_ETC_FILES:$ETC_LOCATION/hm"
#-------------------------------------------------------------------------------
# Binary files, to be installed under $BIN_LOCATION
@ -226,10 +230,14 @@ MADS_LIB_FILES="share/scripts/madcommon.sh \
src/vmm_mad/kvm/one_vmm_kvm \
src/vmm_mad/ec2/one_vmm_ec2.rb \
src/vmm_mad/ec2/one_vmm_ec2 \
src/vmm_mad/eh/one_vmm_eh.rb \
src/vmm_mad/eh/one_vmm_eh \
src/im_mad/im_ssh/one_im_ssh.rb \
src/im_mad/im_ssh/one_im_ssh \
src/im_mad/ec2/one_im_ec2.rb \
src/im_mad/ec2/one_im_ec2 \
src/im_mad/eh/one_im_eh.rb \
src/im_mad/eh/one_im_eh \
src/tm_mad/one_tm \
src/tm_mad/one_tm.rb \
src/hm_mad/one_hm.rb \
@ -282,6 +290,7 @@ ETC_FILES="share/etc/oned.conf \
# - xen, $ETC_LOCATION/vmm_xen
# - kvm, $ETC_LOCATION/vmm_kvm
# - ec2, $ETC_LOCATION/vmm_ec2
# - eh, $ETC_LOCATION/vmm_eh
#-------------------------------------------------------------------------------
VMM_XEN_ETC_FILES="src/vmm_mad/xen/vmm_xenrc \
@ -293,6 +302,9 @@ VMM_KVM_ETC_FILES="src/vmm_mad/kvm/vmm_kvmrc \
VMM_EC2_ETC_FILES="src/vmm_mad/ec2/vmm_ec2rc \
src/vmm_mad/ec2/vmm_ec2.conf"
VMM_EH_ETC_FILES="src/vmm_mad/eh/vmm_ehrc \
src/vmm_mad/eh/vmm_eh.conf"
#-------------------------------------------------------------------------------
# Information drivers config. files, to be installed under $ETC_LOCATION
# - xen, $ETC_LOCATION/im_xen
@ -309,6 +321,9 @@ IM_KVM_ETC_FILES="src/im_mad/kvm/im_kvmrc \
IM_EC2_ETC_FILES="src/im_mad/ec2/im_ec2rc \
src/im_mad/ec2/im_ec2.conf"
IM_EH_ETC_FILES="src/im_mad/eh/im_ehrc \
src/im_mad/eh/im_eh.conf"
#-------------------------------------------------------------------------------
# Storage drivers config. files, to be installed under $ETC_LOCATION
# - nfs, $ETC_LOCATION/tm_nfs
@ -392,7 +407,7 @@ if [ "$INSTALL_ETC" = "yes" ] ; then
DST=`echo $i | cut -d: -f2`
eval SRC_FILES=$SRC
for f in $SRC_FILES; do
do_file $f $DST
done

7
src/im_mad/eh/im_eh.conf Normal file
View File

@ -0,0 +1,7 @@
# Max memory that can be provided by ElasticHosts
# These defaults allows for two machines with MEMORY=1024 and using 1 CPU
TOTAL_MEMORY=2048
TOTAL_CPU=2

17
src/im_mad/eh/im_ehrc Normal file
View File

@ -0,0 +1,17 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- #

43
src/im_mad/eh/one_im_eh Normal file
View File

@ -0,0 +1,43 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- #
if [ -z "${ONE_LOCATION}" ]; then
EHRC=/etc/one/im_eh/im_ehrc
EHCONF=/etc/one/im_eh/im_eh.conf
MADCOMMON=/usr/lib/one/mads/madcommon.sh
VAR_LOCATION=/var/lib/one
else
EHRC=$ONE_LOCATION/etc/im_eh/im_ehrc
EHCONF=$ONE_LOCATION/etc/im_eh/im_eh.conf
MADCOMMON=$ONE_LOCATION/lib/mads/madcommon.sh
VAR_LOCATION=$ONE_LOCATION/var
fi
. $MADCOMMON
# Export the vmm_mad specific rc
export_rc_vars $EHRC
# Export max instance type usages
export_rc_vars $EHCONF
# Go to var directory ONE_LOCATION/var or /var/lib/one
cd $VAR_LOCATION
# Execute the actual MAD
execute_mad $*

View File

@ -0,0 +1,62 @@
#!/usr/bin/env ruby
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- #
ONE_LOCATION=ENV["ONE_LOCATION"]
if !ONE_LOCATION
RUBY_LIB_LOCATION="/usr/lib/one/ruby"
else
RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
end
$: << RUBY_LIB_LOCATION
require 'pp'
require 'one_mad'
################
# EC2 IM MAD #
################
class IM < ONEMad
def initialize(sensors=nil)
super(3, 4)
end
def action_init(args)
STDOUT.puts "INIT SUCCESS"
STDOUT.flush
end
def action_monitor(args)
totalmemory = ENV["TOTAL_MEMORY"].to_i
totalcpu = 100 * ENV["TOTAL_CPU"].to_i
STDOUT.puts "MONITOR SUCCESS " + args[1].to_s +
"HOSTNAME=#{args[2]},TOTALMEMORY=#{totalmemory},TOTALCPU=#{totalcpu},CPUSPEED=1000,FREEMEMORY=#{totalmemory},FREECPU=#{totalcpu}"
STDOUT.flush
end
end
im=IM.new(nil)
im.loop

39
src/vmm_mad/eh/one_vmm_eh Normal file
View File

@ -0,0 +1,39 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- #
if [ -z "${ONE_LOCATION}" ]; then
DRIVERRC=/etc/one/vmm_eh/vmm_ehrc
MADCOMMON=/usr/lib/one/mads/madcommon.sh
VAR_LOCATION=/var/lib/one
else
DRIVERRC=$ONE_LOCATION/etc/vmm_eh/vmm_ehrc
MADCOMMON=$ONE_LOCATION/lib/mads/madcommon.sh
VAR_LOCATION=$ONE_LOCATION/var
fi
. $MADCOMMON
# Export the vmm_mad specific rc
export_rc_vars $DRIVERRC
# Go to ONE_LOCATION
cd $VAR_LOCATION
# Execute the actual MAD
execute_mad $*

View File

@ -0,0 +1,179 @@
#!/usr/bin/env ruby
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- #
EHAUTH = ENV["EHAUTH"]
if !EHAUTH
puts "EHAUTH not set"
exit -1
end
ONE_LOCATION=ENV["ONE_LOCATION"]
if !ONE_LOCATION
RUBY_LIB_LOCATION="/usr/lib/one/ruby"
else
RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
end
$: << RUBY_LIB_LOCATION
require 'pp'
require 'one_mad'
require 'open3'
class DM < ONEMad
def initialize
super(5, 4)
end
def action_init(args)
send_message("INIT", "SUCCESS")
end
def action_deploy(args)
action_number=args[1]
action_host=args[2]
remote_deployment_file=args[3]
# Get local deployment file
local_deployment_file=get_local_deployment_file(remote_deployment_file)
std_action("DEPLOY", "elastichosts -f #{local_deployment_file} servers create", args)
end
def action_shutdown(args)
std_action("SHUTDOWN", "elastichosts servers #{args[3]} shutdown", args)
end
def action_cancel(args)
std_action("SHUTDOWN", "elastichosts servers #{args[3]} destroy", args)
end
def action_checkpoint(args)
send_message("CHECKPOINT", "FAILURE", args[1], "action not supported for ElasticHost")
end
def action_save(args)
send_message("SAVE", "FAILURE", args[1], "action not supported for ElasticHost")
end
def action_restore(args)
send_message("RESTORE", "FAILURE", args[1], "action not supported for ElasticHost")
end
def action_poll(args)
std = Open3.popen3("elastichosts servers #{args[3]} info; echo ExitCode: $? 1>&2")
stdout=std[1].read
stderr=std[2].read
exit_code=get_exit_code(stderr)
tx=0
rx=0
if exit_code=="0"
stdout.each_line{|line|
cols=line.split(" ")
case cols[0]
when "rx"
rx=cols[1]
when "tx"
tx=cols[1]
end
}
end
send_message("POLL", "SUCCESS", args[1],"USEDCPU=0.0 NETTX=#{tx} NETRX=#{rx} USEDMEMORY=0")
end
###########################
# Common action functions #
###########################
def std_action(action, command, args)
std= Open3.popen3("#{command} ; echo ExitCode: $? 1>&2")
stdout=std[1].read
stderr=std[2].read
exit_code=get_exit_code(stderr)
if exit_code=="0"
domain_name=args[3]
if action=="DEPLOY"
remote_deployment_file=args[3]
# Get local deployment file
local_deployment_file=get_local_deployment_file(remote_deployment_file)
domain_name = stdout
end
send_message(action, "SUCCESS", args[1], domain_name)
else
error_message=get_error_message(stderr)
send_message(action, "FAILURE", args[1], error_message)
end
end
#########################################
# Get information form xm create output #
#########################################
# From STDERR if exit code == 1
def get_exit_code(str)
tmp=str.scan(/^ExitCode:.*$/)[0]
if tmp
return tmp.split(' ')[1]
else
return -1
end
end
# From STDERR if exit code == 1
def get_error_message(str)
tmp=str.split(/\n/)
return "Unknown error" if !tmp[0]
tmp[0]
end
end
dm=DM.new
dm.loop

View File

@ -0,0 +1 @@
# Default configuration attributes for the ElasticHost driver

26
src/vmm_mad/eh/vmm_ehrc Normal file
View File

@ -0,0 +1,26 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# 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. #
#--------------------------------------------------------------------------- ##
# May be needed in some setups
# CLASSPATH=""
#
# Note: elastichosts command line script (download it here http://www.elastichosts.com/downloads/elastichosts)
# MUST be in the PATH
#
EHAUTH="<user uuid>:<secret_key>"