foreman_puppet 0.0.2 → 0.1.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/README.md +61 -7
- data/app/controllers/concerns/foreman_puppet/environments_import.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +3 -10
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +2 -2
- data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +4 -0
- data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +4 -0
- data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +4 -0
- data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +4 -0
- data/app/controllers/foreman_puppet/config_groups_controller.rb +4 -0
- data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +4 -0
- data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +2 -2
- data/app/controllers/foreman_puppet/puppetclasses_controller.rb +3 -2
- data/app/helpers/foreman_puppet/environments_helper.rb +1 -1
- data/app/helpers/foreman_puppet/hosts_helper.rb +15 -0
- data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +2 -2
- data/app/models/concerns/foreman_puppet/extensions/host.rb +19 -8
- data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +5 -5
- data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +2 -2
- data/app/models/concerns/foreman_puppet/extensions/report.rb +18 -0
- data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +1 -1
- data/app/models/concerns/foreman_puppet/extensions/user.rb +19 -12
- data/app/models/foreman_puppet/environment_class.rb +1 -1
- data/app/models/foreman_puppet/host_class.rb +1 -1
- data/app/models/foreman_puppet/host_puppet_facet.rb +4 -3
- data/app/models/foreman_puppet/puppetclass.rb +13 -1
- data/app/services/foreman_puppet/puppet_class_importer.rb +14 -14
- data/app/views/foreman_puppet/common/_puppetclasses_or_envs_changed.html.erb +62 -0
- data/app/views/foreman_puppet/environments/index.html.erb +1 -1
- data/app/views/foreman_puppet/environments/welcome.html.erb +1 -1
- data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +1 -1
- data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +1 -1
- data/app/views/foreman_puppet/puppetclasses/index.html.erb +1 -1
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +1 -1
- data/app/views/hosts/select_multiple_environment.html.erb +1 -1
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +2 -2
- data/lib/foreman_puppet.rb +2 -2
- data/lib/foreman_puppet/engine.rb +7 -3
- data/lib/foreman_puppet/register.rb +4 -3
- data/lib/foreman_puppet/version.rb +1 -1
- data/locale/Makefile +1 -1
- data/locale/en/LC_MESSAGES/foreman_puppet.mo +0 -0
- data/locale/en/foreman_puppet.po +18 -6
- data/locale/foreman_puppet.pot +19 -3
- data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +1 -1
- data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +1 -1
- data/test/controllers/foreman_puppet/api/v2/provisioning_templates_controller_test.rb +32 -0
- data/test/controllers/foreman_puppet/environments_controller_test.rb +1 -1
- data/test/factories/foreman_puppet_factories.rb +3 -0
- data/test/integration/foreman_puppet/puppetclass_js_test.rb +3 -0
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +34 -1
- data/test/models/foreman_puppet/host_test.rb +1 -1
- data/test/models/foreman_puppet/provisioning_template_test.rb +16 -16
- data/test/models/foreman_puppet/report_test.rb +21 -0
- data/test/models/foreman_puppet/user_test.rb +29 -0
- data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +159 -161
- data/test/unit/foreman_puppet/puppet_class_importer_test.rb +13 -1
- metadata +48 -42
- data/locale/en/foreman_puppet.edit.po +0 -911
- data/locale/en/foreman_puppet.po.time_stamp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22506c7ebf919c047dded9e11b60b405e4a3e7c1456cd2d5125312ef156d3e7f
|
4
|
+
data.tar.gz: 5249dd5ee17f4627b159fb10952ce36d0b2f0bcee212df9d5cd82ba18898259c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99998691aeb424b63ceca8f140049677b3ba2c8a280c21972425b5f3efa1f4b024e75b67e386735dbb6024dfcd6d8bc4dbc3c226cef6e6d87f23c6872fd29c75
|
7
|
+
data.tar.gz: 5587134660de8b3a8bded2014307d5f515d7adcacfe6c32a90336289735ecf2123cc3b67f0231c6a1088bbe1ab11b56009cf0488449a61178e4be067bb330f0b
|
data/README.md
CHANGED
@@ -1,19 +1,74 @@
|
|
1
1
|
# ForemanPuppet
|
2
2
|
|
3
|
-
|
3
|
+
[](https://rubygems.org/gems/foreman_puppet)
|
4
|
+
[](https://github.com/theforeman/foreman_puppet/blob/master/LICENSE)
|
5
|
+
|
6
|
+
This plugin adds Puppet External node classification functionality to [Foreman](https://theforeman.org).
|
7
|
+
|
8
|
+
* Website: [theforeman.org](http://theforeman.org)
|
9
|
+
* Support: [Foreman support](http://theforeman.org/support.html)
|
10
|
+
|
11
|
+
## Features
|
12
|
+
|
13
|
+
* Puppet dashboards
|
14
|
+
* Puppet
|
15
|
+
* Environments
|
16
|
+
* Classes
|
17
|
+
* Config groups
|
18
|
+
* Smart Class parameters
|
19
|
+
* Host / Hostgroup
|
20
|
+
* Classes assignment
|
21
|
+
* Environment assignment
|
22
|
+
* Puppet proxy assignment
|
23
|
+
* Puppet ENC (external node classifier)
|
24
|
+
* Smartproxy Puppet status/tab
|
25
|
+
* Template hostgroup / environment
|
26
|
+
|
27
|
+
Some features will remain in core:
|
28
|
+
|
29
|
+
* PuppetCA
|
30
|
+
* Report/Fact parsing
|
31
|
+
|
32
|
+
## Compatibility
|
33
|
+
|
34
|
+
Foreman 3.0 will be the first release where the Puppet functionality is mostly extracted.
|
35
|
+
Therefore, this plugin is only required for 3.0 and onwards.
|
36
|
+
You can install it on Foreman 2.5 to prepare for the Foreman update.
|
37
|
+
|
38
|
+
|Foreman version|Plugin version|Notes |
|
39
|
+
|---------------|--------------|------------------------------------------|
|
40
|
+
| >= 3.0 | ~> 1.0 | Required |
|
41
|
+
| >= 2.5 | ~> 0.1 | Optional; replaces Core features |
|
42
|
+
| < 2.5 | - | Not supported (functionality is in Core) |
|
4
43
|
|
5
44
|
## Installation
|
6
45
|
|
7
|
-
See [How_to_Install_a_Plugin](
|
46
|
+
See [How_to_Install_a_Plugin](https://theforeman.org/plugins/#2.Installation)
|
8
47
|
for how to install Foreman plugins
|
9
48
|
|
49
|
+
You can manually install this plugin using:
|
50
|
+
|
51
|
+
```sh
|
52
|
+
# On RedHat/CentOS
|
53
|
+
yum install tfm-rubygem-foreman_puppet
|
54
|
+
|
55
|
+
# On Debian
|
56
|
+
apt install ruby-foreman-puppet
|
57
|
+
```
|
58
|
+
|
10
59
|
## Usage
|
11
60
|
|
12
|
-
|
61
|
+
The usage is identical to the prior core functionality:
|
62
|
+
|
63
|
+
* Import *environments* and *classes* from a Smartproxy
|
64
|
+
* Optionally define *Smart Class* parameters
|
65
|
+
* Assign *environment* and *classes* to *Hosts / Hostgroups*
|
66
|
+
* Use the *Puppet ENC* on your Puppetserver(s) to query Foreman
|
13
67
|
|
14
|
-
##
|
68
|
+
## Problems
|
15
69
|
|
16
|
-
|
70
|
+
Please feel free to open a [new Github issue](https://github.com/theforeman/foreman_puppet/issues/new)
|
71
|
+
if you encounter any bugs/issues using this plugin.
|
17
72
|
|
18
73
|
## Contributing
|
19
74
|
|
@@ -21,7 +76,7 @@ Fork and send a Pull Request. Thanks!
|
|
21
76
|
|
22
77
|
## Copyright
|
23
78
|
|
24
|
-
Copyright (c) *
|
79
|
+
Copyright (c) *2021* *The Foreman developers*
|
25
80
|
|
26
81
|
This program is free software: you can redistribute it and/or modify
|
27
82
|
it under the terms of the GNU General Public License as published by
|
@@ -35,4 +90,3 @@ GNU General Public License for more details.
|
|
35
90
|
|
36
91
|
You should have received a copy of the GNU General Public License
|
37
92
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
38
|
-
|
@@ -16,7 +16,7 @@ module ForemanPuppet
|
|
16
16
|
end
|
17
17
|
|
18
18
|
if !@changed['new'].empty? || !@changed['obsolete'].empty? || !@changed['updated'].empty?
|
19
|
-
render 'common/_puppetclasses_or_envs_changed'
|
19
|
+
render 'foreman_puppet/common/_puppetclasses_or_envs_changed'
|
20
20
|
else
|
21
21
|
info_message = _('No changes to your environments detected')
|
22
22
|
|
@@ -42,7 +42,7 @@ module ForemanPuppet
|
|
42
42
|
def puppetclass_parameters
|
43
43
|
::Taxonomy.as_taxonomy @organization, @location do
|
44
44
|
render partial: 'foreman_puppet/puppetclasses/classes_parameters',
|
45
|
-
|
45
|
+
locals: { obj: refresh_hostgroup }
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -104,7 +104,7 @@ module ForemanPuppet
|
|
104
104
|
rescue StandardError => e
|
105
105
|
Foreman::Logging.exception("Failed to generate external nodes for #{@host}", e)
|
106
106
|
render plain: _('Unable to generate output, Check log files'),
|
107
|
-
|
107
|
+
status: :precondition_failed
|
108
108
|
end
|
109
109
|
end
|
110
110
|
# rubocop:enable Naming/MethodName
|
@@ -34,16 +34,9 @@ module ForemanPuppet
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def process_deprecated_environment_params!(params)
|
37
|
-
env_id =
|
38
|
-
|
39
|
-
|
40
|
-
env_name = params.delete(:environment_name)
|
41
|
-
env = params.delete(:environment)
|
42
|
-
else
|
43
|
-
env_id = params[:environment_id]
|
44
|
-
env_name = params[:environment_name]
|
45
|
-
env = params[:environment]
|
46
|
-
end
|
37
|
+
env_id = params.delete(:environment_id)
|
38
|
+
env_name = params.delete(:environment_name)
|
39
|
+
env = params.delete(:environment)
|
47
40
|
|
48
41
|
return unless env_id || env_name || env
|
49
42
|
::Foreman::Deprecation.api_deprecation_warning('param host[environment_*] has been deprecated in favor of host[puppet_attributes][environment_*]')
|
@@ -7,8 +7,8 @@ module ForemanPuppet
|
|
7
7
|
def puppetclass_lookup_key_params_filter
|
8
8
|
Foreman::ParameterFilter.new(ForemanPuppet::PuppetclassLookupKey).tap do |filter|
|
9
9
|
filter.permit environments: [], environment_ids: [], environment_names: [],
|
10
|
-
|
11
|
-
|
10
|
+
environment_classes: [], environment_classes_ids: [], environment_classes_names: [],
|
11
|
+
param_classes: [], param_classes_ids: [], param_classes_names: []
|
12
12
|
filter.permit_by_context :required, nested: true
|
13
13
|
filter.permit_by_context :id, ui: false, api: false, nested: true
|
14
14
|
|
@@ -9,11 +9,11 @@ module ForemanPuppet
|
|
9
9
|
environment_classes = EnvironmentClass.where(puppetclass_lookup_key_id: @lookup_keys.map(&:id)).select(:puppetclass_id, :puppetclass_lookup_key_id).distinct.preload(:puppetclass)
|
10
10
|
puppetclass_ids = environment_classes.map(&:puppetclass_id).uniq
|
11
11
|
@puppetclass_authorizer = Authorizer.new(User.current, collection: puppetclass_ids)
|
12
|
-
@lookup_keys_to_class =
|
12
|
+
@lookup_keys_to_class = environment_classes.map { |environment_class| [environment_class.puppetclass_lookup_key_id, environment_class.puppetclass] }.to_h
|
13
13
|
end
|
14
14
|
|
15
15
|
def resource_class
|
16
|
-
|
16
|
+
model_of_controller
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
@@ -5,6 +5,7 @@ module ForemanPuppet
|
|
5
5
|
include Foreman::Controller::Parameters::Hostgroup
|
6
6
|
include ForemanPuppet::Parameters::Environment
|
7
7
|
include ForemanPuppet::Parameters::Puppetclass
|
8
|
+
include ForemanPuppet::EnvironmentsImport
|
8
9
|
|
9
10
|
before_action :find_resource, only: %i[edit update destroy override]
|
10
11
|
before_action :setup_search_options, only: :index
|
@@ -69,8 +70,8 @@ module ForemanPuppet
|
|
69
70
|
def parameters
|
70
71
|
puppetclass = Puppetclass.find(params[:id])
|
71
72
|
render partial: 'foreman_puppet/puppetclasses/class_parameters',
|
72
|
-
|
73
|
-
|
73
|
+
locals: { puppetclass: puppetclass,
|
74
|
+
obj: find_host_or_hostgroup }
|
74
75
|
end
|
75
76
|
|
76
77
|
def resource_class
|
@@ -9,7 +9,7 @@ module ForemanPuppet
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def environments_title_actions
|
12
|
-
title_actions import_proxy_select(hash_for_import_environments_environments_path),
|
12
|
+
title_actions import_proxy_select(hash_for_import_environments_environments_path.merge(engine: foreman_puppet)),
|
13
13
|
button_group(new_link(_('Create Puppet Environment'), engine: foreman_puppet)),
|
14
14
|
button_group(help_button)
|
15
15
|
end
|
@@ -4,6 +4,7 @@ module ForemanPuppet
|
|
4
4
|
multiple_actions_provider :puppet_host_multiple_actions
|
5
5
|
# otherwise registered twice
|
6
6
|
overview_buttons_provider :puppet_host_overview_buttons if ForemanPuppet.extracted_from_core?
|
7
|
+
overview_fields_provider :puppet_host_overview_fields if ForemanPuppet.extracted_from_core?
|
7
8
|
end
|
8
9
|
|
9
10
|
def puppet_host_multiple_actions
|
@@ -28,5 +29,19 @@ module ForemanPuppet
|
|
28
29
|
end
|
29
30
|
buttons
|
30
31
|
end
|
32
|
+
|
33
|
+
def puppet_host_overview_fields(host)
|
34
|
+
fields = []
|
35
|
+
if host.environment.present?
|
36
|
+
fields << {
|
37
|
+
field: [
|
38
|
+
_('Puppet Environment'),
|
39
|
+
link_to(host.puppet.environment, hosts_path(search: "environment = #{host.puppet.environment}")),
|
40
|
+
],
|
41
|
+
priority: 650,
|
42
|
+
}
|
43
|
+
end
|
44
|
+
fields
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
@@ -2,8 +2,8 @@ module ForemanPuppet
|
|
2
2
|
module PuppetclassLookupKeysHelper
|
3
3
|
def puppetclass_lookup_keys_breadcrumbs
|
4
4
|
breadcrumbs(resource_url: api_smart_class_parameters_path,
|
5
|
-
|
6
|
-
|
5
|
+
name_field: 'parameter',
|
6
|
+
switcher_item_url: '/puppetclass_lookup_keys/:id-:name/edit')
|
7
7
|
end
|
8
8
|
|
9
9
|
# ------ Host(group) Form Helpers -----
|
@@ -6,18 +6,23 @@ module ForemanPuppet
|
|
6
6
|
included do
|
7
7
|
prepend PrependedMethods
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
unless ForemanPuppet.extracted_from_core?
|
10
|
+
env_assoc = reflect_on_association(:environment)
|
11
|
+
env_assoc&.instance_variable_set(:@class_name, 'ForemanPuppet::Environment')
|
12
|
+
|
13
|
+
host_classes_assoc = reflect_on_association(:host_classes)
|
14
|
+
host_classes_assoc&.instance_variable_set(:@class_name, 'ForemanPuppet::HostClass')
|
15
|
+
end
|
11
16
|
|
12
17
|
include_in_clone puppet: %i[config_groups host_config_groups host_classes]
|
13
18
|
|
14
19
|
scoped_search relation: :environment, on: :name, complete_value: true, rename: :environment
|
15
20
|
scoped_search relation: :puppetclasses, on: :name, complete_value: true, rename: :class, only_explicit: true, operators: ['= ', '~ '],
|
16
|
-
|
21
|
+
ext_method: :search_by_deprecated_class
|
17
22
|
scoped_search relation: :puppetclasses, on: :name, complete_value: true, rename: :puppetclass, only_explicit: true, operators: ['= ', '~ '],
|
18
|
-
|
23
|
+
ext_method: :search_by_puppetclass
|
19
24
|
scoped_search relation: :config_groups, on: :name, complete_value: true, rename: :config_group, only_explicit: true, operators: ['= ', '~ '],
|
20
|
-
|
25
|
+
ext_method: :search_by_config_group
|
21
26
|
end
|
22
27
|
|
23
28
|
class_methods do
|
@@ -61,6 +66,12 @@ module ForemanPuppet
|
|
61
66
|
end
|
62
67
|
|
63
68
|
module PrependedMethods
|
69
|
+
# TODO: we can drop this once extracted_from_core?
|
70
|
+
def validate_association_taxonomy(association_name)
|
71
|
+
return if association_name.to_sym == :environment
|
72
|
+
super
|
73
|
+
end
|
74
|
+
|
64
75
|
def provisioning_template(opts = {})
|
65
76
|
opts[:environment_id] ||= puppet&.environment_id
|
66
77
|
super(opts)
|
@@ -70,9 +81,9 @@ module ForemanPuppet
|
|
70
81
|
kinds = template_kinds(provisioning)
|
71
82
|
kinds.map do |kind|
|
72
83
|
ProvisioningTemplate.find_template({ kind: kind.name,
|
73
|
-
|
74
|
-
|
75
|
-
|
84
|
+
operatingsystem_id: operatingsystem_id,
|
85
|
+
hostgroup_id: hostgroup_id,
|
86
|
+
environment_id: puppet&.environment_id })
|
76
87
|
end.compact
|
77
88
|
end
|
78
89
|
|
@@ -17,11 +17,11 @@ module ForemanPuppet
|
|
17
17
|
scoped_search relation: :environment, on: :name, complete_value: true, rename: :environment, only_explicit: true
|
18
18
|
scoped_search relation: :puppetclasses, on: :name, complete_value: true, rename: :class, only_explicit: true, operators: ['= ', '~ ']
|
19
19
|
scoped_search relation: :config_groups, on: :name,
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
complete_value: true,
|
21
|
+
rename: :config_group,
|
22
|
+
only_explicit: true,
|
23
|
+
operators: ['= ', '~ '],
|
24
|
+
ext_method: :search_by_config_group
|
25
25
|
end
|
26
26
|
|
27
27
|
# Temporary, can be ordinary class_methods do, when removed from core
|
@@ -6,11 +6,11 @@ module ForemanPuppet
|
|
6
6
|
included do
|
7
7
|
if ForemanPuppet.extracted_from_core?
|
8
8
|
has_many :environments, through: :template_combinations
|
9
|
-
before_destroy EnsureNotUsedBy.new(:environments)
|
9
|
+
before_destroy ActiveRecord::Base::EnsureNotUsedBy.new(:environments)
|
10
10
|
|
11
11
|
scoped_search relation: :environments, on: :name, rename: :environment, complete_value: true
|
12
12
|
|
13
|
-
class <<
|
13
|
+
class << self
|
14
14
|
prepend PrependedClassMethods
|
15
15
|
end
|
16
16
|
|
@@ -5,6 +5,24 @@ module ForemanPuppet
|
|
5
5
|
|
6
6
|
included do
|
7
7
|
has_one :environment, through: :host
|
8
|
+
|
9
|
+
# for cases when class already inherit before we apply the patch
|
10
|
+
self.class.subclasses.each do |subclass|
|
11
|
+
add_environment_search_to(subclass)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class_methods do
|
16
|
+
def inherited(child)
|
17
|
+
add_environment_search_to(child)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_environment_search_to(klass)
|
22
|
+
klass.instance_eval do
|
23
|
+
scoped_search relation: :environment, on: :name, complete_value: true, rename: :environment
|
24
|
+
end
|
25
|
+
end
|
8
26
|
end
|
9
27
|
end
|
10
28
|
end
|
@@ -5,7 +5,7 @@ module ForemanPuppet
|
|
5
5
|
|
6
6
|
included do
|
7
7
|
if ForemanPuppet.extracted_from_core?
|
8
|
-
belongs_to :environment
|
8
|
+
belongs_to :environment, class_name: 'ForemanPuppet::Environment'
|
9
9
|
|
10
10
|
validates :environment_id, uniqueness: { scope: %i[hostgroup_id provisioning_template_id] }
|
11
11
|
|