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 +4 -4
- data/.travis.yml +0 -1
- data/apcera-stager-api-contrib.gemspec +1 -1
- data/lib/apcera/stager/stager.rb +29 -15
- data/spec/apcera/stager/stager_spec.rb +21 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc3737fcfd86c07d0f4009741e6168079d80ceb3
|
4
|
+
data.tar.gz: 0ad42b5acc9d9e75a146dec1cba0f73664f1e7dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ea8c40730ad9005247a057f21bc59ce202c255fde4dc36651af9c51ff3598bb54c13dc120cfb14debae6e953d44e5f8453721750db785084aa9fcf5c48b5501
|
7
|
+
data.tar.gz: a74dc48fc698a0485ed038af8dc47ef8f32adcb6c93b3f849f72041d961603994392fd9249520f3d4a1baf6a1fa2f9304a4aa4843cd794e0240b301ba70197be
|
data/.travis.yml
CHANGED
@@ -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.
|
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'
|
data/lib/apcera/stager/stager.rb
CHANGED
@@ -69,11 +69,12 @@ module Apcera
|
|
69
69
|
fail e
|
70
70
|
end
|
71
71
|
|
72
|
-
# Execute a command in the
|
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 @
|
75
|
+
raise_app_path_error if @run_path == nil
|
75
76
|
Bundler.with_clean_env do
|
76
|
-
Dir.chdir(@
|
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
|
90
|
-
|
91
|
-
|
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
|
100
|
-
# send that to the staging coordinator. If no app was ever
|
101
|
-
#
|
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
|
-
|
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
|
-
|
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("
|
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.
|
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:
|
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.
|
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
|