foreman_default_hostgroup 5.0.0 → 6.0.0

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: 7312b3c6f0f24f26aa86fe8930f3c05bb41f844c8b1e968e24a96d980233a5be
4
- data.tar.gz: 88c9aec69371906eed99689c20729b10e9a0e09a1cf506aa35b6b6fdfd972582
3
+ metadata.gz: cbf9d232426c55fc207fed30c696a03c1268f02df5d481daf7bbaec627867a8b
4
+ data.tar.gz: b4e30338ca588f25c2ef0f74d383aa432357c5f94f9fae2603445107c55ae382
5
5
  SHA512:
6
- metadata.gz: 126d928a10e32954e5a9e3661c2243b85668f3373da902deace6ce2e1f24b63c90190e5e9b8fe8ceba221bb7e3920a4c29191bd56ad228416b028d6ce52de577
7
- data.tar.gz: 8b1d8acdf52bf758b689965cd3817bd6f00c05d7043e045f78c4d1f1f527ff4a504fd197acc23c2212213e0ed19a7cf6e73563ece0f0631a8d9ea7ef62be8663
6
+ metadata.gz: 965c2c192b549c92c474af2d6074a837e8f2ef9fe1241394f083ac519730aaab34732e3ccc99897c8521e97195dc81ab6cc5517f96f5aaa5b4dff4b326ce3209
7
+ data.tar.gz: 59434c38a0e0a3da2d63160ccebf1d06b08b6b3907df95455ba8229821d1302c7cad7471adae8e44e72c88c98a8265ab4efc88e27f599493b3ae761b40fbdd93
data/README.md CHANGED
@@ -10,15 +10,16 @@ See Foreman's [plugin installation documentation](https://theforeman.org/plugins
10
10
  ## Compatibility
11
11
 
12
12
  | Foreman Version | Plugin Version |
13
- | --------------- | --------------:|
14
- | <= 1.2 | 0.1.0 |
15
- | 1.3 | 1.0.1 |
16
- | 1.4 | 1.1.0 |
17
- | 1.5 | 2.0.1 |
18
- | 1.6 - 1.11 | 3.0.0 |
19
- | >= 1.12 | 4.0.0 |
20
- | >= 1.16 | 4.0.1 |
21
- | >= 1.16 | 5.0.0 |
13
+ | --------------- | -------------: |
14
+ | <= 1.2 | 0.1.0 |
15
+ | 1.3 | 1.0.1 |
16
+ | 1.4 | 1.1.0 |
17
+ | 1.5 | 2.0.1 |
18
+ | 1.6 - 1.11 | 3.0.0 |
19
+ | >= 1.12 | 4.0.0 |
20
+ | >= 1.16 | 4.0.1 |
21
+ | >= 1.16 | 5.0.0 |
22
+ | >= 2.2.0 | 6.0.0 |
22
23
 
23
24
  ## Usage
24
25
 
@@ -35,6 +36,12 @@ your needs. The format is shown in the example. The simplest form would be:
35
36
  "Default":
36
37
  "hostname": ".*"
