apcera-stager-api 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bfd1296f1530b54b9151231b57d1d8abc47cac8
4
- data.tar.gz: 949490f21990c5015e341479cd3e7b9b057e2eba
3
+ metadata.gz: fc3737fcfd86c07d0f4009741e6168079d80ceb3
4
+ data.tar.gz: 0ad42b5acc9d9e75a146dec1cba0f73664f1e7dc
5
5
  SHA512:
6
- metadata.gz: c1118b6f5b0ddf98df6358ee79f156b1fed19e0b1eaa0292e20c522f83cbfd700175fafc70ffec29457d2b662b179ddd9021096a0a4853a995798a61126138a9
7
- data.tar.gz: f9cf88bf8cb869e537fee9e40408cf9b9bac59437480b418b180ea82f9a3ffbfde75f45d3d620d1f024be25494968c06d59703eca72dd3a13a8a3008834e9b4b
6
+ metadata.gz: 4ea8c40730ad9005247a057f21bc59ce202c255fde4dc36651af9c51ff3598bb54c13dc120cfb14debae6e953d44e5f8453721750db785084aa9fcf5c48b5501
7
+ data.tar.gz: a74dc48fc698a0485ed038af8dc47ef8f32adcb6c93b3f849f72041d961603994392fd9249520f3d4a1baf6a1fa2f9304a4aa4843cd794e0240b301ba70197be
@@ -2,7 +2,6 @@ before_install:
2
2
  - gem update --system 2.1.11
3
3
  language: ruby
4
4
  rvm:
5
- - "1.8.7"
6
5
  - "1.9.2"
7
6
  - "1.9.3"
8
7
  - "2.0.0"
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.test_files = `git ls-files -- {spec}/*`.split("\n")
16
16
  gem.name = "apcera-stager-api"
17
17
  gem.require_paths = ["lib"]
18
- gem.version = "0.2.5"
18
+ gem.version = "0.3.0"
19
19
 
20
20
  gem.add_development_dependency 'rspec', '~> 2.6.0'
21
21
  gem.add_development_dependency 'rake'
@@ -69,11 +69,12 @@ module Apcera
69
69
  fail e
70
70
  end
71
71
 
72
- # Execute a command in the app dir. Useful helper.
72
+ # Execute a command in the directory your package was extracted to (or where
73
+ # you manually set @app_dir). Useful helper.
73
74
  def execute_app(cmd)
74
- raise_app_path_error if @app_path == nil
75
+ raise_app_path_error if @run_path == nil
75
76
  Bundler.with_clean_env do
76
- Dir.chdir(@app_path) do |app_path|
77
+ Dir.chdir(@run_path) do |run_path|
77
78
  result = system(cmd, @system_options)
78
79
  if !result
79
80
  raise Apcera::Error::ExecuteError.new("failed to execute: #{cmd}.\n")
@@ -86,19 +87,26 @@ module Apcera
86
87
  fail e
87
88
  end
88
89
 
89
- # Extract the package to a given location.
90
- def extract(location)
91
- @app_path = File.join(@root_path, location)
90
+ # Extract the package to a location within staging path, optionally creating
91
+ # the named folder first and extract into it. If a location parameter is
92
+ # given, when upload is run the folder will be uploaded up along with the
93
+ # files. In either case, execute_app will run commands in the location
94
+ # where files were extracted to.
95
+ def extract(location="")
96
+ @app_path=File.join(@root_path, "staging")
92
97
  Dir.mkdir(@app_path) unless Dir.exists?(@app_path)
93
98
 
99
+ @run_path = location.empty? ? @app_path : File.join(@app_path, location)
100
+ Dir.mkdir(@run_path) unless Dir.exists?(@run_path)
101
+
94
102
  execute_app("tar -zxf #{@pkg_path}")
95
103
  rescue => e
96
104
  fail e
97
105
  end
98
106
 
99
- # Upload the new package to the staging coordinator. If we have an app extracted we
100
- # send that to the staging coordinator. If no app was ever extracted we just
101
- # upload the unmodified app.
107
+ # Upload the new package to the staging coordinator. If we have an app
108
+ # extracted we send that to the staging coordinator. If no app was ever
109
+ # extracted it is a noop.
102
110
  def upload
103
111
  if @app_path == nil
104
112
  unless File.exist?(@pkg_path)
@@ -107,8 +115,7 @@ module Apcera
107
115
 
108
116
  upload_file(@pkg_path)
109
117
  else
110
- app_dir = Pathname.new(@app_path).relative_path_from(Pathname.new(@root_path)).to_s
111
- execute_app("cd #{app_path}/.. && tar czf #{@updated_pkg_path} #{app_dir}")
118
+ execute_app("tar czf #{@updated_pkg_path} ./*")
112
119
 
