foreman_git_templates 1.0.2 → 1.0.3

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: 0477f8453ecbee80aeacc47eca0a8d15e4dfab4c7416a342834682523fe8d620
4
- data.tar.gz: 812f5d9a1d5aefce8dfd3fce7c89232c406381d5fcdf1220bf3b949f5efb2e25
3
+ metadata.gz: 77802b4e97100b9c7e7cec4969831e66935359298e010a978f1086523ff499a3
4
+ data.tar.gz: 9061fb7d4caec9a6713272116028489bd23fb10240234d2a791acf718019788d
5
5
  SHA512:
6
- metadata.gz: 3802a1eb148d653a55052f10c87ac215ae044b1b0d883038a75e7c22834ec91df1c4d9ec1f4835e86fa3b68c9a77f89c2e707fa301a9984ae9eb00ae2d4fc531
7
- data.tar.gz: 70bd0c85037c17da83cb239a6844d34ccb0fdbb1e4651ab0d6dc8928d7d246bd86dee234c280b97e764221cbde4888890e43047d5137aa9b9ae9f1e58cb1e8b3
6
+ metadata.gz: be061019f7d11d89d5f1cbb28b8b92c91e7866b9a4c3c3b2ea043c593be33d55038999c40bca88a01bfd7b26bc8ee664c1848955fac221efc999290a370a08d7
7
+ data.tar.gz: f9ee9ae528c9b6eb8892334aef83bedffda5067832b3b3e98cf9470343ba976fe47e2d7080c49e1d89709e425d9cdf218d9b26f700deb0125033889ab345305b
@@ -2,10 +2,20 @@
2
2
 
3
3
  module ForemanGitTemplates
4
4
  module HostExtensions
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ validates_associated :host_parameters
9
+ end
10
+
11
+ def repository_klass
12
+ build? ? MainRepositoryTemplate : DefaultLocalBootRepositoryTemplate
13
+ end
14
+
5
15
  def repository_path
6
16
  return unless git_template_url
7
17
 
8
- git_template_tmpfile.path
18
+ git_template_tmpfile&.path
9
19
  end
10
20
 
11
21
  private
@@ -18,6 +28,9 @@ module ForemanGitTemplates
18
28
  return unless git_template_url
19
29
 
20
30
  @git_template_tmpfile ||= RepositoryFetcher.call(git_template_url)
31
+ rescue ::ForemanGitTemplates::RepositoryFetcher::RepositoryFetcherError => e
32
+ Foreman::Logging.exception("GitTemplates: Failed to fetch data from #{git_template_url}", e)
33
+ nil
21
34
  end
22
35
  end
23
36
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ForemanGitTemplates
4
+ module HostParameterExtensions
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ validate :template_url_is_reachable, if: ->(p) { p.name == 'template_url' }
9
+ end
10
+
11
+ private
12
+
13
+ def template_url_is_reachable
14
+ RestClient::Request.execute(method: :head, url: value, timeout: Setting::GitTemplates['template_url_validation_timeout'])
15
+ rescue RestClient::ExceptionWithResponse, URI::InvalidURIError, SocketError => e
16
+ errors.add(:value, _('Cannot fetch templates from %{url}: %{error}') % { url: value, error: e.message })
17
+ end
18
+ end
19
+ end
@@ -17,8 +17,8 @@ module ForemanGitTemplates
17
17
  return super unless repository_path
18
18
 
19
19
  @available_template_kinds ||= template_kinds(provisioning).map do |kind|
20
- MainRepositoryTemplate.new(name: kind.name).tap do |template|
21
- RepositoryReader.call(repository_path, template.path)
20
+ repository_klass.new(name: kind.name).tap do |t|
21
+ t.template = RepositoryReader.call(repository_path, t.path)
22
22
  end
23
23
  rescue RepositoryReader::FileUnreadableError # file is missing or empty
24
24
  next
@@ -9,16 +9,26 @@ module ForemanGitTemplates
9
9
  delegate :render_template, to: :host
10
10
 
11
11
  def generate_pxe_template(kind)
12
- return super unless host.repository_path
12
+ return super unless host.params['template_url']
13
13
 
14
- template_klass = build? ? MainRepositoryTemplate : DefaultLocalBootRepositoryTemplate
15
- template = template_klass.new(name: kind)
14
+ template = host.repository_klass.new(name: kind)
16
15
  render_template(template: template)
17
- rescue ForemanGitTemplates::RepositoryReader::MissingFileError => e
18
- # re-raise the exception if we have a main template defined for this type
19
- raise e if host.available_template_kinds.map(&:name).include?(kind)
16
+ rescue ForemanGitTemplates::RepositoryReader::MissingFileError
20
17
  nil
