class OneacctOpts

Class for parsing command line arguments

Constants

BLOCKING_DEFAULT
COMPATIBILITY_DEFAULT
TIMEOUT_DEFAULT

Public Class Methods

check_options_restrictions(options) click to toggle source

Make sure command line parameters are sane

# File lib/oneacct_opts.rb, line 122
def self.check_options_restrictions(options)
  # make sure only one time option is used
  if (options.records_from || options.records_to) && options.records_for
    fail ArgumentError, 'Cannot use both time period and time range options.'
  end

  # make sure date range make sense
  if options.records_from && options.records_to && options.records_from >= options.records_to
    fail ArgumentError, 'Wrong time range for records retrieval.'
  end

  # make sure only one group restriction is used
  if options.include_groups && options.exclude_groups
    fail ArgumentError, 'Mixing of group options is not possible.'
  end

  # make sure group file option is not used without specifying group restriction type
  unless options.include_groups || options.exclude_groups
    if options.groups_file
      fail ArgumentError, 'Cannot use group file without specifying group restriction type.'
    end
  end

  # make sure that timeout option is not used without blocking option
  if options.timeout && !options.blocking
    fail ArgumentError, 'Cannot set timeout without a blocking mode.'
  end
end
check_output_type_specific_settings() click to toggle source
# File lib/oneacct_opts.rb, line 173
def self.check_output_type_specific_settings
  if APEL_OT.include?(Settings.output['output_type'])
    unless Settings.output['apel'] && Settings.output.apel['site_name'] &&
        Settings.output.apel['cloud_type'] && Settings.output.apel['endpoint']
      fail ArgumentError, 'Missing some mandatory parameters for APEL output type. Check your configuration file.'
    end
  end

  if PBS_OT.include?(Settings.output['output_type']) && Settings.output['pbs']
    Settings.output.pbs['realm'] ||= 'META'
    Settings.output.pbs['queue'] ||= 'cloud'
    Settings.output.pbs['scratch_type'] ||= 'local'
    Settings.output.pbs['host_identifier'] ||= 'on_localhost'
  end

  if LOGSTASH_OT.include?(Settings.output['output_type'])
    unless Settings.output['logstash'] && Settings.output.logstash['host'] && Settings.output.logstash['port']
      fail ArgumentError, 'Missing some mandatory parameters for logstash output type. Check your configuration file.'
    end
  end
end
check_restrictions(options) click to toggle source
# File lib/oneacct_opts.rb, line 116
def self.check_restrictions(options)
  check_options_restrictions(options)
  check_settings_restrictions
end
check_settings_restrictions() click to toggle source

Make sure configuration is sane

# File lib/oneacct_opts.rb, line 152
def self.check_settings_restrictions
  # make sure all mandatory parameters are set
  unless Settings['output'] && Settings.output['output_dir'] && Settings.output['output_type']
    fail ArgumentError, 'Missing some mandatory parameters. Check your configuration file.'
  end

  # make sure log file is specified while loggin to file
  if Settings['logging'] && Settings.logging['log_type'] == 'file' &&
     !Settings.logging['log_file']
    fail ArgumentError, 'Missing file for logging. Check your configuration file.'
  end

  check_output_type_specific_settings

  # make sure specified template really exists
  template_filename = OneWriter.template_filename(Settings.output['output_type'])
  unless File.exist?(template_filename)
    fail ArgumentError, "Non-existing template #{Settings.output['output_type']}."
  end
end
parse(args) click to toggle source
# File lib/oneacct_opts.rb, line 15
def self.parse(args)
  options = OpenStruct.new

  opt_parser = OptionParser.new do |opts|
    opts.banner = 'Usage oneacct-export [options]'
    opts.separator ''

    opts.on('--records-from TIME', Time,
            'Retrieves only records newer than TIME') do |time|
      options.records_from = time
    end

    opts.on('--records-to TIME', Time,
            'Retrieves only records older than TIME') do |time|
      options.records_to = time
    end

    opts.on('--records-for PERIOD',
            'Retrieves only records within the time PERIOD') do |period|
      options.records_for = period
    end

    opts.on('--include-groups [GROUP1,GROUP2,...]', Array,
            'Retrieves only records of virtual machines which '\
            'belong to the specified groups') do |groups|
      groups = [] unless groups
      options.include_groups = groups
    end

    opts.on('--exclude-groups [GROUP1,GROUP2,...]', Array,
            'Retrieves only records of virtual machines which '\
            "don't belong to the specified groups") do |groups|
      groups = [] unless groups
      options.exclude_groups = groups
    end

    opts.on('--group-file FILE',
            'If --include-groups or --exclude-groups specified, '\
            'loads groups from file FILE') do |file|
      options.groups_file = file
    end

    opts.on('-b', '--[no-]blocking', 'Run in a blocking mode - '\
            'wait until all submitted jobs are processed') do |blocking|
      options.blocking = blocking
    end

    opts.on('-t', '--timeout N', Integer, 'Timeout for blocking mode in seconds. '\
            'Default is 1 hour.') do |timeout|
      options.timeout = timeout
    end

    opts.on('-c', '--[no-]compatibility-mode', 'Run in compatibility mode - '\
            'supports OpenNebula 4.4.x') do |compatibility|
      options.compatibility = compatibility
    end

    opts.on('--harden-ssl-security', 'Sets basic SSL options for better security.') do
        OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:options] |= OpenSSL::SSL::OP_NO_SSLv2
        OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:options] |= OpenSSL::SSL::OP_NO_SSLv3
        OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:options] |= OpenSSL::SSL::OP_NO_COMPRESSION
    end

    opts.on('--ssl-cipher-suite CIPHER_SUITE', 'Sets SSL cipher suite.') do |suite|
      OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = suite
    end

    opts.on('--ssl-version VERSION', 'Sets SSL version') do |version|
      OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = version
    end

    opts.on("--skip-ca-check", "Skip server certificate verification [NOT recommended]") do
        silence_warnings { OpenSSL::SSL.const_set(:VERIFY_PEER, OpenSSL::SSL::VERIFY_NONE) }
    end

    opts.on_tail('-h', '--help', 'Shows this message') do
      puts opts
      exit
    end

    opts.on_tail('-v', '--version', 'Shows version') do
      puts OneacctExporter::VERSION
      exit
    end
  end

  opt_parser.parse!(args)
  set_defaults(options)

  check_restrictions(options)

  options
end
set_defaults(options) click to toggle source

Set default values for not specified options

# File lib/oneacct_opts.rb, line 110
def self.set_defaults(options)
  options.blocking = BLOCKING_DEFAULT unless options.blocking
  options.timeout = TIMEOUT_DEFAULT if options.blocking unless options.timeout
  options.compatibility = COMPATIBILITY_DEFAULT unless options.compatibility
end
silence_warnings() { || ... } click to toggle source
# File lib/oneacct_opts.rb, line 195
def self.silence_warnings
  old_verbose, $VERBOSE = $VERBOSE, nil
  yield
ensure
  $VERBOSE = old_verbose
end