foreman_envsync 1.2.2 → 1.4.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 +4 -4
- data/.rubocop.yml +22 -1
- data/exe/foreman_envsync +89 -66
- data/foreman_envsync.gemspec +1 -1
- data/lib/foreman_envsync/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bbd2448eb8bc5347c7753ebb733be2dac67c13cb01ef248ebb888ed80697a54
|
4
|
+
data.tar.gz: b1793f92f1489b9bc235b870190ced2285d9bdd50c2ec7fa12fc0c71fb1e0769
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b1c79bfc420af41375b913a51fd58bc3b38372eadf69710d926b0d38f07c1ea042a3af8793f8e8e6ae2ae34ca203a5e76c88472d39c3f5817c4efcf830cba3d
|
7
|
+
data.tar.gz: 69d4d1a6994047dce137702ae3c1c51de952e754137d781b39ef07662f1609a573c2beff3071b7a6ad6d6f0a15bf6f51118896fdc8609ad7ce55ab6cc8a5809b
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rake
|
3
|
+
- rubocop-rspec
|
4
|
+
|
1
5
|
AllCops:
|
2
|
-
TargetRubyVersion:
|
6
|
+
TargetRubyVersion: 3.0
|
3
7
|
NewCops: enable
|
4
8
|
|
5
9
|
Style/StringLiterals:
|
@@ -15,3 +19,20 @@ Layout/LineLength:
|
|
15
19
|
|
16
20
|
Gemspec/RequireMFA:
|
17
21
|
Enabled: false
|
22
|
+
|
23
|
+
Metrics/AbcSize:
|
24
|
+
Enabled: false
|
25
|
+
Metrics/BlockLength:
|
26
|
+
Enabled: false
|
27
|
+
Metrics/ClassLength:
|
28
|
+
Enabled: false
|
29
|
+
Metrics/CyclomaticComplexity:
|
30
|
+
Enabled: false
|
31
|
+
Metrics/MethodLength:
|
32
|
+
Enabled: false
|
33
|
+
Metrics/ModuleLength:
|
34
|
+
Enabled: false
|
35
|
+
Metrics/ParameterLists:
|
36
|
+
Enabled: false
|
37
|
+
Metrics/PerceivedComplexity:
|
38
|
+
Enabled: false
|
data/exe/foreman_envsync
CHANGED
@@ -8,29 +8,38 @@ require "rest-client"
|
|
8
8
|
require "socket"
|
9
9
|
require "yaml"
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
11
|
+
def parse_options
|
12
|
+
@options = {}
|
13
|
+
option_parser = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: foreman_envsync [options]"
|
15
|
+
opts.separator ""
|
16
|
+
opts.separator "Specifc options:"
|
17
|
+
|
18
|
+
opts.on("-v", "--verbose", "Enable verbose output") do |o|
|
19
|
+
@options[:verbose] = [o]
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
23
|
+
puts opts
|
24
|
+
exit
|
25
|
+
end
|
24
26
|
end
|
27
|
+
option_parser.parse!
|
25
28
|
end
|
26
|
-
option_parser.parse!
|
27
29
|
|
28
30
|
def verbose_list(msg, items)
|
29
31
|
return unless @options[:verbose] && !items.nil?
|
30
32
|
|
31
33
|
printf(msg, items.count)
|
34
|
+
return if items.empty?
|
35
|
+
|
32
36
|
puts
|
33
|
-
|
37
|
+
# do not attempt to sorry Array of Hashes
|
38
|
+
if items.is_a?(Array) && items.first.is_a?(Hash)
|
39
|
+
puts "#{YAML.dump(items)}\n"
|
40
|
+
else
|
41
|
+
puts "#{YAML.dump(items.sort)}\n"
|
42
|
+
end
|
34
43
|
end
|
35
44
|
|
36
45
|
def cert_file(file)
|
@@ -103,6 +112,14 @@ def foreman_org_ids
|
|
103
112
|
hammer_cmd_parse_one(cmd, field)
|
104
113
|
end
|
105
114
|
|
115
|
+
# prefer the puppetserver 7 ca_crt.pem path
|
116
|
+
def ssl_ca_file
|
117
|
+
%w[
|
118
|
+
/etc/puppetlabs/puppetserver/ca/ca_crt.pem
|
119
|
+
/etc/puppetlabs/puppet/ssl/ca/ca_crt.pem
|
120
|
+
].find { |f| File.exist?(f) }
|
121
|
+
end
|
122
|
+
|
106
123
|
def puppetserver_env_list
|
107
124
|
hostname = Socket.gethostname
|
108
125
|
|
@@ -112,59 +129,65 @@ def puppetserver_env_list
|
|
112
129
|
ssl_client_cert: cert_file("/etc/puppetlabs/puppet/ssl/certs/#{hostname}.pem"),
|
113
130
|
ssl_client_key: key_file("/etc/puppetlabs/puppet/ssl/private_keys/#{hostname}.pem"),
|
114
131
|
verify_ssl: true,
|
115
|
-
ssl_ca_file:
|
132
|
+
ssl_ca_file: ssl_ca_file
|
116
133
|
)
|
117
134
|
|
118
135
|
JSON.parse(res)["environments"].keys
|
119
136
|
end
|
120
137
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
#
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
#
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
verbose_list "found %d foreman
|
168
|
-
|
169
|
-
|
170
|
-
verbose_list "
|
138
|
+
def main
|
139
|
+
parse_options
|
140
|
+
|
141
|
+
#
|
142
|
+
# Fetch list of puppet environments from puppetserver API.
|
143
|
+
#
|
144
|
+
ps_envs = puppetserver_env_list
|
145
|
+
verbose_list "found %d puppetserver environment(s).", ps_envs
|
146
|
+
|
147
|
+
#
|
148
|
+
# Fetch list of puppet environments from foreman. The hammer cli is used to
|
149
|
+
# avoid having to manage credentials. In theory, foreman supports auth using
|
150
|
+
# x509 similar to puppetserver but this failed when tested using both `curl` and
|
151
|
+
# configuring hammer to use x509.
|
152
|
+
#
|
153
|
+
f_envs = foreman_env_list
|
154
|
+
verbose_list "found %d foreman environment(s).", f_envs
|
155
|
+
|
156
|
+
#
|
157
|
+
# Does foreman have any puppet envs puppetserver is unaware of?
|
158
|
+
#
|
159
|
+
extra_envs = f_envs - ps_envs
|
160
|
+
verbose_list "found %d foreman environment(s) unknown to puppetserver.", extra_envs
|
161
|
+
|
162
|
+
#
|
163
|
+
# Remove any foreman envs unknown to puppetserver
|
164
|
+
#
|
165
|
+
report = extra_envs.collect { |x| foreman_env_delete(x) } unless extra_envs.empty?
|
166
|
+
verbose_list "deleted %d foreman environment(s).", report.nil? ? nil : report.compact
|
167
|
+
|
168
|
+
# update foreman envs if anything was deleted
|
169
|
+
f_envs = foreman_env_list unless report.nil?
|
170
|
+
|
171
|
+
#
|
172
|
+
# Does puppetserver have any envs foreman is unaware of?
|
173
|
+
#
|
174
|
+
new_envs = ps_envs - f_envs
|
175
|
+
verbose_list "found %d puppetserver environment(s) unknown to foreman.", new_envs
|
176
|
+
|
177
|
+
# if not, exit
|
178
|
+
exit 0 if new_envs.empty?
|
179
|
+
|
180
|
+
#
|
181
|
+
# Create new foreman env(s) with all existing locations and organizations
|
182
|
+
#
|
183
|
+
location_ids = foreman_location_ids
|
184
|
+
verbose_list "found %d foreman location(s).", location_ids
|
185
|
+
|
186
|
+
org_ids = foreman_org_ids
|
187
|
+
verbose_list "found %d foreman organization(s).", org_ids
|
188
|
+
|
189
|
+
report = new_envs.collect { |x| foreman_env_create(x, location_ids, org_ids) }
|
190
|
+
verbose_list "created %d foreman environment(s).", report
|
191
|
+
end
|
192
|
+
|
193
|
+
main if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
|
data/foreman_envsync.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.summary = "Sync pupperserver envs with foreman"
|
12
12
|
spec.homepage = "https://github.com/lsst-it/foreman_envsync"
|
13
13
|
spec.license = "MIT"
|
14
|
-
spec.required_ruby_version = ">=
|
14
|
+
spec.required_ruby_version = ">= 3.0.0"
|
15
15
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
17
17
|
spec.metadata["source_code_uri"] = "https://github.com/lsst-it/foreman_envsync"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_envsync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Hoblitt
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hammer_cli
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
description:
|
97
|
+
description:
|
98
98
|
email:
|
99
99
|
- josh@hoblitt.com
|
100
100
|
executables:
|
@@ -126,7 +126,7 @@ metadata:
|
|
126
126
|
source_code_uri: https://github.com/lsst-it/foreman_envsync
|
127
127
|
changelog_uri: https://github.com/lsst-it/foreman_envsync/blob/master/CHANGELOG.md
|
128
128
|
rubygems_mfa_required: 'false'
|
129
|
-
post_install_message:
|
129
|
+
post_install_message:
|
130
130
|
rdoc_options: []
|
131
131
|
require_paths:
|
132
132
|
- lib
|
@@ -134,15 +134,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
135
135
|
- - ">="
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version:
|
137
|
+
version: 3.0.0
|
138
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
140
|
- - ">="
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0'
|
143
143
|
requirements: []
|
144
|
-
rubygems_version: 3.
|
145
|
-
signing_key:
|
144
|
+
rubygems_version: 3.3.7
|
145
|
+
signing_key:
|
146
146
|
specification_version: 4
|
147
147
|
summary: Sync pupperserver envs with foreman
|
148
148
|
test_files: []
|