foreman_puppet 1.0.0.rc.1 → 1.0.0.rc.2

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: f41d4919f84bff60f30a23f1e05ceae83e468bb4d005ed781f635ee39a33246c
4
- data.tar.gz: 208fbb6587882e138874b60cf19d1c76d5470f3ffd1cf5c7487f5a48983a5e51
3
+ metadata.gz: 37d0dfe755f795957a77e9889c1c958343a3b2b54d38e451e7a119bb8b4db98b
4
+ data.tar.gz: 2e4e4bad454345c115ec10fa6968409a56dbf2403891bf0711fdaf858225291c
5
5
  SHA512:
6
- metadata.gz: 3d4c7c3a02a500d554a0c11fd35f3f47f37e3accb2503270f82d920c47b1bd6aa751a76b698105d508ef24c04757fc7cc5f08a412a0221cfc2e51a553523a567
7
- data.tar.gz: bae382d27974df26cfebed71b5b89963229f97b962e75fecd53bf19a9b35edbff829b9d823fde79c05f8859341982cc24b4e3f3a3b35c58d1c81f5802cd49c01
6
+ metadata.gz: c7558294ebc8a1eaca149102ed9d5dcefe10a7ae1fa643bd7836c143de807bec77e3af8fa31df43dcd6b3ec52775ba7b36a6a5a15028413e4f889f479d3295fe
7
+ data.tar.gz: b40b1472b66dc27f61c634c11cd500d23d61de31d1eb984c7b68184cb626e9fbfa2b2dbd0bba74009cdd2800c7576fae427cef346a4f48b4e4fb59b8b88eeaf0
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ForemanPuppet
4
+ module Types
5
+ module InterfaceAttributesInputExtensions
6
+ delegate :with_indifferent_access, to: :to_h
7
+ end
8
+ end
9
+ end
@@ -3,6 +3,8 @@ module ForemanPuppet
3
3
  module Host
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ include ForemanPuppet::Extensions::HostCommon if ForemanPuppet.extracted_from_core?
7
+
6
8
  included do
7
9
  prepend PrependedMethods
8
10
 
@@ -82,10 +84,10 @@ module ForemanPuppet
82
84
  def available_template_kinds(provisioning = nil)
83
85
  kinds = template_kinds(provisioning)
84
86
  kinds.map do |kind|
85
- ProvisioningTemplate.find_template({ kind: kind.name,
86
- operatingsystem_id: operatingsystem_id,
87
- hostgroup_id: hostgroup_id,
88
- environment_id: puppet&.environment_id })
87
+ ::ProvisioningTemplate.find_template({ kind: kind.name,
88
+ operatingsystem_id: operatingsystem_id,
89
+ hostgroup_id: hostgroup_id,
90
+ environment_id: puppet&.environment_id })
89
91
  end.compact
90
92
  end
91
93
 
@@ -0,0 +1,17 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module HostCommon
4
+ extend ActiveSupport::Concern
5
+
6
+ def all_puppetclasses(env = environment)
7
+ return ForemanPuppet::Puppetclass.none unless puppet
8
+ puppet.all_puppetclasses(env)
9
+ end
10
+
11
+ def puppetclasses
12
+ return ForemanPuppet::Puppetclass.none unless puppet
13
+ puppet.puppetclasses
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,6 +3,8 @@ module ForemanPuppet
3
3
  module Hostgroup
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ include ForemanPuppet::Extensions::HostCommon if ForemanPuppet.extracted_from_core?
7
+
6
8
  included do
7
9
  class << self
8
10
  prepend PatchedClassMethods
@@ -46,7 +46,7 @@ module ForemanPuppet
46
46
 
47
47
  def template_includes
48
48
  includes = super
49
- tc_include = includes.detect { |i| i.key?(:template_combinations) }
49
+ tc_include = includes.detect { |i| i.is_a?(Hash) && i.key?(:template_combinations) }
50
50
  tc_include ||= includes << {}
51
51
  tc_include[:template_combinations] = %i[hostgroup environment]
52
52
  includes
@@ -2,6 +2,8 @@ module ForemanPuppet
2
2
  module HostInfoProviders
3
3
  class ConfigGroupsInfo < HostInfo::Provider
4
4
  def host_info
5
+ return {} unless host.puppet
6
+
5
7
  config_groups = (host.puppet.config_groups + host.puppet.parent_config_groups).uniq.map(&:name)
6
8
  { 'parameters' => { 'foreman_config_groups' => config_groups } }
7
9
  end
