Class: Engineyard::Local::Middleware::DNA

Inherits:
Object
  • Object
show all
Includes:
Helpers::Executable, Helpers::Uploadable
Defined in:
lib/engineyard-local/middleware/dna.rb

Instance Method Summary collapse

Methods included from Helpers::Executable

#project_dir, #ssh_exec, #ssh_exec!

Methods included from Helpers::Uploadable

#ssh_upload!

Constructor Details

#initialize(app, env) ⇒ DNA



10
11
12
13
# File 'lib/engineyard-local/middleware/dna.rb', line 10

def initialize(app, env)
  @app = app
  @env = env
end

Instance Method Details

#call(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
# File 'lib/engineyard-local/middleware/dna.rb', line 15

def call(env)
  @env[:ui].info I18n.t("eylocal.setup.dna")

  create_dna
  ssh_upload!(env, dna_tmp_to, dna_tmp_to)
  ssh_upload!(env, solo_from, solo_tmp_to)
  ssh_exec!(env, commands)
  FileUtils.rm dna_tmp_to
  @app.call(env)
end

#commandsObject



46
47
48
49
50
51
52
53
# File 'lib/engineyard-local/middleware/dna.rb', line 46

def commands
    [
      # Windows slashes are eliminated when these commands are
      # passed, so we need to ensure they are correctly escaped.
      "sudo mv #{solo_tmp_to.gsub("\\","\\\\\\")} #{solo_to}",
      "sudo mv #{dna_tmp_to.gsub("\\","\\\\\\")} #{dna_to}",
    ]
end

#create_dnaObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/engineyard-local/middleware/dna.rb', line 26

def create_dna
  dna_data = File.read(dna_from)

  app_url = %Q{#{`git config remote.origin.url`}}.strip
  app_url = app_url.empty? ? "file://#{Dir.pwd}" : app_url
  Engineyard::Local.config['app_git_url'] = app_url

  Engineyard::Local.config['app_name'] = Engineyard::Local.config['app_git_url'].sub(/^.*\/([^\/\.]+)(?:\.git)?/,'\1').strip.gsub(/\s/,'_')

  Engineyard::Local.config['app_revision'] = %Q{#{`git show --format=oneline`.gsub(/^(\w+).*$/m,'\1')}}.strip
  app_type = 'rack'

  dna_data.gsub!(/APPNAME/,Engineyard::Local.config['app_name'])
  dna_data.gsub!(/APPURL/,Engineyard::Local.config['app_git_url'])
  dna_data.gsub!(/APPREVISION/,Engineyard::Local.config['app_revision'])
  dna_data.gsub!(/APPTYPE/,app_type)

  File.open(dna_tmp_to, "w+") {|fh| fh.write dna_data}
end

#dna_fromObject



55
56
57
# File 'lib/engineyard-local/middleware/dna.rb', line 55

def dna_from
  File.expand_path("config/dna.json", Engineyard::Local.project_root)
end

#dna_tmp_toObject



59
60
61
# File 'lib/engineyard-local/middleware/dna.rb', line 59

def dna_tmp_to
  File.join(Engineyard::Local.tmp_dir,"dna.json.#{$$}")
end

#dna_toObject



63
64
65
# File 'lib/engineyard-local/middleware/dna.rb', line 63

def dna_to
  "/etc/chef/dna.json"
end

#solo_fromObject



67
68
69
# File 'lib/engineyard-local/middleware/dna.rb', line 67

def solo_from
  File.expand_path("config/solo.rb", Engineyard::Local.project_root)
end

#solo_tmp_toObject



71
72
73
# File 'lib/engineyard-local/middleware/dna.rb', line 71

def solo_tmp_to
  File.join(Engineyard::Local.tmp_dir,"solo.rb.#{$$}")
end

#solo_toObject



75
76
77
# File 'lib/engineyard-local/middleware/dna.rb', line 75

def solo_to
  "/etc/chef/solo.rb"
end