21
18
  end
19
+
20
+ private
21
+
22
+ def validate_tftp
23
+ return super unless host.params['template_url']
24
+ return unless tftp? || tftp6?
25
+ return unless host.operatingsystem
26
+
27
+ pxe_kind = host.operatingsystem.pxe_loader_kind(host)
28
+ return unless pxe_kind && host.provisioning_template(kind: pxe_kind).nil?
29
+
30
+ failure _('No %{kind} template was found for host %{host}. Repository url: %{url}') % { kind: pxe_kind, host: host.name, url: host.params['template_url'] }
31
+ end
22
32
  end
23
33
 
24
34
  included do
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Setting
4
+ class GitTemplates < ::Setting
5
+ def self.default_settings
6
+ [
7
+ set('template_url_validation_timeout', N_('Template URL validation timeout in seconds'), 15, N_('Template URL validation timeout'))
8
+ ]
9
+ end
10
+
11
+ def self.load_defaults
12
+ # Check the table exists
13
+ return unless super
14
+
15
+ transaction do
16
+ default_settings.each { |s| create! s.update(category: 'Setting::GitTemplates') }
17
+ end
18
+
19
+ true
20
+ end
21
+
22
+ def self.humanized_category
23
+ N_('GitTemplates')
24
+ end
25
+ end
26
+ end
@@ -35,8 +35,9 @@ module ForemanGitTemplates
35
35
  end
36
36
  end
37
37
  end
38
- rescue Errno::ENOENT
39
- raise RepositoryUnreadableError, "Cannot read repository from #{repository_path}"
38
+ rescue Errno::ENOENT, Zlib::GzipFile::Error => e
39
+ Foreman::Logging.exception("GitTemplates: Cannot read repository from #{repository_path}", e)
40
+ raise RepositoryUnreadableError, _('Cannot read repository from %{repository_path}: %{error}') % { repository_path: repository_path, error: e.message }
40
41
  end
41
42
  end
42
43
  end
@@ -8,6 +8,14 @@ module ForemanGitTemplates
8
8
  config.autoload_paths += Dir["#{config.root}/app/services"]
9
9
  config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
10
10
 
11
+ initializer 'foreman_git_templates.load_default_settings', before: :load_config_initializers do
12
+ require_dependency File.expand_path('../../app/models/setting/git_templates.rb', __dir__) if begin
13
+ Setting.table_exists?
14
+ rescue StandardError
15
+ (false)
16
+ end
17
+ end
18
+
11
19
  initializer 'foreman_git_templates.register_plugin', before: :finisher_hook do |_app|
12
20
  Foreman::Plugin.register :foreman_git_templates do
13
21
  requires_foreman '>= 1.20'
@@ -19,6 +27,7 @@ module ForemanGitTemplates
19
27
  Foreman::Renderer.singleton_class.prepend(ForemanGitTemplates::Renderer)
20
28
  Host::Managed.include(ForemanGitTemplates::Hostext::OperatingSystem)
21
29
  Host::Managed.include(ForemanGitTemplates::HostExtensions)
30
+ HostParameter.include(ForemanGitTemplates::HostParameterExtensions)
22
31
  Nic::Managed.include(ForemanGitTemplates::Orchestration::TFTP)
23
32
  UnattendedController.include(ForemanGitTemplates::UnattendedControllerExtensions)
24
33
  rescue StandardError => e
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanGitTemplates
4
- VERSION = '1.0.2'
4
+ VERSION = '1.0.3'
5
5
  end
@@ -3,7 +3,7 @@
3
3
  require 'test_plugin_helper'
4
4
 
5
5
  class HostsControllerTest < ActionController::TestCase
6
- let(:host) { FactoryBot.create(:host, :managed, :with_template_url) }
6
+ let(:host) { FactoryBot.create(:host, :managed, :with_template_url, build: true) }
7
7
 
8
8
  describe '#templates' do
9
9
  it 'returns only templates that are defined in the archive' do
@@ -5,7 +5,7 @@ require 'test_plugin_helper'
5
5
  class UnattendedControllerTest < ActionController::TestCase
6
6
  let(:os) { FactoryBot.create(:operatingsystem, :with_associations, type: 'Redhat') }
7
7
  let(:host) do
8
- FactoryBot.create(:host, :managed, :with_template_url, operatingsystem: os, ptable: os.ptables.first)
8
+ FactoryBot.create(:host, :managed, :with_template_url, build: true, operatingsystem: os, ptable: os.ptables.first)
9
9
  end
10
10
 
11
11
  test 'should render template from repository' do
