foreman_acd 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_acd/ansible_playbooks_controller.rb +122 -0
  3. data/app/controllers/foreman_acd/api/v2/ansible_playbooks_controller.rb +54 -0
  4. data/app/controllers/foreman_acd/api/v2/app_instances_controller.rb +54 -0
  5. data/app/controllers/foreman_acd/api/v2/app_playbooks_controller.rb +0 -0
  6. data/app/controllers/foreman_acd/app_definitions_controller.rb +7 -4
  7. data/app/controllers/foreman_acd/app_instances_controller.rb +33 -126
  8. data/app/controllers/foreman_acd/concerns/ansible_playbook_parameters.rb +23 -0
  9. data/app/controllers/foreman_acd/concerns/app_definition_parameters.rb +1 -1
  10. data/app/controllers/foreman_acd/concerns/app_instance_parameters.rb +1 -1
  11. data/app/controllers/ui_acd_controller.rb +11 -3
  12. data/app/models/foreman_acd/ansible_playbook.rb +50 -0
  13. data/app/models/foreman_acd/app_definition.rb +2 -0
  14. data/app/models/foreman_acd/app_instance.rb +7 -0
  15. data/app/services/foreman_acd/app_configurator.rb +70 -0
  16. data/app/services/foreman_acd/app_deployer.rb +143 -0
  17. data/app/services/foreman_acd/inventory_creator.rb +67 -0
  18. data/app/views/foreman_acd/ansible_playbooks/_form.html.erb +21 -0
  19. data/app/views/foreman_acd/ansible_playbooks/edit.html.erb +3 -0
  20. data/app/views/foreman_acd/ansible_playbooks/index.html.erb +30 -0
  21. data/app/views/foreman_acd/ansible_playbooks/new.html.erb +3 -0
  22. data/app/views/foreman_acd/api/v2/ansible_playbooks/base.json.rabl +3 -0
  23. data/app/views/foreman_acd/api/v2/ansible_playbooks/index.json.rabl +3 -0
  24. data/app/views/foreman_acd/api/v2/ansible_playbooks/show.json.rabl +3 -0
  25. data/app/views/foreman_acd/api/v2/app_definitions/base.json.rabl +3 -0
  26. data/app/views/foreman_acd/api/v2/app_definitions/index.json.rabl +3 -0
  27. data/app/views/foreman_acd/api/v2/app_definitions/show.json.rabl +3 -0
  28. data/app/views/foreman_acd/api/v2/app_instances/base.json.rabl +3 -0
  29. data/app/views/foreman_acd/api/v2/app_instances/index.json.rabl +3 -0
  30. data/app/views/foreman_acd/api/v2/app_instances/show.json.rabl +3 -0
  31. data/app/views/foreman_acd/app_definitions/_form.html.erb +24 -10
  32. data/app/views/foreman_acd/app_definitions/edit.html.erb +5 -0
  33. data/app/views/foreman_acd/app_instances/_form.html.erb +7 -5
  34. data/app/views/foreman_acd/app_instances/index.html.erb +5 -1
  35. data/app/views/templates/job/run_acd_ansible_playbook.erb +49 -0
  36. data/app/views/ui_acd/ansible_data.json.rabl +6 -0
  37. data/app/views/ui_acd/app.json.rabl +6 -2
  38. data/app/views/ui_acd/app_definition.json.rabl +1 -1
  39. data/app/views/ui_acd/{fdata.json.rabl → foreman_data.json.rabl} +1 -1
  40. data/config/routes.rb +24 -1
  41. data/db/migrate/20200916091018_create_ansible_playbooks.rb +20 -0
  42. data/db/migrate/20200917120220_add_ansible_playbook_id.rb +14 -0
  43. data/db/migrate/20201016002819_add_ansible_vars_all_to_app_definitions.rb +5 -0
  44. data/db/migrate/20201016104338_add_ansible_vars_all_to_app_instances.rb +5 -0
  45. data/db/seeds.d/75-job_templates.rb +8 -0
  46. data/lib/foreman_acd/engine.rb +3 -0
  47. data/lib/foreman_acd/plugin.rb +53 -2
  48. data/lib/foreman_acd/version.rb +1 -1
  49. data/package.json +1 -1
  50. data/webpack/components/ApplicationDefinition/ApplicationDefinition.js +137 -22
  51. data/webpack/components/ApplicationDefinition/ApplicationDefinitionActions.js +95 -11
  52. data/webpack/components/ApplicationDefinition/ApplicationDefinitionConstants.js +7 -2
  53. data/webpack/components/ApplicationDefinition/ApplicationDefinitionHelper.js +26 -0
  54. data/webpack/components/ApplicationDefinition/ApplicationDefinitionReducer.js +117 -21
  55. data/webpack/components/ApplicationDefinition/ApplicationDefinitionSelectors.js +2 -0
  56. data/webpack/components/ApplicationDefinition/components/AnsiblePlaybookSelector.js +49 -0
  57. data/webpack/components/ApplicationDefinition/index.js +4 -0
  58. data/webpack/components/ApplicationInstance/ApplicationInstance.js +92 -22
  59. data/webpack/components/ApplicationInstance/ApplicationInstanceActions.js +37 -8
  60. data/webpack/components/ApplicationInstance/ApplicationInstanceConstants.js +4 -2
  61. data/webpack/components/ApplicationInstance/ApplicationInstanceReducer.js +98 -26
  62. data/webpack/components/ApplicationInstance/ApplicationInstanceSelectors.js +2 -1
  63. data/webpack/components/ApplicationInstance/index.js +2 -0
  64. data/webpack/components/ParameterSelection/ParameterSelection.js +46 -37
  65. data/webpack/components/ParameterSelection/ParameterSelectionActions.js +49 -52
  66. data/webpack/components/ParameterSelection/ParameterSelectionConstants.js +5 -3
  67. data/webpack/components/ParameterSelection/ParameterSelectionHelper.js +0 -32
  68. data/webpack/components/ParameterSelection/ParameterSelectionReducer.js +32 -16
  69. data/webpack/components/ParameterSelection/ParameterSelectionSelectors.js +2 -2
  70. data/webpack/components/ParameterSelection/index.js +4 -4
  71. data/webpack/components/common/DeleteTableEntry.js +1 -1
  72. data/webpack/reducer.js +14 -11
  73. metadata +48 -3
