@spinnaker/oracle 0.0.0-main-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +868 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/common/footer.component.d.ts +2 -0
  4. package/dist/domain/IOracleLoadBalancer.d.ts +114 -0
  5. package/dist/helpContents/oracleHelpContents.d.ts +1 -0
  6. package/dist/image/image.reader.d.ts +2 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.js +3634 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  11. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +87 -0
  12. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +21 -0
  13. package/dist/loadBalancer/loadBalancer.transformer.d.ts +12 -0
  14. package/dist/oracle.module.d.ts +2 -0
  15. package/dist/oracle.settings.d.ts +15 -0
  16. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
  17. package/dist/pipeline/stages/bake/ociBakeStage.d.ts +2 -0
  18. package/dist/pipeline/stages/destroyAsg/destroyAsgStage.d.ts +2 -0
  19. package/dist/pipeline/stages/disableAsg/disableAsgStage.d.ts +2 -0
  20. package/dist/pipeline/stages/findAmi/findAmiStage.d.ts +2 -0
  21. package/dist/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.d.ts +2 -0
  22. package/dist/pipeline/stages/resizeAsg/resizeAsgStage.d.ts +2 -0
  23. package/dist/pipeline/stages/scaleDownCluster/scaleDownClusterStage.d.ts +2 -0
  24. package/dist/pipeline/stages/shrinkCluster/shrinkClusterStage.d.ts +2 -0
  25. package/dist/securityGroup/configure/createSecurityGroup.controller.d.ts +2 -0
  26. package/dist/securityGroup/securityGroup.reader.d.ts +2 -0
  27. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  28. package/dist/serverGroup/configure/serverGroup.configure.module.d.ts +2 -0
  29. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  30. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +2 -0
  31. package/dist/serverGroup/configure/wizard/basicSettings/basicSettings.controller.d.ts +2 -0
  32. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.component.d.ts +2 -0
  33. package/dist/serverGroup/configure/wizard/cloneServerGroup.controller.d.ts +2 -0
  34. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +2 -0
  35. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +2 -0
  36. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +2 -0
  37. package/dist/serverGroup/details/serverGroupDetails.controller.d.ts +2 -0
  38. package/dist/serverGroup/serverGroup.transformer.d.ts +2 -0
  39. package/package.json +38 -0
  40. package/src/common/footer.component.html +7 -0
  41. package/src/common/footer.component.js +18 -0
  42. package/src/common/ocid/ocid.component.js +15 -0
  43. package/src/common/ocid/ocid.template.html +10 -0
  44. package/src/common/ocid/truncateOcid.filter.js +14 -0
  45. package/src/domain/IOracleLoadBalancer.ts +110 -0
  46. package/src/helpContents/oracleHelpContents.ts +52 -0
  47. package/src/image/image.reader.js +38 -0
  48. package/src/index.ts +1 -0
  49. package/src/instance/details/instance.details.controller.js +56 -0
  50. package/src/instance/details/instanceDetails.html +31 -0
  51. package/src/loadBalancer/configure/backendSets.html +67 -0
  52. package/src/loadBalancer/configure/certificates.html +63 -0
  53. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.ts +201 -0
  54. package/src/loadBalancer/configure/createLoadBalancer.controller.ts +540 -0
  55. package/src/loadBalancer/configure/createLoadBalancer.html +25 -0
  56. package/src/loadBalancer/configure/createLoadBalancerProperties.html +167 -0
  57. package/src/loadBalancer/configure/editLoadBalancer.html +26 -0
  58. package/src/loadBalancer/configure/listeners.html +88 -0
  59. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.ts +62 -0
  60. package/src/loadBalancer/details/loadBalancerDetail.controller.ts +163 -0
  61. package/src/loadBalancer/details/loadBalancerDetail.html +100 -0
  62. package/src/loadBalancer/loadBalancer.transformer.ts +144 -0
  63. package/src/oracle.module.ts +94 -0
  64. package/src/oracle.settings.ts +19 -0
  65. package/src/pipeline/disableAsg/disableAsgStage.html +11 -0
  66. package/src/pipeline/disableAsg/disableAsgStage.js +62 -0
  67. package/src/pipeline/disableAsg/disableAsgStepLabel.html +1 -0
  68. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +38 -0
  69. package/src/pipeline/stages/bake/bakeExecutionDetails.html +52 -0
  70. package/src/pipeline/stages/bake/bakeStage.html +109 -0
  71. package/src/pipeline/stages/bake/ociBakeStage.js +147 -0
  72. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  73. package/src/pipeline/stages/destroyAsg/destroyAsgStage.js +64 -0
  74. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  75. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  76. package/src/pipeline/stages/disableAsg/disableAsgStage.js +63 -0
  77. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  78. package/src/pipeline/stages/findAmi/findAmiStage.html +20 -0
  79. package/src/pipeline/stages/findAmi/findAmiStage.js +82 -0
  80. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +44 -0
  81. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +11 -0
  82. package/src/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.js +36 -0
  83. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +89 -0
  84. package/src/pipeline/stages/resizeAsg/resizeAsgStage.js +101 -0
  85. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +1 -0
  86. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +35 -0
  87. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.js +75 -0
  88. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +34 -0
  89. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.js +71 -0
  90. package/src/securityGroup/configure/createSecurityGroup.controller.js +19 -0
  91. package/src/securityGroup/configure/createSecurityGroup.html +19 -0
  92. package/src/securityGroup/securityGroup.reader.js +15 -0
  93. package/src/securityGroup/securityGroup.transformer.js +25 -0
  94. package/src/serverGroup/configure/serverGroup.configure.module.js +15 -0
  95. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +105 -0
  96. package/src/serverGroup/configure/serverGroupConfiguration.service.js +229 -0
  97. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +13 -0
  98. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.controller.js +35 -0
  99. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +134 -0
  100. package/src/serverGroup/configure/wizard/capacity/capacity.html +7 -0
  101. package/src/serverGroup/configure/wizard/capacity/capacitySelector.component.html +13 -0
  102. package/src/serverGroup/configure/wizard/capacity/capacitySelector.component.js +17 -0
  103. package/src/serverGroup/configure/wizard/cloneServerGroup.controller.js +109 -0
  104. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +29 -0
  105. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +44 -0
  106. package/src/serverGroup/configure/wizard/network/networkSettings.html +15 -0
  107. package/src/serverGroup/configure/wizard/serverGroupWizard.html +40 -0
  108. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +9 -0
  109. package/src/serverGroup/details/resize/resizeCapacity.component.html +36 -0
  110. package/src/serverGroup/details/resize/resizeCapacity.component.js +42 -0
  111. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +62 -0
  112. package/src/serverGroup/details/resize/resizeServerGroup.html +33 -0
  113. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +73 -0
  114. package/src/serverGroup/details/rollback/rollbackServerGroup.html +41 -0
  115. package/src/serverGroup/details/serverGroupDetails.controller.js +230 -0
  116. package/src/serverGroup/details/serverGroupDetails.html +94 -0
  117. package/src/serverGroup/serverGroup.transformer.js +29 -0