113
120
  upload_file(@updated_pkg_path)
114
121
  end
@@ -116,7 +123,7 @@ module Apcera
116
123
  fail e
117
124
  end
118
125
 
119
- # Snapshot the stager filesystem for app
126
+ # Snapshot the stager filesystem for app.
120
127
  def snapshot
121
128
  response = RestClient.post(@stager_url+"/snapshot", {})
122
129
  rescue => e
@@ -267,7 +274,7 @@ module Apcera
267
274
  self.meta["environment"]["START_COMMAND"]
268
275
  end
269
276
 
270
- # Easily set the start command
277
+ # Easily set the start command.
271
278
  def start_command=(val)
272
279
  self.environment_add("START_COMMAND", val)
273
280
  end
@@ -277,7 +284,7 @@ module Apcera
277
284
  self.meta["environment"]["START_PATH"]
278
285
  end
279
286
 
280
- # Easily set the start path
287
+ # Easily set the start path.
281
288
  def start_path=(val)
282
289
  self.environment_add("START_PATH", val)
283
290
  end
@@ -297,7 +304,7 @@ module Apcera
297
304
  exit code
298
305
  end
299
306
 
300
- # Output to stderr
307
+ # Output to stderr.
301
308
  def output_error(text)
302
309
  $stderr.puts text
303
310
  end
@@ -307,6 +314,13 @@ module Apcera
307
314
  $stdout.puts text
308
315
  end
309
316
 
317
+ # Set @app_path, the location that will uploaded. Also updates location
318
+ # where execute_app will run commands from.
319
+ def app_path=(value)
320
+ @app_path=value
321
+ @run_path=value
322
+ end
323
+
310
324
  private
311
325
 
312
326
  def raise_app_path_error
@@ -97,7 +97,16 @@ describe Apcera::Stager do
97
97
 
98
98
  it "should decompress the package to a supplied path" do
99
99
  @stager.extract(@appdir)
100
- expected_path = File.join(@stager.root_path, @appdir)
100
+ extracted_path = File.join(@stager.root_path, "staging", @appdir)
101
+ expected_path = File.join(@stager.root_path, "staging")
102
+
103
+ File.exist?(extracted_path).should == true
104
+ @stager.app_path.should == expected_path
105
+ end
106
+
107
+ it "should decompress the package without a supplied path" do
108
+ @stager.extract()
109
+ expected_path = File.join(@stager.root_path, "staging")
101
110
  File.exist?(expected_path).should == true
102
111
  @stager.app_path.should == expected_path
103
112
  end
@@ -125,7 +134,7 @@ describe Apcera::Stager do
125
134
  Bundler.should_receive(:with_clean_env).at_least(:once).and_yield
126
135
 
127
136
  @stager.execute("cat thing").should == nil
128
- @stager.execute("cat #{File.join(@stager.app_path, "app", "Gemfile")}").should == true
137
+ @stager.execute("cat #{File.join(@stager.app_path, @appdir, "app", "Gemfile")}").should == true
129
138
  end
130
139
 
131
140
  it "should bubble errors to fail" do
@@ -152,6 +161,15 @@ describe Apcera::Stager do
152
161
  @stager.execute_app("cat #{File.join("app", "Gemfile")}").should == true
153
162
  end
154
163
 
164
+ it "should execute commands in extracted dir with clean bundler environment" do
165
+ Bundler.should_receive(:with_clean_env).at_least(:once).and_yield
166
+
167
+ @stager.extract()
168
+
169
+ @stager.execute_app("cat thing").should == nil
170
+ @stager.execute_app("cat #{File.join("app", "Gemfile")}").should == true
171
+ end
172
+
155
173
  it "should bubble errors to fail when app path is missing (no extract)" do
156
174
  @stager.should_receive(:exit0r).with(1) { raise }
157
175
 
@@ -191,7 +209,7 @@ describe Apcera::Stager do
191
209
 
192
210
  @stager.extract(@appdir)
193
211
 
194
- @stager.should_receive(:execute_app).with("cd #{@stager.app_path}/.. && tar czf #{@stager.updated_pkg_path} #{@appdir}").and_return
212
+ @stager.should_receive(:execute_app).with("tar czf #{@stager.updated_pkg_path} ./*").and_return
195
213
 
196
214
  @stager.upload
197
215
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apcera-stager-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Ellithorpe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-20 00:00:00.000000000 Z
11
+ date: 2016-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  requirements: []
184
184
  rubyforge_project:
185
- rubygems_version: 2.4.5.1
185
+ rubygems_version: 2.4.8
186
186
  signing_key:
187
187
  specification_version: 4
188
188
  summary: Apcera Stager API library which makes it super easy to write stagers for