class Pvcglue::Configuration
Attributes
application_name[RW]
cloud_manager[RW]
cloud_name[RW]
context[RW]
local_cloud_manager[RW]
Public Class Methods
application_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 29 def self.application_dir Dir.pwd end
env_prefix()
click to toggle source
# File lib/pvcglue/configuration.rb, line 21 def self.env_prefix ENV['PVCGLUE_ENV_PREFIX'] || 'PVCGLUE' end
file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 17 def self.file_name ENV['PVCGLUE_FILE_NAME'] || '.pvcglue.toml' end
new()
click to toggle source
# File lib/pvcglue/configuration.rb, line 36 def initialize if Pvcglue::Manager.local_mode? init(:local_cloud_manager) @cloud_manager = @local_cloud_manager else unless init(:cloud_manager) say('The manager has not been configured.') configure_manager end end # raise(Thor::Error, "The manager has not been configured. :(") if cloud_manager.nil? raise("The manager has not been configured. :(") if cloud_manager.nil? init_except_manager end
project_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 25 def self.project_file_name File.join(self.application_dir, file_name) end
Public Instance Methods
app_maintenance_files_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 169 def app_maintenance_files_dir File.join(application_dir, 'public', 'maintenance') end
application_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 165 def application_dir self.class.application_dir end
build_log_extra_dir()
click to toggle source
def web_app_base_dir
# '/sites' '~/www' # "/home/#{user_name}/.ssh"
end
# File lib/pvcglue/configuration.rb, line 209 def build_log_extra_dir @build_log_extra_dir ||= begin option = Pvcglue.command_line_options[:save_before_upload] if option != 'save_before_upload' dir_name = option else dir_name = Time.now.strftime('%Y-%m-%d-%H%M%S') end result = File.join(pvcglue_tmp_dir, dir_name) `mkdir -p '#{result}'` raise $?.inspect unless $?.exitstatus == 0 result end end
build_log_extra_filename(minion, user, remote_filename)
click to toggle source
# File lib/pvcglue/configuration.rb, line 224 def build_log_extra_filename(minion, user, remote_filename) # local_filename = File.basename(remote_filename) relative = remote_filename.sub(Pvcglue.cloud.web_app_base_dir, '/project') local_filename = relative.sub(/\A\//, '').gsub(/\//, '__') # local_filename = File.basename(remote_filename) versioned_filename(File.join(build_log_extra_dir, "#{minion.machine_name}--#{user}--#{local_filename}")) end
clear_cloud_cache()
click to toggle source
# File lib/pvcglue/configuration.rb, line 161 def clear_cloud_cache File.delete(cloud_cache_file_name) if File.exists?(cloud_cache_file_name) end
cloud_cache_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 153 def cloud_cache_file_name # Just in case the Rails project hasn't yet been run, make sure the tmp # dir exists. Dir.mkdir(pvcglue_tmp_dir) unless Dir.exist?(pvcglue_tmp_dir) File.join(pvcglue_tmp_dir, "pvcglue_#{cloud_manager}_#{cloud_name}_#{application_name}_cache.toml") end
configure_manager()
click to toggle source
# File lib/pvcglue/configuration.rb, line 62 def configure_manager byebug manager = ask('What is the IP address or host name of the manager?') default = !no?('Will this be the default manager? (Y/n)') file_name = default ? user_file_name : project_file_name File.write(file_name, %(cloud_manager = "#{manager}"\n)) say("Manager written to #{file_name}.") @conf = nil # clear cache init(:cloud_manager) init_except_manager clear_cloud_cache end
find_app_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 125 def find_app_name # TODO: Just use something like `rails runner 'Rails.application.class.parent'` and then cache it to a temporary file # try known files...anyone know a better way, without loading Rails? rack_up = File.join(application_dir, 'config.ru') app_name = underscore($1) if File.exists?(rack_up) && File.read(rack_up) =~ /^run (.*)::/ unless app_name file_name = File.join(application_dir, 'config', 'application.rb') app_name = underscore($1) if File.exists?(file_name) && File.read(file_name) =~ /^module (.*)/ end app_name end
gemfile_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 177 def gemfile_file_name File.join(application_dir, 'Gemfile') end
get_conf(option)
click to toggle source
# File lib/pvcglue/configuration.rb, line 99 def get_conf(option) unless @conf @conf = {} merge_into_conf(user_file_name) merge_into_conf(project_file_name) end @conf[option.to_s] end
init(option, default=nil)
click to toggle source
# File lib/pvcglue/configuration.rb, line 76 def init(option, default=nil) # ENV first, then pvcglue.toml (checking current working directory first, then in user home '~'), then default # NOTE: In the context of Rails, a standard initializer can also be used, and will override all settings here, but that should not really apply for 'pvcglue' # /config/initializers/pvcglue.rb: # Pvcglue.configure do |config| # config.cloud_manager = '192.168.0.1' # end value = ENV["#{self.class.env_prefix}_#{option.upcase}"] || get_conf(option) || default #puts "Setting #{option}=#{value}" instance_variable_set("@#{option}", value) end
init_except_manager()
click to toggle source
# File lib/pvcglue/configuration.rb, line 52 def init_except_manager # TODO: This 'caches' the file name and then if local_mode is enabled, it still uses the 'cached' file name...Must Fix! if Pvcglue::Manager.local_mode? @cloud_name = 'local_cloud' else init(:cloud_name, 'cluster_one') end init(:application_name, find_app_name) end
merge_into_conf(file_name)
click to toggle source
# File lib/pvcglue/configuration.rb, line 88 def merge_into_conf(file_name) #puts "*"*80 #puts file_name #puts File.exists?(file_name).inspect if File.exists?(file_name) data = TOML.load_file(file_name) #puts data.inspect @conf.merge!(data) end end
options()
click to toggle source
# File lib/pvcglue/configuration.rb, line 137 def options Hash[instance_variables.map { |name| [name.to_s[1..-1].to_sym, instance_variable_get(name)] }].reject { |k| k == :conf } end
project_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 108 def project_file_name self.class.project_file_name end
pvcglue_tmp_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 145 def pvcglue_tmp_dir File.join(tmp_dir, 'pvcglue') end
rails_bin_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 195 def rails_bin_dir if rails_version_major.to_i >= 4 'bin' else 'script' end end
rails_version()
click to toggle source
# File lib/pvcglue/configuration.rb, line 185 def rails_version @rails_version ||= begin `bundle exec rails -v`.sub('Rails ', '').strip end end
rails_version_major()
click to toggle source
# File lib/pvcglue/configuration.rb, line 191 def rails_version_major rails_version.split('.').first end
ruby_version()
click to toggle source
# File lib/pvcglue/configuration.rb, line 181 def ruby_version File.read(ruby_version_file_name).strip end
ruby_version_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 173 def ruby_version_file_name File.join(application_dir, '.ruby-version') end
template_override_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 149 def template_override_dir File.join(application_dir, 'config', 'pvcglue', 'templates') end
tmp_dir()
click to toggle source
# File lib/pvcglue/configuration.rb, line 141 def tmp_dir File.join(application_dir, 'tmp') end
underscore(camel_cased_word)
click to toggle source
Thanks to stackoverflow.com/a/1509957/444774
# File lib/pvcglue/configuration.rb, line 117 def underscore(camel_cased_word) camel_cased_word.to_s.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'). gsub(/([a-z\d])([A-Z])/, '\1_\2'). tr("-", "_"). downcase end
user_file_name()
click to toggle source
# File lib/pvcglue/configuration.rb, line 112 def user_file_name File.join(Dir.home, self.class.file_name) end
versioned_filename(base, first_suffix='.00')
click to toggle source
TODO: Refactor to a utilities module or something
# File lib/pvcglue/configuration.rb, line 233 def versioned_filename(base, first_suffix='.00') suffix = nil filename = base while File.exists?(filename) suffix = (suffix ? suffix.succ : first_suffix) filename = base + suffix end return filename end