#!/usr/bin/env ruby # -------------------------------------------------------------------------- # # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.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 $: << RUBY_LIB_LOCATION+"/cli" require 'command_parser' require 'one_helper/onehost_helper' require 'one_helper/onecluster_helper' cmd=CommandParser::CmdParser.new(ARGV) do usage "`onehost` [] []" version OpenNebulaHelper::ONE_VERSION helper = OneHostHelper.new ######################################################################## # Global Options ######################################################################## set :option, CommandParser::OPTIONS IM = { :name => "im", :short => "-i im_mad", :large => "--im im_mad" , :description => "Set the information driver for the host", :format => String } VMM = { :name => "vmm", :short => "-v vmm_mad", :large => "--vm vmm_mad" , :description => "Set the virtualization driver for the host", :format => String } VNET = { :name => "vnm", :short => "-n vnet_mad", :large => "--net vnet_mad" , :description => "Set the network driver for the host", :format => String } CREAT_OPTIONS = [ IM, VMM, VNET, OneClusterHelper::CLUSTER ] ######################################################################## # Formatters for arguments ######################################################################## set :format, :hostid, OneHostHelper.to_id_desc do |arg| helper.to_id(arg) end set :format, :hostid_list, OneHostHelper.list_to_id_desc do |arg| helper.list_to_id(arg) end ######################################################################## # Commands ######################################################################## create_desc = <<-EOT.unindent Creates a new Host EOT command :create, create_desc, :hostname, :options=>CREAT_OPTIONS do if options[:im].nil? or options[:vmm].nil? or options[:vnm].nil? STDERR.puts "Drivers are mandatory to create a host:" STDERR.puts "\t -i information driver" STDERR.puts "\t -v hypervisor driver" STDERR.puts "\t -n network driver" exit -1 end cid = options[:cluster] || ClusterPool::NONE_CLUSTER_ID helper.create_resource(options) do |host| host.allocate(args[0], options[:im], options[:vmm], options[:vnm], cid) end end delete_desc = <<-EOT.unindent Deletes the given Host EOT command :delete, delete_desc, [:range, :hostid_list] do helper.perform_actions(args[0],options,"deleted") do |host| host.delete end end enable_desc = <<-EOT.unindent Enables the given Host EOT command :enable, enable_desc, [:range,:hostid_list] do helper.perform_actions(args[0],options,"enabled") do |host| host.enable end end disable_desc = <<-EOT.unindent Disables the given Host EOT command :disable, disable_desc, [:range,:hostid_list] do helper.perform_actions(args[0],options,"disabled") do |host| host.disable end end update_desc = <<-EOT.unindent Update the template contents. If a path is not provided the editor will be launched to modify the current content. EOT command :update, update_desc, :hostid, [:file, nil] do helper.perform_action(args[0],options,"updated") do |host| str = OpenNebulaHelper.update_template(args[0], host, args[1]) host.update(str) end end sync_desc = <<-EOT.unindent Synchronizes probes in /var/lib/one/remotes ($ONE_LOCATION/var/remotes in self-contained installations) with Hosts. The copy is performed the next time the Host is monitored EOT command :sync, sync_desc do if ONE_LOCATION FileUtils.touch "#{ONE_LOCATION}/var/remotes" else FileUtils.touch "/var/lib/one/remotes" end 0 end list_desc = <<-EOT.unindent Lists Hosts in the pool EOT command :list, list_desc, :options=>CLIHelper::OPTIONS+OpenNebulaHelper::OPTIONS do helper.list_pool(options) end show_desc = <<-EOT.unindent Shows information for the given Host EOT command :show, show_desc, :hostid, :options=>OpenNebulaHelper::XML do helper.show_resource(args[0],options) end top_desc = <<-EOT.unindent Lists Hosts continuously EOT command :top, top_desc, :options=>CLIHelper::OPTIONS+OpenNebulaHelper::OPTIONS do helper.list_pool(options, true) end end