ops_team 0.8.6 → 0.9.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
  SHA256:
3
- metadata.gz: 75e320ffce54700e023fb48da06735086bcabac888b44dabb927db8e31aece1a
4
- data.tar.gz: e44234004fb6c38f17d1f750b53273572928aad090798b3c79707129ef47a983
3
+ metadata.gz: a811c1178ce7f125d006e4a3839191446cf758bf24dd5b68d10e6778b4aa2927
4
+ data.tar.gz: 4b46a9a22a19f533d244c4442ab8c4bbb30479e04c09d4f40f65993faa7f4ea1
5
5
  SHA512:
6
- metadata.gz: bb5ebb07a72f717d5b71089bd2159f70d7c2bd0718e380f8318dd6334277013089ed2f90535e9d94fe7098320cee40426338e98e0195d937a4dec6e649d92af3
7
- data.tar.gz: 67fab9f3a7761ba133c43e3670c6e72ce0473d65333a5d1df734012d1521ae34a07af4fce803ab3ef8dd6c8df1c3a103c73a03bb83cb0a73705b7e4ffe9180bb
6
+ metadata.gz: 14117ab9417d99efc20ea08a0497504acdc7486704be02b96f65fe7da0719447dace894e8ee733261e9fd73b5cafe81199527aa37e4977cd818434e6517465be
7
+ data.tar.gz: 179c07999a87d8f43710ab22f1ffda3dd7a5776e56640324c1a4e175df36607fe904e0b2c15901e8c5e89eaba3a1a216157a6fb518e5aca6f64120061bb6dbc5
@@ -17,7 +17,7 @@ class Action
17
17
  end
18
18
 
19
19
  def to_s
20
- "#{command} #{@args.join(' ')}"
20
+ "#{command} #{@args.join(' ')}".strip
21
21
  end
22
22
 
23
23
  def alias
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Builtin
4
+ attr_reader :args, :config
5
+
4
6
  class << self
5
7
  def description
6
8
  "no description"
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ require 'builtin'
6
+
7
+ module Builtins
8
+ class Background < Builtin
9
+ DEFAULT_SHELL = "bash"
10
+ DEFAULT_LOG_FILE_PREFIX = "/tmp/ops_bglog_"
11
+
12
+ class << self
13
+ def description
14
+ "runs the given command in a background session"
15
+ end
16
+ end
17
+
18
+ def run
19
+ subprocess = fork do
20
+ run_ops(args)
21
+ end
22
+
23
+ Process.detach(subprocess)
24
+ end
25
+
26
+ private
27
+
28
+ def run_ops(args)
29
+ Output.warn("Running '#{args.join(' ')}' with stderr and stdout redirected to '#{log_file}'")
30
+ $stdout.sync = $stderr.sync = true
31
+ $stdout.reopen(log_file, "w")
32
+ $stderr.reopen($stdout)
33
+
34
+ Ops.new(args).run
35
+ end
36
+
37
+ def log_file
38
+ @log_file ||= "#{log_file_prefix}#{Ops.project_name}"
39
+ end
40
+
41
+ def log_file_prefix
42
+ Options.get("background.log_file_prefix") || DEFAULT_LOG_FILE_PREFIX
43
+ end
44
+
45
+ def shell
46
+ Options.get("background.shell") || DEFAULT_SHELL
47
+ end
48
+ end
49
+
50
+ # set an alias
51
+ Bg = Background
52
+ end
@@ -21,7 +21,7 @@ module Dependencies
21
21
  FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
22
22
 
23
23
  generate_key unless File.exist?(priv_key_name) && File.exist?(pub_key_name)
24
- add_key if success? && ENV["SSH_AUTH_SOCK"]
24
+ add_key if success? && should_add_key?
25
25
  end
26
26
 
27
27
  def unmeet
@@ -35,24 +35,29 @@ module Dependencies
35
35
  private
36
36
 
37
37
  def generate_key
