class Morpheus::Cli::NetworkServersCommand
Public Instance Methods
add(args)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 25 def add(args) options = {params: {}} params = options[:params] ip_range_list = nil optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[name]") opts.on('--name VALUE', String, "Name for this network server") do |val| params['name'] = val end opts.on('--type VALUE', String, "Network Server Type code") do |val| params['type'] = val end # opts.on('--enabled [on|off]', String, "Can be used to disable the network server") do |val| # params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s.empty? # end # ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch'] #build_option_type_options(opts, options, add_network_server_option_types) build_option_type_options(opts, options, add_network_server_advanced_option_types) build_standard_add_options(opts, options) opts.footer = <<-EOT Create a new network server. [name] is required and can be passed as --name instead. Configuration options vary by network server type. EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, max: 1) connect(options) # support [name] as first argument if args[0] params['name'] = args[0] end # merge -O options into normally parsed options #params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # construct payload payload = nil if options[:payload] payload = options[:payload] payload.deep_merge!({rest_object_key => parse_passed_options(options)}) payload.deep_merge!({rest_object_key => params}) else payload = {} payload.deep_merge!({rest_object_key => parse_passed_options(options)}) # Name if !params['name'] params['name'] = prompt_value({'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network server.'}, options) # params['name'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network server.'}], params, @api_client, {}, options[:no_prompt])['name'] end # Network Server Type network_type_id = nil # use this optionSource networkServices which is really network service # where the response data is categories, each with a list ofservices (service types) network_services_options = @options_interface.options_for_source('networkServices',{})['data'] networking_category = network_services_options.find {|it| it['value'] == 'networkServer'} service_types = networking_category ? networking_category['services'] : [] network_server_type_options = service_types.collect {|it| {'name' => it['name'], 'value' => it['code'], 'code' => it['code'], 'id' => it['id']} } if network_server_type_options.empty? raise_command_error "No available network server types found" end # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'optionSource' => 'networkServerTypes', 'required' => true, 'description' => 'Choose a network server type.'}], options, @api_client, {}) #network_type_id = v_prompt['type'] # allow matching type by id, name or code selected_type = nil if params['type'] && params['type'].to_s =~ /\A\d{1,}\Z/ network_type_id = params['type'].to_i selected_type = network_server_type_options.find {|it| it['id'] == network_type_id } if selected_type.nil? raise_command_error "Network Server Type not found by id '#{params['type']}'" end network_type_code = selected_type['code'] else network_type_code = prompt_value({'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'selectOptions' => network_server_type_options, 'required' => true, 'description' => 'Choose a network server type.'}, options.merge(params)) #network_type_code = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'selectOptions' => network_server_type_options, 'required' => true, 'description' => 'Choose a network server type.'}], options, @api_client, {}, options[:no_prompt])['type'] selected_type = network_server_type_options.find {|it| it['code'] == network_type_code } if selected_type.nil? raise_command_error "Network Server Type not found by name or code '#{params['type']}'" end network_type_id = selected_type['id'] end params['type'] = network_type_code # prompt options by type network_server_type = @network_server_types_interface.get(network_type_id.to_i)['networkServerType'] # params['type'] = network_server_type['code'] type_options_types = network_server_type['optionTypes'] || [] type_options_types.reject! {|it| it['fieldName'] == 'visibility' } # skip visibility, its under advanced now option_result = prompt(network_server_type['optionTypes'], options.merge({:context_map => {'networkServer' => ''}})) params.deep_merge!(option_result) # advanced options advanced_option_types = add_network_server_advanced_option_types if advanced_option_types && !advanced_option_types.empty? v_prompt = Morpheus::Cli::OptionTypes.prompt(advanced_option_types, options[:options], @api_client, {}) v_prompt.deep_compact! v_prompt.booleanize! # 'on' => true params.deep_merge!(v_prompt) end payload.deep_merge!({rest_object_key => params}) end @network_servers_interface.setopts(options) if options[:dry_run] print_dry_run @network_servers_interface.dry.create(payload) return end json_response = @network_servers_interface.create(payload) render_response(json_response, options, 'networkServer') do network_server = json_response['networkServer'] print_green_success "Added network server #{network_server['name']}" _get(network_server['id'], {}, options) end end
handle(args)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 21 def handle(args) handle_subcommand(args) end
refresh(args)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 205 def refresh(args) options = {} params = {} ip_range_list = nil optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[network server]") # ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch'] build_standard_update_options(opts, options, [:query]) opts.footer = <<-EOT Refresh a network server. [network server] is required. This is the name or id of a network server. EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, count: 1) connect(options) # find network server to be updated network_server = find_network_server_by_name_or_id(args[0]) return 1 if network_server.nil? # construct query parameters params.merge!(parse_query_options(options)) # construct payload payload = nil if options[:payload] payload = options[:payload] else payload = options[:options].reject {|k,v| k.is_a?(Symbol) } end @network_servers_interface.setopts(options) if options[:dry_run] print_dry_run @network_servers_interface.dry.refresh(network_server["id"], params, payload) return end json_response = @network_servers_interface.refresh(network_server["id"], params, payload) render_response(json_response, options, 'networkServer') do #network_server = json_response['networkServer'] print_green_success "Refreshing network server #{network_server['name']}" #_get(network_server['id'], {}, options) end end
update(args)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 141 def update(args) options = {} params = {} ip_range_list = nil optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[network server] [options]") opts.on('--name VALUE', String, "Name for this network server") do |val| params['name'] = val end # opts.on('--enabled [on|off]', String, "Can be used to enable or disable the network server") do |val| # params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s.empty? # end # ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch'] #build_option_type_options(opts, options, update_network_server_option_types) build_option_type_options(opts, options, update_network_server_advanced_option_types) build_standard_update_options(opts, options) opts.footer = <<-EOT Update a network server. [network server] is required. This is the name or id of a network server. Configuration options vary by network server type. EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, count: 1) connect(options) # find network server to be updated network_server = find_network_server_by_name_or_id(args[0]) return 1 if network_server.nil? # merge -O options into normally parsed options params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # params['tenants'] = options['tenants'].collect {|it| {'id': it}} # advanced options advanced_option_types = update_network_server_advanced_option_types if advanced_option_types && !advanced_option_types.empty? v_prompt = Morpheus::Cli::OptionTypes.no_prompt(advanced_option_types, options[:options], @api_client, {}) v_prompt.deep_compact! v_prompt.booleanize! # 'on' => true params.deep_merge!(v_prompt) end # construct payload payload = nil if options[:payload] payload = options[:payload] else payload = { 'networkServer' => params } end @network_servers_interface.setopts(options) if options[:dry_run] print_dry_run @network_servers_interface.dry.update(network_server["id"], payload) return end json_response = @network_servers_interface.update(network_server["id"], payload) render_response(json_response, options, 'networkServer') do network_server = json_response['networkServer'] print_green_success "Updated network server #{network_server['name']}" _get(network_server['id'], {}, options) end end
Private Instance Methods
add_network_server_advanced_option_types()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 314 def add_network_server_advanced_option_types() [ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'category' => 'permissions', 'defaultValue' => 'private'}, {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'resultValueField' => 'id', 'optionSource' => lambda { |api_client, api_params| api_client.options.options_for_source("allTenants", {})['data'] }}, ] end
add_network_server_option_types()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 303 def add_network_server_option_types() [ {'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'optionSource' => lambda {|api_client, api_params| api_client.network_server_types.list({max:10000})['networkServerTypes'].collect { |it| {"name" => it["name"], "value" => it["code"]} } }, 'required' => true}, {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true}, {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false}, {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true}, ] end
find_network_server_by_id(id)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 270 def find_network_server_by_id(id) begin json_response = @network_servers_interface.get(id.to_i) return json_response['networkServer'] rescue RestClient::Exception => e if e.response && e.response.code == 404 print_red_alert "Network Server not found by id #{id}" return nil else raise e end end end
find_network_server_by_name(name)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 284 def find_network_server_by_name(name) json_response = @network_servers_interface.list({name: name.to_s}) network_servers = json_response['networkServers'] if network_servers.empty? print_red_alert "Network Server not found by name #{name}" return nil elsif network_servers.size > 1 print_red_alert "#{network_servers.size} network servers found by name #{name}" # print_networks_table(networks, {color: red}) rows = network_servers.collect do |it| {id: it['id'], name: it['name']} end puts as_pretty_table(rows, [:id, :name], {color:red}) return nil else return network_servers[0] end end
find_network_server_by_name_or_id(val)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 262 def find_network_server_by_name_or_id(val) if val.to_s =~ /\A\d{1,}\Z/ return find_network_server_by_id(val) else return find_network_server_by_name(val) end end
format_network_server_status(network_server, return_color=cyan)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 381 def format_network_server_status(network_server, return_color=cyan) out = "" status_string = network_server['status'] if status_string.nil? || status_string.empty? || status_string == "unknown" out << "#{white}UNKNOWN#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}" # elsif network_server['enabled'] == false # out << "#{red}DISABLED#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}" elsif status_string == 'ok' out << "#{green}#{status_string.upcase}#{return_color}" elsif status_string == 'error' || status_string == 'offline' out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}" else out << "#{yellow}#{status_string.upcase}#{return_color}" end out end
network_server_column_definitions(options)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 355 def network_server_column_definitions(options) columns = { "ID" => 'id', "Name" => lambda {|it| it['name'] }, "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' }, "URL" => lambda {|it| it['serviceUrl'] }, "Credentials" => lambda {|it| it['credential'] ? (it['credential']['type'] == 'local' ? '(Local)' : it['credential']['name']) : nil }, "Username" => lambda {|it| it['serviceUsername'] }, "Password" => lambda {|it| it['servicePassword'] }, "Service Mode" => lambda {|it| it['serviceMode'] }, "Service Path" => lambda {|it| it['servicePath'] }, "Network Filter" => lambda {|it| it['networkFilter'] }, "Tenant Match" => lambda {|it| it['tenantMatch'] }, #"Enabled" => lambda {|it| format_boolean(it['enabled']) }, "Visibility" => lambda {|it| it['visibility'] ? it['visibility'].capitalize() : '' }, "Tenants" => lambda { |it| it['tenants'].collect {|tenant| tenant['name']}.join(', ') rescue '' }, "Status" => lambda {|it| format_network_server_status(it) }, "Created" => lambda {|it| format_local_dt(it['dateCreated']) }, "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) } } if options[:exclude_tenants] columns.delete("Tenants") end columns end
network_server_list_column_definitions(options)
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 342 def network_server_list_column_definitions(options) { "ID" => 'id', "Name" => lambda {|it| it['name'] }, "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' }, "URL" => lambda {|it| it['serviceUrl'] }, # "Enabled" => lambda {|it| format_boolean(it['enabled']) }, "Status" => lambda {|it| format_network_server_status(it) }, "Date Created" => lambda {|it| format_local_dt(it['dateCreated']) }, "Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }, } end
network_server_list_key()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 248 def network_server_list_key 'networkServers' end
network_server_object_key()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 252 def network_server_object_key 'networkServer' end
render_response_for_get(json_response, options)
click to toggle source
Calls superclass method
Morpheus::Cli::RestCommand#render_response_for_get
# File lib/morpheus/cli/commands/network_servers_command.rb, line 256 def render_response_for_get(json_response, options) record = json_response[rest_object_key] options[:exclude_tenants] = record['tenants'].nil? super(json_response, options) end
update_network_server_advanced_option_types()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 333 def update_network_server_advanced_option_types() list = add_network_server_advanced_option_types.collect {|it| it.delete('required') it.delete('defaultValue') it } list end
update_network_server_option_types()
click to toggle source
# File lib/morpheus/cli/commands/network_servers_command.rb, line 323 def update_network_server_option_types() list = add_network_server_option_types.collect {|it| it.delete('required') it.delete('defaultValue') it } list = list.reject {|it| ["type"].include? it['fieldName'] } list end