knife-tidy 2.0.15 → 2.1.6
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/lib/chef/knife/tidy_backup_clean.rb +11 -10
- data/lib/chef/knife/tidy_notify.rb +8 -8
- data/lib/chef/knife/tidy_server_clean.rb +1 -1
- data/lib/chef/knife/tidy_server_report.rb +7 -18
- data/lib/chef/tidy_acls.rb +3 -3
- data/lib/chef/tidy_common.rb +2 -2
- data/lib/chef/tidy_substitutions.rb +3 -3
- data/lib/knife-tidy/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6df7a5c7edcbf10d78ed4f4702b68e231b3f016308280b979bdd84928af0362e
|
4
|
+
data.tar.gz: ae670780d34592914ddf4eba0ba67e3a4fd5a54fe49a0d8a4a9425e5c92aa1c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41fc026a4bb68574ee10ddceb69414868ae4b031f995b6a0e11b86574f579215576b7763c906739c63132d2bf62f886a645dc0b2791bd71683f3ed441d4f7932
|
7
|
+
data.tar.gz: 5e3e481f0e98d4bc141773ef92e6bf0c457678790fac6b7e36acf20e5d2da6365c8d0f8f23ce734fc118b217a73a6b994d7c3bfa79837b4540d8816e02d58227
|
@@ -10,9 +10,9 @@ class Chef
|
|
10
10
|
require "chef/run_list"
|
11
11
|
require_relative "../tidy_substitutions"
|
12
12
|
require_relative "../tidy_acls"
|
13
|
-
require "ffi_yajl"
|
14
|
-
require "fileutils"
|
15
|
-
require "securerandom"
|
13
|
+
require "ffi_yajl" unless defined?(FFI_Yajl)
|
14
|
+
require "fileutils" unless defined?(FileUtils)
|
15
|
+
require "securerandom" unless defined?(SecureRandom)
|
16
16
|
end
|
17
17
|
|
18
18
|
banner "knife tidy backup clean (options)"
|
@@ -25,7 +25,7 @@ class Chef
|
|
25
25
|
|
26
26
|
option :gsub_file,
|
27
27
|
long: "--gsub-file path/to/gsub/file",
|
28
|
-
description: "The path to the file used for substitutions. If non-
|
28
|
+
description: "The path to the file used for substitutions. If non-existent, a boiler plate one will be created."
|
29
29
|
|
30
30
|
option :gen_gsub,
|
31
31
|
long: "--gen-gsub",
|
@@ -167,7 +167,7 @@ class Chef
|
|
167
167
|
ret = cl.load!
|
168
168
|
if ret.nil?
|
169
169
|
action_needed("ACTION NEEDED: Something's wrong with the #{cookbook} cookbook in org #{org} - cannot load it! Moving to cookbooks.broken folder.")
|
170
|
-
|
170
|
+
broken_cookbooks_add(org, cookbook)
|
171
171
|
end
|
172
172
|
end
|
173
173
|
rescue LoadError, Exceptions::MetadataNotValid => e
|
@@ -175,7 +175,7 @@ class Chef
|
|
175
175
|
exit 1
|
176
176
|
end
|
177
177
|
|
178
|
-
def
|
178
|
+
def broken_cookbooks_add(org, cookbook_path)
|
179
179
|
broken_path = ::File.join(tidy.org_path(org), "cookbooks.broken")
|
180
180
|
FileUtils.mkdir(broken_path) unless ::File.directory?(broken_path)
|
181
181
|
FileUtils.mv(cookbook_path, broken_path, verbose: true, force: true)
|
@@ -297,7 +297,7 @@ class Chef
|
|
297
297
|
|
298
298
|
def substitutions_file
|
299
299
|
sub_file_path = ::File.expand_path(config[:gsub_file])
|
300
|
-
ui.error "
|
300
|
+
ui.error "Substitutions file #{sub_file_path} does not exist!" unless ::File.exist?(sub_file_path)
|
301
301
|
@substitutions_file ||= sub_file_path
|
302
302
|
end
|
303
303
|
|
@@ -397,9 +397,10 @@ class Chef
|
|
397
397
|
if existing_group_data["clients"].length != tidy.client_names(org).length
|
398
398
|
ui.stdout.puts "REPAIRING: Adding #{(existing_group_data["clients"].length - tidy.client_names(org).length).abs} missing clients into #{org}'s client group file #{clients_group_path}"
|
399
399
|
existing_group_data["clients"] = (existing_group_data["clients"] + tidy.client_names(org)).uniq
|
400
|
-
|
401
|
-
|
402
|
-
|
400
|
+
end
|
401
|
+
existing_group_data["clients"] = existing_group_data["clients"].sort
|
402
|
+
::File.open(clients_group_path, "w") do |f|
|
403
|
+
f.write(Chef::JSONCompat.to_json_pretty(existing_group_data))
|
403
404
|
end
|
404
405
|
end
|
405
406
|
|
@@ -4,7 +4,7 @@ class Chef
|
|
4
4
|
class Knife
|
5
5
|
class TidyNotify < Knife
|
6
6
|
deps do
|
7
|
-
require "ffi_yajl"
|
7
|
+
require "ffi_yajl" unless defined?(FFI_Yajl)
|
8
8
|
require "net/smtp"
|
9
9
|
end
|
10
10
|
|
@@ -14,39 +14,39 @@ class Chef
|
|
14
14
|
short: "-s SERVER_NAME",
|
15
15
|
long: "--smtp_server SERVER_NAME",
|
16
16
|
default: "localhost",
|
17
|
-
description: "SMTP Server to be used for
|
17
|
+
description: "SMTP Server to be used for emailing reports to organization admins (defaults to localhost)"
|
18
18
|
|
19
19
|
option :smtp_port,
|
20
20
|
short: "-p SMTP_PORT",
|
21
21
|
long: "--smtp_port SMTP_PORT",
|
22
22
|
default: 25,
|
23
|
-
description: "SMTP port to be used for
|
23
|
+
description: "SMTP port to be used for emailing reports to organization admins (defaults to 25)"
|
24
24
|
|
25
25
|
option :smtp_helo,
|
26
26
|
short: "-h SMTP_HELO",
|
27
27
|
long: "--smtp_helo SMTP_HELO",
|
28
28
|
default: "localhost",
|
29
|
-
description: "SMTP HELO to be used for
|
29
|
+
description: "SMTP HELO to be used for emailing reports to organization admins (defaults to localhost)"
|
30
30
|
|
31
31
|
option :smtp_username,
|
32
32
|
short: "-u SMTP_USERNAME",
|
33
33
|
long: "--smtp_username SMTP_USERNAME",
|
34
|
-
description: "SMTP Username to be used for
|
34
|
+
description: "SMTP Username to be used for emailing reports to organization admins"
|
35
35
|
|
36
36
|
option :smtp_password,
|
37
37
|
long: "--smtp_password SMTP_PASSWORD",
|
38
|
-
description: "SMTP Password to be used for
|
38
|
+
description: "SMTP Password to be used for emailing reports to organization admins"
|
39
39
|
|
40
40
|
option :smtp_from,
|
41
41
|
long: "--smtp_from SMTP_FROM",
|
42
|
-
description: "SMTP From address to be used for
|
42
|
+
description: "SMTP From address to be used for emailing reports to organization admins"
|
43
43
|
|
44
44
|
option :smtp_use_tls,
|
45
45
|
long: "--smtp_use_tls",
|
46
46
|
short: "-t",
|
47
47
|
default: false,
|
48
48
|
boolean: true | false,
|
49
|
-
description: "Whether TLS should be used for
|
49
|
+
description: "Whether TLS should be used for emailing reports to organization admins (defaults to false if omitted)"
|
50
50
|
|
51
51
|
include Knife::TidyBase
|
52
52
|
|
@@ -7,7 +7,7 @@ class Chef
|
|
7
7
|
include Knife::TidyBase
|
8
8
|
|
9
9
|
deps do
|
10
|
-
require "ffi_yajl"
|
10
|
+
require "ffi_yajl" unless defined?(FFI_Yajl)
|
11
11
|
end
|
12
12
|
|
13
13
|
banner "knife tidy server report (options)"
|
@@ -19,8 +19,8 @@ class Chef
|
|
19
19
|
|
20
20
|
option :keep_versions,
|
21
21
|
long: "--keep-versions MIN",
|
22
|
-
default:
|
23
|
-
description: "Keep a minimum of this many versions of each cookbook (default:
|
22
|
+
default: 1,
|
23
|
+
description: "Keep a minimum of this many versions of each cookbook (default: 1)"
|
24
24
|
|
25
25
|
def run
|
26
26
|
ensure_reports_dir!
|
@@ -82,8 +82,6 @@ class Chef
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
used_cookbooks = keep_cookbook_versions(cb_list, keep_versions)
|
86
|
-
|
87
85
|
Chef::Log.debug("Used cookbook list before checking environments: #{used_cookbooks}")
|
88
86
|
pins = environment_constraints(org)
|
89
87
|
used_cookbooks = check_environment_pins(used_cookbooks, pins, cb_list)
|
@@ -98,7 +96,7 @@ class Chef
|
|
98
96
|
stale_nodes_hash = { 'threshold_days': node_threshold, 'org_total_node_count': nodes.count, 'count': stale_nodes.count, 'list': stale_nodes }
|
99
97
|
stale_orgs.push(org) if stale_nodes.count == nodes.count
|
100
98
|
|
101
|
-
tidy.write_new_file(unused_cookbooks(used_cookbooks, cb_list), ::File.join(tidy.reports_dir, "#{org}_unused_cookbooks.json"), backup = false)
|
99
|
+
tidy.write_new_file(unused_cookbooks(used_cookbooks, cb_list, keep_versions), ::File.join(tidy.reports_dir, "#{org}_unused_cookbooks.json"), backup = false)
|
102
100
|
tidy.write_new_file(version_count, ::File.join(tidy.reports_dir, "#{org}_cookbook_count.json"), backup = false)
|
103
101
|
tidy.write_new_file(stale_nodes_hash, ::File.join(tidy.reports_dir, "#{org}_stale_nodes.json"), backup = false)
|
104
102
|
|
@@ -108,7 +106,7 @@ class Chef
|
|
108
106
|
action_needed(pre_12_3_message, server_warnings_file_path)
|
109
107
|
end
|
110
108
|
if unconverged_recent_nodes.length > 0
|
111
|
-
unconverged_recent_message = "#{unconverged_recent_nodes.length} nodes have been created in the last hour that have yet to converge in organization #{org}. These nodes WILL NOT be factored in the stale cookbook
|
109
|
+
unconverged_recent_message = "#{unconverged_recent_nodes.length} nodes have been created in the last hour that have yet to converge in organization #{org}. These nodes WILL NOT be factored in the stale cookbook versions report. Continuing with the server cleanup will delete cookbooks in-use by these nodes."
|
112
110
|
ui.warn(unconverged_recent_message)
|
113
111
|
action_needed(unconverged_recent_message, server_warnings_file_path)
|
114
112
|
end
|
@@ -162,15 +160,6 @@ class Chef
|
|
162
160
|
cb_list
|
163
161
|
end
|
164
162
|
|
165
|
-
def keep_cookbook_versions(cb_list, min)
|
166
|
-
retain = {}
|
167
|
-
cb_list.each do |name, versions|
|
168
|
-
keep = versions.sort { |a, b| Gem::Version.new(a) <=> Gem::Version.new(b) }.last(min)
|
169
|
-
retain[name] = keep
|
170
|
-
end
|
171
|
-
retain
|
172
|
-
end
|
173
|
-
|
174
163
|
def cookbook_count(cb_list)
|
175
164
|
cb_count_list = {}
|
176
165
|
cb_list.each do |name, versions|
|
@@ -179,14 +168,14 @@ class Chef
|
|
179
168
|
cb_count_list
|
180
169
|
end
|
181
170
|
|
182
|
-
def unused_cookbooks(used_list, cb_list)
|
171
|
+
def unused_cookbooks(used_list, cb_list, keep_versions)
|
183
172
|
unused_list = {}
|
184
173
|
cb_list.each do |name, versions|
|
185
174
|
versions.sort! { |a, b| Gem::Version.new(a) <=> Gem::Version.new(b) }
|
186
175
|
if used_list[name].nil? # Not in the used list at all (Remove all versions)
|
187
176
|
unused_list[name] = versions
|
188
177
|
elsif used_list[name].sort != versions # Is in the used cookbook list, but version arrays do not match (Find unused versions)
|
189
|
-
unused = versions - used_list[name] -
|
178
|
+
unused = versions - used_list[name] - versions.last(keep_versions) # Don't delete the X most recent version as it might not be in a run_list yet.
|
190
179
|
unused_list[name] = unused unless unused.empty?
|
191
180
|
end
|
192
181
|
end
|
data/lib/chef/tidy_acls.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require "ffi_yajl"
|
2
|
-
require "fileutils"
|
1
|
+
require "ffi_yajl" unless defined?(FFI_Yajl)
|
2
|
+
require "fileutils" unless defined?(FileUtils)
|
3
3
|
require "chef/log"
|
4
4
|
|
5
5
|
class Chef
|
@@ -111,7 +111,7 @@ class Chef
|
|
111
111
|
|
112
112
|
def add_client_to_org(actor)
|
113
113
|
# TODO
|
114
|
-
@tidy.ui.stdout.puts "ACTION NEEDED: Client referenced in acl non-
|
114
|
+
@tidy.ui.stdout.puts "ACTION NEEDED: Client referenced in acl non-existent: #{actor}"
|
115
115
|
end
|
116
116
|
|
117
117
|
def add_actor_to_members(actor)
|
data/lib/chef/tidy_common.rb
CHANGED
data/lib/knife-tidy/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-tidy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Chef Software, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Report on stale Chef Server nodes and cookbooks and clean up data
|
14
|
-
issues in a knife-ec-backup object based backup
|
13
|
+
description: Report on stale Chef Infra Server nodes and cookbooks and clean up data
|
14
|
+
integrity issues in a knife-ec-backup object based backup
|
15
15
|
email:
|
16
|
-
-
|
16
|
+
- oss@chef.io
|
17
17
|
executables: []
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
@@ -30,7 +30,7 @@ files:
|
|
30
30
|
- lib/chef/tidy_server.rb
|
31
31
|
- lib/chef/tidy_substitutions.rb
|
32
32
|
- lib/knife-tidy/version.rb
|
33
|
-
homepage: https://github.com/chef
|
33
|
+
homepage: https://github.com/chef/knife-tidy
|
34
34
|
licenses:
|
35
35
|
- Apache-2.0
|
36
36
|
metadata: {}
|
@@ -49,9 +49,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0'
|
51
51
|
requirements: []
|
52
|
-
rubygems_version: 3.
|
52
|
+
rubygems_version: 3.1.4
|
53
53
|
signing_key:
|
54
54
|
specification_version: 4
|
55
|
-
summary: Report on stale Chef Server nodes and cookbooks and clean up data integrity
|
55
|
+
summary: Report on stale Chef Infra Server nodes and cookbooks and clean up data integrity
|
56
56
|
issues in a knife-ec-backup object based backup
|
57
57
|
test_files: []
|