class Morpheus::Cli::TenantsCommand
Public Class Methods
new()
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 15 def initialize() @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance end
Public Instance Methods
_get(id, options={})
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 121 def _get(id, options={}) args = [id] # heh @accounts_interface.setopts(options) if options[:dry_run] if args[0].to_s =~ /\A\d{1,}\Z/ print_dry_run @accounts_interface.dry.get(args[0].to_i) else print_dry_run @accounts_interface.dry.list({name:args[0]}) end return end account = find_account_by_name_or_id(args[0]) exit 1 if account.nil? json_response = {'account' => account} render_result = render_with_format(json_response, options, 'account') return 0 if render_result print_h1 "Tenant Details", [], options print_description_list(account_column_definitions, account, options) print reset,"\n" return 0 end
account_groups(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 30 def account_groups(args) Morpheus::Cli::AccountGroupsCommand.new.handle(args) end
add(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 149 def add(args) options = {} params = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[name]") build_option_type_options(opts, options, add_account_option_types) build_standard_add_options(opts, options) opts.footer = <<-EOT Create a new tenant. [name] is required. Name [role] is required. Base Role name or ID EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, min:0, max:2) options[:options]['name'] = args[0] if args[0] #options[:options]['role'] = {'id' => args[1]} if args[1] connect(options) object_key = 'account' # 'tenant' someday payload = {} if options[:payload] payload = options[:payload] payload.deep_merge!({object_key => parse_passed_options(options)}) else payload.deep_merge!({object_key => parse_passed_options(options)}) v_prompt = Morpheus::Cli::OptionTypes.prompt(add_account_option_types, options[:options], @api_client, options[:params]) payload.deep_merge!({object_key => v_prompt}) end @accounts_interface.setopts(options) if options[:dry_run] print_dry_run @accounts_interface.dry.create(payload) return end json_response = @accounts_interface.create(payload) render_response(json_response, options, object_key) do account = json_response[object_key] print_green_success "Tenant #{account['name']} added" return _get(account["id"], options) end end
connect(opts)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 19 def connect(opts) @api_client = establish_remote_appliance_connection(opts) @account_users_interface = @api_client.account_users @accounts_interface = @api_client.accounts @roles_interface = @api_client.roles end
count(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 72 def count(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[options]") build_common_options(opts, options, [:query, :remote, :dry_run]) opts.footer = "Get the number of tenants." end optparse.parse!(args) connect(options) begin params = {} params.merge!(parse_list_options(options)) @accounts_interface.setopts(options) if options[:dry_run] print_dry_run @accounts_interface.dry.list(params) return end json_response = @accounts_interface.list(params) # print number only if json_response['meta'] && json_response['meta']['total'] print cyan, json_response['meta']['total'], reset, "\n" else print yellow, "unknown", reset, "\n" end rescue RestClient::Exception => e print_rest_exception(e, options) exit 1 end end
get(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 102 def get(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[tenant]") build_standard_get_options(opts, options) opts.footer = <<-EOT Get details about a tenant (account). [tenant] is required. This is the name or id of a tenant. Supports 1-N arguments. EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, min:1) connect(options) id_list = parse_id_list(args) return run_command_for_each_arg(id_list) do |arg| _get(arg, options) end end
handle(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 26 def handle(args) handle_subcommand(args) end
list(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 34 def list(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[search phrase]") build_standard_list_options(opts, options) opts.footer = "List tenants." end optparse.parse!(args) # verify_args!(args:args, optparse:optparse, count:0) options[:phrase] = args.join(" ") if args.count > 0 connect(options) params = {} params.merge!(parse_list_options(options)) @accounts_interface.setopts(options) if options[:dry_run] print_dry_run @accounts_interface.dry.list(params) return 0, nil end json_response = @accounts_interface.list(params) render_response(json_response, options, "accounts") do accounts = json_response['accounts'] title = "Morpheus Tenants" subtitles = [] subtitles += parse_list_subtitles(options) print_h1 title, subtitles if accounts.empty? print cyan,"No tenants found.",reset,"\n" else print cyan print as_pretty_table(accounts, list_account_column_definitions, options) print_results_pagination(json_response) end print reset,"\n" end return 0, nil end
remove(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 243 def remove(args) params = {} options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[tenant]") opts.on('--remove-resources [on|off]', ['on','off'], "Remove Associated Instances. Default is off.") do |val| params[:removeResources] = val.nil? ? 'on' : val end build_standard_remove_options(opts, options) opts.footer = <<-EOT Delete a tenant. [tenant] is required. This is the name or id of a tenant. EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, count:1) optparse.parse!(args) connect(options) begin # allow finding by ID since name is not unique! account = find_account_by_name_or_id(args[0]) return 1, "tenant not found" if account.nil? unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the tenant #{account['name']}?") return 9, "aborted command" end @accounts_interface.setopts(options) if options[:dry_run] print_dry_run @accounts_interface.dry.destroy(account['id'], params) return end json_response = @accounts_interface.destroy(account['id'], params) render_response(json_response, options) do print_green_success "Tenant #{account['name']} removed" end rescue RestClient::Exception => e print_rest_exception(e, options) exit 1 end end
update(args)
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 191 def update(args) options = {} params = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage("[tenant]") build_option_type_options(opts, options, update_account_option_types) opts.on('--active [on|off]', String, "Can be used to disable a tenant") do |val| options[:options]['active'] = val.to_s.empty? || val.to_s == 'on' || val.to_s == 'true' end build_standard_update_options(opts, options) opts.footer = <<-EOT Update an existing tenant. [tenant] is required. Tenant name or ID EOT end optparse.parse!(args) verify_args!(args:args, optparse:optparse, count:1) connect(options) account = find_account_by_name_or_id(args[0]) return [1, "account not found"] if account.nil? object_key = 'account' # 'tenant' someday payload = {} if options[:payload] payload = options[:payload] payload.deep_merge!({object_key => parse_passed_options(options)}) else payload.deep_merge!({object_key => parse_passed_options(options)}) v_prompt = Morpheus::Cli::OptionTypes.prompt(update_account_option_types, options[:options].merge(:no_prompt => true), @api_client, options[:params]) payload.deep_merge!({object_key => v_prompt}) # remove empty role object.. todo: prompt() or deep_compact! needs to handle this! if payload[object_key]['role'] && payload[object_key]['role'].empty? payload[object_key].delete('role') end if payload[object_key].empty? raise_command_error "Specify at least one option to update.\n#{optparse}" end end @accounts_interface.setopts(options) if options[:dry_run] print_dry_run @accounts_interface.dry.update(account['id'], payload) return end json_response = @accounts_interface.update(account['id'], payload) render_response(json_response, options, object_key) do account = json_response[object_key] print_green_success "Tenant #{account['name']} updated" return _get(account["id"], options) end end
Private Instance Methods
add_account_option_types()
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 285 def add_account_option_types [ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 1}, {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'displayOrder' => 2}, {'fieldContext' => 'role', 'fieldName' => 'id', 'fieldLabel' => 'Base Role', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params| @roles_interface.list(nil, {roleType:'account'})['roles'].collect {|it| {"name" => (it["authority"] || it["name"]), "value" => it["id"]} } }, 'displayOrder' => 3}, {'fieldName' => 'currency', 'fieldLabel' => 'Currency', 'type' => 'text', 'defaultValue' => 'USD', 'displayOrder' => 4} ] end
update_account_option_types()
click to toggle source
# File lib/morpheus/cli/commands/tenants_command.rb, line 298 def update_account_option_types list = add_account_option_types() # list = list.reject {|it| ["interval"].include? it['fieldName'] } list.each {|it| it.delete('required') } list.each {|it| it.delete('defaultValue') } list end