class Pvcglue::Packages

Attributes

errors[RW]
options[RW]
post_install_max_retry_count[RW]
post_install_max_retry_seconds[RW]
post_install_retry_delay_seconds[RW]

Public Class Methods

apply(minion, options = {}) click to toggle source
# File lib/pvcglue/packages.rb, line 4
def self.apply(minion, options = {})
  package = new(minion, options)
  unless package.run
    raise package.full_error_message if package.errors?
  end
end
new(minion, options = {}) click to toggle source
# File lib/pvcglue/packages.rb, line 17
def initialize(minion, options = {})
  @minion = minion
  @options = options
  @errors = []
end

Public Instance Methods

connection() click to toggle source
# File lib/pvcglue/packages.rb, line 110
def connection
  @minion.connection
end
docs() click to toggle source
# File lib/pvcglue/packages.rb, line 23
def docs
  Pvcglue.docs
end
errors?() click to toggle source
# File lib/pvcglue/packages.rb, line 27
def errors?
  errors.size > 0
end
full_error_message() click to toggle source
# File lib/pvcglue/packages.rb, line 31
def full_error_message
  errors.join('.  ')
end
get_minion_state(key = nil) click to toggle source
# File lib/pvcglue/packages.rb, line 140
def get_minion_state(key = nil)
  key = get_minion_state_key(key)
  get_minion_state_data
  connection.minion_state_data[key]
end
get_minion_state_data() click to toggle source
# File lib/pvcglue/packages.rb, line 129
def get_minion_state_data
  unless connection.minion_state_data
    if Pvcglue.reset_minion_state?
      Pvcglue.logger.warn('Minion state data reset.')
      connection.minion_state_data = {}
    else
      load_state_data
    end
  end
end
get_minion_state_key(key) click to toggle source
# File lib/pvcglue/packages.rb, line 146
def get_minion_state_key(key)
  # TODO:  Use a versioned state, so that when the Pvcglue version is updated, it will rebuild all
key || self.class.name.downcase.gsub(':', '_').to_sym
end
has_role?(roles) click to toggle source
# File lib/pvcglue/packages.rb, line 102
def has_role?(roles)
  minion.has_role?(roles)
end
has_roles?(roles) click to toggle source
# File lib/pvcglue/packages.rb, line 106
def has_roles?(roles)
  minion.has_role?(roles)
end
install!() click to toggle source
# File lib/pvcglue/packages.rb, line 68
def install!
  false
end
installed?() click to toggle source
# File lib/pvcglue/packages.rb, line 64
def installed?
  false
end
load_state_data() click to toggle source
# File lib/pvcglue/packages.rb, line 118
def load_state_data
  if connection.file_exists?(:root, minion_state_file_name)
    data = connection.read_from_file(:root, minion_state_file_name)
  else
    data = ''
  end
  # puts data
  connection.minion_state_data = TOML.parse(data, symbolize_keys: true)
end
minion() click to toggle source
# File lib/pvcglue/packages.rb, line 35
def minion
  @minion
end
minion_state_file_name() click to toggle source
# File lib/pvcglue/packages.rb, line 114
def minion_state_file_name
  ".minion_state_#{user_name}.toml"
end
post_install!() click to toggle source
# File lib/pvcglue/packages.rb, line 98
def post_install!

end
post_install_check?() click to toggle source
# File lib/pvcglue/packages.rb, line 72
def post_install_check?
  # override to do a different (more time consuming/more detailed) check
  installed?
end
post_install_check_with_retry?() click to toggle source
# File lib/pvcglue/packages.rb, line 83
def post_install_check_with_retry?
  self.post_install_max_retry_seconds = 0.0
  self.post_install_retry_delay_seconds = 0.0
  self.post_install_max_retry_count = 1
  started_at = Time.now.utc.to_f
  tries = 0
  begin
    return true if post_install_check?
    tries += 1
    Pvcglue.logger.debug('Failed post install check, retrying...')
    sleep(post_install_retry_delay_seconds)
  end until tries >= post_install_max_retry_count || Time.now.utc.to_f - started_at > post_install_max_retry_seconds
  false
end
post_install_retry(max_tries, delay_seconds = 0, max_seconds = 30) click to toggle source
# File lib/pvcglue/packages.rb, line 77
def post_install_retry(max_tries, delay_seconds = 0, max_seconds = 30)
  self.post_install_max_retry_seconds = max_seconds
  self.post_install_retry_delay_seconds = delay_seconds
  self.post_install_max_retry_count = max_tries
end
run() click to toggle source
# File lib/pvcglue/packages.rb, line 43
def run
  begin
    Pvcglue.logger_package_description = self.class.name
    unless installed?
      install!
      if post_install_check_with_retry?
        post_install!
      else
        # TODO:  Better error message

        errors << 'Install failed post install check.'
        Pvcglue.logger.error {full_error_message}
        return false
      end
    end
  ensure
    Pvcglue.logger_package_description = ''
  end
  true
end
set_minion_state(key = nil, value = nil) click to toggle source
# File lib/pvcglue/packages.rb, line 151
def set_minion_state(key = nil, value = nil)
  value ||= Time.now.utc
  key = get_minion_state_key(key)
  get_minion_state_data
  connection.minion_state_data[key] = value
  connection.write_to_file(:root, TOML.dump(connection.minion_state_data), minion_state_file_name)
end
user_name() click to toggle source
# File lib/pvcglue/packages.rb, line 39
def user_name
  @minion.remote_user_name
end