class Pvcglue::Env
Public Class Methods
apply_changes()
click to toggle source
# File lib/pvcglue/env.rb, line 176 def self.apply_changes Pvcglue.cloud.minions.each do |minion_name, minion| if minion.has_roles? %w(web worker) Pvcglue::Packages::Secrets.apply(minion) end end end
clear_stage_env_cache()
click to toggle source
# File lib/pvcglue/env.rb, line 172 def self.clear_stage_env_cache File.delete(stage_env_cache_file_name) if File.exists?(stage_env_cache_file_name) end
db_host()
click to toggle source
# File lib/pvcglue/env.rb, line 118 def self.db_host # Assume first pg server minion = Pvcglue.cloud.minions_filtered('pg').values.first minion && minion.private_ip end
initialize_stage_env()
click to toggle source
# File lib/pvcglue/env.rb, line 69 def self.initialize_stage_env Pvcglue::Packages::Secrets.load_for_stage # unless read_cached_stage_env # Pvcglue::Packages.apply('env-get-stage'.to_sym, :manager, Pvcglue::Manager.manager_node, 'pvcglue') # write_stage_env_cache # end # TODO: Warn DB_USER_POSTGRES_HOST IP address does not exist in the configured machines merged = stage_env_defaults.merge(Pvcglue.cloud.stage_env) if merged != Pvcglue.cloud.stage_env Pvcglue.cloud.stage_env = merged save_stage_env end end
memcached_host()
click to toggle source
# File lib/pvcglue/env.rb, line 124 def self.memcached_host # Assume first server minion = Pvcglue.cloud.minions_filtered('memcached').values.first ip = minion && minion.private_ip ip ? "#{ip}:11211" : nil end
new_password()
click to toggle source
# File lib/pvcglue/env.rb, line 140 def self.new_password "a#{SecureRandom.hex(16)}" end
read_cached_stage_env()
click to toggle source
# File lib/pvcglue/env.rb, line 148 def self.read_cached_stage_env # TODO: Only use cache in development of gem, do not cache by default, use Manager config return false # disable cache for now if File.exists?(stage_env_cache_file_name) stage_env = File.read(stage_env_cache_file_name) Pvcglue.cloud.stage_env = TOML.parse(stage_env) return true end false end
redis_url()
click to toggle source
# File lib/pvcglue/env.rb, line 131 def self.redis_url # Assume first server # TODO: (low priority) check all other apps/environments to see if # the current database number is used, and find an unused one, if it is. minion = Pvcglue.cloud.minions_filtered('redis').values.first ip = minion && minion.private_ip ip ? "redis://#{ip}:6379/0" : nil end
save_stage_env()
click to toggle source
# File lib/pvcglue/env.rb, line 84 def self.save_stage_env Pvcglue::Packages::Secrets.save_for_stage # Pvcglue::Packages.apply('env-set-stage'.to_sym, :manager, Pvcglue::Manager.manager_node, 'pvcglue') # write_stage_env_cache end
stage_env_cache_file_name()
click to toggle source
# File lib/pvcglue/env.rb, line 168 def self.stage_env_cache_file_name File.join(Pvcglue.configuration.pvcglue_tmp_dir, "pvcglue_cache_#{stage_env_file_name_base}") end
stage_env_defaults()
click to toggle source
# File lib/pvcglue/env.rb, line 90 def self.stage_env_defaults defaults = {} defaults['RAILS_SECRET_TOKEN'] = SecureRandom.hex(64) # From rails/railties/lib/rails/tasks/misc.rake defaults['SECRET_KEY_BASE'] = SecureRandom.hex(64) # From rails/railties/lib/rails/tasks/misc.rake # Don't set a default until we have a provisioned server if db_host defaults['DB_USER_POSTGRES_HOST'] = db_host defaults['DB_USER_POSTGRES_PORT'] = '5432' defaults['DB_USER_POSTGRES_USERNAME'] = "#{Pvcglue.cloud.app_name}_#{Pvcglue.cloud.stage_name_validated}" defaults['DB_USER_POSTGRES_DATABASE'] = "#{Pvcglue.cloud.app_name}_#{Pvcglue.cloud.stage_name_validated}" defaults['DB_USER_POSTGRES_PASSWORD'] = new_password end # Don't set a default until we have a provisioned server if memcached_host defaults['MEMCACHE_SERVERS'] = memcached_host end # Don't set a default until we have a provisioned server if redis_url defaults['REDIS_URL'] = redis_url end defaults end
stage_env_file_name()
click to toggle source
# File lib/pvcglue/env.rb, line 160 def self.stage_env_file_name File.join(Pvcglue::Manager.manager_dir, stage_env_file_name_base) end
stage_env_file_name_base()
click to toggle source
# File lib/pvcglue/env.rb, line 164 def self.stage_env_file_name_base @stage_env_file_name_base ||= "#{Pvcglue.configuration.cloud_name}_#{Pvcglue.configuration.application_name}_#{Pvcglue.cloud.stage_name_validated}.env.toml" end
write_stage_env_cache()
click to toggle source
# File lib/pvcglue/env.rb, line 144 def self.write_stage_env_cache File.write(stage_env_cache_file_name, TOML.dump(Pvcglue.cloud.stage_env)) end
Public Instance Methods
default()
click to toggle source
# File lib/pvcglue/env.rb, line 32 def default if yes?("Are you sure?") Pvcglue.cloud.stage_env = Pvcglue::Env.stage_env_defaults Pvcglue::Env.save_stage_env end end
list()
click to toggle source
# File lib/pvcglue/env.rb, line 25 def list self.class.initialize_stage_env Pvcglue.cloud.stage_env.each { |key, value| puts "#{key}=#{value}" } end
pull()
click to toggle source
# File lib/pvcglue/env.rb, line 17 def pull raise('Not implemented') # Pvcglue::Packages.apply('env-pull'.to_sym, :manager, Pvcglue::Manager.manager_node, 'pvcglue') # self.class.clear_stage_env_cache end
push()
click to toggle source
# File lib/pvcglue/env.rb, line 8 def push raise('Not implemented') # Pvcglue::Packages.apply('env-push'.to_sym, :manager, Pvcglue::Manager.manager_node, 'pvcglue') # self.class.clear_stage_env_cache # Pvcglue::Packages.apply('app-env-file'.to_sym, :env, Pvcglue.cloud.nodes_in_stage('web')) end
rm(*args)
click to toggle source
# File lib/pvcglue/env.rb, line 62 def rm(*args) unset(*args) end
set(*args)
click to toggle source
# File lib/pvcglue/env.rb, line 41 def set(*args) self.class.initialize_stage_env Pvcglue.logger.debug { args.each { |arg| arg.inspect } } options = Hash[args.each.map { |l| l.chomp.split('=') }] Pvcglue.logger.debug { options.inspect } Pvcglue.cloud.stage_env.merge!(options) self.class.save_stage_env self.class.apply_changes end
unset(*args)
click to toggle source
# File lib/pvcglue/env.rb, line 53 def unset(*args) self.class.initialize_stage_env args.each { |arg| puts "WARNING: Key '#{arg}' not found." unless Pvcglue.cloud.stage_env.delete(arg) } self.class.save_stage_env self.class.apply_changes end