@@ -0,0 +1,44 @@
1
+ <ul id="proxy-puppetca-tab" class="nav nav-tabs nav-tabs-pf">
2
+ <li class="active"><a href="#ca_general" data-toggle="tab"><%= _("General") %></a></li>
3
+ <% if authorized_for(:permission => :view_smart_proxies_puppetca, :auth_object => @smart_proxy, :authorizer => authorizer) %>
4
+ <li><a href="#certificates" data-toggle="tab"><%= _("Certificates") %></a></li>
5
+ <% end %>
6
+ <% if authorized_for(:permission => :view_smart_proxies_autosign, :auth_object => @smart_proxy, :authorizer => authorizer) %>
7
+ <li><a href="#autosign" data-toggle="tab"><%= _("Autosign entries") %></a></li>
8
+ <% end %>
9
+ </ul>
10
+ <div id="proxy-puppetca-tab-content" class="tab-content">
11
+ <div class="tab-pane active in" id="ca_general">
12
+ <div class="row">
13
+ <div class="col-md-6">
14
+ <%= show_feature_version('puppetca') %>
15
+ <div class="row">
16
+ <div class="col-md-4"><strong><%= _('Hosts managed:') %></strong></div>
17
+ <div class="col-md-8">
18
+ <%= link_to Host::Managed.where(:puppet_ca_proxy_id => @smart_proxy.id).count, hosts_path(:search => "puppet_ca = \"#{@smart_proxy.name}\"") %>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ <div class="container-fluid container-cards-pf">
24
+ <div class="row row-cards-pf">
25
+ <% if authorized_for(:permission => :view_smart_proxies_puppetca, :auth_object => @smart_proxy) %>
26
+ <span data-ajax-url="<%= counts_smart_proxy_puppetca_path(:smart_proxy_id => @smart_proxy) %>"><%= spinner%></span>
27
+ <span data-ajax-url="<%= expiry_smart_proxy_puppetca_path(:smart_proxy_id => @smart_proxy) %>"><%= spinner%></span>
28
+ <% end %>
29
+ <% if authorized_for(:permission => :view_smart_proxies_autosign, :auth_object => @smart_proxy, :authorizer => authorizer) %>
30
+ <span data-ajax-url="<%= counts_smart_proxy_autosign_path(:smart_proxy_id => @smart_proxy) %>"><%= spinner%></span>
31
+ <% end %>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <% if authorized_for(:permission => :view_smart_proxies_puppetca, :auth_object => @smart_proxy, :authorizer => authorizer) %>
36
+ <div class="tab-pane" id="certificates" data-ajax-url="<%= smart_proxy_puppetca_index_path(:smart_proxy_id => @smart_proxy) %>" data-on-complete="certTable"><%= spinner %></div>
37
+ <% end %>
38
+ <% if authorized_for(:permission => :view_smart_proxies_autosign, :auth_object => @smart_proxy, :authorizer => authorizer) %>
39
+ <div class="tab-pane" id="autosign" data-ajax-url="<%= smart_proxy_autosign_index_path(:smart_proxy_id => @smart_proxy) %>" data-on-complete="tfm.tools.activateDatatables"><%= spinner %></div>
40
+ <% if authorized_for(:permission => :create_smart_proxies_autosign, :auth_object => @smart_proxy, :authorizer => authorizer) %>
41
+ <div data-ajax-url=<%= new_smart_proxy_autosign_path(:smart_proxy_id => @smart_proxy) %>></div>
42
+ <% end %>
43
+ <% end %>
44
+ </div>
@@ -1,34 +1,53 @@
1
1
  class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
2
2
  class FakeHostConfigGroup < ::ApplicationRecord
3
3
  self.table_name = 'host_config_groups'
4
+
5
+ scope :for_host, -> { where(host_type: %w[Host::Base Host::Managed]) }
6
+ scope :for_hostgroup, -> { where(host_type: 'Hostgroup') }
7
+ scope :for_host_facet, -> { where(host_type: 'ForemanPuppet::HostPuppetFacet') }
8
+ scope :for_hostgroup_facet, -> { where(host_type: 'ForemanPuppet::HostgroupPuppetFacet') }
9
+ end
10
+
11
+ class FakeConfigGroup < ::ApplicationRecord
12
+ self.table_name = 'config_groups'
4
13
  end
5
14
 
6
15
  def up
7
- host_config_group_ids = FakeHostConfigGroup.where(host_type: %w[Host::Base Host::Managed]).pluck(:host_id).uniq
16
+ host_config_group_ids = FakeHostConfigGroup.for_host.pluck(:host_id).uniq
8
17
  host_config_group_ids.each do |host_id|
9
18
  host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
