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(ref, force_ref = false) ⇒ Object
If force_ref is a string, use it as the ref, otherwise use it as a boolean.
- #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
133 134 135 |
# File 'lib/engineyard/model/environment.rb', line 133 def configuration EY.config.environments[self.name] || {} end |
#default_branch ⇒ Object
138 139 140 |
# File 'lib/engineyard/model/environment.rb', line 138 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
146 147 148 |
# File 'lib/engineyard/model/environment.rb', line 146 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
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/engineyard/model/environment.rb', line 150 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(ref, force_ref = false) ⇒ Object
If force_ref is a string, use it as the ref, otherwise use it as a boolean.
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/engineyard/model/environment.rb', line 119 def resolve_branch(ref, force_ref=false) if String === force_ref ref, force_ref = force_ref, true end if !ref default_branch elsif force_ref || !default_branch || ref == default_branch ref else raise BranchMismatchError.new(default_branch, ref) end 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
142 143 144 |
# File 'lib/engineyard/model/environment.rb', line 142 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 |