1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-04-01 06:50:25 +03:00

B #4425: add extended param to OneGate (#4429)

This commit is contained in:
Alejandro Huertas Herrero 2020-03-25 16:26:16 +01:00 committed by GitHub
parent f182365c80
commit 1a12129c8c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 14 deletions

View File

@ -299,9 +299,12 @@ module OneGate
return state_str
end
def self.print(json_hash)
def self.print(json_hash, extended = false)
OneGate.print_header("VM " + json_hash["VM"]["ID"])
OneGate.print_key_value("NAME", json_hash["VM"]["NAME"])
return unless extended
OneGate.print_key_value(
"STATE",
self.state_to_str(
@ -352,7 +355,7 @@ module OneGate
return STATE_STR[state_number.to_i]
end
def self.print(json_hash)
def self.print(json_hash, extended = false)
OneGate.print_header("SERVICE " + json_hash["SERVICE"]["id"])
OneGate.print_key_value("NAME", json_hash["SERVICE"]["name"])
OneGate.print_key_value("STATE", Service.state_str(json_hash["SERVICE"]['state']))
@ -364,7 +367,7 @@ module OneGate
if role["nodes"]
role["nodes"].each{ |node|
OneGate::VirtualMachine.print(node["vm_info"])
OneGate::VirtualMachine.print(node["vm_info"], extended)
}
end
@ -394,8 +397,9 @@ module OneGate
end
end
def get(path)
def get(path, extra = nil)
req = Net::HTTP::Proxy(@host, @port)::Get.new(path)
req.body = extra if extra
do_request(req)
end
@ -512,7 +516,7 @@ Available commands
$ onegate hold [VMID]
$ onegate release [VMID]
$ onegate service show [--json]
$ onegate service show [--json][--extended]
$ onegate service scale --role ROLE --cardinality CARDINALITY
EOT
@ -545,6 +549,10 @@ OptionParser.new do |opts|
options[:json] = json
end
opts.on("", "--extended", "Print resource extended information") do |ext|
options[:extended] = ext
end
opts.on("-f", "--hard", "Hard option for power off operations") do |hard|
options[:hard] = hard
end
@ -640,13 +648,24 @@ when "vm"
when "service"
case ARGV[1]
when "show"
response = client.get("/service")
if options[:extended]
extra = {}
extra['extended'] = true
extra = URI.encode_www_form(extra)
end
response = client.get("/service", extra)
json_hash = OneGate.parse_json(response)
#pp json_hash
if options[:json]
puts JSON.pretty_generate(json_hash)
else
OneGate::Service.print(json_hash)
if options[:extended]
OneGate::Service.print(json_hash, true)
else
OneGate::Service.print(json_hash)
end
end
when "scale"
response = client.put(

View File

@ -298,12 +298,12 @@ helpers do
# If true the service hash is returned
# If false a halt is triggered
#
def check_vm_in_service(requested_vm_id, service_id, client)
def check_vm_in_service(requested_vm_id, service_id, client, extended = false)
service = get_service(service_id, client)
service_hash = JSON.parse(service)
response = build_service_hash(service_hash) rescue nil
response = build_service_hash(service_hash, client, extended) rescue nil
if response.nil?
error_msg = "Service #{service_id} is empty."
logger.error {error_msg}
@ -426,7 +426,7 @@ def build_vm_hash(vm_hash)
}
end
def build_service_hash(service_hash)
def build_service_hash(service_hash, client = nil, extended = false)
roles = service_hash["DOCUMENT"]["TEMPLATE"]["BODY"]["roles"]
if roles.nil?
@ -451,13 +451,18 @@ def build_service_hash(service_hash)
if (nodes = role["nodes"])
nodes.each do |vm|
vm_deploy_id = vm["deploy_id"].to_i
vm_info = vm["vm_info"]["VM"]
vm_running = vm["running"]
if extended
vm_info = get_vm(vm_deploy_id, client).to_hash
else
vm_info = vm["vm_info"]
end
vm_running = vm["running"]
role_info["nodes"] << {
"deploy_id" => vm_deploy_id,
"running" => vm["running"],
"vm_info" => build_vm_hash(vm_info)
"vm_info" => vm_info
}
end
end
@ -517,7 +522,7 @@ get '/service' do
source_vm = get_source_vm(request.env, client)
service_id = source_vm['USER_TEMPLATE/SERVICE_ID']
response = check_vm_in_service(source_vm['ID'], service_id, client)
response = check_vm_in_service(source_vm['ID'], service_id, client, params['extended'])
[200, response.to_json]
end