10
- FakeHostConfigGroup.where(host_type: %w[Host::Base Host::Managed], host_id: host_id)
11
- .update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_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
12
27
  end
13
- hostgroup_config_group_ids = FakeHostConfigGroup.where(host_type: 'Hostgroup').pluck(:host_id).uniq
28
+ hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup.pluck(:host_id).uniq
14
29
  hostgroup_config_group_ids.each do |hostgroup_id|
15
30
  hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
16
- FakeHostConfigGroup.where(host_type: 'Hostgroup', host_id: hostgroup_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)
17
34
  .update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
18
35
  end
19
36
  end
20
37
 
21
38
  def down
22
- host_config_group_ids = FakeHostConfigGroup.where(host_type: 'ForemanPuppet::HostPuppetFacet').pluck(:host_id).uniq
39
+ host_config_group_ids = FakeHostConfigGroup.for_host_facet.pluck(:host_id).uniq
23
40
  host_facet_ids = ForemanPuppet::HostPuppetFacet.where(id: host_config_group_ids).pluck(:id, :host_id).to_h
24
41
  host_config_group_ids.each do |host_puppet_facet_id|
25
- FakeHostConfigGroup.where(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_puppet_facet_id)
42
+ FakeHostConfigGroup.for_host_facet
43
+ .where(host_id: host_puppet_facet_id)
26
44
  .update_all(host_type: 'Host::Managed', host_id: host_facet_ids[host_puppet_facet_id])
27
45
  end
28
- hostgroup_config_group_ids = FakeHostConfigGroup.where(host_type: 'ForemanPuppet::HostgroupPuppetFacet').pluck(:host_id).uniq
46
+ hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup_facet.pluck(:host_id).uniq
29
47
  hostgroup_facet_ids = ForemanPuppet::HostgroupPuppetFacet.where(id: hostgroup_config_group_ids).pluck(:id, :hostgroup_id).to_h
30
48
  hostgroup_config_group_ids.each do |hostgroup_facet_id|
