class Morpheus::Cli::NetworkProxiesCommand
Public Class Methods
new()
click to toggle source
set_default_subcommand :list
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 13 def initialize() # @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance end
Public Instance Methods
add(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 156 def add(args) options = {} ip_range_list = nil optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage() opts.on('--name VALUE', String, "Name for this network proxy") do |val| options['name'] = val end opts.on('--proxy-host VALUE', String, "Proxy Host") do |val| options['proxyHost'] = val end opts.on('--proxy-port VALUE', String, "Proxy Port") do |val| options['proxyPort'] = val end opts.on('--proxy-user VALUE', String, "Proxy User") do |val| options['proxyUser'] = val end opts.on('--proxy-password VALUE', String, "Proxy Password") do |val| options['proxyPassword'] = val end opts.on('--proxy-domain VALUE', String, "Proxy Domain") do |val| options['proxyDomain'] = val end opts.on('--proxy-workstation VALUE', String, "Proxy Workstation") do |val| options['proxyWorkstation'] = val end opts.on('--visibility [private|public]', String, "Visibility") do |val| options['visibility'] = val end opts.on('--tenant ID', String, "Tenant Account ID") do |val| options['tenant'] = val end build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote]) opts.footer = "Create a new network proxy." + "\n" + "[name] is required and can be passed as --name instead." end optparse.parse!(args) if args.count > 1 print_error Morpheus::Terminal.angry_prompt puts_error "wrong number of arguments, expected 0-1 and got #{args.count}\n#{optparse}" return 1 end connect(options) begin # merge -O options into normally parsed options options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # support [name] as first argument if args[0] options['name'] = args[0] end # construct payload payload = nil if options[:payload] payload = options[:payload] else # prompt for network options payload = { 'networkProxy' => { # 'config' => {} } } # allow arbitrary -O options payload['networkProxy'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # Name if options['name'] payload['networkProxy']['name'] = options['name'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network proxy.'}], options) payload['networkProxy']['name'] = v_prompt['name'] end # Proxy Host if options['proxyHost'] != nil payload['networkProxy']['proxyHost'] = options['proxyHost'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyHost', 'fieldLabel' => 'Proxy Host', 'type' => 'text', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyHost'] = v_prompt['proxyHost'] unless v_prompt['proxyHost'].nil? end # Proxy Port if options['proxyPort'] != nil payload['networkProxy']['proxyPort'] = options['proxyPort'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPort', 'fieldLabel' => 'Proxy Port', 'type' => 'text', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyPort'] = v_prompt['proxyPort'] unless v_prompt['proxyPort'].nil? end # Proxy Username if options['proxyUser'] != nil payload['networkProxy']['proxyUser'] = options['proxyUser'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyUser', 'fieldLabel' => 'Proxy Username', 'type' => 'text', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyUser'] = v_prompt['proxyUser'] unless v_prompt['proxyUser'].nil? end # Proxy Password if options['proxyPassword'] != nil payload['networkProxy']['proxyPassword'] = options['proxyPassword'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPassword', 'fieldLabel' => 'Proxy Password', 'type' => 'password', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyPassword'] = v_prompt['proxyPassword'] unless v_prompt['proxyPassword'].nil? end # Proxy Domain if options['proxyDomain'] != nil payload['networkProxy']['proxyDomain'] = options['proxyDomain'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyDomain', 'fieldLabel' => 'Proxy Domain', 'type' => 'text', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyDomain'] = v_prompt['proxyDomain'] unless v_prompt['proxyDomain'].nil? end # Proxy Workstation if options['proxyWorkstation'] != nil payload['networkProxy']['proxyWorkstation'] = options['proxyWorkstation'] else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyWorkstation', 'fieldLabel' => 'Proxy Workstation', 'type' => 'text', 'required' => false, 'description' => ''}], options) payload['networkProxy']['proxyWorkstation'] = v_prompt['proxyWorkstation'] unless v_prompt['proxyWorkstation'].nil? end # Visibility if options['visibility'] payload['networkProxy']['visibility'] = options['visibility'].to_s.downcase else v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'defaultValue' => 'private'}], options) payload['networkProxy']['visibility'] = v_prompt['visibility'].to_s.downcase end # Tenant if options['tenant'] payload['networkProxy']['account'] = {'id' => options['tenant'].to_i} else begin available_accounts = @api_client.accounts.list({max:10000})['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id'], 'id' => it['id']}} account_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'tenant', 'fieldLabel' => 'Tenant', 'type' => 'select', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Tenant'}], options) if account_prompt['tenant'] payload['networkProxy']['account'] = {'id' => account_prompt['tenant']} end rescue puts "failed to load list of available tenants: #{ex.message}" end end end @network_proxies_interface.setopts(options) if options[:dry_run] print_dry_run @network_proxies_interface.dry.create(payload) return end json_response = @network_proxies_interface.create(payload) if options[:json] print JSON.pretty_generate(json_response) print "\n" elsif !options[:quiet] network_proxy = json_response['networkProxy'] print_green_success "Added network proxy #{network_proxy['name']}" get([network_proxy['id']]) end return 0 rescue RestClient::Exception => e print_rest_exception(e, options) exit 1 end end
connect(opts)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 17 def connect(opts) @api_client = establish_remote_appliance_connection(opts) @network_proxies_interface = @api_client.network_proxies @clouds_interface = @api_client.clouds @options_interface = @api_client.options end
get(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 93 def get(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[network-proxy]") build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote]) opts.footer = "Get details about a network proxy." + "\n" + "[network-proxy] is required. This is the name or id of a network proxy." end optparse.parse!(args) if args.count != 1 print_error Morpheus::Terminal.angry_prompt puts_error "#{command_name} missing argument: [network-proxy]\n#{optparse}" return 1 end connect(options) begin @network_proxies_interface.setopts(options) if options[:dry_run] if args[0].to_s =~ /\A\d{1,}\Z/ print_dry_run @network_proxies_interface.dry.get(args[0].to_i) else print_dry_run @network_proxies_interface.dry.list({name:args[0]}) end return end network_proxy = find_network_proxy_by_name_or_id(args[0]) return 1 if network_proxy.nil? json_response = {'networkProxy' => network_proxy} # skip redundant request # json_response = @network_proxies_interface.get(network_proxy['id']) network_proxy = json_response['networkProxy'] if options[:json] puts as_json(json_response, options, "networkProxy") return 0 elsif options[:yaml] puts as_yaml(json_response, options, "networkProxy") return 0 elsif options[:csv] puts records_as_csv([network_proxy], options) return 0 end print_h1 "Network Proxy Details" print cyan description_cols = { "ID" => 'id', "Name" => lambda {|it| it['name'] }, "Proxy Host" => lambda {|it| it['proxyHost'] }, "Proxy Port" => lambda {|it| it['proxyPort'] }, "Proxy Username" => lambda {|it| it['proxyUser'] }, "Proxy Password" => lambda {|it| it['proxyPassword'] }, # masked "Proxy Domain" => lambda {|it| it['proxyDomain'] }, "Proxy Workstation" => lambda {|it| it['proxyWorkstation'] }, "Visibility" => lambda {|it| it['visibility'].to_s.capitalize }, "Tenant" => lambda {|it| it['account'] ? it['account']['name'] : '' }, } print_description_list(description_cols, network_proxy) print reset,"\n" return 0 rescue RestClient::Exception => e print_rest_exception(e, options) return 1 end end
handle(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 24 def handle(args) handle_subcommand(args) end
list(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 28 def list(args) options = {} params = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage() build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote]) opts.footer = "List network proxies." end optparse.parse!(args) connect(options) begin params.merge!(parse_list_options(options)) @network_proxies_interface.setopts(options) if options[:dry_run] print_dry_run @network_proxies_interface.dry.list(params) return end json_response = @network_proxies_interface.list(params) network_proxies = json_response["networkProxies"] if options[:json] puts as_json(json_response, options, "networkProxies") return 0 elsif options[:yaml] puts as_yaml(json_response, options, "networkProxies") return 0 elsif options[:csv] puts records_as_csv(network_proxies, options) return 0 end title = "Morpheus Network Proxies" subtitles = [] subtitles += parse_list_subtitles(options) print_h1 title, subtitles if network_proxies.empty? print cyan,"No network proxies found.",reset,"\n" else rows = network_proxies.collect {|network_proxy| row = { id: network_proxy['id'], name: network_proxy['name'], host: network_proxy['proxyHost'], port: network_proxy['proxyPort'], visibility: network_proxy['visibility'].to_s.capitalize, tenant: network_proxy['account'] ? network_proxy['account']['name'] : '', owner: network_proxy['owner'] ? network_proxy['owner']['name'] : '', } row } columns = [:id, :name, :host, :port, :visibility, :tenant] if options[:include_fields] columns = options[:include_fields] end print cyan print as_pretty_table(rows, columns, options) print reset print_results_pagination(json_response, {:label => "network proxy", :n_label => "network proxies"}) end print reset,"\n" return 0 rescue RestClient::Exception => e print_rest_exception(e, options) exit 1 end end
remove(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 490 def remove(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[network-proxy]") build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run, :remote]) opts.footer = "Delete a network proxy." + "\n" + "[network-proxy] is required. This is the name or id of a network proxy." end optparse.parse!(args) if args.count < 1 print_error Morpheus::Terminal.angry_prompt puts_error "#{command_name} missing argument: [network-proxy]\n#{optparse}" return 1 end connect(options) begin network_proxy = find_network_proxy_by_name_or_id(args[0]) return 1 if network_proxy.nil? unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the network proxy: #{network_proxy['name']}?") return 9, "aborted command" end @network_proxies_interface.setopts(options) if options[:dry_run] print_dry_run @network_proxies_interface.dry.destroy(network_proxy['id']) return 0 end json_response = @network_proxies_interface.destroy(network_proxy['id']) if options[:json] print JSON.pretty_generate(json_response) print "\n" else print_green_success "Removed network proxy #{network_proxy['name']}" # list([]) end return 0 rescue RestClient::Exception => e print_rest_exception(e, options) return 1 end end
update(args)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 325 def update(args) options = {} ip_range_list = nil optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[network-proxy] [options]") opts.on('--name VALUE', String, "Name for this network proxy") do |val| options['name'] = val end opts.on('--proxy-host VALUE', String, "Proxy Host") do |val| options['proxyHost'] = val end opts.on('--proxy-port VALUE', String, "Proxy Port") do |val| options['proxyPort'] = val end opts.on('--proxy-user VALUE', String, "Proxy User") do |val| options['proxyUser'] = val end opts.on('--proxy-password VALUE', String, "Proxy Password") do |val| options['proxyPassword'] = val end opts.on('--proxy-domain VALUE', String, "Proxy Domain") do |val| options['proxyDomain'] = val end opts.on('--proxy-workstation VALUE', String, "Proxy Workstation") do |val| options['proxyWorkstation'] = val end opts.on('--visibility [private|public]', String, "Visibility") do |val| options['visibility'] = val end opts.on('--tenant ID', String, "Tenant Account ID") do |val| options['tenant'] = val end build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote]) opts.footer = "Update a network proxy." + "\n" + "[network-proxy] is required. This is the id of a network proxy." end optparse.parse!(args) if args.count != 1 print_error Morpheus::Terminal.angry_prompt puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}" return 1 end connect(options) begin network_proxy = find_network_proxy_by_name_or_id(args[0]) return 1 if network_proxy.nil? # merge -O options into normally parsed options options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # construct payload payload = nil if options[:payload] payload = options[:payload] else # prompt for network options payload = { 'networkProxy' => { } } # allow arbitrary -O options payload['networkProxy'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] # Name if options['name'] payload['networkProxy']['name'] = options['name'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network proxy.'}], options) # payload['networkProxy']['name'] = v_prompt['name'] end # Proxy Host if options['proxyHost'] != nil payload['networkProxy']['proxyHost'] = options['proxyHost'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyHost', 'fieldLabel' => 'Proxy Host', 'type' => 'text', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyHost'] = v_prompt['proxyHost'] unless v_prompt['proxyHost'].nil? end # Proxy Port if options['proxyPort'] != nil payload['networkProxy']['proxyPort'] = options['proxyPort'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPort', 'fieldLabel' => 'Proxy Port', 'type' => 'text', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyPort'] = v_prompt['proxyPort'] unless v_prompt['proxyPort'].nil? end # Proxy Username if options['proxyUser'] != nil payload['networkProxy']['proxyUser'] = options['proxyUser'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyUser', 'fieldLabel' => 'Proxy Username', 'type' => 'text', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyUser'] = v_prompt['proxyUser'] unless v_prompt['proxyUser'].nil? end # Proxy Password if options['proxyPassword'] != nil payload['networkProxy']['proxyPassword'] = options['proxyPassword'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPassword', 'fieldLabel' => 'Proxy Password', 'type' => 'password', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyPassword'] = v_prompt['proxyPassword'] unless v_prompt['proxyPassword'].nil? end # Proxy Domain if options['proxyDomain'] != nil payload['networkProxy']['proxyDomain'] = options['proxyDomain'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyDomain', 'fieldLabel' => 'Proxy Domain', 'type' => 'text', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyDomain'] = v_prompt['proxyDomain'] unless v_prompt['proxyDomain'].nil? end # Proxy Workstation if options['proxyWorkstation'] != nil payload['networkProxy']['proxyWorkstation'] = options['proxyWorkstation'] else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyWorkstation', 'fieldLabel' => 'Proxy Workstation', 'type' => 'text', 'required' => false, 'description' => ''}], options) # payload['networkProxy']['proxyWorkstation'] = v_prompt['proxyWorkstation'] unless v_prompt['proxyWorkstation'].nil? end # Visibility if options['visibility'] payload['networkProxy']['visibility'] = options['visibility'].to_s.downcase else # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'defaultValue' => 'private'}], options) # payload['networkProxy']['visibility'] = v_prompt['visibility'].to_s.downcase end # Tenant if options['tenant'] payload['networkProxy']['account'] = {'id' => options['tenant'].to_i} else # begin # available_accounts = @api_client.accounts.list({max:10000})['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id'], 'id' => it['id']}} # account_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'tenant', 'fieldLabel' => 'Tenant', 'type' => 'select', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Tenant'}], options) # if account_prompt['tenant'] # payload['networkProxy']['account'] = {'id' => account_prompt['tenant']} # end # rescue # puts "failed to load list of available tenants: #{ex.message}" # end end end @network_proxies_interface.setopts(options) if options[:dry_run] print_dry_run @network_proxies_interface.dry.update(network_proxy["id"], payload) return end json_response = @network_proxies_interface.update(network_proxy["id"], payload) if options[:json] puts as_json(json_response) else network_proxy = json_response['networkProxy'] print_green_success "Updated network proxy #{network_proxy['name']}" get([network_proxy['id']]) end return 0 rescue RestClient::Exception => e print_rest_exception(e, options) return 1 end end
Private Instance Methods
find_network_proxy_by_id(id)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 545 def find_network_proxy_by_id(id) begin json_response = @network_proxies_interface.get(id.to_i) return json_response['networkProxy'] rescue RestClient::Exception => e if e.response && e.response.code == 404 print_red_alert "Network Proxy not found by id #{id}" return nil else raise e end end end
find_network_proxy_by_name(name)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 559 def find_network_proxy_by_name(name) json_response = @network_proxies_interface.list({name: name.to_s}) network_proxies = json_response['networkProxies'] if network_proxies.empty? print_red_alert "Network Proxy not found by name #{name}" return nil elsif network_proxies.size > 1 print_red_alert "#{network_proxies.size} network proxies found by name #{name}" # print_networks_table(networks, {color: red}) rows = network_proxies.collect do |it| {id: it['id'], name: it['name']} end puts as_pretty_table(rows, [:id, :name], {color:red}) return nil else return network_proxies[0] end end
find_network_proxy_by_name_or_id(val)
click to toggle source
# File lib/morpheus/cli/commands/network_proxies_command.rb, line 537 def find_network_proxy_by_name_or_id(val) if val.to_s =~ /\A\d{1,}\Z/ return find_network_proxy_by_id(val) else return find_network_proxy_by_name(val) end end