foreman_acd 0.9.0 → 0.9.1

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -2
  3. data/app/controllers/ui_acd_controller.rb +4 -2
  4. data/app/models/concerns/foreman_acd/host_managed_extensions.rb +25 -0
  5. data/app/views/foreman_acd/app_definitions/_form.html.erb +4 -0
  6. data/app/views/foreman_acd/app_instances/_form.html.erb +4 -0
  7. data/lib/foreman_acd/plugin.rb +3 -3
  8. data/lib/foreman_acd/version.rb +1 -1
  9. data/package.json +5 -19
  10. data/test/controllers/ui_acd_controller_test.rb +4 -1
  11. data/webpack/__snapshots__/helper.test.js.snap +1 -1
  12. data/webpack/components/ApplicationDefinition/ApplicationDefinition.js +6 -1
  13. data/webpack/components/ApplicationDefinition/ApplicationDefinitionActions.js +6 -0
  14. data/webpack/components/ApplicationDefinition/ApplicationDefinitionSelectors.js +1 -0
  15. data/webpack/components/ApplicationDefinition/__tests__/ApplicationDefinitionSelectors.test.js +12 -0
  16. data/webpack/components/ApplicationDefinition/__tests__/__snapshots__/ApplicationDefinition.test.js.snap +1 -0
  17. data/webpack/components/ApplicationDefinition/__tests__/__snapshots__/ApplicationDefinitionSelectors.test.js.snap +8 -0
  18. data/webpack/components/ApplicationDefinition/index.js +2 -0
  19. data/webpack/components/ApplicationDefinitionImport/ApplicationDefinitionImportActions.js +1 -1
  20. data/webpack/components/ApplicationInstance/ApplicationInstance.js +6 -1
  21. data/webpack/components/ApplicationInstance/ApplicationInstanceActions.js +6 -0
  22. data/webpack/components/ApplicationInstance/ApplicationInstanceSelectors.js +1 -0
  23. data/webpack/components/ApplicationInstance/__tests__/ApplicationInstanceSelectors.test.js +12 -0
  24. data/webpack/components/ApplicationInstance/__tests__/__snapshots__/ApplicationInstance.test.js.snap +1 -0
  25. data/webpack/components/ApplicationInstance/__tests__/__snapshots__/ApplicationInstanceSelectors.test.js.snap +8 -0
  26. data/webpack/components/ApplicationInstance/index.js +2 -0
  27. data/webpack/components/ParameterSelection/ParameterSelection.js +5 -0
  28. data/webpack/components/ParameterSelection/ParameterSelectionActions.js +10 -2
  29. data/webpack/components/ParameterSelection/ParameterSelectionHelper.js +5 -1
  30. data/webpack/components/ParameterSelection/ParameterSelectionReducer.js +3 -3
  31. data/webpack/components/ParameterSelection/ParameterSelectionSelectors.js +1 -0
  32. data/webpack/components/ParameterSelection/__fixtures__/parameterSelectionData_1.fixtures.js +8 -0
  33. data/webpack/components/ParameterSelection/__tests__/ParameterSelectionSelectors.test.js +6 -0
  34. data/webpack/components/ParameterSelection/__tests__/__snapshots__/ParameterSelectionReducer.test.js.snap +112 -17
  35. data/webpack/components/ParameterSelection/__tests__/__snapshots__/ParameterSelectionSelectors.test.js.snap +13 -0
  36. data/webpack/components/ParameterSelection/index.js +2 -0
  37. data/webpack/components/SyncGitRepo/SyncGitRepoActions.js +1 -1
  38. data/webpack/helper.js +16 -1
  39. data/webpack/helper.test.js +20 -1
  40. data/webpack/test_setup.js +0 -2
  41. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca6ffd04ba17f399f8ecbf17615fde7ba6391cf389e16d83e427adb2c15cff9f
4
- data.tar.gz: 9de27331a51e5bb6887250b01e40d6557fb9e5f66f96005f16e8d5fb2e6999f8
3
+ metadata.gz: 2a738c9828728db02d8d06460befc527ffbf7c3662d0bd0ba4d252ffe416be7e
4
+ data.tar.gz: 30c1d33e7525179ac752d949116fd99bc9fefb27e11c1a6f69567803ef5a0e25
5
5
  SHA512:
6
- metadata.gz: ee8e1c5f4b7d842ce1f153c282b74a07a83edd6405e0b0ba7476602bd0c225bf8fefdb7e19aacfd2d79033f0c5429bc675e9c0dd1d794b2f1cfbe9d91764e9ed
7
- data.tar.gz: 1d74484d949e080478432b0d76cba89b87fde3eda56a1d6cf7c69dc2207cdca2308a73b9f11de6a25d5713b2de12a546423b3d251d793925f55c33440cad108c
6
+ metadata.gz: 8311857ec1c4a78e95e4f6a401548fa975b876fba04839a0641d84c4dd138d20858717df830d391651bb517ce07e423fc4faa2b4abc42e25a8fe332233e7460c
7
+ data.tar.gz: 455afe8abd543214663b4a621d92893a8e63e28a44e412b1de65695c32e712432906324b73b09c64ee94a6091bc4470f8b8640eb3f1507c3a21d804526ee45a8
data/README.md CHANGED
@@ -119,8 +119,6 @@ All Foreman parameters require a value.
119
119
 
120
120
  ## TODO
121
121
 
122
- * Add `git` support for the Ansible playbooks.
123
- * Provide application templates which contains application definition and the required Ansible-playbook.
124
122
  * Add Saltstack support to configure the application.
125
123
  * Extend the Foreman parameter and value validation.
126
124
 
@@ -40,13 +40,15 @@ class UiAcdController < ::Api::V2::BaseController
40
40
  def collect_foreman_data(hostgroup_id)
41
41
  hg = Hostgroup.find(hostgroup_id)
42
42
  fdata = OpenStruct.new(
43
- :environments => Environment.all,
44
- :lifecycle_environments => Katello::KTEnvironment.all,
45
43
  :domains => Domain.all,
46
44
  :computeprofiles => ComputeProfile.all,
47
45
  :hostgroup_id => hg.id,
48
46
  :ptables => hg&.operatingsystem&.ptables
49
47
  )
48
+
49
+ fdata[:environments] = Environment.all if defined?(ForemanPuppet)
50
+ fdata[:lifecycle_environments] = Katello::KTEnvironment.all if defined?(Katello)
51
+
50
52
  fdata
51
53
  end
52
54
 
@@ -9,6 +9,31 @@ module ForemanAcd
9
9
  base.instance_eval do
10
10
  before_provision :initiate_acd_app_configurator_after_host_deployment, :if => :deployed_via_acd?
11
11
  before_destroy :check_deletable, :prepend => true, :if => :deployed_via_acd?