@@ -0,0 +1,229 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+ import _ from 'lodash';
5
+
6
+ import { AccountService, NetworkReader, SECURITY_GROUP_READER, SubnetReader } from '@spinnaker/core';
7
+ import { OracleProviderSettings } from '../../oracle.settings';
8
+
9
+ export const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =
10
+ 'spinnaker.oracle.serverGroup.configure.configuration.service';
11
+ export const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility
12
+ module(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [SECURITY_GROUP_READER]).factory(
13
+ 'oracleServerGroupConfigurationService',
14
+ [
15
+ '$q',
16
+ 'oracleImageReader',
17
+ 'securityGroupReader',
18
+ function ($q, oracleImageReader, securityGroupReader) {
19
+ const oracle = 'oracle';
20
+
21
+ const getShapes = (image) => {
22
+ if (!image || !image.compatibleShapes) {
23
+ return [];
24
+ }
25
+ return image.compatibleShapes.map((shape) => {
26
+ return { name: shape };
27
+ });
28
+ };
29
+
30
+ const loadAndSelectRegions = (command, backingData) => {
31
+ if (command.account) {
32
+ const selectedAccountDetails = backingData.credentialsKeyedByAccount[command.account];
33
+ if (!selectedAccountDetails) {
34
+ return;
35
+ }
36
+ backingData.filtered.regions = _.map(selectedAccountDetails.regions, (region) => {
37
+ return { name: region.name };
38
+ });
39
+ if (selectedAccountDetails) {
40
+ command.region = selectedAccountDetails.region;
41
+ }
42
+ }
43
+ };
44
+
45
+ const loadAvailabilityDomains = (command) => {
46
+ if (command.account && command.region) {
47
+ AccountService.getAvailabilityZonesForAccountAndRegion(oracle, command.account, command.region).then(
48
+ (availDoms) => {
49
+ if (availDoms) {
50
+ command.backingData.filtered.availabilityDomains = availDoms.map((av) => {
51
+ return { name: av };
52
+ });
53
+ } else {
54
+ command.backingData.filtered.availabilityDomains = [];
55
+ command.availabilityDomain = null;
56
+ }
57
+ },
58
+ );
59
+ }
60
+ };
61
+
62
+ const loadLoadBalancers = (command) => {
63
+ if (command.account && command.region) {
64
+ command.backingData.filtered.loadBalancers = command.backingData.loadBalancers.filter(function (lb) {
65
+ return lb.region === command.region && lb.account === command.account;
66
+ });
67
+ }
68
+ };
69
+
70
+ function configureCommand(application, command) {
71
+ const defaults = command || {};
72
+ const defaultCredentials =
73
+ defaults.account || application.defaultCredentials.oracle || OracleProviderSettings.defaults.account;
74
+ const defaultRegion =
75
+ defaults.region || application.defaultRegions.oracle || OracleProviderSettings.defaults.region;
76
+
77
+ return $q
78
+ .all([
79
+ AccountService.getCredentialsKeyedByAccount(oracle),
80
+ NetworkReader.listNetworksByProvider(oracle),
81
+ SubnetReader.listSubnetsByProvider(oracle),
82
+ securityGroupReader.getAllSecurityGroups(),
83
+ loadImages(),
84
+ AccountService.getAvailabilityZonesForAccountAndRegion(oracle, defaultCredentials, defaultRegion),
85
+ ])
86
+ .then(function ([credentialsKeyedByAccount, networks, subnets, securityGroups, images, availDomains]) {
87
+ const backingData = {
88
+ credentialsKeyedByAccount,
89
+ networks,
90
+ subnets,
91
+ securityGroups,
92
+ images,
93
+ availDomains,
94
+ };
95
+
96
+ backingData.accounts = _.keys(backingData.credentialsKeyedByAccount);
97
+ backingData.filtered = {};
98
+ loadAndSelectRegions(command, backingData);
99
+ backingData.filtered.availabilityDomains = _.map(backingData.availDomains, function (zone) {
100
+ return { name: zone };
101
+ });
102
+
103
+ backingData.filterSubnets = function () {
104
+ if (command.vpcId && command.availabilityDomain) {
105
+ return _.filter(backingData.subnets, {
106
+ vcnId: command.vpcId,
107
+ availabilityDomain: command.availabilityDomain,
108
+ });
109
+ }
110
+ return backingData.subnets;
111
+ };
112
+
113
+ backingData.loadBalancers = application.loadBalancers.data;
114
+
115
+ backingData.accountOnChange = function () {
116
+ loadAndSelectRegions(command, command.backingData);
117
+ loadAvailabilityDomains(command);
118
+ loadLoadBalancers(command);
119
+ };
120
+
121
+ backingData.regionOnChange = function () {
122
+ loadAvailabilityDomains(command);
123
+ loadLoadBalancers(command);
124
+ };
125
+
126
+ backingData.availabilityDomainOnChange = function () {
127
+ command.subnetId = null;
128
+ backingData.seclists = null;
129
+ };
130
+
131
+ backingData.vpcOnChange = function () {
132
+ command.subnetId = null;
133
+ backingData.seclists = null;
134
+ };
135
+
136
+ backingData.subnetOnChange = function () {
137
+ const subnet = _.find(backingData.subnets, { id: command.subnetId });
138
+ const mySecGroups = backingData.securityGroups[command.account][oracle][command.region];
139
+ const secLists = [];
140
+ _.forEach(subnet.securityListIds, function (sid) {
141
+ const sgRef = _.find(mySecGroups, { id: sid });
142
+ securityGroupReader
143
+ .getSecurityGroupDetails(
144
+ command.application,
145
+ command.account,
146
+ oracle,
147
+ command.region,
148
+ command.vpcId,
149
+ sgRef.name,
150
+ )
151
+ .then(function (sgd) {
152
+ secLists.push(sgd);
153
+ backingData.seclists = secLists;
154
+ });
155
+ });
156
+ };
157
+
158
+ backingData.findBackendSetsByLoadBalancerId = (loadBalancerId) => {
159
+ const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);
160
+ if (lb && lb.backendSets) {
161
+ //reduce the backendSets object to an array. The object is keyed by the backendSet name
162
+ const bsetArray = [];
163
+ Object.keys(lb.backendSets).reduce((arr, bsetName) => {
164
+ const bset = lb.backendSets[bsetName];
165
+ bset['name'] = bsetName;
166
+ arr.push(bset);
167
+ return arr;
168
+ }, bsetArray);
169
+ return bsetArray;
170
+ } else {
171
+ return [];
172
+ }
173
+ };
174
+
175
+ backingData.findLoadBalListenersByBackendSetName = (loadBalancerId, backendSetName) => {
176
+ const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);
177
+ if (lb && lb.listeners) {
178
+ return Object.keys(lb.listeners)
179
+ .filter((lisName) => lb.listeners[lisName].defaultBackendSetName === backendSetName)
180
+ .map((lisName) => lb.listeners[lisName]);
181
+ } else {
182
+ return [];
183
+ }
184
+ };
185
+
186
+ backingData.loadBalancerOnChange = () => {
187
+ if (command.loadBalancerId) {
188
+ backingData.filtered.backendSets = backingData.findBackendSetsByLoadBalancerId(command.loadBalancerId);
189
+ } else {
190
+ //no backend set name should be set if no load balancer id is set
191
+ command.backendSetName = undefined;
192
+ backingData.backendSetOnChange();
193
+ backingData.filtered.backendSets = [];
194
+ }
195
+ };
196
+
197
+ backingData.backendSetOnChange = () => {
198
+ backingData.filtered.listeners =
199
+ command.loadBalancerId && command.backendSetName
200
+ ? backingData.findLoadBalListenersByBackendSetName(command.loadBalancerId, command.backendSetName)
201
+ : [];
202
+ };
203
+
204
+ backingData.filtered.images = backingData.images;
205
+ const shapesMap = {};
206
+ _.forEach(backingData.filtered.images, (image) => {
207
+ shapesMap[image.id] = getShapes(image);
208
+ });
209
+ backingData.filtered.shapes = shapesMap;
210
+ backingData.filtered.allShapes = _.uniqBy(_.flatten(_.values(shapesMap)), 'name');
211
+ command.backingData = backingData;
212
+ if (command.account) {
213
+ loadLoadBalancers(command);
214
+ backingData.loadBalancerOnChange();
215
+ backingData.backendSetOnChange();
216
+ }
217
+ });
218
+ }
219
+
220
+ function loadImages() {
221
+ return oracleImageReader.findImages({ provider: oracle });
222
+ }
223
+
224
+ return {
225
+ configureCommand: configureCommand,
226
+ };
227
+ },
228
+ ],
229
+ );
@@ -0,0 +1,13 @@
1
+ <div class="form-group">
2
+ <div class="col-md-5 sm-label-right"><b>Key Name</b></div>
3
+ <div class="col-md-6">
4
+ <ui-select ng-model="$ctrl.command.keyPair" class="form-control input-sm" required on-select="$ctrl.fieldChanged()">
5
+ <ui-select-match>{{$select.selected}}</ui-select-match>
6
+ <ui-select-choices
7
+ repeat="regionalKeyPair in $ctrl.command.backingData.filtered.keyPairs | filter: $select.search"
8
+ >
9
+ <span ng-bind-html="regionalKeyPair"></span>
10
+ </ui-select-choices>
11
+ </ui-select>
12
+ </div>
13
+ </div>
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import * as angular from 'angular';
5
+ import ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';
6
+
7
+ import { IMAGE_READER } from '@spinnaker/core';
8
+
9
+ export const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER =
10
+ 'spinnaker.oracle.serverGroup.configure.wizard.basicSettings.controller';
11
+ export const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER; // for backwards compatibility
12
+ angular
13
+ .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER, [
14
+ UIROUTER_ANGULARJS,
15
+ ANGULAR_UI_BOOTSTRAP,
16
+ IMAGE_READER,
17
+ ])
18
+ .controller('oracleServerGroupBasicSettingsCtrl', [
19
+ '$scope',
20
+ '$state',
21
+ '$uibModalStack',
22
+ '$controller',
23
+ 'imageReader',
24
+ function ($scope, $state, $uibModalStack, $controller, imageReader) {
25
+ angular.extend(
26
+ this,
27
+ $controller('BasicSettingsMixin', {
28
+ $scope: $scope,
29
+ imageReader: imageReader,
30
+ $uibModalStack: $uibModalStack,
31
+ $state: $state,
32
+ }),
33
+ );
34
+ },
35
+ ]);
@@ -0,0 +1,134 @@
1
+ <div class="container-fluid form-horizontal" ng-controller="oracleServerGroupBasicSettingsCtrl as basicSettingsCtrl">
2
+ <div class="modal-body">
3
+ <div class="form-group">
4
+ <div class="col-md-3 sm-label-right">Account</div>
5
+ <div class="col-md-7">
6
+ <account-select-field
7
+ required
8
+ read-only="command.viewState.readOnlyFields.credentials"
9
+ component="command"
10
+ field="account"
11
+ accounts="command.backingData.accounts"
12
+ provider="'oracle'"
13
+ on-change="command.backingData.accountOnChange()"
14
+ ></account-select-field>
15
+ </div>
16
+ </div>
17
+ <region-select-field
18
+ label-columns="3"
19
+ component="command"
20
+ field="region"
21
+ account="command.account"
22
+ provider="'oracle'"
23
+ regions="command.backingData.filtered.regions"
24
+ on-change="command.backingData.regionOnChange()"
25
+ ></region-select-field>
26
+ <!-- VCN Selection (which will then filter subnets) -->
27
+ <div class="form-group">
28
+ <div class="col-md-3 sm-label-right">VCN</div>
29
+ <div class="col-md-9">
30
+ <ui-select
31
+ class="form-control input-sm"
32
+ required
33
+ ng-model="command.vpcId"
34
+ ng-change="command.backingData.vpcOnChange()"
35
+ >
36
+ <ui-select-match placeholder="Select VCN">{{$select.selected.name}}</ui-select-match>
37
+ <ui-select-choices repeat="network.id as network in command.backingData.networks">
38
+ <span ng-bind-html="network.name | highlight: $select.search"></span>
39
+ </ui-select-choices>
40
+ </ui-select>
41
+ </div>
42
+ </div>
43
+
44
+ <div class="form-group" ng-show="command.vpcId">
45
+ <div class="col-md-3 sm-label-right">Availability Domain</div>
46
+ <div class="col-md-7">
47
+ <ui-select
48
+ class="form-control input-sm"
49
+ required
50
+ ng-model="command.availabilityDomain"
51
+ ng-change="command.backingData.availabilityDomainOnChange()"
52
+ >
53
+ <ui-select-match placeholder="Select AD">{{$select.selected.name}}</ui-select-match>
54
+ <ui-select-choices
55
+ repeat="availabilityDomain.name as availabilityDomain in command.backingData.filtered.availabilityDomains"
56
+ >
57
+ <span ng-bind-html="availabilityDomain.name"></span>
58
+ </ui-select-choices>
59
+ </ui-select>
60
+ </div>
61
+ </div>
62
+
63
+ <!-- Subnet selection -->
64
+ <div class="form-group" ng-show="command.availabilityDomain">
65
+ <div class="col-md-3 sm-label-right">Subnet</div>
66
+ <div class="col-md-9">
67
+ <ui-select
68
+ class="form-control input-sm"
69
+ required
70
+ ng-model="command.subnetId"
71
+ ng-change="command.backingData.subnetOnChange()"
72
+ >
73
+ <ui-select-match placeholder="Select subnet">{{$select.selected.name}}</ui-select-match>
74
+ <ui-select-choices repeat="subnet.id as subnet in command.backingData.filterSubnets()">
75
+ <span ng-bind-html="subnet.name | highlight: $select.search"></span>
76
+ </ui-select-choices>
77
+ </ui-select>
78
+ </div>
79
+ </div>
80
+
81
+ <div class="form-group small" style="margin-top: 20px" ng-show="command.backingData.seclists">
82
+ <div class="col-md-3 sm-label-right">Effective Security Lists</div>
83
+ <div class="col-md-9">
84
+ <p>Security Lists attached to selected subnet:</p>
85
+ <ul ng-repeat="seclist in command.backingData.seclists">
86
+ <div class="sm-label-left">{{seclist.name}}</div>
87
+ <div ng-repeat="rule in seclist.inboundRules">
88
+ <li ng-repeat="range in rule.portRanges">{{rule.protocol}}: {{range.startPort}} -> {{range.endPort}}</li>
89
+ </div>
90
+ </ul>
91
+ </div>
92
+ </div>
93
+
94
+ <div class="form-group">
95
+ <div class="col-md-3 sm-label-right">
96
+ Stack
97
+ <help-field key="oracle.serverGroup.stack"></help-field>
98
+ </div>
99
+ <div class="col-md-7">
100
+ <input
101
+ type="text"
102
+ class="form-control input-sm"
103
+ ng-pattern="basicSettingsCtrl.stackPattern"
104
+ name="stack"
105
+ ng-model="command.stack"
106
+ />
107
+ </div>
108
+ </div>
109
+ <div class="form-group row slide-in" ng-if="basicSettings.stack.$error.pattern">
110
+ <div class="col-sm-9 col-sm-offset-2 error-message">
111
+ <span>Only dot(.) and underscore(_) special characters are allowed in the Stack field.</span>
112
+ </div>
113
+ </div>
114
+ <div class="form-group">
115
+ <div class="col-md-3 sm-label-right">
116
+ Detail
117
+ <help-field key="oracle.serverGroup.detail"></help-field>
118
+ </div>
119
+ <div class="col-md-7">
120
+ <input
121
+ type="text"
122
+ class="form-control input-sm"
123
+ ng-pattern="basicSettingsCtrl.detailPattern"
124
+ name="details"
125
+ ng-model="command.freeFormDetails"
126
+ />
127
+ </div>
128
+ </div>
129
+ <deployment-strategy-selector
130
+ ng-if="!command.viewState.disableStrategySelection && command.selectedProvider"
131
+ command="command"
132
+ ></deployment-strategy-selector>
133
+ </div>
134
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="clearfix">
2
+ <div class="row">
3
+ <div class="col-md-12">
4
+ <oracle-server-group-capacity-selector command="command"></oracle-server-group-capacity-selector>
5
+ </div>
6
+ </div>
7
+ </div>
@@ -0,0 +1,13 @@
1
+ <div>
2
+ <div class="form-group">
3
+ <div class="col-md-12">
4
+ <p>Select the number of instances</p>
5
+ </div>
6
+ </div>
7
+ <div class="form-group">
8
+ <div class="col-md-3 sm-label-right">Number of Instances</div>
9
+ <div class="col-md-2">
10
+ <input type="number" class="form-control input-sm" ng-model="vm.command.capacity.desired" min="1" required />
11
+ </div>
12
+ </div>
13
+ </div>
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ import * as angular from 'angular';
4
+
5
+ export const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT =
6
+ 'spinnaker.oracle.serverGroup.configure.wizard.capacity.selector.component';
7
+ export const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT; // for backwards compatibility
8
+ angular
9
+ .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT, [])
10
+ .component('oracleServerGroupCapacitySelector', {
11
+ templateUrl: require('./capacitySelector.component.html'),
12
+ bindings: {
13
+ command: '=',
14
+ },
15
+ controllerAs: 'vm',
16
+ controller: angular.noop,
17
+ });
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+
6
+ import { FirewallLabels, ModalWizard, TaskMonitor } from '@spinnaker/core';
7
+
8
+ export const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER =
9
+ 'spinnaker.oracle.serverGroup.configure.cloneServerGroup';
10
+ export const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER; // for backwards compatibility
11
+ module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER, [UIROUTER_ANGULARJS]).controller(
12
+ 'oracleCloneServerGroupCtrl',
13
+ [
14
+ '$scope',
15
+ '$uibModalInstance',
16
+ '$q',
17
+ 'application',
18
+ 'serverGroupWriter',
19
+ 'serverGroupCommand',
20
+ 'oracleServerGroupConfigurationService',
21
+ 'title',
22
+ function (
23
+ $scope,
24
+ $uibModalInstance,
25
+ $q,
26
+ application,
27
+ serverGroupWriter,
28
+ serverGroupCommand,
29
+ oracleServerGroupConfigurationService,
30
+ title,
31
+ ) {
32
+ $scope.title = title;
33
+
34
+ $scope.state = {
35
+ loaded: false,
36
+ requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,
37
+ };
38
+
39
+ $scope.command = serverGroupCommand;
40
+ $scope.application = application;
41
+
42
+ $scope.pages = {
43
+ basicSettings: require('./basicSettings/basicSettings.html'),
44
+ instanceType: require('./instanceType/instanceType.html'),
45
+ capacity: require('./capacity/capacity.html'),
46
+ loadBalancers: require('./loadBalancers/loadBalancers.html'),
47
+ networkSettings: require('./network/networkSettings.html'),
48
+ templateSelection: require('./templateSelection/templateSelection.html'),
49
+ };
50
+
51
+ this.templateSelectionText = {
52
+ copied: [
53
+ 'account, region, subnet, cluster name (stack, details)',
54
+ 'load balancers',
55
+ FirewallLabels.get('firewalls'),
56
+ 'instance type',
57
+ 'all fields on the Advanced Settings page',
58
+ ],
59
+ notCopied: [],
60
+ };
61
+
62
+ if (!$scope.command.viewState.disableStrategySelection) {
63
+ this.templateSelectionText.notCopied.push(
64
+ 'the deployment strategy (if any) used to deploy the most recent server group',
65
+ );
66
+ }
67
+
68
+ $scope.taskMonitor = new TaskMonitor({
69
+ application: application,
70
+ title: 'Creating your server group',
71
+ modalInstance: $uibModalInstance,
72
+ });
73
+
74
+ function configureCommand() {
75
+ oracleServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {
76
+ $scope.state.loaded = true;
77
+ });
78
+ }
79
+
80
+ this.isValid = function () {
81
+ return $scope.command && $scope.form.$valid && ModalWizard.isComplete();
82
+ };
83
+
84
+ this.showSubmitButton = function () {
85
+ return ModalWizard.allPagesVisited();
86
+ };
87
+
88
+ this.cancel = function () {
89
+ $uibModalInstance.dismiss();
90
+ };
91
+
92
+ this.submit = function () {
93
+ if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {
94
+ return $uibModalInstance.close($scope.command);
95
+ }
96
+ $scope.taskMonitor.submit(function () {
97
+ return serverGroupWriter.cloneServerGroup($scope.command, application);
98
+ });
99
+ };
100
+
101
+ configureCommand();
102
+
103
+ this.templateSelected = () => {
104
+ $scope.state.requiresTemplateSelection = false;
105
+ configureCommand();
106
+ };
107
+ },
108
+ ],
109
+ );
@@ -0,0 +1,29 @@
1
+ <!-- Image selection -->
2
+ <div class="form-group" ng-if="!command.viewState.disableImageSelection">
3
+ <div class="col-md-3 sm-label-right">Image</div>
4
+ <div class="col-md-9">
5
+ <ui-select class="form-control input-sm" required ng-model="command.imageId">
6
+ <ui-select-match placeholder="Select an image">{{$select.selected.name}}</ui-select-match>
7
+ <ui-select-choices repeat="image.id as image in command.backingData.filtered.images">
8
+ <span ng-bind-html="image.name | highlight: $select.search"></span>
9
+ </ui-select-choices>
10
+ </ui-select>
11
+ </div>
12
+ </div>
13
+
14
+ <!-- Shape selection -->
15
+ <div class="form-group">
16
+ <div class="col-md-3 sm-label-right">Shape</div>
17
+ <div class="col-md-9">
18
+ <ui-select class="form-control input-sm" required ng-model="command.shape">
19
+ <ui-select-match placeholder="Select compatible shape">{{$select.selected.name}}</ui-select-match>
20
+ <ui-select-choices
21
+ repeat="shape.name as shape in (!command.viewState.disableImageSelection
22
+ ? command.backingData.filtered.shapes[command.imageId]
23
+ : command.backingData.filtered.allShapes)"
24
+ >
25
+ <span ng-bind-html="shape.name"></span>
26
+ </ui-select-choices>
27
+ </ui-select>
28
+ </div>
29
+ </div>
@@ -0,0 +1,44 @@
1
+ <!-- Load Balancer selection -->
2
+ <div class="form-group">
3
+ <div class="col-md-3 sm-label-right">Load Balancer</div>
4
+ <div class="col-md-9">
5
+ <ui-select
6
+ class="form-control input-sm"
7
+ ng-model="command.loadBalancerId"
8
+ ng-change="command.backingData.loadBalancerOnChange()"
9
+ >
10
+ <ui-select-match allow-clear="true" placeholder="Select Load Balancer">{{$select.selected.name}}</ui-select-match>
11
+ <ui-select-choices repeat="loadBalancer.id as loadBalancer in command.backingData.filtered.loadBalancers">
12
+ <span ng-bind-html="loadBalancer.name | highlight: $select.search"></span>
13
+ </ui-select-choices>
14
+ </ui-select>
15
+ </div>
16
+ </div>
17
+
18
+ <!-- Backend set selection -->
19
+ <div class="form-group" ng-if="command.loadBalancerId">
20
+ <div class="col-md-3 sm-label-right">Backend Set</div>
21
+ <div class="col-md-9">
22
+ <ui-select
23
+ class="form-control input-sm"
24
+ ng-required="command.loadBalancerId"
25
+ ng-model="command.backendSetName"
26
+ ng-change="command.backingData.backendSetOnChange()"
27
+ >
28
+ <ui-select-match placeholder="Select Backend Set">{{$select.selected.name}}</ui-select-match>
29
+ <ui-select-choices repeat="backendSet.name as backendSet in command.backingData.filtered.backendSets">
30
+ <span ng-bind-html="backendSet.name"></span>
31
+ </ui-select-choices>
32
+ </ui-select>
33
+ </div>
34
+ </div>
35
+
36
+ <!-- Show listeners associated with selected backend set -->
37
+ <div class="form-group" ng-if="command.loadBalancerId && command.backendSetName">
38
+ <div class="col-md-3 sm-label-right">Listeners for {{command.backendSetName}}</div>
39
+ <div class="col-md-9">
40
+ <ul ng-repeat="(lisName, listener) in command.backingData.filtered.listeners">
41
+ <li>{{listener.protocol}}:{{listener.port}}</li>
42
+ </ul>
43
+ </div>
44
+ </div>
@@ -0,0 +1,15 @@
1
+ <!-- SSH Key -->
2
+ <div class="form-group">
3
+ <div class="col-md-3 sm-label-right">
4
+ SSH Key
5
+ <help-field key="oracle.serverGroup.sshAuthorizedKeys"></help-field>
6
+ </div>
7
+ <div class="col-md-9">
8
+ <textarea
9
+ class="form-control input-sm"
10
+ name="sshAuthorizedKeys"
11
+ placeholder="Enter the public SSH key for the default user on the instance."
12
+ ng-model="command.sshAuthorizedKeys"
13
+ ></textarea>
14
+ </div>
15
+ </div>