@@ -16,12 +16,6 @@ import {
16
16
  } from 'foremanReact/common/helpers';
17
17
 
18
18
  import {
19
- isNewDefinition,
20
- isEditDefinition,
21
- isDefinition,
22
- isNewInstance,
23
- isEditInstance,
24
- isInstance,
25
19
  filterUsedParameterTypes,
26
20
  } from './ParameterSelectionHelper';
27
21
 
@@ -35,15 +29,20 @@ import {
35
29
  PARAMETER_SELECTION_EDIT_CHANGE,
36
30
  PARAMETER_SELECTION_EDIT_CANCEL,
37
31
  PARAMETER_SELECTION_SORT,
38
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST,
39
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS,
40
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE,
32
+ PARAMETER_SELECTION_PARAM_TYPE_FOREMAN,
33
+ PARAMETER_SELECTION_PARAM_TYPE_ANSIBLE,
34
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST,
35
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS,
36
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE,
41
37
  } from './ParameterSelectionConstants';
42
38
 
43
39
  export const initParameterSelection = (
44
- mode,
45
- serviceDefinition,
40
+ paramType,
41
+ paramDefinition,
46
42
  parameters,
43
+ useDefaultValue,
44
+ allowNameAdjustment,
45
+ allowDescriptionAdjustment,
47
46
  sortingFormatter,
48
47
  sortableTransform,
49
48
  inlineEditFormatter,
@@ -57,20 +56,25 @@ export const initParameterSelection = (
57
56
  position: 0
58
57
  }
59
58
  };
