foreman_acd 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
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