opswalrus 1.0.2 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf572dd5c13457782bb8256a38f4572ba897a7bb37ab4da0220fd3a69866b8ad
4
- data.tar.gz: 6ebc7681b98c3bc745b310eee40f866b8d6d328c37b50552b409ca1362b07889
3
+ metadata.gz: fa4d06b1bc87888397e4509eda913a1a5ad0cf4f069762852282de9c1cd7c6a0
4
+ data.tar.gz: 605d4b7e09d3fe47b2fa5106d5cd27e8255ba5265dff1bcfe8fbda3fb380195d
5
5
  SHA512:
6
- metadata.gz: 2be383a35f09b51d6e42be8280eaf3760d8735aea0b747406e9258b237dc38b55594a56000a88d2a1c398ae7de56d1391903eed0d1c542850f9bd4f167348c9c
7
- data.tar.gz: 71f1f58d4dda0533fdbd8fd35612daae8f2ad8390ae215d2d437432b6ab801c9ed87f614eb54c018db3ccbe72806625f38471d16b7edbff72ddfed376530437b
6
+ metadata.gz: cce83e3128b0d19d7ccec3d0fe85411d19959229fc8cd3ad9fdf47b40c739e598f3dd2020078492361df9d309b15e0c82824901ff2511b434adea09c9484d246
7
+ data.tar.gz: 7bc58a62f322c543e2aa57b5a75611d4984c3b72454c4ac52fbd91bfa074efde217fa8355bfc38718d13b0ac839fbe13c8c567307e0c1516e3067cea351f4594
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opswalrus (1.0.1)
4
+ opswalrus (1.0.3)
5
5
  bcrypt_pbkdf
6
6
  citrus
7
7
  ed25519
data/lib/opswalrus/app.rb CHANGED
@@ -64,6 +64,14 @@ module OpsWalrus
64
64
  "" # return empty string because we won't want anyone accidentally printing or inspecting @sudo_password
65
65
  end
66
66
 
67
+ def emit_json_output!
68
+ @emit_json_output = true
69
+ end
70
+
71
+ def emit_json_output?
72
+ @emit_json_output
73
+ end
74
+
67
75
  def set_local_hostname(hostname)
68
76
  hostname = hostname.strip
69
77
  @local_hostname = hostname.empty? ? "localhost" : hostname
@@ -186,6 +194,10 @@ module OpsWalrus
186
194
  puts JSON.pretty_generate(result.value)
187
195
  end
188
196
 
197
+ if emit_json_output?
198
+ puts JSON.pretty_generate(result.value)
199
+ end
200
+
189
201
  exit_status
190
202
  ensure
191
203
  FileUtils.remove_entry(tmp_dir) if tmp_dir
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
 
@@ -53,6 +53,7 @@ module OpsWalrus
53
53
  c.flag [:u, :user], desc: "Specify the user that the operation will run as"
54
54
  c.switch :pass, desc: "Prompt for a sudo password"
55
55
  c.flag [:p, :params], desc: "JSON string that represents the input parameters for the operation. The JSON string must conform to the params schema for the operation."
56
+ c.switch :json, desc: "Emit JSON output"
56
57
 
57
58
  c.action do |global_options, options, args|
58
59
  hosts = global_options[:hosts] || []
@@ -80,6 +81,10 @@ module OpsWalrus
80
81
  $app.prompt_sudo_password
81
82
  end
82
83
 
84
+ if options[:json]
85
+ $app.emit_json_output!
86
+ end
87
+
83
88
  # puts "verbose"
84
89
  # puts verbose.inspect
85
90
  # puts "user"
@@ -132,6 +137,7 @@ module OpsWalrus
132
137
 
133
138
  c.default_command :status
134
139
  end
140
+
135
141
  end
136
142
  end
137
143
 
@@ -54,13 +54,17 @@ module OpsWalrus
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)
58
- if in_bundle_root_dir
59
- # e.g. /home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops bundle unzip tmpops.zip
60
- shell!("/home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops #{command} #{@tmp_bundle_root_dir} #{command_arguments}")
61
- else
62
- shell!("/home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops #{command} #{command_arguments}")
63
- end
57
+ def run_ops(command, command_arguments, in_bundle_root_dir: true, verbose: false)
58
+ # e.g. /home/linuxbrew/.linuxbrew/bin/gem exec -g opswalrus ops bundle unzip tmpops.zip
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)
64
68
  end
65
69
 
66
70
  end
@@ -82,19 +86,26 @@ module OpsWalrus
82
86
  # so we want to build up a command and send it to the remote host via HostDSL#run_ops
83
87
  @method_chain.unshift(Bundler::BUNDLE_DIR) if @is_invocation_a_call_to_package_in_bundle_dir
84
88
 
85
- # path_to_ops_file_basename = @method_chain.join(File::Separator)
86
- # remote_run_command_args << path_to_ops_file_basename
89
+ remote_run_command_args = "--json"
87
90
 
88
- remote_run_command_args = @method_chain.join(" ")
91
+ remote_run_command_args << " "
92
+ remote_run_command_args << @method_chain.join(" ")
89
93
 
90
94
  unless args.empty?
91
95
  remote_run_command_args << " "
92
96
  remote_run_command_args << args.join(" ")
93
97
  end
94
98
 
95
- unless kvargs.empty?
99
+ unless kwargs.empty?
96
100
  remote_run_command_args << " "
97
- remote_run_command_args << kvargs.map{|k,v| "#{k}=#{v}" }.join(" ") unless kvargs.empty?
101
+ remote_run_command_args << kwargs.map do |k, v|
102
+ case v
103
+ when Array
104
+ v.map {|v_element| "#{k}:#{v_element}" }
105
+ else
106
+ "#{k}:#{v}"
107
+ end
108
+ end.join(" ")
98
109
  end
99
110
 
100
111
  @host_proxy.run_ops(:run, remote_run_command_args)
@@ -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
@@ -148,9 +148,11 @@ module OpsWalrus
148
148
  # we run the block in the context of the host, s.t. `self` within the block evaluates to `host`
149
149
  retval = host.instance_exec(local_host, &block) # host is passed as the argument to the block
150
150
 
151
+ puts retval.inspect
152
+
151
153
  # cleanup
152
- if tmp_bundle_dir =~ /tmp/ # sanity check the temp path before we blow away something we don't intend
153
- host.execute(:rm, "-rf", "tmpopsbootstrap.sh", "tmpops.zip", tmp_bundle_dir)
154
+ if tmp_bundle_root_dir =~ /tmp/ # sanity check the temp path before we blow away something we don't intend
155
+ host.execute(:rm, "-rf", "tmpopsbootstrap.sh", "tmpops.zip", tmp_bundle_root_dir)
154
156
  else
155
157
  host.execute(:rm, "-rf", "tmpopsbootstrap.sh", "tmpops.zip")
156
158
  end
@@ -475,7 +477,7 @@ module OpsWalrus
475
477
 
476
478
  def evaluate
477
479
  # catch(:exit_now) do
478
- eval(@ops_file_script.script)
480
+ eval(@ops_file_script.script, nil, @ops_file_script.ops_file.ops_file_path.to_s, @ops_file_script.ops_file.script_line_offset)
479
481
  # end
480
482
  end
481
483
 
@@ -1,3 +1,3 @@
1
1
  module OpsWalrus
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.4"
3
3
  end
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.2
4
+ version: 1.0.4
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-15 00:00:00.000000000 Z
11
+ date: 2023-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: citrus