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
opts.on("--cloud-sync-interval-seconds SECONDS", Integer, "Cloud sync interval in seconds") do |val|
params['cloudSyncIntervalSeconds'] = val.to_i
end
opts.on("--cluster-sync-interval-seconds SECONDS", Integer, "Cluster sync interval in seconds") do |val|
params['clusterSyncIntervalSeconds'] = val.to_i
end
opts.on("--usage-retainment-period DAYS", Integer, "Retainment period for usage records") do |val|
params['usageRetainmentPeriod'] = val.to_i
end
opts.on("--invoice-retainment-period DAYS", Integer, "Retainment period for invoice records") do |val|
params['invoiceRetainmentPeriod'] = val.to_i
end
opts.on("--max-option-list-size NUMBER", Integer, "Max option list size (x10^3)") do |val|
params['maxOptionListSize'] = val.to_i
end
opts.on("--default-locale STRING", String, "Default locale for the appliance") do |val|
params['defaultLocale'] = val == 'null' ? nil : val
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
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