ops_team 0.5.0 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/lib/app_config.rb +18 -2
- data/lib/builtins/help.rb +4 -1
- data/lib/builtins/up.rb +1 -1
- data/lib/dependencies/apt.rb +1 -5
- data/lib/dependencies/sshkey.rb +85 -0
- data/lib/environment.rb +1 -1
- data/lib/ops.rb +3 -7
- data/lib/secrets.rb +1 -9
- data/ops_team.gemspec +4 -1
- metadata +62 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c91d50eeddf170724b335ec23089f3f5a452507f034e1edb8d9bce7fe419976
|
4
|
+
data.tar.gz: 9fa1b82f605e2342cfe01e6127849c41bae745ff68464afcb294f0796e5b9b82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1e9b52dcbcc50975dd2dd9e5369d4e1134822a7837a1132994c296fe32021c339d1457a1d9e92bbb6fdc5daa0581b761a13ce0f04ba92138821e41161f45209
|
7
|
+
data.tar.gz: 7b94c375bb4a1614aff89cbe83a530864b9c9aff8d597a0945fb499629833ff8dd099eb986df610d458a3a009d6ea00ac1eaf6c9c92e063892c15ee0290810d5
|
data/Gemfile
CHANGED
data/lib/app_config.rb
CHANGED
@@ -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
|
@@ -18,8 +34,8 @@ class AppConfig
|
|
18
34
|
end
|
19
35
|
|
20
36
|
def config
|
21
|
-
@config ||= file_contents ?
|
22
|
-
rescue
|
37
|
+
@config ||= file_contents ? YAML.safe_load(file_contents) : {}
|
38
|
+
rescue YAML::SyntaxError => e
|
23
39
|
Output.error("Error parsing config data: #{e}")
|
24
40
|
{}
|
25
41
|
end
|
data/lib/builtins/help.rb
CHANGED
@@ -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",
|
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
|
data/lib/builtins/up.rb
CHANGED
@@ -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
|
32
|
+
next unless dependency&.should_meet?
|
33
33
|
|
34
34
|
Output.status("[#{dependency.type}] #{dependency.name}")
|
35
35
|
|
data/lib/dependencies/apt.rb
CHANGED
@@ -9,7 +9,7 @@ module Dependencies
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def meet
|
12
|
-
execute("#{sudo_string}#{
|
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
|
@@ -0,0 +1,85 @@
|
|
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
|
+
"ops",
|
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 dir_name
|
54
|
+
`echo #{File.dirname(name)}`.chomp
|
55
|
+
end
|
56
|
+
|
57
|
+
def priv_key_name
|
58
|
+
`echo #{name}`.chomp
|
59
|
+
end
|
60
|
+
|
61
|
+
def pub_key_name
|
62
|
+
"#{priv_key_name}.pub"
|
63
|
+
end
|
64
|
+
|
65
|
+
def key_size
|
66
|
+
Options.get("sshkey.key_size") || DEFAULT_KEY_SIZE
|
67
|
+
end
|
68
|
+
|
69
|
+
def key_algo
|
70
|
+
DEFAULT_KEY_ALGO
|
71
|
+
end
|
72
|
+
|
73
|
+
def passphrase
|
74
|
+
`echo #{configured_passphrase}`.chomp
|
75
|
+
end
|
76
|
+
|
77
|
+
def configured_passphrase
|
78
|
+
Options.get("sshkey.passphrase")
|
79
|
+
end
|
80
|
+
|
81
|
+
def key_lifetime
|
82
|
+
Options.get("sshkey.key_lifetime") || DEFAULT_KEY_LIFETIME_S
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/environment.rb
CHANGED
data/lib/ops.rb
CHANGED
@@ -49,11 +49,11 @@ class Ops
|
|
49
49
|
|
50
50
|
def run_action
|
51
51
|
environment.set_variables
|
52
|
-
|
52
|
+
AppConfig.load
|
53
53
|
|
54
54
|
return builtin.run if builtin
|
55
55
|
|
56
|
-
Output.warn("Running '#{action}' from #{CONFIG_FILE}...")
|
56
|
+
Output.warn("Running '#{action}' from #{CONFIG_FILE} in environment '#{ENV['environment']}'...")
|
57
57
|
action.run
|
58
58
|
end
|
59
59
|
|
@@ -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
|
110
|
+
@app_config ||= AppConfig.new
|
115
111
|
end
|
116
112
|
end
|
117
113
|
|
data/lib/secrets.rb
CHANGED
@@ -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
|
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 = "")
|
data/ops_team.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'ops_team'
|
5
|
-
s.version = '0.
|
5
|
+
s.version = '0.8.2'
|
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.
|
4
|
+
version: 0.8.2
|
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
|