foreman_templates 7.0.6 → 7.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/api/v2/template_controller.rb +2 -1
- data/app/controllers/ui_template_syncs_controller.rb +1 -1
- data/app/services/foreman_templates/export_result.rb +20 -29
- data/app/services/foreman_templates/template_exporter.rb +38 -30
- data/app/views/template_syncs/index.html.erb +6 -2
- data/app/views/ui_template_syncs/template_export_result.rabl +4 -4
- data/lib/foreman_templates/version.rb +1 -1
- data/webpack/__mocks__/foremanReact/components/Layout/LayoutSelectors.js +4 -0
- data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/NewTemplateSyncForm.js +23 -2
- data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/index.js +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9583ee6b0f88f013c5a26f23dd90a22cf7bdcdeebbb8052c3fdffaf11960fb3d
|
4
|
+
data.tar.gz: 5b54607bfe06ca7cdd359d371afbb497e343310ae48d29c2f359bb4d43a6a38d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6826d8bdd2c9bbc47d09cfe8a9cfeddb169a6aa65933fd670144921091267d20814b5cf4cf37e93629a81fa2b1b81120ce796dd53194d4740b02b7e10c04720
|
7
|
+
data.tar.gz: 2e019ce44797e7c28648f8b8913d224441a514fad0e75c977502c1c79c4bab09dbcb4b538a584c28fc8049c60df5ff3c270dfe2de2df97564c5a5af3125ebce5
|
@@ -33,7 +33,8 @@ module Api
|
|
33
33
|
param_group :taxonomies, ::Api::V2::BaseController
|
34
34
|
def export
|
35
35
|
@result = ForemanTemplates::TemplateExporter.new(template_export_params).export!
|
36
|
-
|
36
|
+
@result[:templates] = @result[:templates].map(&:to_h)
|
37
|
+
render :json => { :message => @result }, :status => @result[:error] ? 500 : 200
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -18,7 +18,7 @@ class UiTemplateSyncsController < ApplicationController
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def export
|
21
|
-
@result = ForemanTemplates::TemplateExporter.new(ui_template_export_params).export!
|
21
|
+
@result = OpenStruct.new ForemanTemplates::TemplateExporter.new(ui_template_export_params).export!
|
22
22
|
|
23
23
|
if @result.error
|
24
24
|
render_errors [@result.error]
|
@@ -1,42 +1,33 @@
|
|
1
1
|
module ForemanTemplates
|
2
2
|
class ExportResult
|
3
|
-
|
4
|
-
attr_reader :templates, :git_user, :branch, :repo
|
3
|
+
attr_reader :template, :name, :template_file, :exported, :additional_info
|
5
4
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@warning = nil
|
12
|
-
@templates = []
|
13
|
-
@exported = false
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_exported_templates(templates)
|
17
|
-
@templates.concat templates
|
5
|
+
def initialize(template, exported = true)
|
6
|
+
@template = template
|
7
|
+
@exported = exported
|
8
|
+
@name = template.name
|
9
|
+
@template_file = template.template_file
|
18
10
|
end
|
19
11
|
|
20
12
|
def to_h
|
21
|
-
{
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
13
|
+
{
|
14
|
+
:id => template.id,
|
15
|
+
:name => @name,
|
16
|
+
:exported => @exported,
|
17
|
+
:type => template.class.name.underscore,
|
18
|
+
:additional_info => @additional_info
|
19
|
+
}
|
27
20
|
end
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
def dumped_files_result
|
32
|
-
@templates.map { |template| to_template_h template }
|
22
|
+
def matching_filter
|
23
|
+
generic_info "Skipping, 'name' filtered out based on 'filter' and 'negate' settings"
|
33
24
|
end
|
34
25
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
26
|
+
def generic_info(additional_msg)
|
27
|
+
@exported = false
|
28
|
+
@additional_info = additional_msg
|
29
|
+
Logging.logger('app').debug "Not exporting #{@template.name}: #{additional_msg}"
|
30
|
+
self
|
40
31
|
end
|
41
32
|
end
|
42
33
|
end
|
@@ -4,27 +4,29 @@ module ForemanTemplates
|
|
4
4
|
super + %i(metadata_export_mode)
|
5
5
|
end
|
6
6
|
|
7
|
+
def initialize(args = {})
|
8
|
+
super args
|
9
|
+
@result_lines = []
|
10
|
+
end
|
11
|
+
|
7
12
|
def export!
|
8
|
-
@export_result = ExportResult.new(@repo, @branch, foreman_git_user)
|
9
13
|
if git_repo?
|
10
14
|
export_to_git
|
11
15
|
else
|
12
16
|
export_to_files
|
13
17
|
end
|
14
|
-
|
15
|
-
return @export_result
|
18
|
+
export_result
|
16
19
|
end
|
17
20
|
|
18
21
|
def export_to_files
|
19
22
|
@dir = get_absolute_repo_path
|
20
23
|
verify_path!(@dir)
|
21
24
|
dump_files!
|
22
|
-
@export_result.exported = true
|
23
25
|
end
|
24
26
|
|
25
27
|
def export_to_git
|
26
28
|
@dir = Dir.mktmpdir
|
27
|
-
return
|
29
|
+
return if branch_missing?
|
28
30
|
|
29
31
|
git_repo = Git.clone(@repo, @dir)
|
30
32
|
logger.debug "cloned '#{@repo}' to '#{@dir}'"
|
@@ -42,15 +44,13 @@ module ForemanTemplates
|
|
42
44
|
if new_repo || status.added.any? || status.changed.any? || status.deleted.any? || status.untracked.any?
|
43
45
|
git_repo.commit "Templates export made by Foreman user #{foreman_git_user}"
|
44
46
|
git_repo.push 'origin', branch
|
45
|
-
@export_result.exported = true
|
46
47
|
else
|
47
|
-
@
|
48
|
+
@warning = 'No change detected, skipping the commit and push'
|
48
49
|
end
|
49
50
|
rescue StandardError => e
|
50
|
-
@
|
51
|
+
@error = e.message
|
51
52
|
ensure
|
52
53
|
FileUtils.remove_entry_secure(@dir) if File.exist?(@dir)
|
53
|
-
@export_result
|
54
54
|
end
|
55
55
|
|
56
56
|
def setup_git_branch(git_repo)
|
@@ -70,22 +70,18 @@ module ForemanTemplates
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def dump_files!
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
bytes = file.write template.public_send(export_method)
|
82
|
-
logger.debug "finished writing #{bytes}"
|
83
|
-
end
|
73
|
+
templates_to_dump.map do |template|
|
74
|
+
current_dir = get_dump_dir(template)
|
75
|
+
FileUtils.mkdir_p current_dir
|
76
|
+
filename = File.join(current_dir, template.template_file)
|
77
|
+
File.open(filename, 'w+') do |file|
|
78
|
+
logger.debug "Writing to file #{filename}"
|
79
|
+
bytes = file.write template.public_send(export_method)
|
80
|
+
logger.debug "finished writing #{bytes}"
|
84
81
|
end
|
85
|
-
rescue StandardError => e
|
86
|
-
raise PathAccessException, e.message
|
87
82
|
end
|
88
|
-
|
83
|
+
rescue StandardError => e
|
84
|
+
raise PathAccessException, e.message
|
89
85
|
end
|
90
86
|
|
91
87
|
def get_dump_dir(template)
|
@@ -96,18 +92,23 @@ module ForemanTemplates
|
|
96
92
|
end
|
97
93
|
|
98
94
|
def templates_to_dump
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
95
|
+
find_templates.each do |template|
|
96
|
+
if filter.present?
|
97
|
+
exportable = template.name =~ /#{filter}/i ? !negate : negate
|
98
|
+
result = ExportResult.new(template, exportable)
|
99
|
+
next @result_lines << result.matching_filter unless exportable
|
100
|
+
|
101
|
+
@result_lines << result
|
102
|
+
else
|
103
|
+
@result_lines << ExportResult.new(template)
|
104
|
+
end
|
105
105
|
end
|
106
|
+
@result_lines.select(&:exported).map(&:template)
|
106
107
|
end
|
107
108
|
|
108
109
|
def branch_missing?
|
109
110
|
if @branch.blank?
|
110
|
-
@
|
111
|
+
@error = "Please specify a branch when exporting into a git repo"
|
111
112
|
return true
|
112
113
|
end
|
113
114
|
false
|
@@ -129,6 +130,13 @@ module ForemanTemplates
|
|
129
130
|
end
|
130
131
|
end
|
131
132
|
|
133
|
+
def export_result
|
134
|
+
{
|
135
|
+
:templates => @result_lines, :repo => @repo, :branch => @branch,
|
136
|
+
:git_user => foreman_git_user, :error => @error, :warning => @warning
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
132
140
|
private
|
133
141
|
|
134
142
|
def find_templates
|
@@ -1,5 +1,9 @@
|
|
1
|
-
|
2
|
-
<%=
|
1
|
+
<% content_for(:javascripts) do %>
|
2
|
+
<%= webpacked_plugins_js_for :foreman_templates %>
|
3
|
+
<% end %>
|
4
|
+
<% content_for(:stylesheets) do %>
|
5
|
+
<%= webpacked_plugins_css_for :foreman_templates %>
|
6
|
+
<% end %>
|
3
7
|
|
4
8
|
<div id="foreman-templates"/>
|
5
9
|
|
@@ -1,7 +1,7 @@
|
|
1
|
-
object @
|
1
|
+
object @template_result
|
2
2
|
|
3
|
-
attributes :name, :template_file
|
3
|
+
attributes :name, :template_file, :additional_info
|
4
4
|
|
5
|
-
node(false) do |
|
6
|
-
partial "ui_template_syncs/template_attrs", :object => template
|
5
|
+
node(false) do |result|
|
6
|
+
partial "ui_template_syncs/template_attrs", :object => result.template
|
7
7
|
end
|
data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/NewTemplateSyncForm.js
CHANGED
@@ -8,8 +8,26 @@ import SyncSettingsFields from '../SyncSettingFields';
|
|
8
8
|
import SyncTypeRadios from '../SyncTypeRadios';
|
9
9
|
import { NEW_TEMPLATE_SYNC_FORM_NAME } from './NewTemplateSyncFormConstants';
|
10
10
|
|
11
|
+
const addTaxParams = key => (params, currentTax) => {
|
12
|
+
if (currentTax.id) {
|
13
|
+
params[key] = [currentTax.id];
|
14
|
+
}
|
15
|
+
return params;
|
16
|
+
};
|
17
|
+
|
18
|
+
const addOrgParams = addTaxParams('organization_ids');
|
19
|
+
const addLocParams = addTaxParams('location_ids');
|
20
|
+
|
11
21
|
const submit = syncType => (formValues, dispatch, props) => {
|
12
|
-
const {
|
22
|
+
const {
|
23
|
+
submitForm,
|
24
|
+
importUrl,
|
25
|
+
exportUrl,
|
26
|
+
history,
|
27
|
+
currentFields,
|
28
|
+
currentLocation,
|
29
|
+
currentOrganization,
|
30
|
+
} = props;
|
13
31
|
const url = syncType === 'import' ? importUrl : exportUrl;
|
14
32
|
const currentFieldNames = Object.keys(currentFields);
|
15
33
|
const postValues = Object.keys(formValues).reduce((memo, key) => {
|
@@ -21,7 +39,10 @@ const submit = syncType => (formValues, dispatch, props) => {
|
|
21
39
|
|
22
40
|
return submitForm({
|
23
41
|
url,
|
24
|
-
values:
|
42
|
+
values: addOrgParams(
|
43
|
+
addLocParams(postValues, currentLocation),
|
44
|
+
currentOrganization
|
45
|
+
),
|
25
46
|
message: `Templates were ${syncType}ed.`,
|
26
47
|
item: 'TemplateSync',
|
27
48
|
}).then(args => {
|
@@ -3,6 +3,8 @@ import { reduxForm } from 'redux-form';
|
|
3
3
|
|
4
4
|
import * as FormActions from 'foremanReact/redux/actions/common/forms';
|
5
5
|
|
6
|
+
import { selectLayout } from 'foremanReact/components/Layout/LayoutSelectors';
|
7
|
+
|
6
8
|
import { NEW_TEMPLATE_SYNC_FORM_NAME } from './NewTemplateSyncFormConstants';
|
7
9
|
import NewTemplateSyncForm from './NewTemplateSyncForm';
|
8
10
|
|
@@ -32,6 +34,8 @@ const mapStateToProps = (state, ownProps) => {
|
|
32
34
|
importSettings,
|
33
35
|
exportSettings,
|
34
36
|
currentFields,
|
37
|
+
currentOrganization: selectLayout(state).currentOrganization,
|
38
|
+
currentLocation: selectLayout(state).currentLocation,
|
35
39
|
};
|
36
40
|
};
|
37
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_templates
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Sutcliffe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diffy
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- webpack/ForemanTemplates.js
|
97
97
|
- webpack/Routes.js
|
98
98
|
- webpack/__mocks__/foremanReact/common/helpers.js
|
99
|
+
- webpack/__mocks__/foremanReact/components/Layout/LayoutSelectors.js
|
99
100
|
- webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
|
100
101
|
- webpack/__mocks__/foremanReact/components/common/forms/CommonForm.js
|
101
102
|
- webpack/__mocks__/foremanReact/components/common/forms/Form.js
|