38
- execute("ssh-keygen -b #{key_size} -t #{key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
38
+ Output.warn("\nNo passphrase set for SSH key '#{priv_key_name}'") if passphrase.nil? || passphrase.empty?
39
+
40
+ execute("ssh-keygen -b #{opt_key_size} -t #{opt_key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
39
41
  end
40
42
 
41
43
  def add_key
42
44
  Net::SSH::Authentication::Agent.connect.add_identity(
43
45
  unencrypted_key,
44
46
  key_comment,
45
- lifetime: key_lifetime
47
+ lifetime: opt_key_lifetime
46
48
  )
47
49
  end
48
50
 
51
+ def should_add_key?
52
+ ENV["SSH_AUTH_SOCK"] && opt_add_keys?
53
+ end
54
+
49
55
  def unencrypted_key
50
- Net::SSH::KeyFactory.load_private_key(priv_key_name, passphrase)
56
+ Net::SSH::KeyFactory.load_private_key(priv_key_name, passphrase.empty? ? nil : passphrase)
51
57
  end
52
58
 
53
59
  def key_comment
54
- # the current directory is usually named for the project
55
- File.basename(::Dir.pwd)
60
+ Ops.project_name
56
61
  end
57
62
 
58
63
  def dir_name
@@ -67,23 +72,40 @@ module Dependencies
67
72
  "#{priv_key_name}.pub"
68
73
  end
69
74
 
70
- def key_size
75
+ def opt_key_size
71
76
  Options.get("sshkey.key_size") || DEFAULT_KEY_SIZE
72
77
  end
73
78
 
74
- def key_algo
79
+ def opt_key_algo
75
80
  DEFAULT_KEY_ALGO
76
81
  end
77
82
 
78
83
  def passphrase
79
- `echo #{configured_passphrase}`.chomp
84
+ `echo #{opt_passphrase}`.chomp
85
+ end
86
+
87
+ def opt_passphrase
88
+ @opt_passphrase ||= begin
89
+ return "$#{Options.get('sshkey.passphrase_var')}" if Options.get("sshkey.passphrase_var")
90
+
91
+ output_passphrase_warning if Options.get("sshkey.passphrase")
92
+
93
+ Options.get("sshkey.passphrase")
94
+ end
95
+ end
96
+
97
+ def output_passphrase_warning
98
+ Output.warn(
99
+ "\n'options.sshkey.passphrase' is deprecated and will be removed in a future release. " \
100
+ "Use 'options.sshkey.passphrase_var' instead."
101
+ )
80
102
  end
81
103
 
82
- def configured_passphrase
83
- Options.get("sshkey.passphrase")
104
+ def opt_add_keys?
105
+ Options.get("sshkey.add_keys").nil? ? true : Options.get("sshkey.add_keys")
84
106
  end
85
107
 
86
- def key_lifetime
108
+ def opt_key_lifetime
87
109
  Options.get("sshkey.key_lifetime") || DEFAULT_KEY_LIFETIME_S
88
110
  end
89
111
  end
data/lib/ops.rb CHANGED
@@ -19,6 +19,12 @@ class Ops
19
19
  INVALID_SYNTAX_EXIT_CODE = 64
20
20
  UNKNOWN_ACTION_EXIT_CODE = 65
21
21
 
22
+ class << self
23
+ def project_name
24
+ File.basename(::Dir.pwd)
25
+ end
26
+ end
27
+
22
28
  def initialize(argv)
23
29
  @action_name = argv[0]
24
30
  @args = argv[1..-1]
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.8.6'
5
+ s.version = '0.9.0'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
9
- s.date = '2020-05-29'
9
+ s.date = '2020-08-11'
10
10
  s.summary = 'ops_team handles basic operations tasks for your project, driven by YAML config'
11
11
  s.homepage = 'https://github.com/nickthecook/ops'
12
12
  s.files = Dir[
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-29 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt_pbkdf
@@ -148,6 +148,7 @@ files:
148
148
  - lib/action.rb
149
149
  - lib/app_config.rb
150
150
  - lib/builtin.rb
151
+ - lib/builtins/background.rb
151
152
  - lib/builtins/down.rb
152
153
  - lib/builtins/env.rb
153
154
  - lib/builtins/exec.rb