@@ -70,6 +70,10 @@ class UnattendedControllerTest < ActionController::TestCase
70
70
  end
71
71
 
72
72
  describe 'iPXE templates' do
73
+ let(:host) do
74
+ FactoryBot.create(:host, :managed, :with_template_url, build: false, operatingsystem: os, ptable: os.ptables.first)
75
+ end
76
+
73
77
  context 'host not in build mode' do
74
78
  test 'should render iPXE local boot template from repository' do
75
79
  assert_not_nil host.params['template_url']
@@ -4,7 +4,9 @@ FactoryBot.modify do
4
4
  factory :host do
5
5
  trait :with_template_url do
6
6
  after(:create) do |host, _evaluator|
7
- FactoryBot.create(:host_parameter, host: host, name: 'template_url', value: 'http://www.api.com/repository.tar.gz')
7
+ url = 'http://www.api.com/repository.tar.gz'
8
+ WebMock::API.stub_request(:head, url).to_return(status: 200)
9
+ FactoryBot.create(:host_parameter, host: host, name: 'template_url', value: url)
8
10
  end
9
11
  end
10
12
  end
@@ -4,7 +4,7 @@ require 'test_plugin_helper'
4
4
 
5
5
  module Hostext
6
6
  class OperatingSystemTest < ActiveSupport::TestCase
7
- let(:host) { FactoryBot.create(:host, :managed, :with_template_url) }
7
+ let(:host) { FactoryBot.create(:host, :managed, :with_template_url, build: true) }
8
8
 
9
9
  describe '#provisioning_template' do
10
10
  it 'finds all PXELinux template kinds' do
@@ -13,7 +13,9 @@ module Hostext
13
13
  tar.add_file_simple('templates/PXELinux/template.erb', 644, host.name.length) { |io| io.write(host.name) }
14
14
  end
15
15
 
16
- assert_equal 'PXELinux', host.provisioning_template(kind: 'PXELinux')&.name
16
+ actual = host.provisioning_template(kind: 'PXELinux')
17
+ assert_equal 'PXELinux', actual.name
18
+ assert_equal host.name, actual.template
17
19
  end
18
20
  end
19
21
 
@@ -23,7 +25,9 @@ module Hostext
23
25
  tar.add_file_simple('templates/PXELinux/template.erb', 644, host.name.length) { |io| io.write(host.name) }
24
26
  end
25
27
 
26
- assert_equal 'PXELinux', host.provisioning_template(kind: :PXELinux)&.name
28
+ actual = host.provisioning_template(kind: :PXELinux)
29
+ assert_equal 'PXELinux', actual.name
30
+ assert_equal host.name, actual.template
27
31
  end
28
32
  end
29
33
  end
@@ -15,47 +15,42 @@ class TFTPOrchestrationTest < ActiveSupport::TestCase
15
15
  Dir.mktmpdir do |dir|
16
16
  stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
17
17
  tar.add_file_simple("templates/#{kind}/template.erb", 644, template_content.length) { |io| io.write(template_content) }
18
- tar.add_file_simple("templates/#{kind}/default_local_boot.erb", 644, default_local_boot_template_content.length) { |io| io.write(default_local_boot_template_content) }
19
18
  end
20
19
 
21
- assert_equal template_content, host.generate_pxe_template('PXELinux')
20
+ assert_equal template_content, host.generate_pxe_template(kind)
22
21
  end
23
22
  end
24
- end
25
23
 
26
- context 'host is not in build mode' do
27
- let(:host) { FactoryBot.create(:host, :managed, :with_template_url, build: false) }
24
+ context 'when corresponding default local boot template file is missing in the repo' do
25
+ it 'does not generate a pxe template' do
26
+ Dir.mktmpdir do |dir|
27
+ stub_repository host.params['template_url'], "#{dir}/repo.tar.gz"
28
28
 
29
- it 'renders default local boot template' do
30
- Dir.mktmpdir do |dir|
31
- stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
32
- tar.add_file_simple("templates/#{kind}/template.erb", 644, template_content.length) { |io| io.write(template_content) }
33
- tar.add_file_simple("templates/#{kind}/default_local_boot.erb", 644, default_local_boot_template_content.length) { |io| io.write(default_local_boot_template_content) }
29
+ assert_nil host.generate_pxe_template(kind)
34
30
  end
35
-
36
- assert_equal default_local_boot_template_content, host.generate_pxe_template('PXELinux')
37
31
  end
38
32
  end
33
+ end
39
34
 