37
38
  ```
39
+
40
+ `Default` is the host group name (more precisely title) that will be assigned if all its the rules matches.
41
+ Under the host group name, there's a list of rules. If all of them (in this example just one) is matching,
42
+ the host is assigned to the `Default` host group. The `hostname` is the name of the fact while the value `.*`
43
+ is used as a regular expression. This rule means host with any `hostname` is added to the `Default` host group.
44
+
38
45
  If you are ugrading from plugin version 2.0.1 or older the format of this
39
46
  file changes and you will need modify `default_hostgroup.yaml.example` to
40
47
  follow the format above.
@@ -44,9 +51,9 @@ follow the format above.
44
51
 
45
52
  There are also two more settings under `Settings -> DefaultHostgroup`
46
53
 
47
- | Setting | Description |
48
- | ------- | ----------- |
49
- | `force_hostgroup_match` | Setting this to `true` will perform matching even on hosts that already have a hostgroup set. Enabling this needs `force_hostgroup_match_only_new` to be `false`. Default: `false` |
54
+ | Setting | Description |
55
+ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
56
+ | `force_hostgroup_match` | Setting this to `true` will perform matching even on hosts that already have a hostgroup set. Enabling this needs `force_hostgroup_match_only_new` to be `false`. Default: `false` |
50
57
  | `force_hostgroup_match_only_new` | Setting this to `true` will only perform matching when a host uploads its facts for the first time, i.e. after provisioning or when adding an existing puppetmaster and thus its nodes into foreman. Default: `true` |
51
58
 
52
59
  ## TODO
@@ -1,4 +1,6 @@
1
+ # rubocop:disable Style/ClassAndModuleChildren
1
2
  class Setting::DefaultHostgroup < ::Setting
3
+ # rubocop:enable Style/ClassAndModuleChildren
2
4
  BLANK_ATTRS << 'default_hostgroup'
3
5
 
4
6
  def self.load_defaults
@@ -2,13 +2,18 @@ module DefaultHostgroupBaseHostPatch
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  module ManagedOverrides
5
- def import_facts(facts, source_proxy = nil, without = false)
5
+ # rubocop:disable Lint/UnusedMethodArgument
6
+ def import_facts(facts, source_proxy = nil, without_alias = false)
7
+ # rubocop:enable Lint/UnusedMethodArgument
6
8
  super(facts, source_proxy)
7
9
  end
8
10
  end
9
11
 
10
12
  module Overrides
13
+ # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
11
14
  def import_facts(facts, source_proxy = nil, without_alias = false)
15
+ # rubocop:enable Metrics/AbcSize,Metrics/CyclomaticComplexity
16
+
12
17
  # Load the facts anyway, hook onto the end of it
13
18
  result = super(facts, source_proxy)
14
19
 
@@ -19,7 +24,7 @@ module DefaultHostgroupBaseHostPatch
19
24
  # Check settings are created
20
25
  return result unless settings_exist?
21
26
 
22
- Rails.logger.debug 'DefaultHostgroupMatch: performing Hostgroup match'
27
+ Rails.logger.debug "DefaultHostgroupMatch: performing Hostgroup match"
23
28
 
24
29
  return result unless host_new_or_forced?
25
30
  return result unless host_has_no_hostgroup_or_forced?
@@ -29,12 +34,10 @@ module DefaultHostgroupBaseHostPatch
29
34
 
30
35
  return result unless new_hostgroup
31
36
 
32
- self.hostgroup = new_hostgroup
33
- if Setting[:force_host_environment] == true
34
- self.environment = new_hostgroup.environment
35
- end
36
- save(validate: false)
37
- Rails.logger.info "DefaultHostgroupMatch: #{hostname} added to #{new_hostgroup}"
37
+ self.host.hostgroup = new_hostgroup
38
+ self.host.environment = new_hostgroup.environment if Setting[:force_host_environment] == true
39
+ self.host.save(validate: false)
40
+ Rails.logger.info "DefaultHostgroupMatch: #{facts["hostname"]} added to #{new_hostgroup}"
38
41
 
39
42
  result
40
43
  end
@@ -46,27 +49,27 @@ module DefaultHostgroupBaseHostPatch
46
49
 
47
50
  def find_match(facts_map)
48
51
  facts_map.each do |group_name, facts|
49
- hg = Hostgroup.find_by_title(group_name)
52
+ hg = Hostgroup.find_by(title: group_name)
50
53
  return hg if hg.present? && group_matches?(facts)
51
54
  end
52
- Rails.logger.info 'No match ...'
55
+ Rails.logger.info "No match ..."
53
56
  false
54
57
  end
55
58
 
56
59
  def group_matches?(facts)
57
60
  facts.each do |fact_name, fact_regex|
58
- fact_regex.gsub!(%r{(\A/|/\z)}, '')
59
- host_fact_value = facts_hash[fact_name]
61
+ fact_regex.gsub!(%r{(\A/|/\z)}, "")
62
+ host_fact_value = self.host.facts[fact_name]
60
63
  Rails.logger.info "Fact = #{fact_name}"
61
64
  Rails.logger.info "Regex = #{fact_regex}"
62
- return true if Regexp.new(fact_regex).match(host_fact_value)
65
+ return true if Regexp.new(fact_regex).match?(host_fact_value)
63
66
  end
64
67
  false
65
68
  end
66
69
 
67
70
  def settings_exist?
68
71
  unless SETTINGS[:default_hostgroup] && SETTINGS[:default_hostgroup][:facts_map]
69
- Rails.logger.warn 'DefaultHostgroupMatch: Could not load :default_hostgroup map from Settings.'
72
+ Rails.logger.warn "DefaultHostgroupMatch: Could not load :default_hostgroup map from Settings."
70
73
  return false
71
74
  end
72
75
  true
@@ -75,9 +78,9 @@ module DefaultHostgroupBaseHostPatch
75
78
  def host_new_or_forced?
76
79
  if Setting[:force_hostgroup_match_only_new]
77
80
  # hosts have already been saved during import_host, so test the creation age instead
78
- new_host = ((Time.current - created_at) < 300)
79
- unless new_host && hostgroup.nil? && reports.empty?
80
- Rails.logger.debug 'DefaultHostgroupMatch: skipping, host exists'
81
+ new_host = ((Time.current - self.host.created_at) < 300)
82
+ unless new_host && self.host.hostgroup.nil? && self.host.reports.empty?
83
+ Rails.logger.debug "DefaultHostgroupMatch: skipping, host exists"
81
84
  return false
82
85
  end
83
86
  end
@@ -86,8 +89,8 @@ module DefaultHostgroupBaseHostPatch
86
89
 
87
90
  def host_has_no_hostgroup_or_forced?
88
91
  unless Setting[:force_hostgroup_match]
89
- if hostgroup.present?
90
- Rails.logger.debug 'DefaultHostgroupMatch: skipping, host has hostgroup'
92
+ if self.host.hostgroup.present?
93
+ Rails.logger.debug "DefaultHostgroupMatch: skipping, host has hostgroup"
91
94
  return false
92
95
  end
93
96
  end
@@ -1,32 +1,32 @@
1
- require 'default_hostgroup_base_host_patch'
1
+ require "default_hostgroup_base_host_patch"
2
2
 
3
3
  module ForemanDefaultHostgroup
4
4
  class Engine < ::Rails::Engine
5
- engine_name 'foreman_default_hostgroup'
5
+ engine_name "foreman_default_hostgroup"
6
6
 
7
7
  config.autoload_paths += Dir["#{config.root}/app/models"]
8
8
 
9
- initializer 'foreman_default_hostgroup.load_default_settings',
9
+ initializer "foreman_default_hostgroup.load_default_settings",
10
10
  before: :load_config_initializers do
11
11
  require_dependency File.expand_path(
12
- '../../../app/models/setting/default_hostgroup.rb', __FILE__)
12
+ "../../app/models/setting/default_hostgroup.rb", __dir__
13
+ )
13
14
  end
14
15
 
15
- initializer 'foreman_default_hostgroup.register_plugin',
16
+ initializer "foreman_default_hostgroup.register_plugin",
16
17
  before: :finisher_hook do
17
18
  Foreman::Plugin.register :foreman_default_hostgroup do
18
- requires_foreman '>= 1.17'
19
+ requires_foreman ">= 2.2"
19
20
  end
20
21
  end
21
22
 
22
23
  config.to_prepare do
23
24
  begin
24
- ::Host::Base.send(:include, DefaultHostgroupBaseHostPatch)
25
- ::Host::Managed.send(:prepend, DefaultHostgroupBaseHostPatch::ManagedOverrides)
26
- rescue => e
25
+ ::HostFactImporter.include DefaultHostgroupBaseHostPatch
26
+ ::HostFactImporter.prepend DefaultHostgroupBaseHostPatch::ManagedOverrides
27
+ rescue StandardError => e
27
28
  Rails.logger.warn "ForemanDefaultHostgroup: skipping engine hook (#{e})"
28
29
  end
29
30
  end
30
-
31
31
  end
32
32
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanDefaultHostgroup
2
- VERSION = '5.0.0'.freeze
2
+ VERSION = '6.0.0'.freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'rake/testtask'
2
2
  # Tests
3
3
  namespace :test do
4
- desc "Test DefaultHostgroup plugin"
4
+ desc 'Test DefaultHostgroup plugin'
5
5
  Rake::TestTask.new(:foreman_default_hostgroup) do |t|
6
6
  test_dir = File.join(File.dirname(__FILE__), '../..', 'test')
7
7
  t.libs << ['test', test_dir]
@@ -20,7 +20,7 @@ namespace :foreman_default_hostgroup do
20
20
  "#{ForemanDefaultHostgroup::Engine.root}/lib/**/*.rb",
21
21
  "#{ForemanDefaultHostgroup::Engine.root}/test/**/*.rb"]
22
22
  end
23
- rescue
23
+ rescue StandardError
24
24
  puts 'Rubocop not loaded.'
25
25
  end
26
26
 
@@ -40,15 +40,15 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
40
40
 
41
41
  def setup_host_and_facts
42
42
  raw = JSON.parse(File.read(File.expand_path(File.dirname(__FILE__) + '/facts.json')))
43
- @name = raw['name']
44
- @host = Host.import_host(raw['name'], 'puppet')
43
+ @name = raw['name']
44
+ @host = Host.import_host(raw['name'], 'puppet')
45
45
  @facts = raw['facts']
46
46
  end
47
47
 
48
48
  context 'import_facts_with_match_hostgroup' do
49
49
  test 'matched host is saved with new hostgroup' do
50
50
  assert @host.import_facts(@facts)
51
- assert_equal Hostgroup.find_by_name('Test Default'), Host.find_by_name(@name).hostgroup
51
+ assert_equal Hostgroup.find_by(name: 'Test Default'), Host.find_by(name: @name).hostgroup
52
52
  end
53
53
 
54
54
  test 'matched host not updated if host already has a hostgroup' do
@@ -57,7 +57,7 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
57
57
  @host.save(validate: false)
58
58
 
59
59
  assert @host.import_facts(@facts)
60
- assert_equal hostgroup, Host.find_by_name(@name).hostgroup
60
+ assert_equal hostgroup, Host.find_by(name: @name).hostgroup
61
61
  end
62
62
 
63
63
  test 'hostgroup is not updated if host is not new' do
@@ -65,7 +65,7 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
65
65
  @host.save(validate: false)
66
66
 
67
67
  assert @host.import_facts(@facts)
68
- refute Host.find_by_name(@name).hostgroup
68
+ assert_not Host.find_by(name: @name).hostgroup
69
69
  end
70
70
  end
71
71
 
@@ -73,14 +73,14 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
73
73
  test 'environment is updated if enabled' do
74
74
  h = FactoryBot.create(:host, :with_environment, created_at: Time.current)
75
75
  h.import_facts(@facts)
76
- assert_equal Hostgroup.find_by_name('Test Default').environment, h.environment
76
+ assert_equal Hostgroup.find_by(name: 'Test Default').environment, h.environment
77
77
  end
78
78
 
79
79
  test 'environment not updated if disabled' do
80
80
  Setting[:force_host_environment] = false
81
81
  h = FactoryBot.create(:host, :with_environment, created_at: Time.current)
82
82
  h.import_facts(@facts)
83
- refute_equal Hostgroup.find_by_name('Test Default').environment, h.environment
83
+ assert_not_equal Hostgroup.find_by(name: 'Test Default').environment, h.environment
84
84
  end
85
85
  end
86
86
 
@@ -89,33 +89,33 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
89
89
  test 'match a single hostgroup' do
90
90
  facts_map = SETTINGS[:default_hostgroup][:facts_map]
91
91
  assert @host.import_facts(@facts, nil, true)
92
- assert_equal Hostgroup.find_by_name('Test Default'), @host.find_match(facts_map)
92
+ assert_equal Hostgroup.find_by(name: 'Test Default'), @host.find_match(facts_map)
93
93
  end
94
94
 
95
95
  test 'returns false for no match' do
96
96
  facts_map = SETTINGS[:default_hostgroup][:facts_map] = {
97
- 'Test Default' => { 'hostname' => 'nosuchhost' }
97
+ 'Test Default' => { 'hostname' => 'nosuchhost' }
98
98
  }
99
99
  assert @host.import_facts(@facts, nil, true)
100
- refute @host.find_match(facts_map)
100
+ assert_not @host.find_match(facts_map)
101
101
  end
102
102
 
103
103
  test 'matches first available hostgroup' do
104
104
  facts_map = SETTINGS[:default_hostgroup][:facts_map] = {
105
- 'Test Default' => { 'hostname' => '.*' },
105
+ 'Test Default' => { 'hostname' => '.*' },
106
106
  'Some Other Group' => { 'hostname' => '/\.lan$/' }
107
107
  }
108
108
  assert @host.import_facts(@facts, nil, true)
109
- assert_equal Hostgroup.find_by_name('Test Default'), @host.find_match(facts_map)
109
+ assert_equal Hostgroup.find_by(name: 'Test Default'), @host.find_match(facts_map)
110
110
  end
111
111
 
112
112
  test 'nonexistant groups are ignored' do
113
113
  facts_map = SETTINGS[:default_hostgroup][:facts_map] = {
114
114
  'Some Other Group' => { 'hostname' => '.*' },
115
- 'Test Default' => { 'hostname' => '/\.lan$/' }
115
+ 'Test Default' => { 'hostname' => '/\.lan$/' }
116
116
  }
117
117
  assert @host.import_facts(@facts, nil, true)
118
- assert_equal Hostgroup.find_by_name('Test Default'), @host.find_match(facts_map)
118
+ assert_equal Hostgroup.find_by(name: 'Test Default'), @host.find_match(facts_map)
119
119
  end
120
120
  end
121
121
 
@@ -142,20 +142,20 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
142
142
  test 'invalid keys are ignored' do
143
143
  regex = { 'nosuchfact' => '.*' }
144
144
  assert @host.import_facts(@facts, nil, true)
145
- refute @host.group_matches?(regex)
145
+ assert_not @host.group_matches?(regex)
146
146
  end
147
147
 
148
148
  test 'unmatched values are ignored' do
149
149
  regex = { 'hostname' => 'nosuchname' }
150
150
  assert @host.import_facts(@facts, nil, true)
151
- refute @host.group_matches?(regex)
151
+ assert_not @host.group_matches?(regex)
152
152
  end
153
153
 
154
154
  test 'multiple entries with invalid keys / values match' do
155
155
  regex = {
156
156
  'nosuchfact' => '.*',
157
- 'osfamily' => 'nosuchos',
158
- 'hostname' => '.lan$'
157
+ 'osfamily' => 'nosuchos',
158
+ 'hostname' => '.lan$'
159
159
  }
160
160
  assert @host.import_facts(@facts, nil, true)
161
161
  assert @host.group_matches?(regex)
@@ -171,7 +171,7 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
171
171
  test 'false when Settings are missing' do
172
172
  SETTINGS[:default_hostgroup] = {}
173
173
  h = FactoryBot.create(:host)
174
- refute h.settings_exist?
174
+ assert_not h.settings_exist?
175
175
  end
176
176
  end
177
177
 
@@ -183,17 +183,17 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
183
183
 
184
184
  test 'false when host has existed for > 300s' do
185
185
  h = FactoryBot.create(:host, created_at: Time.current - 1000)
186
- refute h.host_new_or_forced?
186
+ assert_not h.host_new_or_forced?
187
187
  end
188
188
 
189
189
  test 'false when host has a hostgroup' do
190
190
  h = FactoryBot.create(:host, :with_hostgroup, created_at: Time.current)
191
- refute h.host_new_or_forced?
191
+ assert_not h.host_new_or_forced?
192
192
  end
193
193
 
194
194
  test 'false when host has reports' do
195
195
  h = FactoryBot.create(:host, :with_reports, created_at: Time.current)
196
- refute h.host_new_or_forced?
196
+ assert_not h.host_new_or_forced?
197
197
  end
198
198
 
199
199
  test 'true when setting is forced' do
@@ -211,7 +211,7 @@ class DefaultHostgroupTest < ActiveSupport::TestCase
211
211
 
212
212
  test 'false if host has hostgroup' do
213
213
  h = FactoryBot.create(:host, :with_hostgroup)
214
- refute h.host_has_no_hostgroup_or_forced?
214
+ assert_not h.host_has_no_hostgroup_or_forced?
215
215
  end
216
216
 
217
217
  test 'true if host has hostgroup and setting forced' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_default_hostgroup
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Sutcliffe
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-21 00:00:00.000000000 Z
11
+ date: 2021-05-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Adds the option to specify a default hostgroup for new hosts created
14
14
  from facts/reports
@@ -31,11 +31,11 @@ files:
31
31
  - test/test_plugin_helper.rb
32
32
  - test/unit/default_hostgroup_test.rb
33
33
  - test/unit/facts.json
34
- homepage: http://github.com/GregSutcliffe/foreman_default_hostgroup
34
+ homepage: https://github.com/theforeman/foreman_default_hostgroup
35
35
  licenses:
36
- - GPL-3
36
+ - GPL-3.0
37
37
  metadata: {}
38
- post_install_message:
38
+ post_install_message:
39
39
  rdoc_options: []
40
40
  require_paths:
41
41
  - lib
@@ -50,12 +50,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0'
52
52
  requirements: []
53
- rubyforge_project:
54
- rubygems_version: 2.7.6
55
- signing_key:
53
+ rubygems_version: 3.0.3
54
+ signing_key:
56
55
  specification_version: 4
57
56
  summary: Default Hostgroup Plugin for Foreman
58
57
  test_files:
59
58
  - test/test_plugin_helper.rb
60
- - test/unit/default_hostgroup_test.rb
61
59
  - test/unit/facts.json
60
+ - test/unit/default_hostgroup_test.rb