1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

Feature #1483: Add new option --schedule TIME to onevm commands

This commit is contained in:
Carlos Martín 2013-02-05 15:55:17 +01:00
parent 3b01566e9b
commit e904781cf1
3 changed files with 153 additions and 39 deletions

View File

@ -15,6 +15,7 @@
#--------------------------------------------------------------------------- #
require 'one_helper'
require 'optparse/time'
class OneVMHelper < OpenNebulaHelper::OneHelper
MULTIPLE={
@ -57,6 +58,13 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
:description => "Creates the new VM on hold state instead of pending"
}
SCHEDULE = {
:name => "schedule",
:large => "--schedule TIME",
:description => "Schedules this action to be executed after the given time",
:format => Time
}
def self.rname
"VM"
end
@ -141,6 +149,27 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
table
end
def schedule_actions(ids,options,action)
perform_actions(
ids, options,
"#{action} scheduled at #{options[:schedule]}") do |vm|
rc = vm.info
if OpenNebula.is_error?(rc)
puts rc.message
exit -1
end
tmp_str = vm.user_template_str
tmp_str << "\nSCHED_ACTION = [ACTION = #{action}, TIME = #{options[:schedule].to_i}]"
vm.update(tmp_str)
end
end
private
def factory(id=nil)

View File

@ -192,9 +192,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: ANY
EOT
command :delete, delete_desc, [:range, :vmid_list] do
helper.perform_actions(args[0],options,"deleted") do |vm|
vm.finalize
command :delete, delete_desc, [:range, :vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"deleted") do |vm|
vm.finalize
end
end
end
@ -205,9 +210,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: PENDING
EOT
command :hold, hold_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"put on hold") do |vm|
vm.hold
command :hold, hold_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"put on hold") do |vm|
vm.hold
end
end
end
@ -217,9 +227,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: HOLD
EOT
command :release, release_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"released") do |vm|
vm.release
command :release, release_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"released") do |vm|
vm.release
end
end
end
@ -257,9 +272,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :shutdown, shutdown_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"shutting down") do |vm|
vm.shutdown
command :shutdown, shutdown_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"shutting down") do |vm|
vm.shutdown
end
end
end
@ -270,9 +290,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :poweroff, poweroff_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"shutting down") do |vm|
vm.poweroff
command :poweroff, poweroff_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"shutting down") do |vm|
vm.poweroff
end
end
end
@ -283,9 +308,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :reboot, reboot_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"rebooting") do |vm|
vm.reboot
command :reboot, reboot_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"rebooting") do |vm|
vm.reboot
end
end
end
@ -295,9 +325,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :reset, reset_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"resetting") do |vm|
vm.reset
command :reset, reset_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"resetting") do |vm|
vm.reset
end
end
end
@ -366,9 +401,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: UNKNOWN, BOOT, POWEROFF
EOT
command :restart, restart_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"restarting") do |vm|
vm.restart
command :restart, restart_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"restarting") do |vm|
vm.restart
end
end
end
@ -380,9 +420,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: ANY, except SUSPENDED or DONE
EOT
command :resubmit, resubmit_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"resubmiting") do |vm|
vm.resubmit
command :resubmit, resubmit_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"resubmiting") do |vm|
vm.resubmit
end
end
end
@ -394,9 +439,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :cancel, cancel_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"canceling") do |vm|
vm.cancel
command :cancel, cancel_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"canceling") do |vm|
vm.cancel
end
end
end
@ -407,9 +457,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :stop, stop_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"stopping") do |vm|
vm.stop
command :stop, stop_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"stopping") do |vm|
vm.stop
end
end
end
@ -422,9 +477,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: RUNNING
EOT
command :suspend, suspend_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"suspending") do |vm|
vm.suspend
command :suspend, suspend_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"suspending") do |vm|
vm.suspend
end
end
end
@ -434,9 +494,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
States: STOPPED, SUSPENDED
EOT
command :resume, resume_desc, [:range,:vmid_list] do
helper.perform_actions(args[0],options,"resuming") do |vm|
vm.resume
command :resume, resume_desc, [:range,:vmid_list],
:options => [OneVMHelper::SCHEDULE] do
if (!options[:schedule].nil?)
helper.schedule_actions(args[0], options, @comm_name)
else
helper.perform_actions(args[0],options,"resuming") do |vm|
vm.resume
end
end
end

View File

@ -155,6 +155,26 @@ module OpenNebula
super(VM_METHODS[:update], new_template)
end
# Returns the <USER_TEMPLATE> element in text form
#
# @param indent [true,false] indents the resulting string, defaults to true
#
# @return [String] The USER_TEMPLATE
def user_template_str(indent=true)
template_like_str('USER_TEMPLATE', indent)
end
# Returns the <USER_TEMPLATE> element in XML form
#
# @return [String] The USER_TEMPLATE
def user_template_xml
if NOKOGIRI
@xml.xpath('TEMPLATE').to_s
else
@xml.elements['TEMPLATE'].to_s
end
end
# Initiates the instance of the VM on the target host.
#