40
- it 'does not generate a pxe template if the corresponding template file is missing in the repo' do
35
+ context 'host is not in build mode' do
36
+ let(:host) { FactoryBot.create(:host, :managed, :with_template_url, build: false) }
37
+
38
+ it 'renders default local boot template' do
41
39
  Dir.mktmpdir do |dir|
42
40
  stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
43
- tar.add_file_simple("templates/#{kind}/template.erb", 644, template_content.length) { |io| io.write(template_content) }
44
41
  tar.add_file_simple("templates/#{kind}/default_local_boot.erb", 644, default_local_boot_template_content.length) { |io| io.write(default_local_boot_template_content) }
45
42
  end
46
43
 
47
- assert_nil host.generate_pxe_template('PXEGrub2')
44
+ assert_equal default_local_boot_template_content, host.generate_pxe_template(kind)
48
45
  end
49
46
  end
50
47
 
51
- it 'raises an exception when generating a pxe template if the corresponding default local boot template file is missing in the repo' do
52
- Dir.mktmpdir do |dir|
53
- stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
54
- tar.add_file_simple("templates/#{kind}/template.erb", 644, template_content.length) { |io| io.write(template_content) }
55
- end
48
+ context 'when corresponding default local boot template file is missing in the repo' do
49
+ it 'does not generate a pxe template' do
50
+ Dir.mktmpdir do |dir|
51
+ stub_repository host.params['template_url'], "#{dir}/repo.tar.gz"
56
52
 
57
- assert_raises ForemanGitTemplates::RepositoryReader::MissingFileError do
58
- host.generate_pxe_template('PXELinux')
53
+ assert_nil host.generate_pxe_template(kind)
59
54
  end
60
55
  end
61
56
  end
@@ -63,7 +58,7 @@ class TFTPOrchestrationTest < ActiveSupport::TestCase
63
58
  end
64
59
 
65
60
  describe '#validate_tftp' do
66
- let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, pxe_loader: 'PXELinux BIOS') }
61
+ let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, build: false, pxe_loader: 'PXELinux BIOS') }
67
62
  let(:kind) { 'PXELinux' }
68
63
  let(:template_content) { 'main template content' }
69
64
  let(:default_local_boot_template_content) { 'default local boot template content' }
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ module ForemanGitTemplates
6
+ class HostParameterTest < ActiveSupport::TestCase
7
+ describe 'template_url validation' do
8
+ let(:template_url) { 'http://api.com/repo.tar.gz' }
9
+ let(:host) { FactoryBot.create(:host) }
10
+ let(:host_parameter) { FactoryBot.build(:host_parameter, name: 'template_url', value: template_url, host: host) }
11
+
12
+ context 'when template_url returns 200' do
13
+ it 'is valid' do
14
+ stub_request(:head, template_url).to_return(status: 200)
15
+
16
+ assert host_parameter.valid?
17
+ end
18
+ end
19
+
20
+ context 'when template_url returns 401' do
21
+ it 'is invlid' do
22
+ stub_request(:head, template_url).to_return(status: 401)
23
+
24
+ assert_equal false, host_parameter.valid?
25
+ assert_not_empty host_parameter.errors[:value]
26
+ end
27
+ end
28
+
29
+ context 'when template_url returns 404' do
30
+ it 'is invlid' do
31
+ stub_request(:head, template_url).to_return(status: 404)
32
+
33
+ assert_equal false, host_parameter.valid?
34
+ assert_not_empty host_parameter.errors[:value]
35
+ end
36
+ end
37
+
38
+ context 'when template_url returns 500' do
39
+ it 'is invlid' do
40
+ stub_request(:head, template_url).to_return(status: 500)
41
+
42
+ assert_equal false, host_parameter.valid?
43
+ assert_not_empty host_parameter.errors[:value]
44
+ end
45
+ end
46
+
47
+ context 'when template_url is not a valid URL' do
48
+ let(:template_url) { 'not URL value' }
49
+
50
+ it 'is invlid' do
51
+ assert_equal false, host_parameter.valid?
52
+ assert_not_empty host_parameter.errors[:value]
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -25,5 +25,78 @@ module ForemanGitTemplates
25
25
  end
26
26
  end
27
27
  end
