opswalrus 1.0.1 → 1.0.3
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/Gemfile.lock +1 -1
- data/lib/opswalrus/app.rb +64 -27
- data/lib/opswalrus/cli.rb +5 -4
- data/lib/opswalrus/host.rb +65 -11
- data/lib/opswalrus/interaction_handlers.rb +1 -0
- data/lib/opswalrus/ops_file.rb +7 -2
- data/lib/opswalrus/ops_file_script.rb +67 -15
- data/lib/opswalrus/version.rb +1 -1
- metadata +2 -4
- data/exe/run_ops_bundle +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b31832ac2c06fb96c6abac86dacccce0f4fa280d679f2f12573eb37044d49b93
|
4
|
+
data.tar.gz: dc69618f8f83b0845f5e93a8e4699bcade24e37a3ce24fcecc49a427f2b471ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c107c7165daa8536b4831c7f84d34c662dcc86cad1da29334412460e2995adad5bb076f14ae48b90578e2c349ea55411e4f2794371d417e714bffb093dca4f3b
|
7
|
+
data.tar.gz: d6e0983ef2d59ed545370dd670753436026244b0cc5c84dadb3745b188931839f5edd57425f65fa4a607324b4d1e17bd4e0431bb5bb2cbb825e8a95e1f9eca6c
|
data/Gemfile.lock
CHANGED
data/lib/opswalrus/app.rb
CHANGED
@@ -39,6 +39,8 @@ module OpsWalrus
|
|
39
39
|
@instance ||= new(*args)
|
40
40
|
end
|
41
41
|
|
42
|
+
LOCAL_SUDO_PASSWORD_PROMPT = "[ops] Enter sudo password to run sudo in local environment: "
|
43
|
+
|
42
44
|
|
43
45
|
attr_reader :local_hostname
|
44
46
|
|
@@ -119,7 +121,7 @@ module OpsWalrus
|
|
119
121
|
end
|
120
122
|
|
121
123
|
def prompt_sudo_password
|
122
|
-
password = IO::console.getpass(
|
124
|
+
password = IO::console.getpass(LOCAL_SUDO_PASSWORD_PROMPT)
|
123
125
|
set_sudo_password(password)
|
124
126
|
nil
|
125
127
|
end
|
@@ -207,46 +209,52 @@ module OpsWalrus
|
|
207
209
|
tmp_dir = nil
|
208
210
|
|
209
211
|
case
|
212
|
+
when Dir.exist?(package_or_ops_file_reference)
|
213
|
+
dir = package_or_ops_file_reference
|
214
|
+
ops_file_path, operation_kv_args = find_entry_point_ops_file_in_dir(dir, package_operation_and_args)
|
215
|
+
[ops_file_path, operation_kv_args, tmp_dir]
|
210
216
|
when File.exist?(package_or_ops_file_reference)
|
211
217
|
first_filepath = package_or_ops_file_reference.to_pathname.realpath
|
212
|
-
|
218
|
+
|
219
|
+
ops_file_path, operation_kv_args = case first_filepath.extname.downcase
|
213
220
|
when ".ops"
|
214
|
-
first_filepath
|
221
|
+
[first_filepath, package_operation_and_args]
|
215
222
|
when ".zip"
|
216
|
-
tmp_dir = Dir.mktmpdir.to_pathname
|
223
|
+
tmp_dir = Dir.mktmpdir.to_pathname # this is the temporary bundle root dir
|
217
224
|
|
218
225
|
# unzip the bundle into the temp directory
|
219
226
|
DirZipper.unzip(first_filepath, tmp_dir)
|
220
227
|
|
221
|
-
|
222
|
-
|
223
|
-
tmp_dir.join(relative_ops_path)
|
228
|
+
find_entry_point_ops_file_in_dir(tmp_dir, package_operation_and_args)
|
224
229
|
else
|
225
230
|
raise Error, "Unknown file type for entrypoint: #{first_filepath}"
|
226
231
|
end
|
227
|
-
|
228
|
-
|
232
|
+
|
233
|
+
# operation_kv_args = package_operation_and_args
|
234
|
+
[ops_file_path, operation_kv_args, tmp_dir]
|
229
235
|
when repo_url = git_repo?(package_or_ops_file_reference)
|
230
236
|
destination_package_path = bundler.download_git_package(repo_url)
|
231
237
|
|
232
|
-
ops_file_path =
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
end
|
249
|
-
|
238
|
+
ops_file_path, operation_kv_args = find_entry_point_ops_file_in_dir(destination_package_path, package_operation_and_args)
|
239
|
+
|
240
|
+
# ops_file_path = nil
|
241
|
+
# base_path = Pathname.new(destination_package_path)
|
242
|
+
# path_parts = 0
|
243
|
+
# package_operation_and_args.each do |candidate_path_arg|
|
244
|
+
# candidate_base_path = base_path.join(candidate_path_arg)
|
245
|
+
# candidate_ops_file = candidate_base_path.sub_ext(".ops")
|
246
|
+
# if candidate_ops_file.exist?
|
247
|
+
# path_parts += 1
|
248
|
+
# ops_file_path = candidate_ops_file
|
249
|
+
# break
|
250
|
+
# elsif candidate_base_path.exist?
|
251
|
+
# path_parts += 1
|
252
|
+
# else
|
253
|
+
# raise Error, "Operation not found in #{repo_url}: #{candidate_base_path}"
|
254
|
+
# end
|
255
|
+
# base_path = candidate_base_path
|
256
|
+
# end
|
257
|
+
# operation_kv_args = package_operation_and_args.drop(path_parts)
|
250
258
|
|
251
259
|
# for an original package_operation_and_args of ["github.com/davidkellis/my-package", "operation1", "arg1:val1", "arg2:val2", "arg3:val3"]
|
252
260
|
# we return: [ "#{pwd}/#{Bundler::BUNDLE_DIR}/github-com-davidkellis-my-package/operation1.ops", ["arg1:val1", "arg2:val2", "arg3:val3"] ]
|
@@ -256,6 +264,31 @@ module OpsWalrus
|
|
256
264
|
end
|
257
265
|
end
|
258
266
|
|
267
|
+
# returns pair of the form: [ ops_file_path, operation_kv_args ]
|
268
|
+
def find_entry_point_ops_file_in_dir(base_dir, package_operation_and_args)
|
269
|
+
ops_file_path = nil
|
270
|
+
base_path = Pathname.new(base_dir)
|
271
|
+
|
272
|
+
path_parts = 0
|
273
|
+
package_operation_and_args.each do |candidate_path_arg|
|
274
|
+
candidate_base_path = base_path.join(candidate_path_arg)
|
275
|
+
candidate_ops_file = candidate_base_path.sub_ext(".ops")
|
276
|
+
if candidate_ops_file.exist?
|
277
|
+
path_parts += 1
|
278
|
+
ops_file_path = candidate_ops_file
|
279
|
+
break
|
280
|
+
elsif candidate_base_path.exist?
|
281
|
+
path_parts += 1
|
282
|
+
else
|
283
|
+
raise Error, "Operation not found in: #{candidate_base_path}"
|
284
|
+
end
|
285
|
+
base_path = candidate_base_path
|
286
|
+
end
|
287
|
+
operation_kv_args = package_operation_and_args.drop(path_parts)
|
288
|
+
|
289
|
+
[ops_file_path, operation_kv_args]
|
290
|
+
end
|
291
|
+
|
259
292
|
# git_repo?("davidkellis/arborist") -> "https://github.com/davidkellis/arborist"
|
260
293
|
# returns the repo URL
|
261
294
|
def git_repo?(repo_reference)
|
@@ -268,6 +301,10 @@ module OpsWalrus
|
|
268
301
|
working_repo_reference
|
269
302
|
end
|
270
303
|
|
304
|
+
# def is_dir_git_repo?(dir_path)
|
305
|
+
# Git.ls_remote(reference) rescue nil
|
306
|
+
# end
|
307
|
+
|
271
308
|
def bundle_status
|
272
309
|
end
|
273
310
|
|
data/lib/opswalrus/cli.rb
CHANGED
@@ -15,10 +15,10 @@ module OpsWalrus
|
|
15
15
|
|
16
16
|
# this is invoked on an unhandled exception or a call to exit_now!
|
17
17
|
on_error do |exception|
|
18
|
-
puts "*" * 80
|
19
|
-
puts "catchall exception handler:"
|
20
|
-
puts exception.message
|
21
|
-
puts exception.backtrace.join("\n")
|
18
|
+
# puts "*" * 80
|
19
|
+
# puts "catchall exception handler:"
|
20
|
+
# puts exception.message
|
21
|
+
# puts exception.backtrace.join("\n")
|
22
22
|
false # disable built-in exception handling
|
23
23
|
end
|
24
24
|
|
@@ -132,6 +132,7 @@ module OpsWalrus
|
|
132
132
|
|
133
133
|
c.default_command :status
|
134
134
|
end
|
135
|
+
|
135
136
|
end
|
136
137
|
end
|
137
138
|
|
data/lib/opswalrus/host.rb
CHANGED
@@ -53,18 +53,71 @@ module OpsWalrus
|
|
53
53
|
# execute('eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"')
|
54
54
|
# end
|
55
55
|
|
56
|
-
|
56
|
+
# runs the specified ops command with the specified command arguments
|
57
|
+
def run_ops(command, command_arguments, in_bundle_root_dir: true, verbose: false)
|
57
58
|
# e.g. /home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops bundle unzip tmpops.zip
|
58
|
-
|
59
|
+
# e.g. /home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops run echo.ops args:foo args:bar
|
60
|
+
|
61
|
+
cmd = "/home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops"
|
62
|
+
cmd << " -v" if verbose
|
63
|
+
cmd << " #{command.to_s}"
|
64
|
+
cmd << " #{@tmp_bundle_root_dir}" if in_bundle_root_dir
|
65
|
+
cmd << " #{command_arguments}" unless command_arguments.empty?
|
66
|
+
|
67
|
+
shell!(cmd)
|
59
68
|
end
|
60
69
|
|
61
70
|
end
|
62
71
|
|
72
|
+
class HostProxyOpsFileInvocationBuilder
|
73
|
+
def initialize(host_proxy, is_invocation_a_call_to_package_in_bundle_dir = false)
|
74
|
+
@host_proxy = host_proxy
|
75
|
+
@is_invocation_a_call_to_package_in_bundle_dir = is_invocation_a_call_to_package_in_bundle_dir
|
76
|
+
@method_chain = []
|
77
|
+
end
|
78
|
+
|
79
|
+
def method_missing(method_name, *args, **kwargs)
|
80
|
+
@method_chain << method_name.to_s
|
81
|
+
|
82
|
+
if args.empty? && kwargs.empty? # when there are no args and no kwargs, we are just drilling down through another namespace
|
83
|
+
self
|
84
|
+
else
|
85
|
+
# when there are args or kwargs, then the method invocation represents an attempt to run an OpsFile on a remote host,
|
86
|
+
# so we want to build up a command and send it to the remote host via HostDSL#run_ops
|
87
|
+
@method_chain.unshift(Bundler::BUNDLE_DIR) if @is_invocation_a_call_to_package_in_bundle_dir
|
88
|
+
|
89
|
+
# path_to_ops_file_basename = @method_chain.join(File::Separator)
|
90
|
+
# remote_run_command_args << path_to_ops_file_basename
|
91
|
+
|
92
|
+
remote_run_command_args = @method_chain.join(" ")
|
93
|
+
|
94
|
+
unless args.empty?
|
95
|
+
remote_run_command_args << " "
|
96
|
+
remote_run_command_args << args.join(" ")
|
97
|
+
end
|
98
|
+
|
99
|
+
unless kvargs.empty?
|
100
|
+
remote_run_command_args << " "
|
101
|
+
remote_run_command_args << kvargs.map{|k,v| "#{k}=#{v}" }.join(" ") unless kvargs.empty?
|
102
|
+
end
|
103
|
+
|
104
|
+
@host_proxy.run_ops(:run, remote_run_command_args)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# the subclasses of HostProxy will define methods that handle method dispatch via HostProxyOpsFileInvocationBuilder objects
|
63
110
|
class HostProxy
|
111
|
+
attr_accessor :_host
|
112
|
+
|
64
113
|
def initialize(host)
|
65
|
-
@
|
114
|
+
@_host = host
|
66
115
|
end
|
67
|
-
|
116
|
+
|
117
|
+
# the subclasses of this class will define methods that handle method dispatch via HostProxyOpsFileInvocationBuilder objects
|
118
|
+
|
119
|
+
def method_missing(name, ...)
|
120
|
+
@_host.send(name, ...)
|
68
121
|
end
|
69
122
|
end
|
70
123
|
|
@@ -142,12 +195,17 @@ module OpsWalrus
|
|
142
195
|
})
|
143
196
|
end
|
144
197
|
|
145
|
-
def
|
198
|
+
def set_ssh_session_connection(sshkit_backend)
|
146
199
|
@sshkit_backend = sshkit_backend
|
147
200
|
end
|
148
201
|
|
149
|
-
def
|
150
|
-
@
|
202
|
+
def set_ssh_session_tmp_bundle_root_dir(tmp_bundle_root_dir)
|
203
|
+
@tmp_bundle_root_dir = tmp_bundle_root_dir
|
204
|
+
end
|
205
|
+
|
206
|
+
def clear_ssh_session
|
207
|
+
@sshkit_backend = nil
|
208
|
+
@tmp_bundle_root_dir = nil
|
151
209
|
end
|
152
210
|
|
153
211
|
def execute(*args)
|
@@ -169,10 +227,6 @@ module OpsWalrus
|
|
169
227
|
@sshkit_backend.download!(remote_path.to_s, local_path.to_s)
|
170
228
|
end
|
171
229
|
|
172
|
-
def run
|
173
|
-
|
174
|
-
end
|
175
|
-
|
176
230
|
end
|
177
231
|
|
178
232
|
end
|
data/lib/opswalrus/ops_file.rb
CHANGED
@@ -27,6 +27,10 @@ module OpsWalrus
|
|
27
27
|
@yaml || (load_file && @yaml)
|
28
28
|
end
|
29
29
|
|
30
|
+
def script_line_offset
|
31
|
+
@script_line_offset || (load_file && @script_line_offset)
|
32
|
+
end
|
33
|
+
|
30
34
|
def script
|
31
35
|
@script || (load_file && @script)
|
32
36
|
end
|
@@ -35,6 +39,7 @@ module OpsWalrus
|
|
35
39
|
yaml, ruby_script = if @ops_file_path.exist?
|
36
40
|
parse(File.read(@ops_file_path))
|
37
41
|
end || ["", ""]
|
42
|
+
@script_line_offset = yaml.lines.size + 1 # +1 to account for the ... line
|
38
43
|
@yaml = YAML.load(yaml) || {} # post_invariant: @yaml is a Hash
|
39
44
|
@script = OpsFileScript.new(self, ruby_script)
|
40
45
|
end
|
@@ -115,7 +120,7 @@ module OpsWalrus
|
|
115
120
|
end
|
116
121
|
|
117
122
|
def invoke(runtime_env, params_hash)
|
118
|
-
puts "invoking: #{ops_file_path}"
|
123
|
+
# puts "invoking: #{ops_file_path}"
|
119
124
|
script.invoke(runtime_env, params_hash)
|
120
125
|
end
|
121
126
|
|
@@ -146,7 +151,7 @@ module OpsWalrus
|
|
146
151
|
@local_symbol_table ||= begin
|
147
152
|
local_symbol_table = {}
|
148
153
|
|
149
|
-
local_symbol_table.merge(imports)
|
154
|
+
local_symbol_table.merge!(imports)
|
150
155
|
|
151
156
|
# this is the import for the private lib directory if it exists
|
152
157
|
if private_lib_dir.exist?
|
@@ -8,6 +8,7 @@ require 'stringio'
|
|
8
8
|
require 'sshkit'
|
9
9
|
require 'sshkit/dsl'
|
10
10
|
|
11
|
+
require_relative 'host'
|
11
12
|
require_relative 'sshkit_ext'
|
12
13
|
require_relative 'walrus_lang'
|
13
14
|
|
@@ -71,24 +72,24 @@ module OpsWalrus
|
|
71
72
|
end
|
72
73
|
|
73
74
|
class Env
|
74
|
-
#
|
75
|
-
def initialize(
|
76
|
-
@
|
75
|
+
# env : Hash
|
76
|
+
def initialize(env)
|
77
|
+
@env = env
|
77
78
|
end
|
78
79
|
|
79
80
|
def [](key)
|
80
81
|
key = key.to_s if key.is_a? Symbol
|
81
|
-
@
|
82
|
+
@env[key]
|
82
83
|
end
|
83
84
|
|
84
85
|
def dig(*keys)
|
85
86
|
keys = keys.map {|key| key.is_a?(Integer) ? key : key.to_s }
|
86
|
-
@
|
87
|
+
@env.dig(*keys)
|
87
88
|
end
|
88
89
|
|
89
90
|
def method_missing(name, *args, **kwargs, &block)
|
90
|
-
if @
|
91
|
-
@
|
91
|
+
if @env.respond_to?(name)
|
92
|
+
@env.method(name).call(*args, **kwargs, &block)
|
92
93
|
else
|
93
94
|
value = self[name]
|
94
95
|
case value
|
@@ -107,10 +108,9 @@ module OpsWalrus
|
|
107
108
|
# SCRIPT
|
108
109
|
|
109
110
|
module DSL
|
110
|
-
# include SSHKit::DSL
|
111
|
-
|
112
111
|
def ssh(*args, **kwargs, &block)
|
113
|
-
|
112
|
+
host_proxy_class = @ops_file_script.host_proxy_class
|
113
|
+
hosts = inventory(*args, **kwargs).map {|host| host_proxy_class.new(host) }
|
114
114
|
sshkit_hosts = hosts.map(&:sshkit_host)
|
115
115
|
sshkit_host_to_ops_host_map = sshkit_hosts.zip(hosts).to_h
|
116
116
|
runtime_env = @runtime_env
|
@@ -124,7 +124,7 @@ module OpsWalrus
|
|
124
124
|
|
125
125
|
begin
|
126
126
|
# in this context, self is an instance of one of the subclasses of SSHKit::Backend::Abstract, e.g. SSHKit::Backend::Netssh
|
127
|
-
host.
|
127
|
+
host.set_ssh_session_connection(self)
|
128
128
|
|
129
129
|
# copy over bootstrap shell script
|
130
130
|
# io = StringIO.new(bootstrap_shell_script)
|
@@ -140,9 +140,10 @@ module OpsWalrus
|
|
140
140
|
upload_success = host.upload(zip_bundle_path, "tmpops.zip")
|
141
141
|
raise Error, "Unable to upload ops bundle to remote host" unless upload_success
|
142
142
|
|
143
|
-
stdout, stderr, exit_status = host.run_ops(
|
143
|
+
stdout, stderr, exit_status = host.run_ops(:bundle, "unzip tmpops.zip", in_bundle_root_dir: false)
|
144
144
|
raise Error, "Unable to unzip ops bundle on remote host" unless exit_status == 0
|
145
|
-
|
145
|
+
tmp_bundle_root_dir = stdout.strip
|
146
|
+
host.set_ssh_session_tmp_bundle_root_dir(tmp_bundle_root_dir)
|
146
147
|
|
147
148
|
# we run the block in the context of the host, s.t. `self` within the block evaluates to `host`
|
148
149
|
retval = host.instance_exec(local_host, &block) # host is passed as the argument to the block
|
@@ -179,7 +180,7 @@ module OpsWalrus
|
|
179
180
|
puts e.message
|
180
181
|
# puts e.backtrace.join("\n")
|
181
182
|
ensure
|
182
|
-
host.
|
183
|
+
host.clear_ssh_session
|
183
184
|
end
|
184
185
|
end
|
185
186
|
end
|
@@ -291,6 +292,7 @@ module OpsWalrus
|
|
291
292
|
@ops_file = ops_file
|
292
293
|
@ruby_script = ruby_script
|
293
294
|
@invocation_class = define_invocation_class
|
295
|
+
@host_proxy_class = define_host_proxy_class
|
294
296
|
end
|
295
297
|
|
296
298
|
def define_invocation_class
|
@@ -350,6 +352,56 @@ module OpsWalrus
|
|
350
352
|
klass
|
351
353
|
end
|
352
354
|
|
355
|
+
def define_host_proxy_class
|
356
|
+
klass = Class.new(HostProxy)
|
357
|
+
|
358
|
+
methods_defined = Set.new
|
359
|
+
|
360
|
+
# define methods for every import in the script
|
361
|
+
ops_file.local_symbol_table.each do |symbol_name, import_reference|
|
362
|
+
unless methods_defined.include? symbol_name
|
363
|
+
# puts "1. defining: #{symbol_name}(...)"
|
364
|
+
klass.define_method(symbol_name) do |*args, **kwargs, &block|
|
365
|
+
invocation_builder = case import_reference
|
366
|
+
# we know we're dealing with a package dependency reference, so we want to run an ops file contained within the bundle directory,
|
367
|
+
# therefore, we want to reference the specified ops file with respect to the bundle dir
|
368
|
+
when PackageDependencyReference
|
369
|
+
HostProxyOpsFileInvocationBuilder.new(self, true)
|
370
|
+
|
371
|
+
# we know we're dealing with a directory reference or OpsFile reference outside of the bundle dir, so we want to reference
|
372
|
+
# the specified ops file with respect to the root directory, and not with respect to the bundle dir
|
373
|
+
when DirectoryReference, OpsFileReference
|
374
|
+
HostProxyOpsFileInvocationBuilder.new(self, false)
|
375
|
+
end
|
376
|
+
|
377
|
+
invocation_builder.send(symbol_name, *args, **kwargs, &block)
|
378
|
+
end
|
379
|
+
methods_defined << symbol_name
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
# define methods for every Namespace or OpsFile within the namespace that the OpsFile resides within
|
384
|
+
sibling_symbol_table = Set.new
|
385
|
+
sibling_symbol_table |= ops_file.dirname.glob("*.ops").map {|ops_file_path| ops_file_path.basename(".ops").to_s } # OpsFiles
|
386
|
+
sibling_symbol_table |= ops_file.dirname.glob("*").select(&:directory?).map {|dir_path| dir_path.basename.to_s } # Namespaces
|
387
|
+
sibling_symbol_table.each do |symbol_name|
|
388
|
+
unless methods_defined.include? symbol_name
|
389
|
+
# puts "2. defining: #{symbol_name}(...)"
|
390
|
+
klass.define_method(symbol_name) do |*args, **kwargs, &block|
|
391
|
+
invocation_builder = HostProxyOpsFileInvocationBuilder.new(self, false)
|
392
|
+
invocation_builder.invoke(symbol_name, *args, **kwargs, &block)
|
393
|
+
end
|
394
|
+
methods_defined << symbol_name
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
klass
|
399
|
+
end
|
400
|
+
|
401
|
+
def host_proxy_class
|
402
|
+
@host_proxy_class
|
403
|
+
end
|
404
|
+
|
353
405
|
def script
|
354
406
|
@ruby_script
|
355
407
|
end
|
@@ -423,7 +475,7 @@ module OpsWalrus
|
|
423
475
|
|
424
476
|
def evaluate
|
425
477
|
# catch(:exit_now) do
|
426
|
-
eval(@ops_file_script.script)
|
478
|
+
eval(@ops_file_script.script, nil, @ops_file_script.ops_file.ops_file_path.to_s, @ops_file_script.ops_file.script_line_offset)
|
427
479
|
# end
|
428
480
|
end
|
429
481
|
|
data/lib/opswalrus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opswalrus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Ellis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: citrus
|
@@ -114,7 +114,6 @@ email:
|
|
114
114
|
- david@conquerthelawn.com
|
115
115
|
executables:
|
116
116
|
- ops
|
117
|
-
- run_ops_bundle
|
118
117
|
extensions: []
|
119
118
|
extra_rdoc_files: []
|
120
119
|
files:
|
@@ -125,7 +124,6 @@ files:
|
|
125
124
|
- README.md
|
126
125
|
- Rakefile
|
127
126
|
- exe/ops
|
128
|
-
- exe/run_ops_bundle
|
129
127
|
- lib/opswalrus.rb
|
130
128
|
- lib/opswalrus/app.rb
|
131
129
|
- lib/opswalrus/bootstrap.sh
|
data/exe/run_ops_bundle
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'opswalrus'
|
4
|
-
|
5
|
-
def main
|
6
|
-
zip_file_path = ARGV.shift.to_pathname
|
7
|
-
|
8
|
-
exit_status = 0
|
9
|
-
|
10
|
-
Dir.mktmpdir do |dir|
|
11
|
-
dir = dir.to_pathname
|
12
|
-
|
13
|
-
# unzip the bundle into the temp directory
|
14
|
-
OpsWalrus::DirZipper.unzip(zip_file_path, dir)
|
15
|
-
|
16
|
-
exit_status = OpsWalrus::Cli.run(ARGV)
|
17
|
-
end
|
18
|
-
|
19
|
-
exit exit_status
|
20
|
-
end
|
21
|
-
|
22
|
-
main
|