60
- initialState.serviceDefinition = serviceDefinition;
59
+ initialState.paramDefinition = paramDefinition;
61
60
 
62
61
  let valueLabel = 'Value';
63
- if (isDefinition(mode)) {
62
+ if (useDefaultValue) {
64
63
  valueLabel = 'Default value';
65
64
  }
66
65
 
67
- initialState.columns = [
68
- {
66
+ initialState.columns = []
67
+ const addToColumns = (obj, idx) => {
68
+ obj.header.props.index = idx;
69
+ initialState.columns.push(obj);
70
+ }
71
+
72
+ let idx = 0;
73
+ addToColumns( {
69
74
  property: 'name',
70
75
  header: {
71
76
  label: 'Name',
72
77
  props: {
73
- index: 0,
74
78
  sort: true,
75
79
  style: {
76
80
  width: '20%'
@@ -81,15 +85,15 @@ export const initParameterSelection = (
81
85
  customFormatters: [sortableHeaderCellFormatter]
82
86
  },
83
87
  cell: {
84
- formatters: [isDefinition(mode) ? inlineEditFormatter : tableCellFormatter]
88
+ formatters: [allowNameAdjustment ? inlineEditFormatter : tableCellFormatter]
85
89
  }
86
- },
87
- {
90
+ }, idx++);
91
+
92
+ addToColumns( {
88
93
  property: 'description',
89
94
  header: {
90
95
  label: 'Description',
91
96
  props: {
92
- index: 1,
93
97
  sort: true,
94
98
  style: {
95
99
  width: '20%'
@@ -103,15 +107,16 @@ export const initParameterSelection = (
103
107
  props: {
104
108
  index: 1
105
109
  },
106
- formatters: [isDefinition(mode) ? inlineEditFormatter : tableCellFormatter]
110
+ formatters: [allowDescriptionAdjustment ? inlineEditFormatter : tableCellFormatter]
107
111
  }
108
- },
109
- {
112
+ }, idx++);
113
+
114
+ if (paramType == PARAMETER_SELECTION_PARAM_TYPE_FOREMAN) {
115
+ addToColumns( {
110
116
  property: 'type',
111
117
  header: {
112
118
  label: 'Type',
113
119
  props: {
114
- index: 2,
115
120
  sort: true,
116
121
  style: {
117
122
  width: '20%'
@@ -126,13 +131,14 @@ export const initParameterSelection = (
126
131
  // the well formatted type name is shown
127
132
  formatters: [inlineEditFormatter]
128
133
  }
129
- },
130
- {
134
+ }, idx++);
135
+ }
136
+
137
+ addToColumns( {
131
138
  property: 'value',
132
139
  header: {
133
140
  label: valueLabel,
134
141
  props: {
135
- index: 3,
136
142
  sort: true,
137
143
  style: {
138
144
  width: '20%'
@@ -145,13 +151,13 @@ export const initParameterSelection = (
145
151
  cell: {
146
152
  formatters: [inlineEditFormatter]
147
153
  }
148
- },
149
- {
154
+ }, idx++);
155
+
156
+ addToColumns( {
150
157
  property: 'actions',
151
158
  header: {
152
159
  label: 'Actions',
153
160
  props: {
154
- index: 4,
155
161
  style: {
156
162
  width: '20%'
157
163
  }
@@ -161,21 +167,11 @@ export const initParameterSelection = (
161
167
  cell: {
162
168
  formatters: [inlineEditButtonsFormatter]
163
169
  }
164
- }
165
- ];
170
+ }, idx++);
166
171
 
167
- if (isNewDefinition(mode)) {
168
- initialState.parameters = [];
169
- } else if ((isEditDefinition(mode)) || (isInstance(mode))) {
170
- initialState.parameters = parameters;
171
- initialState.hostgroupId = serviceDefinition.hostgroup_id;
172
- } else {
173
- // FIXME: should never ever happen
174
- }
172
+ initialState.parameters = parameters;
175
173
 
176
- if (isNewDefinition(mode)) {
177
- initialState.parameterTypes = PARAMETER_SELECTION_TYPES;
178
- } else {
174
+ if ((paramType == PARAMETER_SELECTION_PARAM_TYPE_FOREMAN) && (parameters)) {
179
175
  initialState.parameterTypes = filterUsedParameterTypes(PARAMETER_SELECTION_TYPES, parameters);
180
176
  }
181
177
 
@@ -244,22 +240,23 @@ export const sortParameter = (selectedColumn, defaultSortingOrder) => ({
244
240
  },
245
241
  });
246
242
 
247
- export const loadForemanData = (
248
- hostgroupId,
249
- additionalData,
250
- ) => dispatch => {
251
- dispatch({ type: PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST, payload: { clearParameters: additionalData.clearParameters } });
243
+ export const loadParamData = (attr) => dispatch => {
244
+ dispatch( { type: PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST, payload: { dataType: attr.dataType, clearParameters: attr.clearParameters } });
245
+
246
+ let realUrl = attr.url.replace("__id__", attr.paramDefinition.dataId);
252
247
 
253
- const realUrl = additionalData.url.replace("__id__", hostgroupId);
248
+ if (attr.paramDefinition.hasOwnProperty('dataSubId')) {
249
+ realUrl = realUrl.replace("__subid__", attr.paramDefinition.dataSubId);
250
+ }
254
251
 
255
252
  return api
256
253
  .get(realUrl, {}, {})
257
254
  .then(({ data }) =>
258
255
  dispatch({
259
- type: PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS,
260
- payload: data,
256
+ type: PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS,
257
+ payload: { ...data, dataType: attr.dataType }
261
258
  })
262
259
  )
263
- .catch(error => dispatch(errorHandler(PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE, error)));
260
+ .catch(error => dispatch(errorHandler(PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE, error)));
264
261
  };
265
262
 
@@ -6,9 +6,11 @@ export const PARAMETER_SELECTION_EDIT_CONFIRM = 'PARAMETER_SELECTION_EDIT_CONFIR
6
6
  export const PARAMETER_SELECTION_EDIT_CHANGE = 'PARAMETER_SELECTION_EDIT_CHANGE';
7
7
  export const PARAMETER_SELECTION_EDIT_CANCEL = 'PARAMETER_SELECTION_EDIT_CANCEL';
8
8
  export const PARAMETER_SELECTION_SORT = 'PARAMETER_SELECTION_SORT';
9
- export const PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST = 'PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST';
10
- export const PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS = 'PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS';
11
- export const PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE = 'PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE';
9
+ export const PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST = 'PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST';
10
+ export const PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS = 'PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS';
11
+ export const PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE = 'PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE';
12
+ export const PARAMETER_SELECTION_PARAM_TYPE_FOREMAN = 'PARAMETER_SELECTION_PARAM_TYPE_FOREMAN';
13
+ export const PARAMETER_SELECTION_PARAM_TYPE_ANSIBLE = 'PARAMETER_SELECTION_PARAM_TYPE_ANSIBLE';
12
14
 
13
15
  // Make sure the object is sorted by value
14
16
  // (Compute Profile -> Partition table -> Root password)
@@ -2,38 +2,6 @@ import {
2
2
  cloneDeep,
3
3
  } from 'lodash';
4
4
 
5
- export const isNewDefinition = (mode) => {
6
- if (mode == "newDefinition")
7
- return true;
8
- return false;
9
- }
10
-
11
- export const isEditDefinition = (mode) => {
12
- if (mode == "editDefinition")
13
- return true;
14
- return false;
15
- }
16
-
17
- export const isDefinition = (mode) => {
18
- return (isNewDefinition(mode) || isEditDefinition(mode))
19
- }
20
-
21
- export const isNewInstance = (mode) => {
22
- if (mode == "newInstance")
23
- return true;
24
- return false;
25
- }
26
-
27
- export const isEditInstance = (mode) => {
28
- if (mode == "editInstance")
29
- return true;
30
- return false;
31
- }
32
-
33
- export const isInstance = (mode) => {
34
- return (isNewInstance(mode) || isEditInstance(mode))
35
- }
36
-
37
5
  export const transformForemanData = (fdata) => {
38
6
  if (fdata === undefined) {
39
7
  return "";
@@ -22,9 +22,11 @@ import {
22
22
  PARAMETER_SELECTION_EDIT_CHANGE,
23
23
  PARAMETER_SELECTION_EDIT_CANCEL,
24
24
  PARAMETER_SELECTION_SORT,
25
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST,
26
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS,
27
- PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE,
25
+ PARAMETER_SELECTION_PARAM_TYPE_FOREMAN,
26
+ PARAMETER_SELECTION_PARAM_TYPE_ANSIBLE,
27
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST,
28
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS,
29
+ PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE,
28
30
  } from './ParameterSelectionConstants';
29
31
 
30
32
  import {
@@ -127,18 +129,26 @@ const parameterSelectionParameters = (state = initialState, action) => {
127
129
  })
128
130
  );
129
131
  }
130
- case PARAMETER_SELECTION_LOAD_FOREMAN_DATA_FAILURE: {
132
+ case PARAMETER_SELECTION_LOAD_PARAM_DATA_FAILURE: {
131
133
  return state.merge({
132
134
  error: payload.error,
133
135
  loading: false
134
136
  });
135
137
  }
136
- case PARAMETER_SELECTION_LOAD_FOREMAN_DATA_REQUEST: {
137
- const newState = {
138
- foremanData: {},
139
- hostgroupId: -1,
140
- loading: true
141
- };
138
+ case PARAMETER_SELECTION_LOAD_PARAM_DATA_REQUEST: {
139
+ let newState = {};
140
+
141
+ if (payload.dataType == PARAMETER_SELECTION_PARAM_TYPE_FOREMAN) {
142
+ newState = {
143
+ paramData: {},
144
+ hostgroupId: -1,
145
+ loading: true
146
+ };
147
+ } else if (payload.dataType == PARAMETER_SELECTION_PARAM_TYPE_ANSIBLE) {
148
+ newState = {
149
+ loading: true
150
+ };
151
+ }
142
152
 
143
153
  if (payload.clearParameters === true) {
144
154
  Object.assign(newState, { parameters: [] });
@@ -146,12 +156,18 @@ const parameterSelectionParameters = (state = initialState, action) => {
146
156
 
147
157
  return state.merge(newState);
148
158
  }
149
- case PARAMETER_SELECTION_LOAD_FOREMAN_DATA_SUCCESS: {
150
- return state.merge({
151
- loading: false,
152
- foremanData: payload,
153
- hostgroupId: payload.hostgroup_id,
154
- });
159
+ case PARAMETER_SELECTION_LOAD_PARAM_DATA_SUCCESS: {
160
+ let newState = {};
161
+
162
+ if (payload.dataType == PARAMETER_SELECTION_PARAM_TYPE_FOREMAN) {
163
+ newState = {
164
+ loading: false,
165
+ paramData: payload,
166
+ hostgroupId: payload.hostgroup_id,
167
+ };
168
+ }
169
+
170
+ return state.merge(newState);
155
171
  }
156
172
  case APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_CLOSE: {
157
173
  const parameters = cloneDeep(state.parameters);
@@ -2,10 +2,10 @@ const parameterState = state => state.foremanAcd.parameterSelectionParameters;
2
2
 
3
3
  export const selectLoading = state => parameterState(state).loading;
4
4
  export const selectEditMode = state => parameterState(state).editMode;
5
- export const selectForemanData = state => parameterState(state).foremanData;
5
+ export const selectParamData = state => parameterState(state).paramData;
6
6
  export const selectParameterTypes = state => parameterState(state).parameterTypes;
7
7
  export const selectParameters = state => parameterState(state).parameters;
8
8
  export const selectSortingColumns = state => parameterState(state).sortingColumns;
9
9
  export const selectColumns = state => parameterState(state).columns;
10
- export const selectServiceDefinition = state => parameterState(state).serviceDefinition;
10
+ export const selectParamDefinition = state => parameterState(state).paramDefinition;
11
11
  export const selectHostgroupId = state => parameterState(state).hostgroupId;
@@ -8,23 +8,23 @@ import * as ParameterSelectionActions from './ParameterSelectionActions';
8
8
  import {
9
9
  selectLoading,
10
10
  selectEditMode,
11
- selectForemanData,
11
+ selectParamData,
12
12
  selectParameterTypes,
13
13
  selectParameters,
14
14
  selectSortingColumns,
15
15
  selectColumns,
16
- selectServiceDefinition,
16
+ selectParamDefinition,
17
17
  } from './ParameterSelectionSelectors';
18
18
 
19
19
  const mapStateToProps = state => ({
20
20
  loading: selectLoading(state),
21
21
  editMode: selectEditMode(state),
22
- foremanData: selectForemanData(state),
22
+ paramData: selectParamData(state),
23
23
  parameterTypes: selectParameterTypes(state),
24
24
  parameters: selectParameters(state),
25
25
  sortingColumns: selectSortingColumns(state),
26
26
  columns: selectColumns(state),
27
- serviceDefinition: selectServiceDefinition(state),
27
+ paramDefinition: selectParamDefinition(state),
28
28
  });
29
29
 
30
30
  const mapDispatchToProps = dispatch =>
@@ -23,7 +23,7 @@ const DeleteTableEntry = ({
23
23
  disabled={disabled}
24
24
  onClick={() => window.confirm("Are you sure you wish to delete this item?") && onDeleteTableEntry(additionalData) }
25
25
  >
26
- <Icon type="pf" name="delete" />
26
+ <Icon type="pf" name="delete" title="delete entry" />
27
27
  </Button>
28
28
  </span>
29
29
  );
@@ -1,9 +1,4 @@
1
1
  import { combineReducers } from 'redux';
2
- import {
3
- cloneDeep,
4
- findIndex,
5
- findLastIndex,
6
- } from 'lodash';
7
2
 
8
3
  import parameterSelectionParameters from './components/ParameterSelection/ParameterSelectionReducer';
9
4
  import applicationDefinitionConf from './components/ApplicationDefinition/ApplicationDefinitionReducer';
@@ -11,11 +6,13 @@ import applicationInstanceConf from './components/ApplicationInstance/Applicatio
11
6
  import applicationInstanceReport from './components/ApplicationInstanceReport/ApplicationInstanceReportReducer';
12
7
 
13
8
  import {
14
- APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_CLOSE,
9
+ APPLICATION_DEFINITION_FOREMAN_PARAMETER_SELECTION_MODAL_CLOSE,
10
+ APPLICATION_DEFINITION_ANSIBLE_PARAMETER_SELECTION_MODAL_CLOSE,
15
11
  } from './components/ApplicationDefinition/ApplicationDefinitionConstants';
16
12
 
17
13
  import {
18
- APPLICATION_INSTANCE_PARAMETER_SELECTION_MODAL_CLOSE,
14
+ APPLICATION_INSTANCE_FOREMAN_PARAMETER_SELECTION_MODAL_CLOSE,
15
+ APPLICATION_INSTANCE_ANSIBLE_PARAMETER_SELECTION_MODAL_CLOSE,
19
16
  } from './components/ApplicationInstance/ApplicationInstanceConstants';
20
17
 
21
18
  const rootReducer = (state = {}, action) => {
@@ -23,13 +20,19 @@ const rootReducer = (state = {}, action) => {
23
20
  const param_state = parameterSelectionParameters(state.parameterSelectionParameters, action);
24
21
  const app_ins_report_state = applicationInstanceReport(state.applicationInstanceReport, action);
25
22
 
26
- if (action.type == APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_CLOSE) {
27
- action.payload.serviceParameterSelection = param_state.parameters;
23
+ if (action.type == APPLICATION_DEFINITION_FOREMAN_PARAMETER_SELECTION_MODAL_CLOSE) {
24
+ action.payload.parameterSelection = param_state.parameters;
25
+ }
26
+ if (action.type == APPLICATION_DEFINITION_ANSIBLE_PARAMETER_SELECTION_MODAL_CLOSE) {
27
+ action.payload.parameterSelection = param_state.parameters;
28
28
  }
29
29
  const app_def_state = applicationDefinitionConf(state.applicationDefinitionConf, action);
30
30
 
31
- if (action.type == APPLICATION_INSTANCE_PARAMETER_SELECTION_MODAL_CLOSE) {
32
- action.payload.hostParameterSelection = param_state.parameters;
31
+ if (action.type == APPLICATION_INSTANCE_FOREMAN_PARAMETER_SELECTION_MODAL_CLOSE) {
32
+ action.payload.parameterSelection = param_state.parameters;
33
+ }
34
+ if (action.type == APPLICATION_INSTANCE_ANSIBLE_PARAMETER_SELECTION_MODAL_CLOSE) {
35
+ action.payload.parameterSelection = param_state.parameters;
33
36
  }
34
37
  const app_ins_state = applicationInstanceConf(state.applicationInstanceConf, action);
35
38
 
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.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-26 00:00:00.000000000 Z
11
+ date: 2020-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.80.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: foreman_remote_execution
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.3.0
27
41
  description: Foreman plugin to provide application centric deployment and self service
28
42
  portal
29
43
  email:
@@ -36,16 +50,38 @@ files:
36
50
  - README.md
37
51
  - Rakefile
38
52
  - app/assets/javascripts/foreman_acd/acd_dummy.js
53
+ - app/controllers/foreman_acd/ansible_playbooks_controller.rb
54
+ - app/controllers/foreman_acd/api/v2/ansible_playbooks_controller.rb
39
55
  - app/controllers/foreman_acd/api/v2/app_definitions_controller.rb
56
+ - app/controllers/foreman_acd/api/v2/app_instances_controller.rb
57
+ - app/controllers/foreman_acd/api/v2/app_playbooks_controller.rb
40
58
  - app/controllers/foreman_acd/api/v2/base_controller.rb
41
59
  - app/controllers/foreman_acd/app_definitions_controller.rb
42
60
  - app/controllers/foreman_acd/app_instances_controller.rb
43
61
  - app/controllers/foreman_acd/application_controller.rb
62
+ - app/controllers/foreman_acd/concerns/ansible_playbook_parameters.rb
44
63
  - app/controllers/foreman_acd/concerns/app_definition_parameters.rb
45
64
  - app/controllers/foreman_acd/concerns/app_instance_parameters.rb
46
65
  - app/controllers/ui_acd_controller.rb
66
+ - app/models/foreman_acd/ansible_playbook.rb
47
67
  - app/models/foreman_acd/app_definition.rb
48
68
  - app/models/foreman_acd/app_instance.rb
69
+ - app/services/foreman_acd/app_configurator.rb
70
+ - app/services/foreman_acd/app_deployer.rb
71
+ - app/services/foreman_acd/inventory_creator.rb
72
+ - app/views/foreman_acd/ansible_playbooks/_form.html.erb
73
+ - app/views/foreman_acd/ansible_playbooks/edit.html.erb
74
+ - app/views/foreman_acd/ansible_playbooks/index.html.erb
75
+ - app/views/foreman_acd/ansible_playbooks/new.html.erb
76
+ - app/views/foreman_acd/api/v2/ansible_playbooks/base.json.rabl
77
+ - app/views/foreman_acd/api/v2/ansible_playbooks/index.json.rabl
78
+ - app/views/foreman_acd/api/v2/ansible_playbooks/show.json.rabl
79
+ - app/views/foreman_acd/api/v2/app_definitions/base.json.rabl
80
+ - app/views/foreman_acd/api/v2/app_definitions/index.json.rabl
81
+ - app/views/foreman_acd/api/v2/app_definitions/show.json.rabl
82
+ - app/views/foreman_acd/api/v2/app_instances/base.json.rabl
83
+ - app/views/foreman_acd/api/v2/app_instances/index.json.rabl
84
+ - app/views/foreman_acd/api/v2/app_instances/show.json.rabl
49
85
  - app/views/foreman_acd/app_definitions/_form.html.erb
50
86
  - app/views/foreman_acd/app_definitions/edit.html.erb
51
87
  - app/views/foreman_acd/app_definitions/import.html.erb
@@ -57,17 +93,24 @@ files:
57
93
  - app/views/foreman_acd/app_instances/index.html.erb
58
94
  - app/views/foreman_acd/app_instances/new.html.erb
59
95
  - app/views/foreman_acd/app_instances/report.html.erb
96
+ - app/views/templates/job/run_acd_ansible_playbook.erb
97
+ - app/views/ui_acd/ansible_data.json.rabl
60
98
  - app/views/ui_acd/app.json.rabl
61
99
  - app/views/ui_acd/app_definition.json.rabl
62
100
  - app/views/ui_acd/computeprofile.json.rabl
63
101
  - app/views/ui_acd/domain.json.rabl
64
102
  - app/views/ui_acd/environment.json.rabl
65
- - app/views/ui_acd/fdata.json.rabl
103
+ - app/views/ui_acd/foreman_data.json.rabl
66
104
  - app/views/ui_acd/lifecycle_environment.json.rabl
67
105
  - app/views/ui_acd/ptable.json.rabl
68
106
  - config/routes.rb
69
107
  - db/migrate/20190610202252_create_app_definitions.rb
70
108
  - db/migrate/20190625140305_create_app_instances.rb
109
+ - db/migrate/20200916091018_create_ansible_playbooks.rb
110
+ - db/migrate/20200917120220_add_ansible_playbook_id.rb
111
+ - db/migrate/20201016002819_add_ansible_vars_all_to_app_definitions.rb
112
+ - db/migrate/20201016104338_add_ansible_vars_all_to_app_instances.rb
113
+ - db/seeds.d/75-job_templates.rb
71
114
  - lib/foreman_acd.rb
72
115
  - lib/foreman_acd/engine.rb
73
116
  - lib/foreman_acd/plugin.rb
@@ -90,8 +133,10 @@ files:
90
133
  - webpack/components/ApplicationDefinition/ApplicationDefinition.scss
91
134
  - webpack/components/ApplicationDefinition/ApplicationDefinitionActions.js
92
135
  - webpack/components/ApplicationDefinition/ApplicationDefinitionConstants.js
136
+ - webpack/components/ApplicationDefinition/ApplicationDefinitionHelper.js
93
137
  - webpack/components/ApplicationDefinition/ApplicationDefinitionReducer.js
94
138
  - webpack/components/ApplicationDefinition/ApplicationDefinitionSelectors.js
139
+ - webpack/components/ApplicationDefinition/components/AnsiblePlaybookSelector.js
95
140
  - webpack/components/ApplicationDefinition/index.js
96
141
  - webpack/components/ApplicationInstance/ApplicationInstance.js
97
142
  - webpack/components/ApplicationInstance/ApplicationInstance.scss