Class: EY::Model::Environment
- Defined in:
- lib/engineyard/model/environment.rb
Instance Attribute Summary collapse
-
#ignore_bad_master ⇒ Object
Returns the value of attribute ignore_bad_master.
Class Method Summary collapse
Instance Method Summary collapse
- #app_master! ⇒ Object
- #configuration ⇒ Object (also: #config)
- #default_branch ⇒ Object
- #deploy(app, ref, deploy_options = {}) ⇒ Object
- #download_recipes ⇒ Object
- #launch ⇒ Object
- #logs ⇒ Object
- #migration_command(app, deploy_options) ⇒ Object
- #put_up_maintenance_page(app, verbose = false) ⇒ Object
- #rebuild ⇒ Object
- #resolve_branch(branch, allow_non_default_branch = false) ⇒ Object
- #rollback(app, extra_deploy_hook_options = {}, verbose = false) ⇒ Object
- #run_custom_recipes ⇒ Object
- #shorten_name_for(app) ⇒ Object
- #take_down_maintenance_page(app, verbose = false) ⇒ Object
- #tar_and_upload_recipes_in_cookbooks_dir ⇒ Object
- #upload_recipes(file_to_upload) ⇒ Object
- #upload_recipes_at_path(recipes_path) ⇒ Object
Instance Attribute Details
#ignore_bad_master ⇒ Object
Returns the value of attribute ignore_bad_master.
8 9 10 |
# File 'lib/engineyard/model/environment.rb', line 8 def ignore_bad_master @ignore_bad_master end |
Class Method Details
.from_array ⇒ Object
20 21 22 |
# File 'lib/engineyard/model/environment.rb', line 20 def self.from_array(*) Collection::Environments.new(super) end |
.from_hash(hash) ⇒ Object
10 11 12 13 14 15 16 17 18 |
# File 'lib/engineyard/model/environment.rb', line 10 def self.from_hash(hash) super.tap do |env| env.username = hash['ssh_username'] env.apps = App.from_array(env.apps, :api => env.api) env.account = Account.from_hash(env.account) env.instances = Instance.from_array(hash['instances'], :environment => env) env.app_master = Instance.from_hash(env.app_master.merge(:environment => env)) if env.app_master end end |
Instance Method Details
#app_master! ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'lib/engineyard/model/environment.rb', line 28 def app_master! master = app_master if master.nil? raise NoAppMasterError.new(name) elsif !ignore_bad_master && master.status != "running" raise BadAppMasterStatusError.new(master.status) end master end |
#configuration ⇒ Object Also known as: config
125 126 127 |
# File 'lib/engineyard/model/environment.rb', line 125 def configuration EY.config.environments[self.name] || {} end |
#default_branch ⇒ Object
130 131 132 |
# File 'lib/engineyard/model/environment.rb', line 130 def default_branch EY.config.default_branch(name) end |
#deploy(app, ref, deploy_options = {}) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/engineyard/model/environment.rb', line 38 def deploy(app, ref, ={}) app_master!.deploy(app, ref, migration_command(app, ), config.merge(['extras']), ['verbose']) end |
#download_recipes ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/engineyard/model/environment.rb', line 68 def download_recipes if File.exist?('cookbooks') raise EY::Error, "Could not download, cookbooks already exists" end require 'tempfile' tmp = Tempfile.new("recipes") tmp.write(api.request("/environments/#{id}/recipes")) tmp.flush tmp.close cmd = "tar xzf '#{tmp.path}' cookbooks" unless system(cmd) raise EY::Error, "Could not unarchive recipes.\nCommand `#{cmd}` exited with an error." end end |
#launch ⇒ Object
138 139 140 |
# File 'lib/engineyard/model/environment.rb', line 138 def launch Launchy.open(app_master!.hostname_url) end |
#logs ⇒ Object
24 25 26 |
# File 'lib/engineyard/model/environment.rb', line 24 def logs Log.from_array(api_get("/environments/#{id}/logs")["logs"]) end |
#migration_command(app, deploy_options) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/engineyard/model/environment.rb', line 142 def migration_command(app, ) # regarding deploy_options['migrate']: # # missing means migrate how the yaml file says to # nil means don't migrate # true means migrate w/custom command (if present) or default # a string means migrate with this specific command return nil if no_migrate?() command = migration_command_from_command_line() unless command return nil if no_migrate?(config) command = migration_command_from_config end command = migration_command_from_environment(app) unless command command end |
#put_up_maintenance_page(app, verbose = false) ⇒ Object
56 57 58 |
# File 'lib/engineyard/model/environment.rb', line 56 def put_up_maintenance_page(app, verbose=false) app_master!.put_up_maintenance_page(app, verbose) end |
#rebuild ⇒ Object
60 61 62 |
# File 'lib/engineyard/model/environment.rb', line 60 def rebuild api.request("/environments/#{id}/update_instances", :method => :put) end |
#resolve_branch(branch, allow_non_default_branch = false) ⇒ Object
118 119 120 121 122 123 |
# File 'lib/engineyard/model/environment.rb', line 118 def resolve_branch(branch, allow_non_default_branch=false) if !allow_non_default_branch && branch && default_branch && (branch != default_branch) raise BranchMismatchError.new(default_branch, branch) end branch || default_branch end |
#rollback(app, extra_deploy_hook_options = {}, verbose = false) ⇒ Object
46 47 48 49 50 |
# File 'lib/engineyard/model/environment.rb', line 46 def rollback(app, ={}, verbose=false) app_master!.rollback(app, config.merge(), verbose) end |
#run_custom_recipes ⇒ Object
64 65 66 |
# File 'lib/engineyard/model/environment.rb', line 64 def run_custom_recipes api.request("/environments/#{id}/run_custom_recipes", :method => :put) end |
#shorten_name_for(app) ⇒ Object
134 135 136 |
# File 'lib/engineyard/model/environment.rb', line 134 def shorten_name_for(app) name.gsub(/^#{Regexp.quote(app.name)}_/, '') end |
#take_down_maintenance_page(app, verbose = false) ⇒ Object
52 53 54 |
# File 'lib/engineyard/model/environment.rb', line 52 def take_down_maintenance_page(app, verbose=false) app_master!.take_down_maintenance_page(app, verbose) end |
#tar_and_upload_recipes_in_cookbooks_dir ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/engineyard/model/environment.rb', line 95 def tar_and_upload_recipes_in_cookbooks_dir require 'tempfile' unless File.exist?("cookbooks") raise EY::Error, "Could not find chef recipes. Please run from the root of your recipes repo." end recipes_file = Tempfile.new("recipes") cmd = "tar czf '#{recipes_file.path}' cookbooks/" unless system(cmd) raise EY::Error, "Could not archive recipes.\nCommand `#{cmd}` exited with an error." end upload_recipes(recipes_file) end |
#upload_recipes(file_to_upload) ⇒ Object
111 112 113 114 115 116 |
# File 'lib/engineyard/model/environment.rb', line 111 def upload_recipes(file_to_upload) api.request("/environments/#{id}/recipes", { :method => :post, :params => {:file => file_to_upload} }) end |
#upload_recipes_at_path(recipes_path) ⇒ Object
86 87 88 89 90 91 92 93 |
# File 'lib/engineyard/model/environment.rb', line 86 def upload_recipes_at_path(recipes_path) recipes_path = Pathname.new(recipes_path) if recipes_path.exist? upload_recipes recipes_path.open('rb') else raise EY::Error, "Recipes file not found: #{recipes_path}" end end |