class Morpheus::Cli::ApplianceSettingsCommand
Public Instance Methods
connect(opts)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 13 def connect(opts) @api_client = establish_remote_appliance_connection(opts) @appliance_settings_interface = @api_client.appliance_settings @roles_interface = @api_client.roles end
get(args)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 23 def get(args) options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = subcommand_usage() build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote]) opts.footer = "Get appliance settings." end optparse.parse!(args) connect(options) if args.count != 0 raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}" return 1 end begin @appliance_settings_interface.setopts(options) if options[:dry_run] print_dry_run @appliance_settings_interface.dry.get() return end json_response = @appliance_settings_interface.get() if options[:json] puts as_json(json_response, options, "applianceSettings") return 0 elsif options[:yaml] puts as_yaml(json_response, options, "applianceSettings") return 0 elsif options[:csv] puts records_as_csv([json_response['applianceSettings']], options) return 0 end appliance_settings = json_response['applianceSettings'] print_h1 "Appliance Settings" print cyan description_cols = { "Appliance URL" => lambda {|it| it['applianceUrl'] }, "Internal Appliance URL (PXE)" => lambda {|it| it['internalApplianceUrl'] }, "API Allowed Origins" => lambda {|it| it['apiAllowedOrigins'] }, # Tenant Management Settings "Registration Enabled" => lambda {|it| format_boolean(it['registrationEnabled']) }, "Default Tenant Role" => lambda {|it| it['defaultRoleId'] }, "Default User Role" => lambda {|it| it['defaultUserRoleId'] }, "Docker Privileged Mode" => lambda {|it| format_boolean(it['dockerPrivilegedMode']) }, # User Management Settings "Expire Password After" => lambda {|it| format_days(it['expirePwdDays']) }, "Disable User After Attempts" => lambda {|it| it['disableAfterAttempts'] == 0 ? 'Disabled' : it['disableAfterAttempts']}, "Disable User if Inactive For" => lambda {|it| format_days(it['disableAfterDaysInactive']) }, "Send warning email before deactivating" => lambda {|it| format_days(it['warnUserDaysBefore']) }, # Email Settings "SMTP From Address" => lambda {|it| it['smtpMailFrom'] }, "SMTP Server" => lambda {|it| it['smtpServer'] }, "SMTP Port" => lambda {|it| it['smtpPort'] }, "SMTP SSL Enabled" => lambda {|it| format_boolean(it['smtpSSL']) }, "SMTP TLS Encryption" => lambda {|it| format_boolean(it['smtpTLS']) }, "SMTP User" => lambda {|it| it['smtpUser'] }, "SMTP Password" => lambda {|it| it['smtpPassword'] }, # Proxy Settings "Proxy Host" => lambda {|it| it['proxyHost'] }, "Proxy Port" => lambda {|it| it['proxyPort'] }, "Proxy User" => lambda {|it| it['proxyUser'] }, "Proxy Password" => lambda {|it| it['proxyPassword'] }, "Proxy Domain" => lambda {|it| it['proxyDomain'] }, "Proxy Workstation" => lambda {|it| it['proxyWorkstation'] }, # Currency Settings "Currency Provider" => lambda {|it| it['currencyProvider'] }, "Currency Provider API Key" => lambda {|it| it['currencyKey'] }, # Retention Settings "Stats Retainment Period" => lambda {|it| it['statsRetainmentPeriod'] ? it['statsRetainmentPeriod'].to_s + ' days' : '' }, } print_description_list(description_cols, appliance_settings) enabled_zone_types = appliance_settings['enabledZoneTypes'] if enabled_zone_types.nil? || enabled_zone_types.empty? print_h2 "Enabled Clouds" print cyan print yellow "No Clouds Enabled" else print_h2 "Enabled Clouds" print cyan print enabled_zone_types.collect {|it| it['name']}.join(', ') end 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/appliance_settings_command.rb, line 19 def handle(args) handle_subcommand(args) end
reindex(args)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 334 def reindex(args) params = {} options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = opts.banner = subcommand_usage() build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options]) opts.footer = "Reindex all search data." end optparse.parse!(args) connect(options) verify_args!(args:args, optparse:optparse, count:0) confirm!("Are you sure you would like reindex all search data?", options) @appliance_settings_interface.setopts(options) if options[:dry_run] print_dry_run @appliance_settings_interface.dry.reindex(params) return end json_response = @appliance_settings_interface.reindex(params) render_response(json_response, options) do print_green_success "Reindexing all search data..." end return 0, nil end
toggle_maintenance(args)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 303 def toggle_maintenance(args) params = {} options = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = opts.banner = subcommand_usage() opts.on("--enabled [on|off]", String, "Enabled (on) or Disabled (off)") do |val| params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == '' end build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options]) opts.footer = "Toggle maintenance mode." end optparse.parse!(args) connect(options) verify_args!(args:args, optparse:optparse, count:0) if params['enabled'].nil? confirm!("Are you sure you would like to toggle maintenance mode?", options) else confirm!("Are you sure you would like to toggle maintenance mode: #{params['enabled'] ? 'on' : 'off'}?", options) end @appliance_settings_interface.setopts(options) if options[:dry_run] print_dry_run @appliance_settings_interface.dry.maintenance(params) return end json_response = @appliance_settings_interface.maintenance(params) render_response(json_response, options) do print_green_success "Toggled maintenance mode: '#{params['enabled'] ? 'on' : 'off'}'" end return 0, nil end
update(args)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 116 def update(args) options = {} params = {} optparse = Morpheus::Cli::OptionParser.new do |opts| opts.banner = opts.banner = subcommand_usage() opts.on("--appliance-url STRING", String, "Appliance URL") do |val| params['applianceUrl'] = val == 'null' ? nil : val end opts.on("--internal-appliance-url STRING", String, "Internal appliance URL (PXE)") do |val| params['internalApplianceUrl'] = val == 'null' ? nil : val end opts.on("--api-allowed-origins STRING", String, "API allowed origins") do |val| params['corsAllowed'] = val == 'null' ? nil : val end opts.on("--registration-enabled [on|off]", ['on','off'], "Tenant registration enabled") do |val| params['registrationEnabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == '' end opts.on("--default-tenant-role ROLE", String, "Default tenant role authority or ID") do |val| if val == 'null' params['defaultRoleId'] = nil else options[:defaultTenantRole] = val end end opts.on("--default-user-role ROLE", String, "Default user role authority or ID") do |val| if val == 'null' params['defaultUserRoleId'] = nil else options[:defaultUserRole] = val end end opts.on("--docker-privileged-mode [on|off]", ['on','off'], "Docker privileged mode") do |val| params['dockerPrivilegedMode'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == '' end opts.on("--expire-pwd-days NUMBER", Integer, "Expire password after specified days. Set to 0 to disable this feature") do |val| params['expirePwdDays'] = val.to_i end opts.on("--disable-after-attempts NUMBER", Integer, "Disable user after attempts. Set to 0 to disable this feature") do |val| params['disableAfterAttempts'] = val.to_i end opts.on("--disable-after-days-inactive NUMBER", Integer, "Disable user if inactive for specified days. Set to 0 to disable this feature") do |val| params['disableAfterDaysInactive'] = val.to_i end opts.on("--warn-user-days-before NUMBER", Integer, "Send warning email before deactivating. Set to 0 to disable this feature") do |val| params['warnUserDaysBefore'] = val.to_i end opts.on("--smtp-from-email STRING", String, "From email address") do |val| params['smtpMailFrom'] = val == 'null' ? nil : val end opts.on("--smtp-server STRING", String, "SMTP server / host") do |val| params['smtpServer'] = val == 'null' ? nil : val end opts.on("--smtp-port NUMBER", String, "SMTP port") do |val| params['smtpPort'] = val == 'null' ? nil : val.to_i end opts.on("--smtp-ssl [on|off]", ['on','off'], "Use SSL for SMTP connections") do |val| params['smtpSSL'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == '' end opts.on("--smtp-tls [on|off]", ['on','off'], "Use TLS for SMTP connections") do |val| params['smtpTLS'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == '' end opts.on("--smtp-user STRING", String, "SMTP user") do |val| params['smtpUser'] = val == 'null' ? nil : val end opts.on("--smtp-password STRING", String, "SMTP password") do |val| params['smtpPassword'] = val == 'null' ? nil : val end opts.on("--proxy-host STRING", String, "Proxy host") do |val| params['proxyHost'] = val == 'null' ? nil : val end opts.on("--proxy-port NUMBER", String, "Proxy port") do |val| params['proxyPort'] = val == 'null' ? nil : val.to_i end opts.on("--proxy-user STRING", String, "Proxy user") do |val| params['proxyUser'] = val == 'null' ? nil : val end opts.on("--proxy-password STRING", String, "Proxy password") do |val| params['proxyPassword'] = val == 'null' ? nil : val end opts.on("--proxy-domain STRING", String, "Proxy domain") do |val| params['proxyDomain'] = val == 'null' ? nil : val end opts.on("--proxy-workstation STRING", String, "Proxy workstation") do |val| params['proxyWorkstation'] = val == 'null' ? nil : val end opts.on("--currency-provider STRING", String, "Currency provider") do |val| params['currencyProvider'] = val == 'null' ? nil : val end opts.on("--currency-key STRING", String, "Currency provider API key") do |val| params['currencyKey'] = val == 'null' ? nil : val end opts.on("--enable-all-clouds", "Set all cloud types enabled status on, can be used in conjunction with --disable-clouds") do params['enableAllZoneTypes'] = true end opts.on("--enable-clouds LIST", Array, "List of cloud types to set enabled status on, each item can be either name or ID") do |list| options[:enableZoneTypes] = list end opts.on("--disable-clouds LIST", Array, "List of cloud types to set enabled status off, each item can be either name or ID") do |list| options[:disableZoneTypes] = list end opts.on("--disable-all-clouds", "Set all cloud types enabled status off, can be used in conjunction with --enable-clouds options") do params['disableAllZoneTypes'] = true end opts.on("--stats-retainment-period DAYS", Integer, "Stats retainment period. The number of days stats should be available. Can be 30, 60, or 90.") do |val| params['statsRetainmentPeriod'] = val.to_i end build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote]) end optparse.parse!(args) connect(options) if args.count != 0 raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}" return 1 end begin parse_payload(options) do |payload| available_zone_types = @appliance_settings_interface.cloud_types['zoneTypes'] if options[:enableZoneTypes] params['enableZoneTypes'] = options[:enableZoneTypes].collect do |zone_type_id| zone_type = available_zone_types.find { |it| it['id'] == zone_type_id || it['id'].to_s == zone_type_id || it['name'] == zone_type_id } if zone_type.nil? print_red_alert "Cloud type #{zone_type_id} not found" exit 1 end zone_type['id'] end end if options[:disableZoneTypes] params['disableZoneTypes'] = options[:disableZoneTypes].collect do |zone_type_id| zone_type = available_zone_types.find { |it| it['id'] == zone_type_id || it['id'].to_s == zone_type_id || it['name'] == zone_type_id } if zone_type.nil? print_red_alert "Cloud type #{zone_type_id} not found" exit 1 end zone_type['id'] end end if options[:defaultTenantRole] role = find_role_by_name_or_id(nil, options[:defaultTenantRole]) if role.nil? exit 1 end params['defaultRoleId'] = role['id'] end if options[:defaultUserRole] role = find_role_by_name_or_id(nil, options[:defaultUserRole]) if role.nil? print_red_alert "Default user role #{options[:defaultUserRole]} not found" exit 1 end params['defaultUserRoleId'] = role['id'] end if params['currencyProvider'] currency_providers = @api_client.options.options_for_source('currencyProviders')['data'] currency_provider = currency_providers.find {|it| it['name'] == params['currencyProvider'] || it['value'] == params['currencyProvider']} if currency_provider.nil? print_red_alert "Invalid currency provider #{params['currencyProvider']}, valid options: #{currency_providers.collect {|it| it['value']}.join('|')}" exit 1 end end payload['applianceSettings'] = params end execute_api(@appliance_settings_interface, :update, nil, options, "applianceSettings") do |json_response| if json_response['success'] print_green_success "Updated appliance settings" get([] + (options[:remote] ? ["-r",options[:remote]] : [])) else #todo: API should return 400 on error and then this is not needed #print_red_alert "Error updating appliance settings" print_rest_errors(json_response) [1, "Error updating appliance settings"] end end rescue RestClient::Exception => e print_rest_exception(e, options) exit 1 end end
Private Instance Methods
format_days(days)
click to toggle source
# File lib/morpheus/cli/commands/appliance_settings_command.rb, line 360 def format_days(days) days ? (days == 0 ? 'Disabled' : days + ' Days') : '' end