foreman_puppet 1.0.1 → 1.0.5
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/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +4 -2
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +41 -32
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +42 -33
- data/app/helpers/foreman_puppet/puppet_smart_proxies_helper.rb +4 -0
- data/app/models/foreman_puppet/host_puppet_facet.rb +1 -1
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +2 -0
- data/app/services/concerns/foreman_puppet/extensions/host_counter.rb +17 -0
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +3 -4
- data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +2 -2
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +36 -20
- data/db/migrate/20211112130803_cleanup_environment_from_core_tables.foreman_puppet.rb +10 -0
- data/lib/foreman_puppet/engine.rb +2 -0
- data/lib/foreman_puppet/version.rb +1 -1
- data/locale/cs_CZ/foreman_puppet.edit.po +1085 -0
- data/locale/cs_CZ/foreman_puppet.po.time_stamp +0 -0
- data/locale/en/foreman_puppet.edit.po +317 -162
- data/test/controllers/foreman_puppet/hostgroups_controller_test.rb +72 -52
- data/test/factories/host_puppet_enhancements.rb +3 -0
- data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +70 -31
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +7 -1
- data/test/services/foreman_puppet/host_counter_test.rb +17 -0
- data/webpack/src/Components/Environments/Welcome.js +2 -2
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f8a5c7b68f8d77f54787c4c9de924bc02f27d7a0f957fc6539b5b4aa6c64b49
|
4
|
+
data.tar.gz: 6cd563d9cc2f56c22186bbbb0fb9d3c9679c8718e965d7fd952bbed3efacf222
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a09cf7ff50545983f0e472b3c03f0708087dddf8d2136dc32978f49a1fd76ba7ca4c716db6e6b3add3055279745754b2d2eddf2cd1630a91e75187ba9683c1e
|
7
|
+
data.tar.gz: 5c4bb18d77784e2a9c43c7f102adc9df6469b739525fee007d1c89bf635713e1dd051140489101ebeb9d66298100195f56571fa5fb55a1a179c8381cac56a65b
|
@@ -23,7 +23,9 @@ module ForemanPuppet
|
|
23
23
|
module Actions
|
24
24
|
def nest
|
25
25
|
super
|
26
|
-
|
26
|
+
return unless @parent.puppet
|
27
|
+
puppet = @hostgroup.puppet || @hostgroup.build_puppet
|
28
|
+
puppet.puppetclasses = @parent.puppet.puppetclasses
|
27
29
|
end
|
28
30
|
|
29
31
|
def environment_selected
|
@@ -36,7 +38,7 @@ module ForemanPuppet
|
|
36
38
|
|
37
39
|
puppet.puppetclasses = ForemanPuppet::Puppetclass.where(id: params[:hostgroup][:puppetclass_ids])
|
38
40
|
puppet.config_groups = ForemanPuppet::ConfigGroup.where(id: params[:hostgroup][:config_group_ids])
|
39
|
-
render partial: 'hosts/form_puppet_enc_tab', locals: {
|
41
|
+
render partial: 'hosts/form_puppet_enc_tab', locals: { subject: @hostgroup, resource_type: :hostgroup }
|
40
42
|
end
|
41
43
|
|
42
44
|
def puppetclass_parameters
|
@@ -41,7 +41,7 @@ module ForemanPuppet
|
|
41
41
|
set_class_variables(@host)
|
42
42
|
::Taxonomy.as_taxonomy @organization, @location do
|
43
43
|
if @environment || @hostgroup
|
44
|
-
render partial: 'hosts/form_puppet_enc_tab', locals: {
|
44
|
+
render partial: 'hosts/form_puppet_enc_tab', locals: { subject: @host, resource_type: :host }
|
45
45
|
else
|
46
46
|
logger.info 'environment_id or hostgroup_id is required to render puppetclasses'
|
47
47
|
end
|
@@ -14,12 +14,7 @@ module ForemanPuppet
|
|
14
14
|
module PatchedClassMethods
|
15
15
|
def host_params_filter
|
16
16
|
super.tap do |filter|
|
17
|
-
filter
|
18
|
-
config_groups: [], config_group_ids: [], config_group_names: [],
|
19
|
-
puppetclasses: [], puppetclass_ids: [], puppetclass_names: []
|
20
|
-
|
21
|
-
# TODO: bring to core - this is what facets should do, but does not
|
22
|
-
filter.permit(puppet_attributes: {})
|
17
|
+
add_host_puppet_params_filter(filter)
|
23
18
|
end
|
24
19
|
end
|
25
20
|
end
|
@@ -27,40 +22,54 @@ module ForemanPuppet
|
|
27
22
|
module PatchedMethods
|
28
23
|
def host_params(*attrs)
|
29
24
|
params = super(*attrs)
|
30
|
-
|
31
|
-
process_deprecated_environment_params!(params)
|
32
|
-
process_deprecated_attributes!(params)
|
25
|
+
process_deprecated_puppet_params!(params)
|
33
26
|
params
|
34
27
|
end
|
28
|
+
end
|
35
29
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return unless env_id || env_name || env
|
42
|
-
::Foreman::Deprecation.api_deprecation_warning('param host[environment_*] has been deprecated in favor of host[puppet_attributes][environment_*]')
|
30
|
+
class_methods do
|
31
|
+
def add_host_puppet_params_filter(filter)
|
32
|
+
filter.permit :environment_id, :environment_name, :environment,
|
33
|
+
config_groups: [], config_group_ids: [], config_group_names: [],
|
34
|
+
puppetclasses: [], puppetclass_ids: [], puppetclass_names: []
|
43
35
|
|
44
|
-
|
45
|
-
|
46
|
-
params[:puppet_attributes][:environment_name] ||= env_name if env_name
|
47
|
-
params[:puppet_attributes][:environment] ||= env if env
|
36
|
+
# TODO: bring to core - this is what facets should do, but does not
|
37
|
+
filter.permit(puppet_attributes: {})
|
48
38
|
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def process_deprecated_puppet_params!(params, top_level_hash = controller_name.singularize)
|
42
|
+
process_deprecated_environment_params!(params, top_level_hash)
|
43
|
+
process_deprecated_attributes!(params, top_level_hash)
|
44
|
+
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
plains = params.delete(relation.pluralize.to_sym)
|
46
|
+
def process_deprecated_environment_params!(params, top_level_hash = 'host')
|
47
|
+
env_id = params.delete(:environment_id)
|
48
|
+
env_name = params.delete(:environment_name)
|
49
|
+
env = params.delete(:environment)
|
55
50
|
|
56
|
-
|
57
|
-
|
51
|
+
return unless env_id || env_name || env
|
52
|
+
::Foreman::Deprecation.api_deprecation_warning("param #{top_level_hash}[environment_*] has been deprecated in favor of #{top_level_hash}[puppet_attributes][environment_*]")
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
54
|
+
params[:puppet_attributes] ||= {}
|
55
|
+
params[:puppet_attributes][:environment_id] ||= env_id if env_id
|
56
|
+
params[:puppet_attributes][:environment_name] ||= env_name if env_name
|
57
|
+
params[:puppet_attributes][:environment] ||= env if env
|
58
|
+
end
|
59
|
+
|
60
|
+
def process_deprecated_attributes!(params, top_level_hash = 'host')
|
61
|
+
%w[puppetclass config_group].each do |relation|
|
62
|
+
ids = params.delete("#{relation}_ids".to_sym)
|
63
|
+
names = params.delete("#{relation}_names".to_sym)
|
64
|
+
plains = params.delete(relation.pluralize.to_sym)
|
65
|
+
|
66
|
+
next unless ids || names || plains
|
67
|
+
::Foreman::Deprecation.api_deprecation_warning("param #{top_level_hash}[#{relation}_*] has been deprecated in favor of #{top_level_hash}[puppet_attributes][#{relation}_*]")
|
68
|
+
|
69
|
+
params[:puppet_attributes] ||= {}
|
70
|
+
params[:puppet_attributes]["#{relation}_ids".to_sym] ||= ids if ids
|
71
|
+
params[:puppet_attributes]["#{relation}_names".to_sym] ||= names if names
|
72
|
+
params[:puppet_attributes][relation.pluralize.to_sym] ||= plains if plains
|
64
73
|
end
|
65
74
|
end
|
66
75
|
end
|
@@ -14,12 +14,7 @@ module ForemanPuppet
|
|
14
14
|
module PatchedClassMethods
|
15
15
|
def hostgroup_params_filter
|
16
16
|
super.tap do |filter|
|
17
|
-
filter
|
18
|
-
config_group_ids: [], config_group_names: [],
|
19
|
-
puppetclass_ids: [], puppetclass_names: []
|
20
|
-
|
21
|
-
# TODO: bring to core - this is what facets should do, but does not
|
22
|
-
filter.permit(puppet_attributes: {})
|
17
|
+
add_hostgroup_puppet_params_filter(filter)
|
23
18
|
end
|
24
19
|
end
|
25
20
|
end
|
@@ -27,42 +22,56 @@ module ForemanPuppet
|
|
27
22
|
module PatchedMethods
|
28
23
|
def hostgroup_params(*attrs)
|
29
24
|
params = super(*attrs)
|
30
|
-
|
31
|
-
process_deprecated_hostgroup_environment_params!(params)
|
32
|
-
process_deprecated_hostgroup_attributes!(params)
|
25
|
+
process_deprecated_hostgroup_puppet_params!(params)
|
33
26
|
params
|
34
27
|
end
|
28
|
+
end
|
35
29
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
else
|
42
|
-
env_id = params[:environment_id]
|
43
|
-
env_name = params[:environment_name]
|
44
|
-
end
|
30
|
+
class_methods do
|
31
|
+
def add_hostgroup_puppet_params_filter(filter)
|
32
|
+
filter.permit :environment_id, :environment_name,
|
33
|
+
config_group_ids: [], config_group_names: [],
|
34
|
+
puppetclass_ids: [], puppetclass_names: []
|
45
35
|
|
46
|
-
|
47
|
-
|
36
|
+
# TODO: bring to core - this is what facets should do, but does not
|
37
|
+
filter.permit(puppet_attributes: {})
|
38
|
+
end
|
39
|
+
end
|
48
40
|
|
49
|
-
|
50
|
-
|
51
|
-
|
41
|
+
def process_deprecated_hostgroup_puppet_params!(params, top_level_hash = 'hostgroup')
|
42
|
+
process_deprecated_hostgroup_environment_params!(params, top_level_hash)
|
43
|
+
process_deprecated_hostgroup_attributes!(params, top_level_hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
def process_deprecated_hostgroup_environment_params!(params, top_level_hash = 'hostgroup')
|
47
|
+
env_id = env_name = nil
|
48
|
+
if ForemanPuppet.extracted_from_core?
|
49
|
+
env_id = params.delete(:environment_id)
|
50
|
+
env_name = params.delete(:environment_name)
|
51
|
+
else
|
52
|
+
env_id = params[:environment_id]
|
53
|
+
env_name = params[:environment_name]
|
52
54
|
end
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
-
ids = params.delete("#{relation}_ids")
|
57
|
-
names = params.delete("#{relation}_names")
|
56
|
+
return unless env_id || env_name
|
57
|
+
::Foreman::Deprecation.api_deprecation_warning("param #{top_level_hash}[environment_*] has been deprecated in favor of #{top_level_hash}[puppet_attributes][environment_*]")
|
58
58
|
|
59
|
-
|
60
|
-
|
59
|
+
params[:puppet_attributes] ||= {}
|
60
|
+
params[:puppet_attributes][:environment_id] ||= env_id if env_id
|
61
|
+
params[:puppet_attributes][:environment_name] ||= env_name if env_name
|
62
|
+
end
|
61
63
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
def process_deprecated_hostgroup_attributes!(params, top_level_hash = 'hostgroup')
|
65
|
+
%w[puppetclass config_group].each do |relation|
|
66
|
+
ids = params.delete("#{relation}_ids")
|
67
|
+
names = params.delete("#{relation}_names")
|
68
|
+
|
69
|
+
next unless ids || names
|
70
|
+
::Foreman::Deprecation.api_deprecation_warning("param #{top_level_hash}[#{relation}_*] has been deprecated in favor of #{top_level_hash}[puppet_attributes][#{relation}_*]")
|
71
|
+
|
72
|
+
params[:puppet_attributes] ||= {}
|
73
|
+
params[:puppet_attributes]["#{relation}_ids".to_sym] ||= ids if ids
|
74
|
+
params[:puppet_attributes]["#{relation}_names".to_sym] ||= names if names
|
66
75
|
end
|
67
76
|
end
|
68
77
|
end
|
@@ -48,6 +48,8 @@ module ForemanPuppet
|
|
48
48
|
Hostgroup.sort_by_ancestry(hostgroup.ancestors.joins(:puppet).where(HostgroupPuppetFacet.arel_table[attr.to_sym].not_eq(nil))).last&.puppet.try(attr)
|
49
49
|
end
|
50
50
|
|
51
|
+
delegate :parent_id, to: :hostgroup
|
52
|
+
|
51
53
|
# and helpers
|
52
54
|
def parent_facet_id
|
53
55
|
parent_facet&.id
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ForemanPuppet
|
2
|
+
module Extensions
|
3
|
+
module HostCounter
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
def counted_hosts
|
7
|
+
case @association.to_s
|
8
|
+
when 'environment'
|
9
|
+
hosts_scope = ::Host::Managed.reorder('').joins(:puppet)
|
10
|
+
hosts_scope.authorized(:view_hosts).group(HostPuppetFacet.arel_table[:environment_id]).count
|
11
|
+
else
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<% resource_type ||= pagelet.opts[:resource_type] %>
|
2
|
-
<%
|
3
|
-
<% obj = (host_or_hostgroup.puppet || host_or_hostgroup.build_puppet) if %i[host hostgroup].include?(resource_type) %>
|
2
|
+
<% obj = (subject.puppet || subject.build_puppet) if %i[host hostgroup].include?(resource_type) %>
|
4
3
|
<% if resource_type == :host %>
|
5
4
|
<span id="puppet_klasses_reload_url" data-url="<%= foreman_puppet.hostgroup_or_environment_selected_hosts_path %>"></span>
|
6
5
|
<% elsif resource_type == :hostgroup %>
|
@@ -18,7 +17,7 @@
|
|
18
17
|
text: _('Please select an environment first')) %>
|
19
18
|
<% end %>
|
20
19
|
|
21
|
-
<fieldset id="puppet_klasses_parameters" data-url="<%= foreman_puppet.url_for(action: :puppetclass_parameters, only_path: true) %>">
|
20
|
+
<fieldset id="puppet_klasses_parameters" data-url="<%= foreman_puppet.url_for(controller: resource_type.to_s.pluralize.to_sym, action: :puppetclass_parameters, only_path: true) %>">
|
22
21
|
<h2><%= _('Puppet Class Parameters') %></h2>
|
23
|
-
<%= render 'foreman_puppet/puppetclasses/classes_parameters', obj:
|
22
|
+
<%= render 'foreman_puppet/puppetclasses/classes_parameters', obj: subject %>
|
24
23
|
</fieldset>
|
@@ -2,11 +2,11 @@ class MigrateEnvironmentToPuppetFacet < ActiveRecord::Migration[6.0]
|
|
2
2
|
def up
|
3
3
|
puppet_hostgroups = ::Hostgroup.unscoped.where.not(environment_id: nil).pluck(:id, :environment_id)
|
4
4
|
puppet_hostgroups.map! { |hg_id, env_id| { hostgroup_id: hg_id, environment_id: env_id } }
|
5
|
-
ForemanPuppet::HostgroupPuppetFacet.insert_all(puppet_hostgroups) if puppet_hostgroups.any?
|
5
|
+
ForemanPuppet::HostgroupPuppetFacet.insert_all!(puppet_hostgroups) if puppet_hostgroups.any?
|
6
6
|
|
7
7
|
puppet_hosts = Host::Managed.unscoped.where.not(environment_id: nil).pluck(:id, :environment_id)
|
8
8
|
puppet_hosts.map! { |host_id, env_id| { host_id: host_id, environment_id: env_id } }
|
9
|
-
ForemanPuppet::HostPuppetFacet.insert_all(puppet_hosts) if puppet_hosts.any?
|
9
|
+
ForemanPuppet::HostPuppetFacet.insert_all!(puppet_hosts) if puppet_hosts.any?
|
10
10
|
end
|
11
11
|
|
12
12
|
def down
|
@@ -13,26 +13,8 @@ class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def up
|
16
|
-
|
17
|
-
|
18
|
-
host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
|
19
|
-
host_groups = FakeHostConfigGroup.for_host.where(host_id: host_id)
|
20
|
-
if host_facet_id
|
21
|
-
host_groups.update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_id)
|
22
|
-
else
|
23
|
-
deleted_groups = FakeConfigGroup.where(id: host_groups.pluck(:config_group_id)).pluck(:name)
|
24
|
-
say "deleting groups #{deleted_groups.join(', ')} from Host (id=#{host_id}) because it has no environment"
|
25
|
-
host_groups.delete_all
|
26
|
-
end
|
27
|
-
end
|
28
|
-
hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup.pluck(:host_id).uniq
|
29
|
-
hostgroup_config_group_ids.each do |hostgroup_id|
|
30
|
-
hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
|
31
|
-
hostgroup_facet_id ||= ForemanPuppet::HostgroupPuppetFacet.create!(hostgroup: Hostgroup.unscoped.find(hostgroup_id)).id
|
32
|
-
FakeHostConfigGroup.for_hostgroup
|
33
|
-
.where(host_id: hostgroup_id)
|
34
|
-
.update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
|
35
|
-
end
|
16
|
+
migrate_host_data_to_facets
|
17
|
+
migrate_hostgroup_data_to_facets
|
36
18
|
end
|
37
19
|
|
38
20
|
def down
|
@@ -51,4 +33,38 @@ class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
|
|
51
33
|
.update_all(host_type: 'Hostgroup', host_id: hostgroup_facet_ids[hostgroup_facet_id])
|
52
34
|
end
|
53
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def migrate_host_data_to_facets
|
40
|
+
host_config_group_ids = FakeHostConfigGroup.for_host.pluck(:host_id).uniq
|
41
|
+
host_config_group_ids.each do |host_id|
|
42
|
+
host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
|
43
|
+
host_groups = FakeHostConfigGroup.for_host.where(host_id: host_id)
|
44
|
+
if host_facet_id
|
45
|
+
host_groups.update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_id)
|
46
|
+
else
|
47
|
+
deleted_groups = FakeConfigGroup.where(id: host_groups.pluck(:config_group_id)).pluck(:name)
|
48
|
+
say "Deleting Config groups #{deleted_groups.join(', ')} from Host (id=#{host_id}) because the Host doesn't exist or has no environment"
|
49
|
+
host_groups.delete_all
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def migrate_hostgroup_data_to_facets
|
55
|
+
hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup.pluck(:host_id).uniq
|
56
|
+
hostgroup_config_group_ids.each do |hostgroup_id|
|
57
|
+
hostgroup = Hostgroup.unscoped.find_by(id: hostgroup_id)
|
58
|
+
hostgroup_groups = FakeHostConfigGroup.for_hostgroup.where(host_id: hostgroup_id)
|
59
|
+
if hostgroup
|
60
|
+
hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
|
61
|
+
hostgroup_facet_id ||= ForemanPuppet::HostgroupPuppetFacet.create!(hostgroup: hostgroup).id
|
62
|
+
hostgroup_groups.update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
|
63
|
+
else
|
64
|
+
deleted_groups = FakeConfigGroup.where(id: hostgroup_groups.pluck(:config_group_id)).pluck(:name)
|
65
|
+
say "Deleting Config groups #{deleted_groups.join(', ')} from Hostgroup (id=#{hostgroup_id}) because Hostgroup doesn't exist"
|
66
|
+
hostgroup_groups.delete_all
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
54
70
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CleanupEnvironmentFromCoreTables < ActiveRecord::Migration[6.0]
|
2
|
+
def up
|
3
|
+
::Hostgroup.update_all(environment_id: nil) if column_exists?(:hostgroups, :environment_id)
|
4
|
+
Host::Managed.update_all(environment_id: nil) if column_exists?(:hosts, :environment_id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
# nothing to do
|
9
|
+
end
|
10
|
+
end
|
@@ -79,6 +79,8 @@ module ForemanPuppet
|
|
79
79
|
::TemplateCombination.include ForemanPuppet::Extensions::TemplateCombination
|
80
80
|
::ProvisioningTemplate.include ForemanPuppet::Extensions::ProvisioningTemplate
|
81
81
|
|
82
|
+
::HostCounter.prepend ForemanPuppet::Extensions::HostCounter
|
83
|
+
|
82
84
|
::Api::V2::BaseController.include ForemanPuppet::Extensions::ApiBaseController
|
83
85
|
::Api::V2::HostsController.include ForemanPuppet::Extensions::ApiV2HostsController
|
84
86
|
::Api::V2::HostgroupsController.include ForemanPuppet::Extensions::ApiHostgroupsController
|