12
+
13
+ has_many :app_instances, :through => :foreman_hosts, :class_name => 'ForemanAcd::AppInstance'
14
+
15
+ scoped_search :relation => :app_instances,
16
+ :on => :name,
17
+ :rename => :acd_app_instance,
18
+ :only_explicit => true,
19
+ :complete_value => true,
20
+ :operators => ['= '],
21
+ :ext_method => :find_by_acd_app_instance_name
22
+ end
23
+
24
+ base.singleton_class.prepend ClassMethods
25
+ end
26
+
27
+ # New class methods for Host::Managed
28
+ module ClassMethods
29
+ def find_by_acd_app_instance_name(_key, operator, acd_instance_name)
30
+ cond = sanitize_sql_for_conditions(["acd_app_instances.name #{operator} ?", value_to_sql(operator, acd_instance_name)])
31
+ hosts = ForemanAcd::AppInstance.where(cond).joins(:foreman_hosts).pluck(:host_id)
32
+ if hosts.empty?
33
+ { :condition => '1=0' }
34
+ else
35
+ { :conditions => Host::Managed.arel_table[:id].in(hosts).to_sql }
36
+ end
12
37
  end
13
38
  end
14
39
 
@@ -24,6 +24,10 @@
24
24
  if @app_definition.ansible_vars_all.present?
25
25
  json["ansibleVarsAll"] = JSON.parse(@app_definition.ansible_vars_all)
26
26
  end
27
+
28
+ json["supportedPlugins"] = {}
29
+ json["supportedPlugins"]["puppet"] = defined?(ForemanPuppet) != nil
30
+ json["supportedPlugins"]["katello"] = defined?(Katello) != nil
27
31
  %>
28
32
 
29
33
  <%= form_for @app_definition, :url => (@app_definition.new_record? ? app_definitions_path : app_definition_path(:id => @app_definition.id)) do |f| %>
@@ -24,6 +24,10 @@
24
24
  "ansibleVarsAll": @app_instance.ansible_vars_all.blank? ? [] : JSON.parse(@app_instance.ansible_vars_all),
25
25
  }
26
26
  end
27
+
28
+ json["supportedPlugins"] = {}
29
+ json["supportedPlugins"]["puppet"] = defined?(ForemanPuppet) != nil
30
+ json["supportedPlugins"]["katello"] = defined?(Katello) != nil
27
31
  %>
28
32
 
29
33
  <%= form_for @app_instance, :url => (@app_instance.new_record? ? app_instances_path : app_instance_path(:id => @app_instance.id)) do |f| %>
@@ -33,7 +33,7 @@ Foreman::Plugin.register :foreman_acd do
33
33
  :resource_type => 'ForemanAcd::AnsiblePlaybook'
34
34
 
35
35
  permission :edit_ansible_playbooks,
