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