class Cloudkeeper::One::CLI

Constants

SIGINT
SIGNALS
SIGTERM

Public Instance Methods

sync() click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 96
def sync
  initialize_sync options
  grpc_server = GRPC::RpcServer.new
  grpc_server.add_http2_port Cloudkeeper::One::Settings[:'listen-address'], credentials
  grpc_server.handle Cloudkeeper::One::CoreConnector
  grpc_server.run_till_terminated
rescue SignalException => ex
  raise ex unless SIGNALS.include? ex.signo

  grpc_server.stop
rescue Cloudkeeper::One::Errors::InvalidConfigurationError => ex
  abort ex.message
rescue StandardError => ex
  logger.error "Unexpected error: #{ex.message}"
  raise ex
end
version() click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 114
def version
  $stdout.puts Cloudkeeper::One::VERSION
end

Private Instance Methods

all_options_available(required_options) click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 141
def all_options_available(required_options)
  required_options.reduce(true) { |acc, elem| Cloudkeeper::One::Settings[elem] && acc }
end
credentials() click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 145
def credentials
  return :this_port_is_insecure unless Cloudkeeper::One::Settings[:authentication]

  GRPC::Core::ServerCredentials.new(
    File.read(Cloudkeeper::One::Settings[:'core-certificate']),
    [
      private_key: File.read(Cloudkeeper::One::Settings[:key]),
      cert_chain: File.read(Cloudkeeper::One::Settings[:certificate])
    ],
    true
  )
end
initialize_configuration(options) click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 158
def initialize_configuration(options)
  Cloudkeeper::One::Settings.clear
  Cloudkeeper::One::Settings.merge! options.to_hash

  gem_dir = File.realdirpath(File.join(File.dirname(__FILE__), '..', '..', '..'))
  Cloudkeeper::One::Settings[:'appliances-template-dir'] = File.join(gem_dir, 'config', 'templates') \
    unless Cloudkeeper::One::Settings[:'appliances-template-dir']
  Cloudkeeper::One::Settings[:'opennebula-api-call-timeout'] = \
    ChronicDuration.parse Cloudkeeper::One::Settings[:'opennebula-api-call-timeout'], keep_zero: true
end
initialize_logger() click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 169
def initialize_logger
  Cloudkeeper::One::Settings[:'logging-level'] = 'DEBUG' if Cloudkeeper::One::Settings[:debug]

  logging_file = Cloudkeeper::One::Settings[:'logging-file']
  logging_level = Cloudkeeper::One::Settings[:'logging-level']

  Yell.new :stdout, name: Object, level: logging_level.downcase, format: Yell::DefaultFormat
  Object.send :include, Yell::Loggable

  setup_file_logger(logging_file) if logging_file

  logger.debug 'Running in debug mode...'
end
initialize_sync(options) click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 122
def initialize_sync(options)
  initialize_configuration options
  validate_configuration!
  initialize_logger
  logger.debug "cloudkeeper-one 'sync' called with parameters: #{Cloudkeeper::One::Settings.to_hash.inspect}"
end
setup_file_logger(logging_file) click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 183
def setup_file_logger(logging_file)
  unless (File.exist?(logging_file) && File.writable?(logging_file)) || File.writable?(File.dirname(logging_file))
    logger.error "File #{logging_file} isn't writable"
    return
  end

  logger.adapter :file, logging_file
end
validate_configuration!() click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 129
def validate_configuration!
  validate_configuration_group! :authentication,
                                %i[certificate key core-certificate],
                                'Authentication configuration missing'
end
validate_configuration_group!(flag, required_options, error_message) click to toggle source
# File lib/cloudkeeper/one/cli.rb, line 135
def validate_configuration_group!(flag, required_options, error_message)
  return unless Cloudkeeper::One::Settings[flag]

  raise Cloudkeeper::One::Errors::InvalidConfigurationError, error_message unless all_options_available(required_options)
end