36
- { :'foreman_acd/ansible_playbooks' => [:update, :edit],
36
+ { :'foreman_acd/ansible_playbooks' => [:update, :edit, :sync_git_repo],
37
37
  :'foreman_acd/api/v2/ansible_playbooks' => [:update] },
38
38
  :resource_type => 'ForemanAcd::AnsiblePlaybook'
39
39
 
@@ -72,7 +72,7 @@ Foreman::Plugin.register :foreman_acd do
72
72
  :resource_type => 'ForemanAcd::AppDefinition'
73
73
 
74
74
  permission :export_app_definitions,
75
- { :'foreman_acd/app_definitions' => [:export],
75
+ { :'foreman_acd/app_definitions' => [:export, :handle_file_upload],
76
76
  :'foreman_acd/api/v2/app_definitions' => [:export] },
77
77
  :resource_type => 'ForemanAcd::AppDefinition'
78
78
 
@@ -120,7 +120,7 @@ Foreman::Plugin.register :foreman_acd do
120
120
  :resource_type => 'ForemanAcd::AppInstance'
121
121
 
122
122
  permission :view_ui_acd,
123
- { :ui_acd => [:app, :foreman_data, :ansible_data] }
123
+ { :ui_acd => [:app, :foreman_data, :ansible_data, :validate_hostname, :report_data] }
124
124
 
125
125
  permission :acd_foreman_hosts,
126
126
  { :'foreman_acd/app_instances' => [:create, :edit, :update, :deploy, :destroy_with_hosts, :destroy] },
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanAcd
4
- VERSION = '0.9.0'
4
+ VERSION = '0.9.1'
5
5
  end
data/package.json CHANGED
@@ -1,42 +1,28 @@
1
1
  {
2
2
  "name": "foreman_acd",
3
- "version": "0.3.0",
3
+ "version": "0.9.0",
4
4
  "description": "foreman application centric deployment",
5
5
  "main": "index.js",
6
6
  "directories": {
7
7
  "test": "test"
8
8
  },
9
9
  "dependencies": {
10
- "@theforeman/vendor": "^1.7.0",
10
+ "@theforeman/vendor": "^4.14.0",
11
11
  "react-intl": "^2.8.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@theforeman/vendor-dev": "^1.7.0",
15
- "babel-eslint": "^8.2.1",
16
- "babel-jest": "^23.6.0",
17
- "babel-plugin-dynamic-import-node": "^2.3.3",
18
- "babel-plugin-syntax-dynamic-import": "^6.18.0",
14
+ "@theforeman/builder": "^4.14.0",
15
+ "@theforeman/vendor-dev": "^4.14.0",
19
16
  "babel-plugin-transform-class-properties": "^6.24.1",
20
- "babel-plugin-transform-object-assign": "^6.22.0",
21
- "babel-plugin-transform-object-rest-spread": "^6.26.0",
22
17
  "babel-preset-env": "^1.6.0",
23
18
  "babel-preset-react": "^6.24.1",
24
19
  "enzyme": "^3.11.0",
25
20
  "enzyme-adapter-react-16": "^1.15.6",
26
21
  "enzyme-to-json": "^3.6.1",
27
- "eslint": "^4.18.1",
28
- "eslint-plugin-import": "^2.22.1",
29
- "eslint-plugin-jest": "^21.2.0",
30
- "eslint-plugin-patternfly-react": "^0.2.1",
31
- "eslint-plugin-react": "^7.22.0",
32
22
  "identity-obj-proxy": "^3.0.0",
33
23
  "jest": "^23.6.0",
34
- "jest-cli": "^23.6.0",
35
24
  "jest-prop-type-error": "^1.1.0",
36
- "lodash": "^4.17.21",
37
- "react-redux-test-utils": "^0.1.1",
38
- "sortabular": "~1.5.1",
39
- "table-resolver": "~3.2.0"
25
+ "react-redux-test-utils": "^0.1.1"
40
26
  },
41
27
  "scripts": {
42
28
  "test": "node node_modules/.bin/jest --no-cache"
@@ -30,7 +30,10 @@ class UiAcdControllerTest < ActionController::TestCase
30
30
  assert_equal json_app_all.first['name'], parsed_all_response.first['name']
31
31
  end
32
32
 
33
- test 'get foreman data json' do
33
+ test 'get foreman data json foreman <3' do
34
+ # TODO: Get rid of the puppet dependency at all!
35
+ skip 'Puppet env was removed with foreman >= 3.x' unless defined?(ForemanPuppet)
36
+
34
37
  hostgroup = FactoryBot.create(:hostgroup, :with_domain, :with_os, :with_environment)
35
38
  get :foreman_data, :params => { :id => hostgroup.id }, :session => set_session_user
36
39
  assert_response :success
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`helper creates a object from an array 1`] = `
3
+ exports[`helper formats a nice, easy header 1`] = `
4
4
  <TableHeading
5
5
  align=""
6
6
  aria-label="TheLabel"
@@ -57,7 +57,7 @@ class ApplicationDefinition extends React.Component {
57
57
 
58
58
  componentDidMount() {
59
59
  const {
60
- data: { mode, ansiblePlaybook, ansibleDataUrl, services, ansibleVarsAll, hostgroups },
60
+ data: { mode, ansiblePlaybook, ansibleDataUrl, services, ansibleVarsAll, hostgroups, supportedPlugins },
61
61
  initApplicationDefinition,
62
62
  addApplicationDefinitionService,
63
63
  deleteApplicationDefinitionService,
@@ -194,6 +194,7 @@ class ApplicationDefinition extends React.Component {
194
194
  ansiblePlaybook,
195
195
  services,
196
196
  ansibleVarsAll,
197
+ supportedPlugins,
197
198
  this.headerFormatter,
198
199
  this.inlineEditFormatter,
199
200
  this.inlineEditButtonsFormatter,
@@ -207,6 +208,7 @@ class ApplicationDefinition extends React.Component {
207
208
  ansiblePlaybook,
208
209
  services,
209
210
  columns,
211
+ hiddenForemanParameterTypes,
210
212
  addApplicationDefinitionService,
211
213
  confirmEditApplicationDefinitionService,
212
214
  cancelEditApplicationDefinitionService,
@@ -308,6 +310,7 @@ class ApplicationDefinition extends React.Component {
308
310
  <ParameterSelection
309
311
  editModeCallback={ (hide) => changeParameterSelectionMode({ mode: hide })}
310
312
  paramType={ PARAMETER_SELECTION_PARAM_TYPE_FOREMAN }
313
+ hiddenParameterTypes={ hiddenForemanParameterTypes }
311
314
  location={ location }
312
315
  organization={ organization }
313
316
  paramDataUrl= { foremanDataUrl }
@@ -377,6 +380,7 @@ ApplicationDefinition.defaultProps = {
377
380
  ansibleVarsAll: [],
378
381
  parametersData: {},
379
382
  columns: [],
383
+ hiddenForemanParameterTypes: [],
380
384
  editParamsOfRowId: null,
381
385
  paramEditMode: false,
382
386
  }
@@ -391,6 +395,7 @@ ApplicationDefinition.propTypes = {
391
395
  services: PropTypes.array,
392
396
  ansibleVarsAll: PropTypes.array,
393
397
  columns: PropTypes.array,
398
+ hiddenForemanParameterTypes: PropTypes.array,
394
399
  closeAlertModal: PropTypes.func,
395
400
  addApplicationDefinitionService: PropTypes.func,
396
401
  deleteApplicationDefinitionService: PropTypes.func,
@@ -34,6 +34,10 @@ import {
34
34
  APPLICATION_DEFINITION_CHANGE_PARAMETER_SELECTION_MODE,
35
35
  } from './ApplicationDefinitionConstants';
36
36
 
37
+ import {
38
+ supportedPluginsToHiddenParameterTypes,
39
+ } from '../../helper';
40
+
37
41
  import {
38
42
  transformAnsiblePlaybook,
39
43
  } from './ApplicationDefinitionHelper';
@@ -42,6 +46,7 @@ export const initApplicationDefinition = (
42
46
  ansiblePlaybook,
43
47
  services,
44
48
  ansibleVarsAll,
49
+ supportedPlugins,
45
50
  headerFormatter,
46
51
  inlineEditFormatter,
47
52
  inlineEditButtonsFormatter,
@@ -168,6 +173,7 @@ export const initApplicationDefinition = (
168
173
  }
169
174
  initialState.services = services;
170
175
  initialState.ansibleVarsAll = ansibleVarsAll;
176
+ initialState.hiddenForemanParameterTypes = supportedPluginsToHiddenParameterTypes(supportedPlugins);
171
177
 
172
178
  dispatch({
173
179
  type: APPLICATION_DEFINITION_INIT,
@@ -7,6 +7,7 @@ export const selectEditMode = state => applicationDefinitionConf(state).editMode
7
7
  export const selectAnsiblePlaybook = state => applicationDefinitionConf(state).ansiblePlaybook;
8
8
  export const selectServices = state => applicationDefinitionConf(state).services;
9
9
  export const selectColumns = state => applicationDefinitionConf(state).columns;
10
+ export const selectHiddenForemanParameterTypes = state => applicationDefinitionConf(state).hiddenForemanParameterTypes;
10
11
  export const selectParametersData = state => applicationDefinitionConf(state).parametersData;
11
12
  export const selectAnsibleVarsAll = state => applicationDefinitionConf(state).ansibleVarsAll;
12
13
  export const selectParamEditMode = state => applicationDefinitionConf(state).paramEditMode;
@@ -1,10 +1,14 @@
1
1
  import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
2
2
 
3
3
  import {
4
+ selectShowAlertModal,
5
+ selectAlertModalText,
6
+ selectAlertModalTitle,
4
7
  selectEditMode,
5
8
  selectAnsiblePlaybook,
6
9
  selectServices,
7
10
  selectColumns,
11
+ selectHiddenForemanParameterTypes,
8
12
  selectParametersData,
9
13
  selectAnsibleVarsAll,
10
14
  selectParamEditMode,
@@ -21,6 +25,12 @@ const stateFactory = obj => ({
21
25
  });
22
26
 
23
27
  const fixtures = {
28
+ 'should return showAlertModal from applicationDefinitionConfData_1 fixtures': () =>
29
+ selectShowAlertModal(stateFactory(applicationDefinitionConfData_1)),
30
+ 'should return alertModalText from applicationDefinitionConfData_1 fixtures': () =>
31
+ selectAlertModalText(stateFactory(applicationDefinitionConfData_1)),
32
+ 'should return alertModalTitle from applicationDefinitionConfData_1 fixtures': () =>
33
+ selectAlertModalTitle(stateFactory(applicationDefinitionConfData_1)),
24
34
  'should return editMode from applicationDefinitionConfData_1 fixtures': () =>
25
35
  selectEditMode(stateFactory(applicationDefinitionConfData_1)),
26
36
  'should return ansiblePlaybook from applicationDefinitionConfData_1 fixtures': () =>
@@ -31,6 +41,8 @@ const fixtures = {
31
41
  selectParametersData(stateFactory(applicationDefinitionConfData_1)),
32
42
  'should return columns from applicationDefinitionConfData_1 fixtures': () =>
33
43
  selectColumns(stateFactory(applicationDefinitionConfData_1)),
44
+ 'should return hiddenForemanParameterTypes from applicationDefinitionConfData_1 fixtures': () =>
45
+ selectHiddenForemanParameterTypes(stateFactory(applicationDefinitionConfData_1)),
34
46
  'should return ansibleVarsAll from applicationDefinitionConfData_1 fixtures': () =>
35
47
  selectAnsibleVarsAll(stateFactory(applicationDefinitionConfData_1)),
36
48
  'should return ParamEditMode from applicationDefinitionConfData_1 fixtures': () =>
@@ -134,6 +134,7 @@ exports[`ApplicationDefinition should render application definition 1`] = `
134
134
  <Connect(ParameterSelection)
135
135
  data={Object {}}
136
136
  editModeCallback={[Function]}
137
+ hiddenParameterTypes={Array []}
137
138
  location="Default Location"
138
139
  organization="Default Organization"
139
140
  paramDataUrl="url/does/not/exist"
@@ -2,6 +2,10 @@
2
2
 
3
3
  exports[`ApplicationDefinitionSelectors should return ParamEditMode from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
4
4
 
5
+ exports[`ApplicationDefinitionSelectors should return alertModalText from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
6
+
7
+ exports[`ApplicationDefinitionSelectors should return alertModalTitle from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
8
+
5
9
  exports[`ApplicationDefinitionSelectors should return ansiblePlaybook from applicationDefinitionConfData_1 fixtures 1`] = `
6
10
  Object {
7
11
  "groups": Object {
@@ -214,6 +218,8 @@ Array [
214
218
 
215
219
  exports[`ApplicationDefinitionSelectors should return editMode from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
216
220
 
221
+ exports[`ApplicationDefinitionSelectors should return hiddenForemanParameterTypes from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
222
+
217
223
  exports[`ApplicationDefinitionSelectors should return parametersData from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
218
224
 
219
225
  exports[`ApplicationDefinitionSelectors should return services from applicationDefinitionConfData_1 fixtures 1`] = `
@@ -297,3 +303,5 @@ Array [
297
303
  },
298
304
  ]
299
305
  `;
306
+
307
+ exports[`ApplicationDefinitionSelectors should return showAlertModal from applicationDefinitionConfData_1 fixtures 1`] = `undefined`;
@@ -13,6 +13,7 @@ import {
13
13
  selectAnsiblePlaybook,
14
14
  selectServices,
15
15
  selectColumns,
16
+ selectHiddenForemanParameterTypes,
16
17
  selectParametersData,
17
18
  selectAnsibleVarsAll,
18
19
  selectParamEditMode,
@@ -26,6 +27,7 @@ const mapStateToProps = state => ({
26
27
  ansiblePlaybook: selectAnsiblePlaybook(state),
27
28
  services: selectServices(state),
28
29
  columns: selectColumns(state),
30
+ hiddenForemanParameterTypes: selectHiddenForemanParameterTypes(state),
29
31
  parametersData: selectParametersData(state),
30
32
  ansibleVarsAll: selectAnsibleVarsAll(state),
31
33
  paramEditMode: selectParamEditMode(state),
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { API, actionTypeGenerator } from 'foremanReact/redux/API';
3
- import { addToast } from 'foremanReact/redux/actions/toasts';
3
+ import { addToast } from 'foremanReact/components/ToastsList';
4
4
  import { sprintf, translate as __ } from 'foremanReact/common/I18n';
5
5
 
6
6
 
@@ -92,7 +92,7 @@ class ApplicationInstance extends React.Component {
92
92
 
93
93
  componentDidMount() {
94
94
  const {
95
- data: { mode, appDefinition, hosts, ansibleVarsAll, appDefinitionUrl },
95
+ data: { mode, appDefinition, hosts, ansibleVarsAll, appDefinitionUrl, supportedPlugins },
96
96
  initApplicationInstance,
97
97
  addApplicationInstanceHost,
98
98
  deleteApplicationInstanceHost,
@@ -244,6 +244,7 @@ class ApplicationInstance extends React.Component {
244
244
  appDefinition,
245
245
  hosts,
246
246
  ansibleVarsAll,
247
+ supportedPlugins,
247
248
  this.headerFormatter,
248
249
  this.inlineEditFormatter,
249
250
  this.inlineEditButtonsFormatter,
@@ -258,6 +259,7 @@ class ApplicationInstance extends React.Component {
258
259
  services,
259
260
  hosts,
260
261
  columns,
262
+ hiddenForemanParameterTypes,
261
263
  addApplicationInstanceHost,
262
264
  confirmEditApplicationInstanceHost,
263
265
  cancelEditApplicationInstanceHost,
@@ -385,6 +387,7 @@ class ApplicationInstance extends React.Component {
385
387
  <ParameterSelection
386
388
  editModeCallback={ (hide) => changeParameterSelectionMode({ mode: hide })}
387
389
  paramType={ PARAMETER_SELECTION_PARAM_TYPE_FOREMAN }
390
+ hiddenParameterTypes={ hiddenForemanParameterTypes }
388
391
  location={ location }
389
392
  organization={ organization }
390
393
  paramDataUrl= { foremanDataUrl }
@@ -483,6 +486,7 @@ ApplicationInstance.defaultProps = {
483
486
  ansibleVarsAll: [],
484
487
  parametersData: {},
485
488
  columns: [],
489
+ hiddenForemanParameterTypes: [],
486
490
  editParamsOfRowId: null,
487
491
  paramEditMode: false,
488
492
  }
@@ -496,6 +500,7 @@ ApplicationInstance.propTypes = {
496
500
  services: PropTypes.array,
497
501
  appDefinition: PropTypes.object,
498
502
  columns: PropTypes.array,
503
+ hiddenForemanParameterTypes: PropTypes.array,
499
504
  hosts: PropTypes.array,
500
505
  ansibleVarsAll: PropTypes.array,
501
506
  closeAlertModal: PropTypes.func,
@@ -36,10 +36,15 @@ import {
36
36
  APPLICATION_INSTANCE_CHANGE_PARAMETER_SELECTION_MODE,
37
37
  } from './ApplicationInstanceConstants';
38
38
 
39
+ import {
40
+ supportedPluginsToHiddenParameterTypes,
41
+ } from '../../helper';
42
+
39
43
  export const initApplicationInstance = (
40
44
  appDefinition,
41
45
  hosts,
42
46
  ansibleVarsAll,
47
+ supportedPlugins,
43
48
  headerFormatter,
44
49
  inlineEditFormatter,
45
50
  inlineEditButtonsFormatter,
@@ -116,6 +121,7 @@ export const initApplicationInstance = (
116
121
  initialState.appDefinition = appDefinition;
117
122
  initialState.hosts = hosts;
118
123
  initialState.ansibleVarsAll = ansibleVarsAll;
124
+ initialState.hiddenForemanParameterTypes = supportedPluginsToHiddenParameterTypes(supportedPlugins);
119
125
 
120
126
  dispatch({
121
127
  type: APPLICATION_INSTANCE_INIT,
@@ -7,6 +7,7 @@ export const selectEditMode = state => applicationInstanceConf(state).editMode;
7
7
  export const selectAppDefinition = state => applicationInstanceConf(state).appDefinition;
8
8
  export const selectHosts = state => applicationInstanceConf(state).hosts;
9
9
  export const selectColumns = state => applicationInstanceConf(state).columns;
10
+ export const selectHiddenForemanParameterTypes = state => applicationInstanceConf(state).hiddenForemanParameterTypes;
10
11
  export const selectServices = state => applicationInstanceConf(state).services;
11
12
  export const selectParametersData = state => applicationInstanceConf(state).parametersData;
12
13
  export const selectAnsibleVarsAll = state => applicationInstanceConf(state).ansibleVarsAll;
@@ -1,10 +1,14 @@
1
1
  import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
2
2
 
3
3
  import {
4
+ selectShowAlertModal,
5
+ selectAlertModalText,
6
+ selectAlertModalTitle,
4
7
  selectEditMode,
5
8
  selectAppDefinition,
6
9
  selectHosts,
7
10
  selectColumns,
11
+ selectHiddenForemanParameterTypes,
8
12
  selectServices,
9
13
  selectParametersData,
10
14
  selectAnsibleVarsAll,
@@ -22,6 +26,12 @@ const stateFactory = obj => ({
22
26
  });
23
27
 
24
28
  const fixtures = {
29
+ 'should return showAlertModal from applicationInstanceConfData_1 fixtures': () =>
30
+ selectShowAlertModal(stateFactory(applicationInstanceConfData_1)),
31
+ 'should return alertModalText from applicationInstanceConfData_1 fixtures': () =>
32
+ selectAlertModalText(stateFactory(applicationInstanceConfData_1)),
33
+ 'should return alertModalTitle from applicationInstanceConfData_1 fixtures': () =>
34
+ selectAlertModalTitle(stateFactory(applicationInstanceConfData_1)),
25
35
  'should return editMode from applicationInstanceConfData_1 fixtures': () =>
26
36
  selectEditMode(stateFactory(applicationInstanceConfData_1)),
27
37
  'should return appDefinition from applicationInstanceConfData_1 fixtures': () =>
@@ -30,6 +40,8 @@ const fixtures = {
30
40
  selectHosts(stateFactory(applicationInstanceConfData_1)),
31
41
  'should return columns from applicationInstanceConfData_1 fixtures': () =>
32
42
  selectColumns(stateFactory(applicationInstanceConfData_1)),
43
+ 'should return hiddenForemanParameterTypes from applicationInstanceConfData_1 fixtures': () =>
44
+ selectHiddenForemanParameterTypes(stateFactory(applicationInstanceConfData_1)),
33
45
  'should return services from applicationInstanceConfData_1 fixtures': () =>
34
46
  selectServices(stateFactory(applicationInstanceConfData_1)),
35
47
  'should return parametersData from applicationInstanceConfData_1 fixtures': () =>
@@ -165,6 +165,7 @@ exports[`ApplicationInstance should render application instance 1`] = `
165
165
  <Connect(ParameterSelection)
166
166
  data={Object {}}
167
167
  editModeCallback={[Function]}
168
+ hiddenParameterTypes={Array []}
168
169
  location="Default Location"
169
170
  organization="Default Organization"
170
171
  paramType="PARAMETER_SELECTION_PARAM_TYPE_FOREMAN"
@@ -2,6 +2,10 @@
2
2
 
3
3
  exports[`ApplicationInstanceSelectors should return ParamEditMode from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
4
4
 
5
+ exports[`ApplicationInstanceSelectors should return alertModalText from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
6
+
7
+ exports[`ApplicationInstanceSelectors should return alertModalTitle from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
8
+
5
9
  exports[`ApplicationInstanceSelectors should return ansibleVarsAll from applicationInstanceConfData_1 fixtures 1`] = `
6
10
  Array [
7
11
  Object {
@@ -117,6 +121,8 @@ Array [
117
121
 
118
122
  exports[`ApplicationInstanceSelectors should return editMode from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
119
123
 
124
+ exports[`ApplicationInstanceSelectors should return hiddenForemanParameterTypes from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
125
+
120
126
  exports[`ApplicationInstanceSelectors should return hosts from applicationInstanceConfData_1 fixtures 1`] = `
121
127
  Array [
122
128
  Object {
@@ -274,3 +280,5 @@ Array [
274
280
  },
275
281
  ]
276
282
  `;
283
+
284
+ exports[`ApplicationInstanceSelectors should return showAlertModal from applicationInstanceConfData_1 fixtures 1`] = `undefined`;
@@ -14,6 +14,7 @@ import {
14
14
  selectHosts,
15
15
  selectServices,
16
16
  selectColumns,
17
+ selectHiddenForemanParameterTypes,
17
18
  selectParametersData,
18
19
  selectAnsibleVarsAll,
19
20
  selectParamEditMode,
@@ -28,6 +29,7 @@ const mapStateToProps = state => ({
28
29
  hosts: selectHosts(state),
29
30
  services: selectServices(state),
30
31
  columns: selectColumns(state),
32
+ hiddenForemanParameterTypes: selectHiddenForemanParameterTypes(state),
31
33
  parametersData: selectParametersData(state),
32
34
  ansibleVarsAll: selectAnsibleVarsAll(state),
33
35
  paramEditMode: selectParamEditMode(state),
@@ -95,6 +95,7 @@ class ParameterSelection extends React.Component {
95
95
  organization,
96
96
  paramType,
97
97
  paramDataUrl,
98
+ hiddenParameterTypes,
98
99
  initParameterSelection,
99
100
  sortParameter,
100
101
  deleteParameter,
@@ -306,6 +307,7 @@ class ParameterSelection extends React.Component {
306
307
  paramType,
307
308
  paramDefinition,
308
309
  parameters,
310
+ hiddenParameterTypes,
309
311
  useDefaultValue,
310
312
  allowNameAdjustment,
311
313
  allowDescriptionAdjustment,
@@ -463,6 +465,7 @@ ParameterSelection.defaultProps = {
463
465
  paramData: {},
464
466
  parameters: [],
465
467
  columns: [],
468
+ hiddenParameterTypes: [],
466
469
  sortingColumns: {},
467
470
  editParamsRowIndex: [],
468
471
  editModeCallback: undefined,
@@ -481,6 +484,8 @@ ParameterSelection.propTypes = {
481
484
  editMode: PropTypes.bool.isRequired,
482
485
  loading: PropTypes.bool.isRequired,
483
486
  paramData: PropTypes.object.isRequired,
487
+ hiddenParameterTypes: PropTypes.array.isRequired,
488
+ allowedParameterTypes: PropTypes.object,
484
489
  parameterTypes: PropTypes.object,
485
490
  parameters: PropTypes.array,
486
491
  sortingColumns: PropTypes.object,
@@ -17,7 +17,7 @@ import {
17
17
  } from 'foremanReact/common/helpers';
18
18
 
19
19
  import {
20
- filterUsedParameterTypes,
20
+ filterParameterTypes,
21
21
  } from './ParameterSelectionHelper';
22
22
 
23
23
  import {
@@ -49,6 +49,7 @@ export const initParameterSelection = (
49
49
  paramType,
50
50
  paramDefinition,
51
51
  parameters,
52
+ hiddenParameterTypes,
52
53
  useDefaultValue,
53
54
  allowNameAdjustment,
54
55
  allowDescriptionAdjustment,
@@ -181,7 +182,14 @@ export const initParameterSelection = (
181
182
  initialState.parameters = parameters;
182
183
 
183
184
  if ((paramType == PARAMETER_SELECTION_PARAM_TYPE_FOREMAN) && (parameters)) {
184
- initialState.parameterTypes = filterUsedParameterTypes(PARAMETER_SELECTION_TYPES, parameters);
185
+ let pTypes = PARAMETER_SELECTION_TYPES;
186
+
187
+ // filter hidden parameters
188
+ hiddenParameterTypes.forEach(item => delete pTypes[item]);
189
+ initialState.allowedParameterTypes = pTypes;
190
+
191
+ // filter already used parameter types
192
+ initialState.parameterTypes = filterParameterTypes(pTypes, parameters);
185
193
  }
186
194
 
187
195
  initialState.paramType = paramType;
@@ -11,10 +11,14 @@ export const transformForemanData = (fdata) => {
11
11
  return (result);
12
12
  }
13
13
 
14
- export const filterUsedParameterTypes = (options, parameters) => {
14
+ export const filterParameterTypes = (options, parameters) => {
15
15
  const newOptions = cloneDeep(options);
16
+
16
17
  // hostparam can be used multiple times
17
18
  const alreadyUsed = parameters.map(item => item["type"]).filter(item => item != 'hostparam');
19
+
20
+ // remove already used items
18
21
  alreadyUsed.forEach(item => delete newOptions[item])
22
+
19
23
  return newOptions;
20
24
  }
@@ -7,7 +7,7 @@ import {
7
7
  } from 'lodash';
8
8
 
9
9
  import {
10
- filterUsedParameterTypes,
10
+ filterParameterTypes,
11
11
  } from './ParameterSelectionHelper';
12
12
 
13
13
  import * as sort from 'sortabular';
@@ -83,7 +83,7 @@ const parameterSelectionParameters = (state = initialState, action) => {
83
83
  const parameters = state.parameters.filter(v => v.id !== payload.rowData.id);
84
84
  return state.merge({
85
85
  parameters: parameters,
86
- parameterTypes: filterUsedParameterTypes(PARAMETER_SELECTION_TYPES, parameters),
86
+ parameterTypes: filterParameterTypes(state.allowedParameterTypes, parameters),
87
87
  })
88
88
  }
89
89
  case PARAMETER_SELECTION_EDIT_ACTIVATE: {
@@ -106,7 +106,7 @@ const parameterSelectionParameters = (state = initialState, action) => {
106
106
 
107
107
  return state.merge({
108
108
  editMode: false,
109
- parameterTypes: filterUsedParameterTypes(PARAMETER_SELECTION_TYPES, parameters),
109
+ parameterTypes: filterParameterTypes(state.allowedParameterTypes, parameters),
110
110
  parameters: parameters
111
111
  });
112
112
  }
@@ -3,6 +3,7 @@ const parameterState = state => state.foremanAcd.parameterSelectionParameters;
3
3
  export const selectLoading = state => parameterState(state).loading;
4
4
  export const selectEditMode = state => parameterState(state).editMode;
5
5
  export const selectParamData = state => parameterState(state).paramData;
6
+ export const selectAllowedParameterTypes = state => parameterState(state).allowedParameterTypes;
6
7
  export const selectParameterTypes = state => parameterState(state).parameterTypes;
7
8
  export const selectParameters = state => parameterState(state).parameters;
8
9
  export const selectSortingColumns = state => parameterState(state).sortingColumns;
@@ -215,6 +215,14 @@ export const parameterSelectionData_1 = {
215
215
  value: '1'
216
216
  }
217
217
  ],
218
+ allowedParameterTypes: [
219
+ 'domain',
220
+ 'hostparam',
221
+ 'ip',
222
+ 'ptable',
223
+ 'puppetenv',
224
+ 'password',
225
+ ],
218
226
  parameterTypes: {
219
227
  domain: 'Domain',
220
228
  hostparam: 'Host parameter',
@@ -4,12 +4,14 @@ import {
4
4
  selectLoading,
5
5
  selectEditMode,
6
6
  selectParamData,
7
+ selectAllowedParameterTypes,
7
8
  selectParameterTypes,
8
9
  selectParameters,
9
10
  selectSortingColumns,
10
11
  selectColumns,
11
12
  selectParamDefinition,
12
13
  selectHostgroupId,
14
+ selectEditParamsRowIndex,
13
15
  } from '../ParameterSelectionSelectors';
14
16
 
15
17
  import {
@@ -29,6 +31,8 @@ const fixtures = {
29
31
  selectEditMode(stateFactory(parameterSelectionData_1)),
30
32
  'should return paramData from parameterSelectionData_1 fixtures': () =>
31
33
  selectParamData(stateFactory(parameterSelectionData_1)),
34
+ 'should return allowedParameterTypes from parameterSelectionData_1 fixtures': () =>
35
+ selectAllowedParameterTypes(stateFactory(parameterSelectionData_1)),
32
36
  'should return parameterTypes from parameterSelectionData_1 fixtures': () =>
33
37
  selectParameterTypes(stateFactory(parameterSelectionData_1)),
34
38
  'should return parameters from parameterSelectionData_1 fixtures': () =>
@@ -41,6 +45,8 @@ const fixtures = {
41
45
  selectParamDefinition(stateFactory(parameterSelectionData_1)),
42
46
  'should return hostgroupId from parameterSelectionData_1 fixtures': () =>
43
47
  selectHostgroupId(stateFactory(parameterSelectionData_1)),
48
+ 'should return editParamsRowIndex from parameterSelectionData_1 fixtures': () =>
49
+ selectEditParamsRowIndex(stateFactory(parameterSelectionData_1)),
44
50
  };
45
51
 
46
52
  describe('ParameterSelectionSelectors', () =>
@@ -2,6 +2,14 @@
2
2
 
3
3
  exports[`ParameterSelectionReducer should activate edit parameter 1`] = `
4
4
  Object {
5
+ "allowedParameterTypes": Array [
6
+ "domain",
7
+ "hostparam",
8
+ "ip",
9
+ "ptable",
10
+ "puppetenv",
11
+ "password",
12
+ ],
5
13
  "columns": Array [
6
14
  Object {
7
15
  "cell": Object {
@@ -240,6 +248,14 @@ Object {
240
248
 
241
249
  exports[`ParameterSelectionReducer should add a parameter 1`] = `
242
250
  Object {
251
+ "allowedParameterTypes": Array [
252
+ "domain",
253
+ "hostparam",
254
+ "ip",
255
+ "ptable",
256
+ "puppetenv",
257
+ "password",
258
+ ],
243
259
  "columns": Array [
244
260
  Object {
245
261
  "cell": Object {
@@ -490,6 +506,14 @@ Object {
490
506
 
491
507
  exports[`ParameterSelectionReducer should cancel edit parameter 1`] = `
492
508
  Object {
509
+ "allowedParameterTypes": Array [
510
+ "domain",
511
+ "hostparam",
512
+ "ip",
513
+ "ptable",
514
+ "puppetenv",
515
+ "password",
516
+ ],
493
517
  "columns": Array [
494
518
  Object {
495
519
  "cell": Object {
@@ -719,6 +743,14 @@ Object {
719
743
 
720
744
  exports[`ParameterSelectionReducer should change edit parameter 1`] = `
721
745
  Object {
746
+ "allowedParameterTypes": Array [
747
+ "domain",
748
+ "hostparam",
749
+ "ip",
750
+ "ptable",
751
+ "puppetenv",
752
+ "password",
753
+ ],
722
754
  "columns": Array [
723
755
  Object {
724
756
  "cell": Object {
@@ -957,6 +989,14 @@ Object {
957
989
 
958
990
  exports[`ParameterSelectionReducer should confirm edit parameter 1`] = `
959
991
  Object {
992
+ "allowedParameterTypes": Array [
993
+ "domain",
994
+ "hostparam",
995
+ "ip",
996
+ "ptable",
997
+ "puppetenv",
998
+ "password",
999
+ ],
960
1000
  "columns": Array [
961
1001
  Object {
962
1002
  "cell": Object {
@@ -1149,14 +1189,14 @@ Object {
1149
1189
  "id": 1,
1150
1190
  "name": "web",
1151
1191
  },
1152
- "parameterTypes": Object {
1153
- "domain": "Domain",
1154
- "hostparam": "Host parameter",
1155
- "ip": "IP",
1156
- "password": "Root password",
1157
- "ptable": "Partition table",
1158
- "puppetenv": "Puppet environment",
1159
- },
1192
+ "parameterTypes": Array [
1193
+ "domain",
1194
+ "hostparam",
1195
+ "ip",
1196
+ "ptable",
1197
+ "puppetenv",
1198
+ "password",
1199
+ ],
1160
1200
  "parameters": Array [
1161
1201
  Object {
1162
1202
  "description": "",
@@ -1186,6 +1226,14 @@ Object {
1186
1226
 
1187
1227
  exports[`ParameterSelectionReducer should delete a parameter 1`] = `
1188
1228
  Object {
1229
+ "allowedParameterTypes": Array [
1230
+ "domain",
1231
+ "hostparam",
1232
+ "ip",
1233
+ "ptable",
1234
+ "puppetenv",
1235
+ "password",
1236
+ ],
1189
1237
  "columns": Array [
1190
1238
  Object {
1191
1239
  "cell": Object {
@@ -1378,15 +1426,14 @@ Object {
1378
1426
  "id": 1,
1379
1427
  "name": "web",
1380
1428
  },
1381
- "parameterTypes": Object {
1382
- "domain": "Domain",
1383
- "hostparam": "Host parameter",
1384
- "ip": "IP",
1385
- "lifecycleenv": "Lifecycle environment",
1386
- "password": "Root password",
1387
- "ptable": "Partition table",
1388
- "puppetenv": "Puppet environment",
1389
- },
1429
+ "parameterTypes": Array [
1430
+ "domain",
1431
+ "hostparam",
1432
+ "ip",
1433
+ "ptable",
1434
+ "puppetenv",
1435
+ "password",
1436
+ ],
1390
1437
  "parameters": Array [
1391
1438
  Object {
1392
1439
  "description": "",
@@ -1408,6 +1455,14 @@ Object {
1408
1455
 
1409
1456
  exports[`ParameterSelectionReducer should initialize component 1`] = `
1410
1457
  Object {
1458
+ "allowedParameterTypes": Array [
1459
+ "domain",
1460
+ "hostparam",
1461
+ "ip",
1462
+ "ptable",
1463
+ "puppetenv",
1464
+ "password",
1465
+ ],
1411
1466
  "columns": Array [
1412
1467
  Object {
1413
1468
  "cell": Object {
@@ -1645,6 +1700,14 @@ Object {
1645
1700
 
1646
1701
  exports[`ParameterSelectionReducer should load param data be erroneous 1`] = `
1647
1702
  Object {
1703
+ "allowedParameterTypes": Array [
1704
+ "domain",
1705
+ "hostparam",
1706
+ "ip",
1707
+ "ptable",
1708
+ "puppetenv",
1709
+ "password",
1710
+ ],
1648
1711
  "columns": Array [
1649
1712
  Object {
1650
1713
  "cell": Object {
@@ -1870,6 +1933,14 @@ Object {
1870
1933
 
1871
1934
  exports[`ParameterSelectionReducer should load param data be successful 1`] = `
1872
1935
  Object {
1936
+ "allowedParameterTypes": Array [
1937
+ "domain",
1938
+ "hostparam",
1939
+ "ip",
1940
+ "ptable",
1941
+ "puppetenv",
1942
+ "password",
1943
+ ],
1873
1944
  "columns": Array [
1874
1945
  Object {
1875
1946
  "cell": Object {
@@ -2099,6 +2170,14 @@ Object {
2099
2170
 
2100
2171
  exports[`ParameterSelectionReducer should lock a parameter 1`] = `
2101
2172
  Object {
2173
+ "allowedParameterTypes": Array [
2174
+ "domain",
2175
+ "hostparam",
2176
+ "ip",
2177
+ "ptable",
2178
+ "puppetenv",
2179
+ "password",
2180
+ ],
2102
2181
  "columns": Array [
2103
2182
  Object {
2104
2183
  "cell": Object {
@@ -2328,6 +2407,14 @@ Object {
2328
2407
 
2329
2408
  exports[`ParameterSelectionReducer should request load param data 1`] = `
2330
2409
  Object {
2410
+ "allowedParameterTypes": Array [
2411
+ "domain",
2412
+ "hostparam",
2413
+ "ip",
2414
+ "ptable",
2415
+ "puppetenv",
2416
+ "password",
2417
+ ],
2331
2418
  "columns": Array [
2332
2419
  Object {
2333
2420
  "cell": Object {
@@ -2568,6 +2655,14 @@ Object {
2568
2655
 
2569
2656
  exports[`ParameterSelectionReducer should sort parameter 1`] = `
2570
2657
  Object {
2658
+ "allowedParameterTypes": Array [
2659
+ "domain",
2660
+ "hostparam",
2661
+ "ip",
2662
+ "ptable",
2663
+ "puppetenv",
2664
+ "password",
2665
+ ],
2571
2666
  "columns": Array [
2572
2667
  Object {
2573
2668
  "cell": Object {
@@ -8,6 +8,17 @@ Object {
8
8
  }
9
9
  `;
10
10
 
11
+ exports[`ParameterSelectionSelectors should return allowedParameterTypes from parameterSelectionData_1 fixtures 1`] = `
12
+ Array [
13
+ "domain",
14
+ "hostparam",
15
+ "ip",
16
+ "ptable",
17
+ "puppetenv",
18
+ "password",
19
+ ]
20
+ `;
21
+
11
22
  exports[`ParameterSelectionSelectors should return columns from parameterSelectionData_1 fixtures 1`] = `
12
23
  Array [
13
24
  Object {
@@ -146,6 +157,8 @@ Array [
146
157
 
147
158
  exports[`ParameterSelectionSelectors should return editMode from parameterSelectionData_1 fixtures 1`] = `false`;
148
159
 
160
+ exports[`ParameterSelectionSelectors should return editParamsRowIndex from parameterSelectionData_1 fixtures 1`] = `undefined`;
161
+
149
162
  exports[`ParameterSelectionSelectors should return hostgroupId from parameterSelectionData_1 fixtures 1`] = `1`;
150
163
 
151
164
  exports[`ParameterSelectionSelectors should return loading from parameterSelectionData_1 fixtures 1`] = `false`;
@@ -9,6 +9,7 @@ import {
9
9
  selectLoading,
10
10
  selectEditMode,
11
11
  selectParamData,
12
+ selectAllowedParameterTypes,
12
13
  selectParameterTypes,
13
14
  selectParameters,
14
15
  selectSortingColumns,
@@ -21,6 +22,7 @@ const mapStateToProps = state => ({
21
22
  loading: selectLoading(state),
22
23
  editMode: selectEditMode(state),
23
24
  paramData: selectParamData(state),
25
+ allowedParameterTypes: selectAllowedParameterTypes(state),
24
26
  parameterTypes: selectParameterTypes(state),
25
27
  parameters: selectParameters(state),
26
28
  sortingColumns: selectSortingColumns(state),
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { API, actionTypeGenerator } from 'foremanReact/redux/API';
3
3
  import { sprintf, translate as __ } from 'foremanReact/common/I18n';
4
- import { addToast } from 'foremanReact/redux/actions/toasts';
4
+ import { addToast } from 'foremanReact/components/ToastsList';
5
5
 
6
6
  import {
7
7
  SYNC_GIT_REPO_INIT,
data/webpack/helper.js CHANGED
@@ -31,9 +31,24 @@ function EasyHeaderFormatter(value, { column }) {
31
31
  );
32
32
  }
33
33
 
34
+ function supportedPluginsToHiddenParameterTypes(supportedPlugins) {
35
+ let hiddenParameterTypes = [];
36
+
37
+ if (supportedPlugins['puppet'] == false) {
38
+ hiddenParameterTypes.push("puppetenv");
39
+ }
40
+
41
+ if (supportedPlugins['katello'] == false) {
42
+ hiddenParameterTypes.push("lifecycleenv");
43
+ }
44
+
45
+ return hiddenParameterTypes;
46
+ }
47
+
34
48
  export {
35
49
  arrayToObject,
36
50
  arrayToObjectObj,
37
51
  shortHostname,
38
- EasyHeaderFormatter
52
+ EasyHeaderFormatter,
53
+ supportedPluginsToHiddenParameterTypes
39
54
  };
@@ -2,6 +2,7 @@ import {
2
2
  arrayToObject,
3
3
  arrayToObjectObj,
4
4
  EasyHeaderFormatter,
5
+ supportedPluginsToHiddenParameterTypes,
5
6
  } from './helper';
6
7
 
7
8
  describe('helper', () => {
@@ -30,8 +31,26 @@ describe('helper', () => {
30
31
  );
31
32
  });
32
33
 
33
- it('creates a object from an array', () => {
34
+ it('formats a nice, easy header', () => {
34
35
  expect(EasyHeaderFormatter('MyValue', { column: { header: { label: 'TheLabel', props: { p1: '1' } } } })).toMatchSnapshot();
35
36
  });
37
+
38
+ it('creates hidden parameter definition by supported plugins 1', () => {
39
+ expect(supportedPluginsToHiddenParameterTypes({ puppet: false})).toEqual(
40
+ ['puppetenv']
41
+ );
42
+ });
43
+
44
+ it('creates hidden parameter definition by supported plugins 2', () => {
45
+ expect(supportedPluginsToHiddenParameterTypes({ puppet: true})).toEqual(
46
+ []
47
+ );
48
+ });
49
+
50
+ it('creates hidden parameter definition by supported plugins 3', () => {
51
+ expect(supportedPluginsToHiddenParameterTypes({})).toEqual(
52
+ []
53
+ );
54
+ });
36
55
  });
37
56
 
@@ -1,5 +1,3 @@
1
- import 'babel-polyfill';
2
-
3
1
  import { configure } from 'enzyme';
4
2
  import Adapter from 'enzyme-adapter-react-16';
5
3
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_acd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-05 00:00:00.000000000 Z
11
+ date: 2022-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop