Skip to content

Commit 58ce450

Browse files
rhamiltof0x11
authored andcommitted
Adding Deploy Image and Import YAML / JSON functionality to catalog
Credit for this is due to @spadgett!
1 parent b730ded commit 58ce450

17 files changed

+1590
-1208
lines changed

app/scripts/controllers/landingPage.js

-19
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,6 @@ angular.module('openshiftConsole')
6161
return $q.when(template);
6262
};
6363

64-
$scope.templateSelected = function(selectedTemplate) {
65-
// `selectedTemplate` might be a parial object (metadata only). If necessary, load the complete template object.
66-
loadCompleteTemplate(selectedTemplate).then(function(template) {
67-
$scope.template = template;
68-
});
69-
};
70-
71-
var loadCompleteTemplate = function(template) {
72-
if (isPartialObject(template)) {
73-
return DataService.get("templates", template.metadata.name, { namespace: template.metadata.namespace });
74-
}
75-
76-
return $q.when(template);
77-
};
78-
7964
$scope.templateSelected = function(selectedTemplate) {
8065
// `selectedTemplate` might be a parial object (metadata only). If necessary, load the complete template object.
8166
loadCompleteTemplate(selectedTemplate).then(function(template) {
@@ -101,10 +86,6 @@ angular.module('openshiftConsole')
10186
_.set($scope, 'ordering.panelName', 'fromFile');
10287
};
10388

104-
$scope.fromProjectSelected = function() {
105-
_.set($scope, 'ordering.panelName', 'fromProject');
106-
};
107-
10889
AuthService.withUser().then(function() {
10990
var includeTemplates = !CatalogService.isTemplateServiceBrokerEnabled();
11091
Catalog.getCatalogItems(includeTemplates).then(_.spread(function(items, errorMessage) {

app/scripts/directives/deployImage.js

+15-22
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ angular.module("openshiftConsole")
3838
});
3939
},
4040
link: function($scope) {
41-
$scope.forms = {};
41+
$scope.input = {
42+
selectedProject: $scope.project
43+
};
4244

4345
// Pick from an image stream tag or Docker image name.
4446
$scope.mode = "istag"; // "istag" or "dockerImage"
@@ -53,10 +55,6 @@ angular.module("openshiftConsole")
5355
value: ''
5456
}];
5557

56-
$scope.$on('no-projects-cannot-create', function() {
57-
$scope.noProjectsCantCreate = true;
58-
});
59-
6058
var orderByDisplayName = $filter('orderByDisplayName');
6159
var getErrorDetails = $filter('getErrorDetails');
6260

@@ -120,8 +118,7 @@ angular.module("openshiftConsole")
120118
ports: $scope.ports,
121119
volumes: $scope.volumes,
122120
env: keyValueEditorUtils.compactEntries($scope.env),
123-
labels: labels,
124-
pullSecrets: $scope.pullSecrets
121+
labels: labels
125122
});
126123
}
127124

