cem_acpt 0.2.9-universal-java-17 → 0.2.10-universal-java-17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/cem_acpt/context.rb +7 -7
- data/lib/cem_acpt/logging/formatter.rb +96 -0
- data/lib/cem_acpt/logging.rb +2 -35
- data/lib/cem_acpt/utils.rb +70 -10
- data/lib/cem_acpt/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d59f3f4432694cd766fc5ca304ade0cad8cb681849181256d8c1ced3ba68438
|
4
|
+
data.tar.gz: eff162b600769222a8d0670e2a528cc389eae0407e35a1d6671c1518248c0480
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8124eec84379d5737fc4e04327ded0de1da8cb43c724a51cfd892c150823b58b14f9f6f99ec24adff5a7bc69302595e79de34501326c1c6e85fe1b0fa3c99cc
|
7
|
+
data.tar.gz: c6ea839545a9c00779aec17f331a9769a743baf7e05654f25d9efaa0e7edd8490dc528342ba75cdef171dc79328ad0431b204310c53d736f0b8bd2faf71ac6b4
|
data/Gemfile.lock
CHANGED
data/lib/cem_acpt/context.rb
CHANGED
@@ -36,10 +36,8 @@ module CemAcpt
|
|
36
36
|
# Creates a SSH key and a SSH known hosts file for the acceptance test suite
|
37
37
|
def new_test_ssh_key
|
38
38
|
log('Creating ephemeral SSH key and known hosts file for acceptance test suites...')
|
39
|
-
@ssh_priv_key, @ssh_pub_key = CemAcpt::Utils::SSH.
|
40
|
-
|
41
|
-
CemAcpt::Utils::SSH.set_ssh_file_permissions(@ssh_priv_key, @ssh_pub_key, @ssh_known_hosts)
|
42
|
-
log('Successfully created SSH files...')
|
39
|
+
@ssh_priv_key, @ssh_pub_key, @ssh_known_hosts = CemAcpt::Utils::SSH::Ephemeral.create
|
40
|
+
log('Successfully created SSH files.')
|
43
41
|
log("SSH private key: #{@ssh_priv_key}", :debug)
|
44
42
|
log("SSH public key: #{@ssh_pub_key}", :debug)
|
45
43
|
log("SSH known hosts: #{@ssh_known_hosts}", :debug)
|
@@ -48,7 +46,9 @@ module CemAcpt
|
|
48
46
|
# Deletes acceptance test suite SSH files
|
49
47
|
def clean_test_ssh_key
|
50
48
|
log('Deleting ephemeral ssh keys and acpt_known_hosts if they exist...')
|
51
|
-
|
49
|
+
cleaned = CemAcpt::Utils::SSH::Ephemeral.clean
|
50
|
+
log('Successfully cleaned ephemeral ssh files.')
|
51
|
+
log("Deleted: #{cleaned}", :debug)
|
52
52
|
end
|
53
53
|
|
54
54
|
# Prints a period to the terminal every 5 seconds in a single line to keep the terminal
|
@@ -62,8 +62,8 @@ module CemAcpt
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def clean_up_test_suite(opts)
|
65
|
-
@ctx
|
66
|
-
@ctx
|
65
|
+
@ctx&.node_inventory&.clear!
|
66
|
+
@ctx&.node_inventory&.clean_local_files
|
67
67
|
clean_test_ssh_key unless opts[:no_ephemeral_ssh_key]
|
68
68
|
@run_handler&.destroy_test_nodes
|
69
69
|
@keep_terminal_alive&.kill
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CemAcpt
|
4
|
+
module Logging
|
5
|
+
module Formatter
|
6
|
+
class << self
|
7
|
+
def for(log_format)
|
8
|
+
all.find { |f| f.log_format == log_format.downcase.to_sym }.get
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def all
|
14
|
+
@all ||= [FileFormatter.new, JSONFormatter.new, TextFormatter.new, GithubActionFormatter.new]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class FileFormatter
|
19
|
+
attr_reader :log_format
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@log_format = :file
|
23
|
+
end
|
24
|
+
|
25
|
+
def get
|
26
|
+
proc do |severity, datetime, progname, msg|
|
27
|
+
format(severity, datetime, progname, msg)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def format(severity, datetime, _progname, msg)
|
34
|
+
"[#{datetime}] #{severity}: #{msg}\n"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class JSONFormatter < FileFormatter
|
39
|
+
def initialize
|
40
|
+
super
|
41
|
+
@log_format = :json
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def format(severity, datetime, progname, msg)
|
47
|
+
require 'json'
|
48
|
+
{
|
49
|
+
timestamp: datetime,
|
50
|
+
progname: progname,
|
51
|
+
severity: severity,
|
52
|
+
message: msg,
|
53
|
+
}.to_json + "\n"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class TextFormatter < FileFormatter
|
58
|
+
def initialize
|
59
|
+
super
|
60
|
+
@log_format = :text
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def format(severity, _datetime, _progname, msg)
|
66
|
+
"#{severity} - #{msg}\n"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class GithubActionFormatter < FileFormatter
|
71
|
+
SEV_MAP = {
|
72
|
+
'DEBUG' => '::debug',
|
73
|
+
'INFO' => '::notice',
|
74
|
+
'WARN' => '::warning',
|
75
|
+
'ERROR' => '::error',
|
76
|
+
'FATAL' => '::error',
|
77
|
+
}.freeze
|
78
|
+
|
79
|
+
def initialize
|
80
|
+
super
|
81
|
+
@log_format = :github_action
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def format(severity, _datetime, _progname, msg)
|
87
|
+
if severity == 'DEBUG'
|
88
|
+
"#{SEV_MAP[severity]}::{#{msg}}\n"
|
89
|
+
else
|
90
|
+
"#{SEV_MAP[severity]} #{msg}\n"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/cem_acpt/logging.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'logger'
|
4
|
+
require 'cem_acpt/logging/formatter'
|
4
5
|
|
5
6
|
module CemAcpt
|
6
7
|
# Logging for CemAcpt
|
@@ -92,41 +93,7 @@ module CemAcpt
|
|
92
93
|
# @param f [Symbol] the log format style to set
|
93
94
|
# @return [Proc] the proc to be passed to Logger#formatter=
|
94
95
|
def new_log_formatter(f)
|
95
|
-
|
96
|
-
when :json
|
97
|
-
require 'json'
|
98
|
-
@current_log_format = :json
|
99
|
-
proc do |severity, datetime, progname, msg|
|
100
|
-
{
|
101
|
-
timestamp: datetime,
|
102
|
-
progname: progname,
|
103
|
-
severity: severity,
|
104
|
-
message: msg,
|
105
|
-
}.to_json + "\n"
|
106
|
-
end
|
107
|
-
when :text
|
108
|
-
@current_log_format = :text
|
109
|
-
proc do |severity, _datetime, _progname, msg|
|
110
|
-
"#{severity} - #{msg}\n"
|
111
|
-
end
|
112
|
-
when :github_action
|
113
|
-
@current_log_format = :github_action
|
114
|
-
sev_map = {
|
115
|
-
'DEBUG' => '::debug::',
|
116
|
-
'INFO' => '::notice::',
|
117
|
-
'WARN' => '::warning::',
|
118
|
-
'ERROR' => '::error::',
|
119
|
-
'FATAL' => '::error::',
|
120
|
-
}
|
121
|
-
proc do |severity, _datetime, _progname, msg|
|
122
|
-
"#{sev_map[severity]}{#{msg}}\n"
|
123
|
-
end
|
124
|
-
else
|
125
|
-
@current_log_format = :file
|
126
|
-
proc do |severity, datetime, _progname, msg|
|
127
|
-
"[#{datetime}] #{severity}: #{msg}\n"
|
128
|
-
end
|
129
|
-
end
|
96
|
+
CemAcpt::Logging::Formatter.for(f)
|
130
97
|
end
|
131
98
|
|
132
99
|
# Returns the current log config if set, or the default if not.
|
data/lib/cem_acpt/utils.rb
CHANGED
@@ -81,6 +81,40 @@ module CemAcpt
|
|
81
81
|
|
82
82
|
# SSH-related utilities
|
83
83
|
module SSH
|
84
|
+
module Ephemeral
|
85
|
+
PRIV_KEY = 'acpt_test_key'
|
86
|
+
CREATE_OPTS = {
|
87
|
+
type: 'rsa',
|
88
|
+
bits: '4096',
|
89
|
+
comment: 'Ephemeral for cem_acpt',
|
90
|
+
password: '',
|
91
|
+
known_hosts: 'acpt_known_hosts',
|
92
|
+
overwrite_known_hosts: true,
|
93
|
+
}.freeze
|
94
|
+
|
95
|
+
class << self
|
96
|
+
attr_accessor :ephemeral_keydir
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.create(keydir: CemAcpt::Utils::SSH.default_keydir)
|
100
|
+
self.ephemeral_keydir = keydir
|
101
|
+
@priv_key, @pub_key, @known_hosts = CemAcpt::Utils::SSH.create(PRIV_KEY, keydir: ephemeral_keydir, **CREATE_OPTS)
|
102
|
+
[@priv_key, @pub_key, @known_hosts]
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.clean
|
106
|
+
[@priv_key, @pub_key, @known_hosts].each_with_object([]) do |f, arr|
|
107
|
+
next unless f
|
108
|
+
|
109
|
+
path = CemAcpt::Utils::SSH.file_path(f, keydir: ephemeral_keydir)
|
110
|
+
if ::File.exist?(path)
|
111
|
+
::File.delete(path)
|
112
|
+
arr << path
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
84
118
|
def self.ssh_keygen
|
85
119
|
bin_path = `#{ENV['SHELL']} -c 'command -v ssh-keygen'`.chomp
|
86
120
|
raise 'Cannot find ssh-keygen! Install it and verify PATH' unless bin_path
|
@@ -97,26 +131,52 @@ module CemAcpt
|
|
97
131
|
ssh_dir
|
98
132
|
end
|
99
133
|
|
100
|
-
def self.
|
101
|
-
|
134
|
+
def self.file_path(file_name, keydir: default_keydir)
|
135
|
+
::File.join(keydir, file_name)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Takes a file name (not path) and optional SSH key directory and returns the paths
|
139
|
+
# to the private key and public key based on the file name given.
|
140
|
+
# @param file_name [String] The base name for the keys
|
141
|
+
# @param keydir [String] An optional SSH key directory
|
142
|
+
def self.key_paths(file_name, keydir: default_keydir)
|
143
|
+
[file_path(file_name, keydir: keydir), file_path("#{file_name}.pub", keydir: keydir)]
|
144
|
+
end
|
102
145
|
|
103
|
-
|
104
|
-
|
146
|
+
def self.create(key_name, type: 'rsa', bits: '4096', comment: nil, password: '', known_hosts: nil, overwrite_known_hosts: true, keydir: default_keydir)
|
147
|
+
raise ArgumentError, "Key directory #{keydir} does not exist" unless ::File.directory?(keydir)
|
148
|
+
|
149
|
+
keys = key_paths(key_name, keydir: keydir)
|
150
|
+
# If we don't delete an existing key file, generation will fail
|
151
|
+
keys.each { |f| ::File.delete(f) if ::File.exist?(f) }
|
152
|
+
keygen_cmd = [ssh_keygen, "-t #{type}", "-b #{bits}", "-f #{keys[0]}", "-N '#{password}'"]
|
105
153
|
keygen_cmd << "-C \"#{comment}\"" if comment
|
106
154
|
_, stderr, status = Open3.capture3(keygen_cmd.join(' '))
|
107
|
-
raise "Failed to generate ephemeral SSH key: #{stderr}" unless status.success?
|
155
|
+
raise "Failed to generate ephemeral SSH key: STDOUT: #{stdout}; STDERR: #{stderr}" unless status.success?
|
108
156
|
|
109
|
-
|
157
|
+
keys << create_known_hosts(known_hosts, overwrite: overwrite_known_hosts, keydir: keydir)
|
158
|
+
set_ssh_file_permissions(*keys)
|
159
|
+
keys
|
110
160
|
end
|
111
161
|
|
112
|
-
def self.
|
113
|
-
|
162
|
+
def self.create_known_hosts(known_hosts, overwrite: true, keydir: default_keydir)
|
163
|
+
return nil unless known_hosts
|
164
|
+
|
165
|
+
kh_file = file_path(known_hosts, keydir: keydir)
|
114
166
|
::File.open(kh_file, 'w') { |f| f.write("\n") } unless ::File.exist?(kh_file) && !overwrite
|
115
167
|
kh_file
|
116
168
|
end
|
117
169
|
|
118
|
-
def self.set_ssh_file_permissions(
|
119
|
-
CemAcpt::Utils::File.set_permissions(0o600,
|
170
|
+
def self.set_ssh_file_permissions(*files)
|
171
|
+
CemAcpt::Utils::File.set_permissions(0o600, *files.uniq.compact)
|
172
|
+
end
|
173
|
+
|
174
|
+
def self.ephemeral_ssh_key(keydir: default_keydir)
|
175
|
+
CemAcpt::Utils::SSH::Ephemeral.create(keydir: keydir)
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.clean_ephemeral_keys
|
179
|
+
CemAcpt::Utils::SSH::Ephemeral.clean
|
120
180
|
end
|
121
181
|
end
|
122
182
|
|
data/lib/cem_acpt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cem_acpt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.10
|
5
5
|
platform: universal-java-17
|
6
6
|
authors:
|
7
7
|
- puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- lib/cem_acpt/core_extensions.rb
|
161
161
|
- lib/cem_acpt/image_name_builder.rb
|
162
162
|
- lib/cem_acpt/logging.rb
|
163
|
+
- lib/cem_acpt/logging/formatter.rb
|
163
164
|
- lib/cem_acpt/platform.rb
|
164
165
|
- lib/cem_acpt/platform/base.rb
|
165
166
|
- lib/cem_acpt/platform/base/cmd.rb
|