ops_team 0.7.0 → 0.8.6

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: 011b0f2a12af0a58c9b48f53d2dd59b9a753eab0acd221ee2675c296c7b109d0
4
- data.tar.gz: 157963863ac30030921804a37f57ab332502ba465ac9c4ea139b18a297f0618e
3
+ metadata.gz: 75e320ffce54700e023fb48da06735086bcabac888b44dabb927db8e31aece1a
4
+ data.tar.gz: e44234004fb6c38f17d1f750b53273572928aad090798b3c79707129ef47a983
5
5
  SHA512:
6
- metadata.gz: 9ce81eacd3adb1f7416a96adeabc38b244919ef8e8b17b349cea60e21a68535cc7aaeca57d8af1fb9fb1a03f7b94e98d423f018c2ecd2e9a4da556234ea64f65
7
- data.tar.gz: 0e0b772bdd70841e197079c93124f53a0d61ea8558add16a4b89e2e7340a1dbeba58222a3631165c03ed3ea35c85c7c596f9834aa0ba3e0445196b27b35e3f41
6
+ metadata.gz: bb5ebb07a72f717d5b71089bd2159f70d7c2bd0718e380f8318dd6334277013089ed2f90535e9d94fe7098320cee40426338e98e0195d937a4dec6e649d92af3
7
+ data.tar.gz: 67fab9f3a7761ba133c43e3670c6e72ce0473d65333a5d1df734012d1521ae34a07af4fce803ab3ef8dd6c8df1c3a103c73a03bb83cb0a73705b7e4ffe9180bb
data/Gemfile CHANGED
@@ -4,7 +4,11 @@ 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 "ejson"
11
+ gem "net-ssh"
8
12
  gem "require_all"
9
13
 
10
14
  group :test do
@@ -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 = 3600
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.7.0'
5
+ s.version = '0.8.6'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
@@ -22,7 +22,11 @@ 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 'ejson', '~> 1.2', '>= 1.2.1'
29
+ s.add_runtime_dependency 'net-ssh', '~> 6.1', '>= 6.1.0'
26
30
  s.add_runtime_dependency 'require_all', '~> 1.1', '>= 1.1.6'
27
31
  s.license = 'GPL-3.0-only'
28
32
  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.7.0
4
+ version: 0.8.6
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,66 @@ 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: ejson
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.2'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.1
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.2.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: net-ssh
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 6.1.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '6.1'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 6.1.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '6.1'
33
113
  - !ruby/object:Gem::Dependency
34
114
  name: require_all
35
115
  requirement: !ruby/object:Gem::Requirement
@@ -84,6 +164,7 @@ files:
84
164
  - lib/dependencies/dir.rb
85
165
  - lib/dependencies/docker.rb
86
166
  - lib/dependencies/gem.rb
167
+ - lib/dependencies/sshkey.rb
87
168
  - lib/dependency.rb
88
169
  - lib/environment.rb
89
170
  - lib/ops.rb