class Pvcglue::Minion
Public Instance Methods
build!()
click to toggle source
# File lib/pvcglue/minion.rb, line 5 def build! minion = self # for readability Pvcglue.logger.info('BUILD') { "Building #{machine_name}" } Pvcglue.docs.level_1_roles(minion) Pvcglue::Packages::SshKeyCheck.apply(minion) Pvcglue::Packages::AptRepos.apply(minion) Pvcglue::Packages::AptUpdate.apply(minion) Pvcglue::Packages::AptUpgrade.apply(minion) Pvcglue::Packages::Swap.apply(minion) Pvcglue::Packages::Apt.apply(minion) Pvcglue::Packages::Firewall.apply(minion) Pvcglue::Packages::UnattendedUpgrades.apply(minion) Pvcglue::Packages::Users.apply(minion) Pvcglue::Packages::AuthorizedKeys.apply(minion) Pvcglue::Packages::Slack.apply(minion) Pvcglue::Packages::Roles.apply(minion) # puts '='*175 end
create!()
click to toggle source
# File lib/pvcglue/minion.rb, line 54 def create! Pvcglue.logger.warn("Provisioning a machine for #{machine_name} on #{pvc_cloud_provider.name}...") # TODO: Tags. production, staging, load-balancer, web, worker, database, postgress, cache, memcache... name = machine_name capacity = pvc_cloud_provider.options.capacity image = pvc_cloud_provider.options.image region = pvc_cloud_provider.options.region if pvc_cloud_provider.options.initial_users ssh_keys = pvc_cloud_provider.options.initial_users.map { |description, ssh_key| ssh_key } else ssh_keys = [] end # backups = cloud_provider.backups.nil? ? true : cloud_provider.backups # default to true -- safety first! backups = pvc_cloud_provider.options.backups.nil? ? true : machine_options.cloud_provider.backups # default to true -- safety first! tags = pvc_cloud_provider.options.tags group = pvc_cloud_provider.options.group options = ::SafeMash.new( name: name, region: region, image: image, capacity: capacity, ssh_keys: ssh_keys, backups: backups, ipv6: false, tags: tags, group: group, ) machine = pvc_cloud_provider.create(options) self.machine = machine true end
get_cloud_provider_options()
click to toggle source
# File lib/pvcglue/minion.rb, line 42 def get_cloud_provider_options # Merge default and machine options options = machine_options.cloud_provider || ::SafeMash.new options.reverse_merge(default_cloud_provider) end
get_root_users()
click to toggle source
# File lib/pvcglue/minion.rb, line 126 def get_root_users if minion_manager? get_users_from_group('==manager_root_users==') else get_users_from_group('==lead_developers==') end end
get_user(user_name)
click to toggle source
# File lib/pvcglue/minion.rb, line 107 def get_user(user_name) Pvcglue.cloud.data.users.detect { |user| user.name == user_name } end
get_users()
click to toggle source
# File lib/pvcglue/minion.rb, line 134 def get_users if minion_manager? get_users_from_group('==manager_users==') else get_users_from_group('==developers==') end end
get_users_from_group(names)
click to toggle source
# File lib/pvcglue/minion.rb, line 111 def get_users_from_group(names) names = Array(names) users = [] names.each do |name| if name =~ /\A==.*==\z/ group = Pvcglue.cloud.data.groups[name[2..-3]] # ap group users.concat(get_users_from_group(group)) else users << get_user(name) end end users end
has_role?(roles)
click to toggle source
# File lib/pvcglue/minion.rb, line 90 def has_role?(roles) return true if roles == 'all' !(Array(roles).map(&:to_sym) & roles_to_sym).empty? end
has_roles?(roles)
click to toggle source
# File lib/pvcglue/minion.rb, line 95 def has_roles?(roles) has_role?(roles) end
minion_manager?()
click to toggle source
# File lib/pvcglue/minion.rb, line 103 def minion_manager? has_role?('manager') end
provision!()
click to toggle source
def build_manager!
Pvcglue.logger.info('MANAGER') { "Building #{machine_name}" } Pvcglue.cloud.set_manager_as_project build!
end
# File lib/pvcglue/minion.rb, line 34 def provision! create! unless provisioned? end
provisioned?()
click to toggle source
# File lib/pvcglue/minion.rb, line 38 def provisioned? public_ip.present? end
pvc_cloud_provider()
click to toggle source
# File lib/pvcglue/minion.rb, line 48 def pvc_cloud_provider options = get_cloud_provider_options # raise("Unknown cloud provider '#{get_cloud_provider_name}'") unless get_cloud_provider_name @pvc_cloud_provider ||= Pvcglue::CloudProviders.init(options) end
quiet_all_sidekiq_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 209 def quiet_all_sidekiq_workers_cmd cmd = [] return cmd unless stage_options.sidekiq_queues stage_options.sidekiq_queues.each do |name, options| cmd << "sudo systemctl kill -s USR1 --kill-who=main #{sidekiq_service_name(name)}" end cmd end
quiet_all_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 236 def quiet_all_workers_cmd quiet_all_sidekiq_workers_cmd.join('; ') end
roles_to_sym()
click to toggle source
# File lib/pvcglue/minion.rb, line 99 def roles_to_sym roles.map(&:to_sym) end
sidekiq_service_file_name(name)
click to toggle source
# File lib/pvcglue/minion.rb, line 200 def sidekiq_service_file_name(name) # /lib/systemd/system/pvc-sidekiq-project-stage-name.service "#{Pvcglue.cloud.service_directory}#{sidekiq_service_name(name)}#{Pvcglue.cloud.service_extension}" end
sidekiq_service_name(name)
click to toggle source
# File lib/pvcglue/minion.rb, line 204 def sidekiq_service_name(name) # pvc-sidekiq-project-stage-name "#{sidekiq_worker_base_name}#{name}" end
sidekiq_worker_base_name()
click to toggle source
def update_from(another_minion)
self.private_ip = another_minion.private_ip self.public_ip = another_minion.public_ip self.cloud_id = another_minion.cloud_id
end
# File lib/pvcglue/minion.rb, line 196 def sidekiq_worker_base_name # pvc-sidekiq-project-stage- "pvc-sidekiq-#{remote_user_name}-" end
start_all_sidekiq_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 227 def start_all_sidekiq_workers_cmd cmd = [] return cmd unless stage_options.sidekiq_queues stage_options.sidekiq_queues.each do |name, options| cmd << "sudo systemctl start #{sidekiq_service_name(name)}" end cmd end
start_all_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 245 def start_all_workers_cmd start_all_sidekiq_workers_cmd.join(' && ') end
stop_all_sidekiq_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 218 def stop_all_sidekiq_workers_cmd cmd = [] return cmd unless stage_options.sidekiq_queues stage_options.sidekiq_queues.each do |name, options| cmd << "sudo systemctl stop #{sidekiq_service_name(name)}" end cmd end
stop_all_workers_cmd()
click to toggle source
# File lib/pvcglue/minion.rb, line 241 def stop_all_workers_cmd stop_all_sidekiq_workers_cmd.join(' && ') end