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:
parent
3b01566e9b
commit
e904781cf1
@ -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)
|
||||
|
143
src/cli/onevm
143
src/cli/onevm
@ -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
|
||||
|
||||
|
@ -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.
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user