ops_team 0.6.0 → 0.8.4

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: c66d41a99b01b2cb8a491c3fcc21c81914cf6981ffe757965940ad125f7d4721
4
- data.tar.gz: edb9c00bdef96370a79586638fc1541c5ad1e0ae301fe14053bc30004f149333
3
+ metadata.gz: 9ac7f508035cd849eeac7d3277f3eeb3a1de9537e31201f0a2dbcbafc6b0765b
4
+ data.tar.gz: 2198752b9d2c9e6858a1c472befe4ba6d44475697b9c2f4882a4eef93c5e42ad
5
5
  SHA512:
6
- metadata.gz: 1f1bbbd85e768c5f20b0d1fb70c28db11875aabadaf3fc647a2dc8c590be470cdab990c2fa9a657c02b7f6a2798eb5c2a94623d05aa9bb5ef95dd1706d742a6b
7
- data.tar.gz: 056d36e1c94f72709568d95e5eb2608a0804e9b322491cf1ff0a9fa4d17cefe5862e508aaf0d73bac5949dafbba8d2fcc8e6d6028235e2beb2b87410fa1cd5e3
6
+ metadata.gz: 2579177f0edf6061b22b4cdb532943b90ac6077a0f265c5c5a4e3c844a0e742446bbf2f14d899df3d80582e175fff7380f83c5d94c0da004ff587ad76f7f82d9
7
+ data.tar.gz: 3b4f2a6bc2b604214ad96587430e90031ce529fe2cc03685e33d17bbbf41def8f88f2bba0679a0fe1657f12ec13fed7656f649bdca68d56f2f1e3c7fdac82931
data/Gemfile CHANGED
@@ -4,7 +4,10 @@ source "https://rubygems.org"
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
+ gem "bcrypt_pbkdf"
7
8
  gem "colorize"
9
+ gem "ed25519"
10
+ gem "net-ssh"
8
11
  gem "require_all"
9
12
 
10
13
  group :test do
@@ -1,6 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AppConfig
4
+ class << self
5
+ def load
6
+ new(app_config_path).load
7
+ end
8
+
9
+ private
10
+
11
+ def app_config_path
12
+ expand_path(Options.get("config.path"))
13
+ end
14
+
15
+ def expand_path(path)
16
+ `echo #{path}`.chomp
17
+ end
18
+ end
19
+
4
20
  def initialize(filename = "")
5
21
  @filename = filename.empty? ? default_filename : filename
6
22
  end
@@ -35,7 +35,10 @@ module Builtins
35
35
 
36
36
  def actions
37
37
  @config["actions"].map do |name, value|
38
- format("%<name>-35s %<desc>s", name: name.yellow, desc: value["description"] || value["command"])
38
+ format("%<name>-35s %<desc>s",
39
+ name: name.yellow,
40
+ desc: value["description"] || value["command"]
41
+ )
39
42
  end
40
43
  end
41
44
  end
@@ -29,7 +29,7 @@ module Builtins
29
29
  def meet_dependencies
30
30
  dependency_handler.dependencies.each do |dependency|
31
31
  # don't even output anything for dependencies that shouldn't be considered on this machine
32
- next unless dependency.should_meet?
32
+ next unless dependency&.should_meet?
33
33
 
34
34
  Output.status("[#{dependency.type}] #{dependency.name}")
35
35
 
@@ -9,7 +9,7 @@ module Dependencies
9
9
  end
10
10
 
11
11
  def meet
12
- execute("#{sudo_string}#{meet_command}")
12
+ execute("#{sudo_string}apt-get install -y #{name}")
13
13
  end
14
14
 
15
15
  def unmeet
@@ -28,9 +28,5 @@ module Dependencies
28
28
 
29
29
  "sudo "
30
30
  end
31
-
32
- def meet_command
33
- "apt-get install -y #{name}"
34
- end
35
31
  end
36
32
  end
@@ -9,7 +9,7 @@ module Dependencies
9
9
  end
10
10
 
11
11
  def meet
12
- execute("mkdir #{name}")
12
+ execute("mkdir -p #{name}")
13
13
  end
14
14
 