31
- FakeHostConfigGroup.where(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
49
+ FakeHostConfigGroup.for_hostgroup_facet
50
+ .where(host_id: hostgroup_facet_id)
32
51
  .update_all(host_type: 'Hostgroup', host_id: hostgroup_facet_ids[hostgroup_facet_id])
33
52
  end
34
53
  end
@@ -7,6 +7,10 @@ class MigratePuppetclassesToFacets < ActiveRecord::Migration[6.0]
7
7
  self.table_name = 'hostgroup_classes'
8
8
  end
9
9
 
10
+ class FakePuppetclass < ApplicationRecord
11
+ self.table_name = 'puppetclasses'
12
+ end
13
+
10
14
  def up
11
15
  add_reference :host_classes, :host_puppet_facet, foreign_key: true, index: true
12
16
  add_reference :hostgroup_classes, :hostgroup_puppet_facet, foreign_key: true, index: true
@@ -14,11 +18,19 @@ class MigratePuppetclassesToFacets < ActiveRecord::Migration[6.0]
14
18
  host_ids = FakeHostClass.all.pluck(:host_id).uniq
15
19
  host_ids.each do |host_id|
16
20
  host_facet = ForemanPuppet::HostPuppetFacet.find_by(host_id: host_id)
17
- ForemanPuppet::HostClass.where(host_id: host_id).update_all(host_puppet_facet_id: host_facet.id)
21
+ host_classes = ForemanPuppet::HostClass.where(host_id: host_id)
22
+ if host_facet
23
+ host_classes.update_all(host_puppet_facet_id: host_facet.id)
24
+ else
25
+ deleted_classes = FakePuppetclass.where(id: host_classes.pluck(:puppetclass_id)).pluck(:name)
26
+ say "deleting classes #{deleted_classes.join(', ')} from Host (id=#{host_id}) because it has no environment"
27
+ host_classes.delete_all
28
+ end
18
29
  end
19
30
  hostgroup_ids = FakeHostgroupClass.all.pluck(:hostgroup_id).uniq
20
31
  hostgroup_ids.each do |hostgroup_id|
21
32
  hostgroup_facet = ForemanPuppet::HostgroupPuppetFacet.find_by(hostgroup_id: hostgroup_id)
33
+ hostgroup_facet ||= ForemanPuppet::HostgroupPuppetFacet.create(hostgroup: Hostgroup.unscoped.find(hostgroup_id))
22
34
  ForemanPuppet::HostgroupClass.where(hostgroup_id: hostgroup_id).update_all(hostgroup_puppet_facet_id: hostgroup_facet.id)
23
35
  end
24
36
 
@@ -15,7 +15,18 @@ module ForemanPuppet
15
15
  end
16
16
  end
17
17
 
18
+ module RelayClassicMutationClassMethodPath
19
+ # rubocop:disable Metrics/ParameterLists
20
+ def argument(name, type, *rest, loads: nil, **kwargs, &block)
21
+ # rubocop:enable Metrics/ParameterLists
22
+ return if [::Types::Environment, ::Types::Puppetclass].include?(loads)
23
+
24
+ super
25
+ end
26
+ end
27
+
18
28
  GraphQL::Types::Relay::BaseObject.extend(BaseObjectClassMethodPath)
29
+ GraphQL::Schema::RelayClassicMutation.extend(RelayClassicMutationClassMethodPath)
19
30
  end
20
31
  end
21
32
 
@@ -97,6 +108,8 @@ module ForemanPuppet
97
108
  ::Types::Hostgroup.include(ForemanPuppet::Types::HostgroupExtensions)
98
109
  ::Types::Location.include(ForemanPuppet::Types::LocationExtensions)
99
110
  ::Types::Organization.include(ForemanPuppet::Types::OrganizationExtensions)
111
+ ::Types::InterfaceAttributesInput.include(ForemanPuppet::Types::InterfaceAttributesInputExtensions)
112
+
100
113
  ::Mutations::Hosts::Create.include(ForemanPuppet::Mutations::Hosts::CreateExtensions)
101
114
  rescue StandardError => e
102
115
  Rails.logger.warn "ForemanPuppet: skipping engine hook (#{e})\n#{e.backtrace.join("\n")}"
@@ -170,8 +170,7 @@ Foreman::Plugin.register :foreman_puppet do
170
170
  # extend_model ForemanPuppet::Extensions::Host
171
171
  api_view list: 'foreman_puppet/api/v2/host_puppet_facets/base',
172
172
  single: 'foreman_puppet/api/v2/host_puppet_facets/host_single'
173
- template_compatibility_properties :environment, :environment_id, :environment_name,
174
- :puppetclasses, :all_puppetclasses
173
+ template_compatibility_properties :environment, :environment_id, :environment_name
175
174
  set_dependent_action :destroy
176
175
  end
177
176
  configure_hostgroup(ForemanPuppet::HostgroupPuppetFacet) do
@@ -1,3 +1,3 @@
1
1
  module ForemanPuppet
2
- VERSION = '1.0.0.rc.1'.freeze
2
+ VERSION = '1.0.0.rc.2'.freeze
3
3
  end
@@ -17,6 +17,16 @@ module ForemanPuppet
17
17
  name: hostname,
18
18
  environmentId: environment_id,
19
19
  puppetclassIds: [puppetclass_id],
20
+ interfacesAttributes: [
21
+ {
22
+ type: 'bond',
23
+ attachedTo: %w[eth0 eth1],
24
+ identifier: 'bond0',
25
+ primary: true,
26
+ provision: true,
27
+ managed: true,
28
+ },
29
+ ],
20
30
  }
21
31
  end
22
32
  let(:context_user) { FactoryBot.create(:user, :admin, locations: [tax_location], organizations: [organization]) }
@@ -28,11 +38,13 @@ module ForemanPuppet
28
38
  $name: String!,
29
39
  $environmentId: ID,
30
40
  $puppetclassIds: [ID!],