@@ -248,7 +245,7 @@ angular.module("openshiftConsole")
248245
configMapDataOrdered = orderByDisplayName(configMapData.by("metadata.name"));
249246
$scope.valueFromNamespace[project.metadata.name] = configMapDataOrdered.concat(secretDataOrdered);
250247
}, function(e) {
251-
if (e.status === 403) {
248+
if (e.code === 403) {
252249
return;
253250
}
254251

@@ -264,7 +261,7 @@ angular.module("openshiftConsole")
264261
secretDataOrdered = orderByDisplayName(secretData.by("metadata.name"));
265262
$scope.valueFromNamespace[project.metadata.name] = secretDataOrdered.concat(configMapDataOrdered);
266263
}, function(e) {
267-
if (e.status === 403) {
264+
if (e.code === 403) {
268265
return;
269266
}
270267

@@ -281,9 +278,9 @@ angular.module("openshiftConsole")
281278
var generatedResources;
282279
var createResources = function() {
283280
var titles = {
284-
started: gettextCatalog.getString(gettext("Deploying image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject))),
285-
success: gettextCatalog.getString(gettext("Deployed image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject))),
286-
failure: gettextCatalog.getString(gettext("Failed to deploy image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject)))
281+
started: "Deploying image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject),
282+
success: "Deployed image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject),
283+
failure: "Failed to deploy image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject)
287284
};
288285
TaskList.clear();
289286
TaskList.add(titles, {}, $scope.input.selectedProject.metadata.name, function() {
@@ -389,17 +386,13 @@ angular.module("openshiftConsole")
389386
};
390387
nameTakenPromise.then(setNameTaken, setNameTaken).then(showWarningsOrCreate, showWarningsOrCreate);
391388
}, function(e) {
389+
NotificationsService.addNotification({
390+
id: "deploy-image-create-project-error",
391+
type: "error",
392+
message: "An error occurred creating project",
393+
details: getErrorDetails(e)
394+
});
392395
$scope.disableInputs = false;
393-
if (e.data.reason === 'AlreadyExists') {
394-
$scope.projectNameTaken = true;
395-
} else {
396-
NotificationsService.addNotification({
397-
id: "deploy-image-create-project-error",
398-
type: "error",
399-
message: "An error occurred creating project.",
400-
details: getErrorDetails(e)
401-
});
402-
}
403396
});
404397
};
405398

app/scripts/directives/deployImageDialog.js

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939

4040
$scope.$on('deployImageNewAppCreated', function(event, message) {
4141
ctrl.selectedProject = message.project;
42-
ctrl.appName = message.appName;
4342
ctrl.deployImageNewAppCreated = true;
4443
ctrl.currentStep = "Results";
4544
});

app/scripts/directives/fromFile.js

+29-33
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ angular.module("openshiftConsole")
1313
QuotaService,
1414
SecurityCheckService,
1515
TaskList,
16-
ProjectsService,
17-
gettext,
18-
gettextCatalog) {
16+
ProjectsService) {
1917
return {
2018
restrict: "E",
2119
scope: {
@@ -31,18 +29,10 @@ angular.module("openshiftConsole")
3129
var getErrorDetails = $filter('getErrorDetails');
3230
TaskList.clear();
3331

34-
$scope.$on('no-projects-cannot-create', function() {
35-
$scope.noProjectsCantCreate = true;
36-
});
37-
3832
$scope.input = {
3933
selectedProject: $scope.project
4034
};
4135

42-
$scope.$watch('input.selectedProject.metadata.name', function() {
43-
$scope.projectNameTaken = false;
44-
});
45-
4636
$scope.aceLoaded = function(editor) {
4737
aceEditorSession = editor.getSession();
4838
aceEditorSession.setOption('tabSize', 2);
@@ -107,6 +97,17 @@ angular.module("openshiftConsole")
10797
}
10898
};
10999

100+
var createProjectIfNecessary = function() {
101+
if (_.has($scope.input.selectedProject, 'metadata.uid')) {
102+
return $q.when($scope.input.selectedProject);
103+
}
104+
105+
var newProjName = $scope.input.selectedProject.metadata.name;
106+
var newProjDisplayName = $scope.input.selectedProject.metadata.annotations['new-display-name'];
107+
var newProjDesc = $filter('description')($scope.input.selectedProject);
108+
return ProjectsService.create(newProjName, newProjDisplayName, newProjDesc);
109+
};
110+
110111
$scope.create = function() {
111112
delete $scope.error;
112113

@@ -176,17 +177,14 @@ angular.module("openshiftConsole")
176177
}
177178
});
178179
}, function(e) {
179-
if (e.data.reason === 'AlreadyExists') {
180-
$scope.projectNameTaken = true;
181-
} else {
182-
NotificationsService.addNotification({
183-
id: "import-create-project-error",
184-
type: "error",
185-
message: "An error occurred creating project.",
186-
details: getErrorDetails(e)
187-
});
188-
}
180+
NotificationsService.addNotification({
181+
id: "import-create-project-error",
182+
type: "error",
183+
message: "An error occurred creating project",
184+
details: getErrorDetails(e)
185+
});
189186
});
187+
190188
};
191189

192190
$scope.cancel = function() {
@@ -288,21 +286,19 @@ angular.module("openshiftConsole")
288286
if ($scope.resourceKind === "Template" && $scope.templateOptions.process && !$scope.errorOccurred) {
289287
if ($scope.isDialog) {
290288
$scope.$emit('fileImportedFromYAMLOrJSON', {
291-
project: $scope.project,
289+
project: $scope.input.selectedProject,
292290
template: $scope.resource
293291
});
294292
}
295293
else {
296-
namespace = ($scope.templateOptions.add || $scope.updateResources.length > 0) ? $scope.project.metadata.name : "";
297-
path = Navigate.createFromTemplateURL($scope.resource, $scope.project.metadata.name, {namespace: namespace});
294+
namespace = ($scope.templateOptions.add || $scope.updateResources.length > 0) ? $scope.input.selectedProject.metadata.name : "";
295+
path = Navigate.createFromTemplateURL($scope.resource, $scope.input.selectedProject.metadata.name, {namespace: namespace});
298296
$location.url(path);
299297
}
300298
}
301299
else if ($scope.isDialog) {
302300
$scope.$emit('fileImportedFromYAMLOrJSON', {
303-
project: $scope.input.selectedProject,
304-
resource: $scope.resource,
305-
isList: $scope.isList
301+
project: $scope.input.selectedProject
306302
});
307303
}
308304
else {
@@ -405,9 +401,9 @@ angular.module("openshiftConsole")
405401
var displayName = $filter('displayName');
406402
function createResourceList(){
407403
var titles = {
408-
started: gettextCatalog.getString(gettext("Creating resources in project ")) + displayName($scope.input.selectedProject),
409-
success: gettextCatalog.getString(gettext("Creating resources in project ")) + displayName($scope.input.selectedProject),
410-
failure: gettextCatalog.getString(gettext("Failed to create some resources in project ")) + displayName($scope.input.selectedProject)
404+
started: "Creating resources in project " + displayName($scope.input.selectedProject),
405+
success: "Creating resources in project " + displayName($scope.input.selectedProject),
406+
failure: "Failed to create some resources in project " + displayName($scope.input.selectedProject)
411407
};
412408
var helpLinks = {};
413409
TaskList.add(titles, helpLinks, $scope.input.selectedProject.metadata.name, function() {
@@ -456,9 +452,9 @@ angular.module("openshiftConsole")
456452

457453
function updateResourceList(){
458454
var titles = {
459-
started: gettextCatalog.getString(gettext("Updating resources in project ")) + displayName($scope.input.selectedProject),
460-
success: gettextCatalog.getString(gettext("Updated resources in project ")) + displayName($scope.input.selectedProject),
461-
failure: gettextCatalog.getString(gettext("Failed to update some resources in project ")) + displayName($scope.input.selectedProject)
455+
started: "Updating resources in project " + displayName($scope.input.selectedProject),
456+
success: "Updated resources in project " + displayName($scope.input.selectedProject),
457+
failure: "Failed to update some resources in project " + displayName($scope.input.selectedProject)
462458
};
463459
var helpLinks = {};
464460
TaskList.add(titles, helpLinks, $scope.input.selectedProject.metadata.name, function() {

app/scripts/services/images.js

-3
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,6 @@ angular.module("openshiftConsole")
189189
},
190190
status: {}
191191
};
192-
if(_.head(config.pullSecrets).name){
193-
deploymentConfig.spec.template.spec.imagePullSecrets = config.pullSecrets;
194-
}
195192

196193
resources.push(deploymentConfig);
197194

app/views/create.html

+10-10
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@
1616
</catalog>
1717
</uib-tab>
1818

19-
<uib-tab active="selectedTab.deployImage">
20-
<uib-tab-heading translate>Deploy Image</uib-tab-heading>
21-
<form><!-- wrapping form element is necessary for the enter key to trigger the submit button -->
22-
<deploy-image ng-if="project" project="project"></deploy-image>
23-
</form>
24-
</uib-tab>
19+
<uib-tab active="selectedTab.deployImage">
20+
<uib-tab-heading translate>Deploy Image</uib-tab-heading>
21+
<form><!-- wrapping form element is necessary for the enter key to trigger the submit button -->
22+
<deploy-image ng-if="project" project="project"></deploy-image>
23+
</form>
24+
</uib-tab>
2525

26-
<uib-tab active="selectedTab.fromFile">
27-
<uib-tab-heading translate>Import YAML / JSON</uib-tab-heading>
28-
<from-file ng-if="project" project="project"></from-file>
29-
</uib-tab>
26+
<uib-tab active="selectedTab.fromFile">
27+
<uib-tab-heading translate>Import YAML / JSON</uib-tab-heading>
28+
<from-file ng-if="project" project="project"></from-file>
29+
</uib-tab>
3030

3131
</uib-tabset>
3232
</div>
+47-48
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,51 @@
1-
<overlay-panel show-panel="$ctrl.visible" show-close="true" handle-close="$ctrl.close">
2-
<pf-wizard
3-
on-cancel="$ctrl.close()"
4-
on-finish="$ctrl.close()"
5-
hide-header="true"
6-
hide-back-button="true"
7-
hide-sidebar="true"
8-
next-title="$ctrl.nextButtonTitle"
9-
next-callback="$ctrl.nextCallback"
10-
current-step="$ctrl.currentStep"
11-
step-class="order-service-wizard-step"
12-
wizard-done="$ctrl.wizardDone"
13-
class="pf-wizard-no-back">
14-
<pf-wizard-step
15-
step-title="Image"
16-
step-id="image"
17-
step-priority="1"
18-
substeps="false"
19-
ok-to-nav-away="true"
20-
allow-click-nav="false"
21-
next-enabled="!$ctrl.deployForm.$invalid">
22-
<div class="wizard-pf-main-inner-shadow-covers">
23-
<div class="order-service-config order-service-config-single-column">
24-
<div class="wizard-pf-main-form-contents">
25-
<form name="$ctrl.deployForm">
26-
<deploy-image is-dialog="true" project="$ctrl.project" context="$ctrl.context"></deploy-image>
27-
</form>
28-
</div>
1+
<pf-wizard
2+
on-cancel="$ctrl.close()"
3+
on-finish="$ctrl.close()"
4+
hide-header="true"
5+
hide-back-button="true"
6+
hide-sidebar="true"
7+
next-title="$ctrl.nextButtonTitle"
8+
next-callback="$ctrl.nextCallback"
9+
current-step="$ctrl.currentStep"
10+
on-step-changed="$ctrl.stepChanged(step)"
11+
step-class="order-service-wizard-step"
12+
wizard-done="$ctrl.wizardDone"
13+
class="pf-wizard-no-back">
14+
<pf-wizard-step
15+
step-title="Image"
16+
step-id="image"
17+
step-priority="1"
18+
substeps="false"
19+
ok-to-nav-away="true"
20+
allow-click-nav="false"
21+
next-enabled="$ctrl.deployForm.$valid || $ctrl.deployImageNewAppCreated">
22+
<div class="wizard-pf-main-inner-shadow-covers">
23+
<div class="order-service-config order-service-config-single-column">
24+
<div class="wizard-pf-main-form-contents">
25+
<form name="$ctrl.deployForm">
26+
<deploy-image is-dialog="true" project="$ctrl.project" context="$ctrl.context"></deploy-image>
27+
</form>
2928
</div>
3029
</div>
31-
</pf-wizard-step>
32-
<pf-wizard-step
33-
step-title="Results"
34-
step-id="results"
35-
step-priority="2"
36-
substeps="false"
37-
ok-to-nav-away="true"
38-
allow-click-nav="false">
39-
<div class="wizard-pf-main-inner-shadow-covers">
40-
<div class="order-service-config order-service-config-single-column">
41-
<div class="wizard-pf-main-form-contents">
42-
<next-steps project="$ctrl.selectedProject"
43-
project-name="$ctrl.selectedProject.metadata.name"
44-
login-base-url="$ctrl.loginBaseUrl"
45-
on-continue="$ctrl.close">
46-
</next-steps>
47-
</div>
30+
</div>
31+
</pf-wizard-step>
32+
<pf-wizard-step
33+
step-title="Results"
34+
step-id="results"
35+
step-priority="2"
36+
substeps="false"
37+
ok-to-nav-away="true"
38+
allow-click-nav="false">
39+
<div class="wizard-pf-main-inner-shadow-covers">
40+
<div class="order-service-config order-service-config-single-column">
41+
<div class="wizard-pf-main-form-contents">
42+
<next-steps project="$ctrl.selectedProject"
43+
project-name="$ctrl.selectedProject.metadata.name"
44+
login-base-url="$ctrl.loginBaseUrl"
45+
on-continue="$ctrl.close">
46+
</next-steps>
4847
</div>
4948
</div>
50-
</pf-wizard-step> <!-- /pf-wizard-step -->
51-
</pf-wizard> <!-- /pf-wizard -->
52-
</overlay-panel>
49+
</div>
50+
</pf-wizard-step>
51+
</pf-wizard>

0 commit comments

Comments
 (0)