foreman_git_templates 1.0.1 → 1.0.2
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_git_templates/unattended_controller_extensions.rb +24 -0
- data/app/models/concerns/foreman_git_templates/host_extensions.rb +14 -2
- data/app/services/foreman_git_templates/repository_fetcher.rb +1 -1
- data/lib/foreman_git_templates/engine.rb +2 -0
- data/lib/foreman_git_templates/version.rb +1 -1
- data/test/controllers/unattended_controller_test.rb +46 -1
- data/test/models/foreman_git_templates/host_test.rb +3 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0477f8453ecbee80aeacc47eca0a8d15e4dfab4c7416a342834682523fe8d620
|
4
|
+
data.tar.gz: 812f5d9a1d5aefce8dfd3fce7c89232c406381d5fcdf1220bf3b949f5efb2e25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3802a1eb148d653a55052f10c87ac215ae044b1b0d883038a75e7c22834ec91df1c4d9ec1f4835e86fa3b68c9a77f89c2e707fa301a9984ae9eb00ae2d4fc531
|
7
|
+
data.tar.gz: 70bd0c85037c17da83cb239a6844d34ccb0fdbb1e4651ab0d6dc8928d7d246bd86dee234c280b97e764221cbde4888890e43047d5137aa9b9ae9f1e58cb1e8b3
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanGitTemplates
|
4
|
+
module UnattendedControllerExtensions
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module Overrides
|
8
|
+
def render_local_boot_template
|
9
|
+
return super unless @host&.repository_path
|
10
|
+
|
11
|
+
return unless verify_found_host
|
12
|
+
|
13
|
+
template = ForemanGitTemplates::DefaultLocalBootRepositoryTemplate.new(name: 'iPXE')
|
14
|
+
safe_render(template)
|
15
|
+
rescue ForemanGitTemplates::RepositoryReader::MissingFileError
|
16
|
+
render_ipxe_message(message: _('iPXE default local boot template not found in repository at templates/iPXE/default_local_boot.erb'))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
included do
|
21
|
+
prepend Overrides
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -3,9 +3,21 @@
|
|
3
3
|
module ForemanGitTemplates
|
4
4
|
module HostExtensions
|
5
5
|
def repository_path
|
6
|
-
return unless
|
6
|
+
return unless git_template_url
|
7
7
|
|
8
|
-
|
8
|
+
git_template_tmpfile.path
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def git_template_url
|
14
|
+
@git_template_url ||= host_params['template_url']
|
15
|
+
end
|
16
|
+
|
17
|
+
def git_template_tmpfile
|
18
|
+
return unless git_template_url
|
19
|
+
|
20
|
+
@git_template_tmpfile ||= RepositoryFetcher.call(git_template_url)
|
9
21
|
end
|
10
22
|
end
|
11
23
|
end
|
@@ -9,7 +9,7 @@ module ForemanGitTemplates
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def call
|
12
|
-
Down.download(repository_url)
|
12
|
+
Down.download(repository_url)
|
13
13
|
rescue Down::ResponseError => e
|
14
14
|
raise RepositoryFetcherError, "Cannot fetch repository from #{repository_url}. Response code: #{e.response.code}"
|
15
15
|
rescue Down::Error => e
|
@@ -6,6 +6,7 @@ module ForemanGitTemplates
|
|
6
6
|
|
7
7
|
config.autoload_paths += Dir["#{config.root}/app/lib"]
|
8
8
|
config.autoload_paths += Dir["#{config.root}/app/services"]
|
9
|
+
config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
|
9
10
|
|
10
11
|
initializer 'foreman_git_templates.register_plugin', before: :finisher_hook do |_app|
|
11
12
|
Foreman::Plugin.register :foreman_git_templates do
|
@@ -19,6 +20,7 @@ module ForemanGitTemplates
|
|
19
20
|
Host::Managed.include(ForemanGitTemplates::Hostext::OperatingSystem)
|
20
21
|
Host::Managed.include(ForemanGitTemplates::HostExtensions)
|
21
22
|
Nic::Managed.include(ForemanGitTemplates::Orchestration::TFTP)
|
23
|
+
UnattendedController.include(ForemanGitTemplates::UnattendedControllerExtensions)
|
22
24
|
rescue StandardError => e
|
23
25
|
Rails.logger.warn "ForemanGitTemplates: skipping engine hook (#{e})"
|
24
26
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'test_plugin_helper'
|
4
4
|
|
5
5
|
class UnattendedControllerTest < ActionController::TestCase
|
6
|
-
let(:os) { FactoryBot.create(:operatingsystem, :
|
6
|
+
let(:os) { FactoryBot.create(:operatingsystem, :with_associations, type: 'Redhat') }
|
7
7
|
let(:host) do
|
8
8
|
FactoryBot.create(:host, :managed, :with_template_url, operatingsystem: os, ptable: os.ptables.first)
|
9
9
|
end
|
@@ -68,4 +68,49 @@ class UnattendedControllerTest < ActionController::TestCase
|
|
68
68
|
assert_equal 'foo bar', response.body.strip
|
69
69
|
end
|
70
70
|
end
|
71
|
+
|
72
|
+
describe 'iPXE templates' do
|
73
|
+
context 'host not in build mode' do
|
74
|
+
test 'should render iPXE local boot template from repository' do
|
75
|
+
assert_not_nil host.params['template_url']
|
76
|
+
|
77
|
+
Dir.mktmpdir do |dir|
|
78
|
+
kind = 'iPXE'
|
79
|
+
|
80
|
+
stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
|
81
|
+
tar.add_file_simple("templates/#{kind}/default_local_boot.erb", 644, 5) { |io| io.write('local') }
|
82
|
+
tar.add_file_simple("templates/#{kind}/template.erb", 644, host.name.length) { |io| io.write(host.name) }
|
83
|
+
end
|
84
|
+
|
85
|
+
get :host_template, params: { kind: kind, hostname: host.name }, session: set_session_user
|
86
|
+
assert_response :success
|
87
|
+
assert_equal 'local', response.body.strip
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'host in build mode' do
|
93
|
+
setup do
|
94
|
+
host.update!(build: true)
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'should render iPXE template from repository' do
|
98
|
+
host.reload
|
99
|
+
assert_not_nil host.params['template_url']
|
100
|
+
|
101
|
+
Dir.mktmpdir do |dir|
|
102
|
+
kind = 'iPXE'
|
103
|
+
|
104
|
+
stub_repository host.params['template_url'], "#{dir}/repo.tar.gz" do |tar|
|
105
|
+
tar.add_file_simple("templates/#{kind}/default_local_boot.erb", 644, 5) { |io| io.write('local') }
|
106
|
+
tar.add_file_simple("templates/#{kind}/template.erb", 644, host.name.length) { |io| io.write(host.name) }
|
107
|
+
end
|
108
|
+
|
109
|
+
get :host_template, params: { kind: kind, hostname: host.name }, session: set_session_user
|
110
|
+
assert_response :success
|
111
|
+
assert_equal host.name, response.body.strip
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
71
116
|
end
|
@@ -6,11 +6,12 @@ module ForemanGitTemplates
|
|
6
6
|
class HostTest < ActiveSupport::TestCase
|
7
7
|
describe '#repository_path' do
|
8
8
|
context 'with template_url parameter' do
|
9
|
-
let(:
|
9
|
+
let(:repo_tempfile) { Tempfile.new }
|
10
|
+
let(:repo_path) { repo_tempfile.path }
|
10
11
|
let(:host) { FactoryBot.create(:host, :managed, :with_template_url) }
|
11
12
|
|
12
13
|
it 'returns path to the repository' do
|
13
|
-
ForemanGitTemplates::RepositoryFetcher.expects(:call).once.with(host.params['template_url']).returns(
|
14
|
+
ForemanGitTemplates::RepositoryFetcher.expects(:call).once.with(host.params['template_url']).returns(repo_tempfile)
|
14
15
|
assert_equal repo_path, host.repository_path
|
15
16
|
end
|
16
17
|
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.
|
4
|
+
version: 1.0.2
|
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-
|
11
|
+
date: 2019-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: down
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- LICENSE
|
63
63
|
- README.md
|
64
64
|
- Rakefile
|
65
|
+
- app/controllers/concerns/foreman_git_templates/unattended_controller_extensions.rb
|
65
66
|
- app/lib/foreman_git_templates/renderer.rb
|
66
67
|
- app/lib/foreman_git_templates/renderer/source/repository.rb
|
67
68
|
- app/lib/foreman_git_templates/tar.rb
|
@@ -110,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
111
|
version: '0'
|
111
112
|
requirements: []
|
112
113
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.7.
|
114
|
+
rubygems_version: 2.7.6.2
|
114
115
|
signing_key:
|
115
116
|
specification_version: 4
|
116
117
|
summary: Adds support for using templates from Git repositories
|