15
15
  def unmeet
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/ssh'
4
+
5
+ require 'dependency'
6
+
7
+ module Dependencies
8
+ class Sshkey < Dependency
9
+ DEFAULT_KEY_SIZE = 2048
10
+ DEFAULT_KEY_ALGO = "rsa"
11
+ DEFAULT_KEY_LIFETIME_S = 600
12
+
13
+ def met?
14
+ # we always need to at least update the key lifetime in the agent
15
+ false
16
+ end
17
+
18
+ def meet
19
+ Secrets.load
20
+
21
+ FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
22
+
23
+ generate_key unless File.exist?(priv_key_name) && File.exist?(pub_key_name)
24
+ add_key if success? && ENV["SSH_AUTH_SOCK"]
25
+ end
26
+
27
+ def unmeet
28
+ true
29
+ end
30
+
31
+ def should_meet?
32
+ true
33
+ end
34
+
35
+ private
36
+
37
+ def generate_key
38
+ execute("ssh-keygen -b #{key_size} -t #{key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
39
+ end
40
+
41
+ def add_key
42
+ Net::SSH::Authentication::Agent.connect.add_identity(
43
+ unencrypted_key,
44
+ key_comment,
45
+ lifetime: key_lifetime
46
+ )
47
+ end
48
+
49
+ def unencrypted_key
50
+ Net::SSH::KeyFactory.load_private_key(priv_key_name, passphrase)
51
+ end
52
+
53
+ def key_comment
54
+ # the current directory is usually named for the project
55
+ File.basename(::Dir.pwd)
56
+ end
57
+
58
+ def dir_name
59
+ `echo #{File.dirname(name)}`.chomp
60
+ end
61
+
62
+ def priv_key_name
63
+ `echo #{name}`.chomp
64
+ end
65
+
66
+ def pub_key_name
67
+ "#{priv_key_name}.pub"
68
+ end
69
+
70
+ def key_size
71
+ Options.get("sshkey.key_size") || DEFAULT_KEY_SIZE
72
+ end
73
+
74
+ def key_algo
75
+ DEFAULT_KEY_ALGO
76
+ end
77
+
78
+ def passphrase
79
+ `echo #{configured_passphrase}`.chomp
80
+ end
81
+
82
+ def configured_passphrase
83
+ Options.get("sshkey.passphrase")
84
+ end
85
+
86
+ def key_lifetime
87
+ Options.get("sshkey.key_lifetime") || DEFAULT_KEY_LIFETIME_S
88
+ end
89
+ end
90
+ end
@@ -30,7 +30,7 @@ class Environment
30
30
 
31
31
  def set_configured_variables
32
32
  @env_hash.each do |key, value|
33
- ENV[key] = value.to_s
33
+ ENV[key] = `echo #{value}`.chomp
34
34
  end
35
35
  end
36
36
  end
data/lib/ops.rb CHANGED
@@ -49,7 +49,7 @@ class Ops
49
49
 
50
50
  def run_action
51
51
  environment.set_variables
52
- app_config.load
52
+ AppConfig.load
53
53
 
54
54
  return builtin.run if builtin
55
55
 
@@ -106,12 +106,8 @@ class Ops
106
106
  @environment ||= Environment.new(env_vars)
107
107
  end
108
108
 
109
- def app_config_file
110
- `echo #{Options.get("config.path")}`.chomp
111
- end
112
-
113
109
  def app_config
114
- @app_config ||= AppConfig.new(app_config_file)
110
+ @app_config ||= AppConfig.new
115
111
  end
116
112
  end
117
113
 
@@ -8,19 +8,11 @@ require 'options'
8
8
 
9
9
  class Secrets < AppConfig
10
10
  class << self
11
- def load
12
- Secrets.new(secrets_path).load
13
- end
14
-
15
11
  private
16
12
 
17
- def secrets_path
13
+ def app_config_path
18
14
  expand_path(Options.get("secrets.path"))
19
15
  end
20
-
21
- def expand_path(path)
22
- `echo #{path}`.chomp
23
- end
24
16
  end
25
17
 
26
18
  def initialize(filename = "")
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.6.0'
5
+ s.version = '0.8.4'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
@@ -22,7 +22,10 @@ Gem::Specification.new do |s|
22
22
  ]
23
23
  s.executables << 'ops'
24
24
  s.required_ruby_version = '~> 2.5'
25
+ s.add_runtime_dependency 'bcrypt_pbkdf', '~> 1.0', '>= 1.0.1'
25
26
  s.add_runtime_dependency 'colorize', '~> 0.8', '>= 0.8.1'
27
+ s.add_runtime_dependency 'ed25519', '~> 1.2', '>= 1.2.4'
28
+ s.add_runtime_dependency 'net-ssh', '~> 6.1', '>= 6.1.0'
26
29
  s.add_runtime_dependency 'require_all', '~> 1.1', '>= 1.1.6'
27
30
  s.license = 'GPL-3.0-only'
28
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
@@ -10,6 +10,26 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt_pbkdf
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: colorize
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -30,6 +50,46 @@ dependencies:
30
50
  - - ">="
31
51
  - !ruby/object:Gem::Version
32
52
  version: 0.8.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: ed25519
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.2'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.2.4
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.2'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.2.4
73
+ - !ruby/object:Gem::Dependency
74
+ name: net-ssh
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 6.1.0
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '6.1'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 6.1.0
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '6.1'
33
93
  - !ruby/object:Gem::Dependency
34
94
  name: require_all
35
95
  requirement: !ruby/object:Gem::Requirement
@@ -84,6 +144,7 @@ files:
84
144
  - lib/dependencies/dir.rb
85
145
  - lib/dependencies/docker.rb
86
146
  - lib/dependencies/gem.rb
147
+ - lib/dependencies/sshkey.rb
87
148
  - lib/dependency.rb
88
149
  - lib/environment.rb
89
150
  - lib/ops.rb