class SoftLayer::CLI
Constants
- COLUMNS
- OBJECT_MASK
- OUTPUT_TYPES
Public Instance Methods
cancel(*ids)
click to toggle source
# File lib/softlayer/cli.rb, line 120 def cancel(*ids) # Create the softlayer client client_opts = {} client_opts[:username] = options['username'] if options['username'] client_opts[:api_key] = options['api_key'] if options['api_key'] SoftLayer::Client.default_client = SoftLayer::Client.new(client_opts) problem_ids = [] done_ids = [] while ids.size > 0 server = nil begin server = SoftLayer::VirtualServer.server_with_id(ids.last) rescue begin server = SoftLayer::BareMetalServer.server_with_id(ids.last) rescue end end unless server STDERR.puts "No server with id #{id} was found." problem_ids << ids.pop next end begin server.cancel! done_ids << ids.pop rescue Exception => e STDERR.puts "Error cancelling server #{id}: #{e}" problem_ids << ids.pop end end puts "Cancelled #{done_ids.size} servers." if problem_ids.size > 0 puts "Had trouble cancelling servers #{problem_ids.join(', ')}." exit 1 end end
report()
click to toggle source
# File lib/softlayer/cli.rb, line 39 def report # Create the softlayer client client_opts = {} client_opts[:username] = options['username'] if options['username'] client_opts[:api_key] = options['api_key'] if options['api_key'] SoftLayer::Client.default_client = SoftLayer::Client.new(client_opts) search_opts = options['search'] ? {}.merge(options['search']) : {} search_opts.symbolize_keys! search_opts[:object_mask] = OBJECT_MASK search_opts[:result_limit] = { offset: 0, limit: 150 } column_opts = COLUMNS column_opts = options['columns'] if options['columns'].is_a? Array # Generate table rows = [] %w[BareMetalServer VirtualServer].each do |class_name| # Do for both VMs and physical servers loop do servers = SoftLayer.const_get(class_name).find_servers(search_opts) servers.each do |server| # Ignore disconnected servers next if server.respond_to?(:status) && server.status == 'DISCONNECTED' # Ignore cancelled servers cancellation_date = server['billingItem'] && server['billingItem']['cancellationDate'] next unless cancellation_date.nil? || cancellation_date.strip.empty? # Gather column data row = [] row << server.id if column_opts.include? 'id' row << class_name if column_opts.include? 'type' row << server.fqdn if column_opts.include? 'hostname' row << (server['primaryIpAddress'] || server['primaryBackendIpAddress']) if column_opts.include? 'ip' row << server['datacenter']['longName'] if column_opts.include? 'datacenter' if server['billingItem'] cost = server['billingItem']['recurringFee'].to_f if (server['billingItem']['hourlyRecurringFee'] && !server['billingItem']['hourlyRecurringFee'].strip.empty?) cost = server['billingItem']['hourlyRecurringFee'].to_f * 24 * 30 end server['billingItem']['activeAssociatedChildren'].each do |child| if child['hourlyRecurringFee'] && !child['hourlyRecurringFee'].strip.empty? cost += (child['hourlyRecurringFee'].to_f * 24 * 30) else cost += child['recurringFee'].to_f end end row << cost.round(2) if column_opts.include? 'cost' user_record = server['billingItem']['orderItem']['order']['userRecord'] row << user_record['username'] if column_opts.include? 'username' row << "#{user_record['firstName']} #{user_record['lastName']}" if column_opts.include? 'name' row << user_record['email'] if column_opts.include? 'email' else # Allow report to continue even when no billing item is found row << '' if column_opts.include? 'cost' row << '' if column_opts.include? 'username' row << '' if column_opts.include? 'name' row << '' if column_opts.include? 'email' end row << server['provisionDate'] if column_opts.include? 'provision_date' rows << row end break if servers.size < search_opts[:result_limit][:limit] search_opts[:result_limit][:offset] += search_opts[:result_limit][:limit] end end # Output CLIFormatter.format( rows, options['format'], COLUMNS.reject { |c| !column_opts.include?(c) }, options['output_file'] ) end