28
+
29
+ describe '#update' do
30
+ let(:os) { FactoryBot.create(:operatingsystem, :with_associations, type: 'Redhat') }
31
+
32
+ setup do
33
+ host.expects(:skip_orchestration_for_testing?).at_least_once.returns(false)
34
+ end
35
+
36
+ context 'with valid template_url' do
37
+ context 'when host is in build mode' do
38
+ let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, operatingsystem: os, build: true) }
39
+
40
+ it 'updates the host' do
41
+ ProxyAPI::Resource.any_instance.stubs(:post).returns(true)
42
+ ProxyAPI::TFTP.any_instance.stubs(:fetch_boot_file).returns(true)
43
+
44
+ Dir.mktmpdir do |dir|
45
+ stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
46
+ tar.add_file_simple('templates/PXEGrub2/template.erb', 644, host.name.length) { |io| io.write(host.name) }
47
+ end
48
+
49
+ assert host.update(name: 'newname')
50
+ assert_empty host.errors.messages
51
+ end
52
+ end
53
+ end
54
+
55
+ context 'when host is not in build mode' do
56
+ let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, operatingsystem: os, build: false) }
57
+
58
+ it 'updates the host' do
59
+ ProxyAPI::TFTP.any_instance.stubs(:set).returns(true)
60
+
61
+ Dir.mktmpdir do |dir|
62
+ stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
63
+ tar.add_file_simple('templates/PXEGrub2/default_local_boot.erb', 644, host.name.length) { |io| io.write(host.name) }
64
+ end
65
+
66
+ assert host.update(name: 'newname')
67
+ assert_empty host.errors.messages
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'with invalid template_url' do
74
+ setup do
75
+ stub_request(:get, host.params['template_url']).to_return(status: 404)
76
+ end
77
+
78
+ let(:expected_errors) { ["No PXEGrub2 template was found for host #{host.name}. Repository url: #{host.params['template_url']}"] }
79
+
80
+ context 'when host is in build mode' do
81
+ let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, operatingsystem: os, build: true) }
82
+
83
+ it 'does not update the host' do
84
+ assert_equal false, host.update(name: 'newname')
85
+ assert_equal expected_errors, host.errors[:base]
86
+ assert_equal expected_errors, host.errors[:'interfaces.base']
87
+ end
88
+ end
89
+
90
+ context 'when host is not in build mode' do
91
+ let(:host) { FactoryBot.create(:host, :with_tftp_orchestration, :with_template_url, operatingsystem: os, build: false) }
92
+
93
+ it 'does not update the host' do
94
+ assert_equal false, host.update(name: 'newname')
95
+ assert_equal expected_errors, host.errors[:base]
96
+ assert_equal expected_errors, host.errors[:'interfaces.base']
97
+ end
98
+ end
99
+ end
100
+ end
28
101
  end
29
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_git_templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - dmTECH GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-29 00:00:00.000000000 Z
11
+ date: 2019-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rdoc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,12 +81,14 @@ files:
67
81
  - app/lib/foreman_git_templates/renderer/source/repository.rb
68
82
  - app/lib/foreman_git_templates/tar.rb
69
83
  - app/models/concerns/foreman_git_templates/host_extensions.rb
84
+ - app/models/concerns/foreman_git_templates/host_parameter_extensions.rb
70
85
  - app/models/concerns/foreman_git_templates/hostext/operating_system.rb
71
86
  - app/models/concerns/foreman_git_templates/orchestration/tftp.rb
72
87
  - app/models/foreman_git_templates/base_repository_template.rb
73
88
  - app/models/foreman_git_templates/default_local_boot_repository_template.rb
74
89
  - app/models/foreman_git_templates/main_repository_template.rb
75
90
  - app/models/foreman_git_templates/snippet_repository_template.rb
91
+ - app/models/setting/git_templates.rb
76
92
  - app/services/foreman_git_templates/repository_fetcher.rb
77
93
  - app/services/foreman_git_templates/repository_reader.rb
78
94
  - config/routes.rb
@@ -85,6 +101,7 @@ files:
85
101
  - test/factories/foreman_git_templates_factories.rb
86
102
  - test/models/concerns/foreman_git_templates/hostext/operating_system_test.rb
87
103
  - test/models/concerns/foreman_git_templates/orchestration/tftp_test.rb
104
+ - test/models/foreman_git_templates/host_parameter_test.rb
88
105
  - test/models/foreman_git_templates/host_test.rb
89
106
  - test/models/foreman_git_templates/snippet_repository_template_test.rb
90
107
  - test/test_plugin_helper.rb
@@ -121,6 +138,7 @@ test_files:
121
138
  - test/unit/repository_reader_test.rb
122
139
  - test/models/foreman_git_templates/snippet_repository_template_test.rb
123
140
  - test/models/foreman_git_templates/host_test.rb
141
+ - test/models/foreman_git_templates/host_parameter_test.rb
124
142
  - test/models/concerns/foreman_git_templates/hostext/operating_system_test.rb
125
143
  - test/models/concerns/foreman_git_templates/orchestration/tftp_test.rb
126
144
  - test/factories/foreman_git_templates_factories.rb