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