41
+ $interfacesAttributes: [InterfaceAttributesInput!]
31
42
  ) {
32
43
  createHost(input: {
33
44
  name: $name,
34
45
  environmentId: $environmentId,
35
46
  puppetclassIds: $puppetclassIds,
47
+ interfacesAttributes: $interfacesAttributes,
36
48
  }) {
37
49
  host {
38
50
  id
@@ -57,6 +69,15 @@ module ForemanPuppet
57
69
  assert_equal environment.id, host.puppet.environment_id
58
70
  assert_equal [puppetclass.id], host.puppet.puppetclasses.pluck(:id)
59
71
 
72
+ assert_equal 1, host.interfaces.count
73
+ interface = host.interfaces.first
74
+ assert_equal 'Nic::Bond', interface.type
75
+ assert_equal 'eth0, eth1', interface.attached_to
76
+ assert_equal 'bond0', interface.identifier
77
+ assert interface.primary
78
+ assert interface.provision
79
+ assert interface.managed
80
+
60
81
  assert_not_nil data
61
82
  end
62
83
  end
@@ -37,6 +37,13 @@ module ForemanPuppet
37
37
  assert_equal [], tmplt.template_combinations
38
38
  end
39
39
 
40
+ test '#template_includes adds environment include' do
41
+ includes = ProvisioningTemplate.template_includes
42
+ tc_include = includes.detect { |i| i.is_a?(Hash) && i.key?(:template_combinations) }
43
+ assert tc_include
44
+ assert_includes tc_include[:template_combinations], :environment
45
+ end
46
+
40
47
  describe '#find_template by template_combinations' do
41
48
  setup do
42
49
  @arch = FactoryBot.create(:architecture)
@@ -0,0 +1,35 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module ForemanPuppet
4
+ class ConfigGroupInfoTest < ActiveSupport::TestCase
5
+ let(:cg_info) { HostInfoProviders::ConfigGroupsInfo.new(host) }
6
+
7
+ context 'with Puppet Host' do
8
+ let(:config_group) { FactoryBot.create(:config_group) }
9
+ let(:host) do
10
+ FactoryBot.build(:host, :with_puppet_enc,
11
+ location: taxonomies(:location1),
12
+ organization: taxonomies(:organization1),
13
+ operatingsystem: operatingsystems(:redhat),
14
+ config_groups: [config_group])
15
+ end
16
+
17
+ it 'adds config_groups to host parameters' do
18
+ assert_equal([config_group.name], cg_info.host_info['parameters']['foreman_config_groups'])
19
+ end
20
+ end
21
+
22
+ context 'without Puppet' do
23
+ let(:host) do
24
+ FactoryBot.build(:host,
25
+ location: taxonomies(:location1),
26
+ organization: taxonomies(:organization1),
27
+ operatingsystem: operatingsystems(:redhat))
28
+ end
29
+
30
+ it 'does not fail without puppet facet' do
31
+ assert_equal({}, cg_info.host_info)
32
+ end
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc.1
4
+ version: 1.0.0.rc.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondřej Ezr
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-15 00:00:00.000000000 Z
12
+ date: 2021-08-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Allow assigning Puppet environmets and classes to the Foreman Hosts.
15
15
  email:
@@ -56,6 +56,7 @@ files:
56
56
  - app/graphgl/concerns/foreman_puppet/mutations/hosts/create_extensions.rb
57
57
  - app/graphgl/concerns/foreman_puppet/types/host_extensions.rb
58
58
  - app/graphgl/concerns/foreman_puppet/types/hostgroup_extensions.rb
59
+ - app/graphgl/concerns/foreman_puppet/types/interface_attributes_input_extensions.rb
59
60
  - app/graphgl/concerns/foreman_puppet/types/location_extensions.rb
60
61
  - app/graphgl/concerns/foreman_puppet/types/organization_extensions.rb
61
62
  - app/graphgl/foreman_puppet/types/environment.rb
@@ -70,6 +71,7 @@ files:
70
71
  - app/helpers/foreman_puppet/puppetclasses_helper.rb
71
72
  - app/helpers/foreman_puppet/template_combinations_helper.rb
72
73
  - app/models/concerns/foreman_puppet/extensions/host.rb
74
+ - app/models/concerns/foreman_puppet/extensions/host_common.rb
73
75
  - app/models/concerns/foreman_puppet/extensions/hostgroup.rb
74
76
  - app/models/concerns/foreman_puppet/extensions/nic_managed.rb
75
77
  - app/models/concerns/foreman_puppet/extensions/operatingsystem.rb
@@ -169,6 +171,7 @@ files:
169
171
  - app/views/provisioning_templates/_combination.html.erb
170
172
  - app/views/provisioning_templates/_combinations.html.erb
171
173
  - app/views/smart_proxies/plugins/_puppet.html.erb
174
+ - app/views/smart_proxies/plugins/_puppet_ca.html.erb
172
175
  - config/api_routes.rb
173
176
  - config/initializers/api_reroute.rb
174
177
  - config/routes.rb
@@ -260,6 +263,7 @@ files:
260
263
  - test/models/foreman_puppet/report_test.rb
261
264
  - test/models/foreman_puppet/smart_proxy_test.rb
262
265
  - test/models/foreman_puppet/user_test.rb
266
+ - test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb
263
267
  - test/services/foreman_puppet/host_info_providers/puppet_info_test.rb
264
268
  - test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb
265
269
  - test/test_puppet_helper.rb
@@ -312,6 +316,7 @@ signing_key:
312
316
  specification_version: 4
313
317
  summary: Adds puppet ENC features
314
318
  test_files:
319
+ - test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb
315
320
  - test/services/foreman_puppet/host_info_providers/puppet_info_test.rb
316
321
  - test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb
317
322
  - test/integration/foreman_puppet/smartclass_parameter_js_test.rb