Skip to content

Commit

Permalink
Merge pull request #1893 from rhamilto/deploy-image-import-yaml
Browse files Browse the repository at this point in the history
Merged by openshift-bot
  • Loading branch information
OpenShift Bot committed Aug 16, 2017
2 parents 82888c4 + 622b129 commit 5671a61
Show file tree
Hide file tree
Showing 19 changed files with 1,436 additions and 1,307 deletions.
19 changes: 16 additions & 3 deletions app/scripts/controllers/landingPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,26 @@ angular.module('openshiftConsole')
$scope.templateSelected = function(selectedTemplate) {
// `selectedTemplate` might be a parial object (metadata only). If necessary, load the complete template object.
loadCompleteTemplate(selectedTemplate).then(function(template) {
_.set($scope, 'ordering.panelName', 'template');
$scope.template = template;
});
};

$scope.templateDialogClosed = function() {
addTemplateToRecentlyViewed();
$scope.template = null;
$scope.closeOrderingPanel = function() {
if ($scope.template) {
addTemplateToRecentlyViewed();
$scope.template = null;
}

_.set($scope, 'ordering.panelName', '');
};

$scope.deployImageSelected = function() {
_.set($scope, 'ordering.panelName', 'deployImage');
};

$scope.fromFileSelected = function() {
_.set($scope, 'ordering.panelName', 'fromFile');
};

AuthService.withUser().then(function() {
Expand Down
156 changes: 94 additions & 62 deletions app/scripts/directives/deployImage.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ angular.module("openshiftConsole")
restrict: 'E',
scope: {
project: '=',
context: '=',
isDialog: '='
},
templateUrl: 'views/directives/deploy-image.html',
Expand All @@ -28,6 +27,10 @@ angular.module("openshiftConsole")
$scope.forms = {};
},
link: function($scope) {
$scope.input = {
selectedProject: $scope.project
};

// Pick from an image stream tag or Docker image name.
$scope.mode = "istag"; // "istag" or "dockerImage"

Expand All @@ -40,7 +43,6 @@ angular.module("openshiftConsole")
name: 'app',
value: ''
}];
$scope.pullSecrets = [{name: ''}];

var orderByDisplayName = $filter('orderByDisplayName');
var getErrorDetails = $filter('getErrorDetails');
Expand All @@ -56,48 +58,18 @@ angular.module("openshiftConsole")
});
};

var configMapDataOrdered = [];
var secretDataOrdered = [];
var context = {namespace: $scope.project.metadata.name};
$scope.valueFromObjects = [];

DataService.list("configmaps", context, null, { errorNotification: false }).then(function(configMapData) {
configMapDataOrdered = orderByDisplayName(configMapData.by("metadata.name"));
$scope.valueFromObjects = configMapDataOrdered.concat(secretDataOrdered);
}, function(e) {
if (e.code === 403) {
return;
}
$scope.valueFromNamespace = {};

NotificationsService.addAlert({
id: "deploy-image-list-config-maps-error",
type: "error",
message: "Could not load config maps.",
details: getErrorDetails(e)
});
});

DataService.list("secrets", context, null, { errorNotification: false }).then(function(secretData) {
secretDataOrdered = orderByDisplayName(secretData.by("metadata.name"));
$scope.valueFromObjects = secretDataOrdered.concat(configMapDataOrdered);
var secretsByType = SecretsService.groupSecretsByType(secretData);
var secretNamesByType =_.mapValues(secretsByType, function(secretData) {return _.map(secretData, 'metadata.name');});
// Add empty option to the image/source secrets
$scope.secretsByType = _.each(secretNamesByType, function(secretsArray) {
secretsArray.unshift("");
});
}, function(e) {
if (e.code === 403) {
return;
var createProjectIfNecessary = function() {
if (_.has($scope.input.selectedProject, 'metadata.uid')) {
return $q.when($scope.input.selectedProject);
}

NotificationsService.addAlert({
id: "deploy-image-list-secrets-error",
type: "error",
message: "Could not load secrets.",
details: getErrorDetails(e)
});
});
var newProjName = $scope.input.selectedProject.metadata.name;
var newProjDisplayName = $scope.input.selectedProject.metadata.annotations['new-display-name'];
var newProjDesc = $filter('description')($scope.input.selectedProject);
return ProjectsService.create(newProjName, newProjDisplayName, newProjDesc);
};

var stripTag = $filter('stripTag');
var stripSHA = $filter('stripSHA');
Expand Down Expand Up @@ -135,14 +107,13 @@ angular.module("openshiftConsole")
ports: $scope.ports,
volumes: $scope.volumes,
env: keyValueEditorUtils.compactEntries($scope.env),
labels: labels,
pullSecrets: $scope.pullSecrets
labels: labels
});
}

$scope.findImage = function() {
$scope.loading = true;
ImagesService.findImage($scope.imageName, $scope.context)
ImagesService.findImage($scope.imageName, {namespace: $scope.input.selectedProject.metadata.name})
.then(
// success
function(response) {
Expand Down Expand Up @@ -242,18 +213,68 @@ angular.module("openshiftConsole")
});
}, true);

$scope.$watch('input.selectedProject', function(project){
// clear any existing valueFrom env to avoid invalid data
$scope.env = _.reject($scope.env, 'valueFrom');

// if the project doesn't have metadata.uid, that means project creation is occurring
if (!(_.get(project, 'metadata.uid'))) {
// image search requires a project, so ensure $scope.mode is set to 'istag'
$scope.mode = "istag";
return;
}
if ($scope.valueFromNamespace[project.metadata.name]) {
// if we already have the data, return early
return;
}
var configMapDataOrdered = [];
var secretDataOrdered = [];

DataService.list("configmaps", {namespace: $scope.input.selectedProject.metadata.name}, null, { errorNotification: false }).then(function(configMapData) {
configMapDataOrdered = orderByDisplayName(configMapData.by("metadata.name"));
$scope.valueFromNamespace[project.metadata.name] = configMapDataOrdered.concat(secretDataOrdered);
}, function(e) {
if (e.code === 403) {
return;
}

NotificationsService.addNotification({
id: "deploy-image-list-config-maps-error",
type: "error",
message: "Could not load config maps.",
details: getErrorDetails(e)
});
});

DataService.list("secrets", {namespace: $scope.input.selectedProject.metadata.name}, null, { errorNotification: false }).then(function(secretData) {
secretDataOrdered = orderByDisplayName(secretData.by("metadata.name"));
$scope.valueFromNamespace[project.metadata.name] = secretDataOrdered.concat(configMapDataOrdered);
}, function(e) {
if (e.code === 403) {
return;
}

NotificationsService.addNotification({
id: "deploy-image-list-secrets-error",
type: "error",
message: "Could not load secrets.",
details: getErrorDetails(e)
});
});
});

var displayName = $filter('displayName');
var generatedResources;
var createResources = function() {
var titles = {
started: "Deploying image " + $scope.app.name + " to project " + displayName($scope.project),
success: "Deployed image " + $scope.app.name + " to project " + displayName($scope.project),
failure: "Failed to deploy image " + $scope.app.name + " to project " + displayName($scope.project)
started: "Deploying image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject),
success: "Deployed image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject),
failure: "Failed to deploy image " + $scope.app.name + " to project " + displayName($scope.input.selectedProject)
};
TaskList.clear();
TaskList.add(titles, {}, $scope.project.metadata.name, function() {
TaskList.add(titles, {}, $scope.input.selectedProject.metadata.name, function() {
var d = $q.defer();
DataService.batch(generatedResources, $scope.context).then(function(result) {
DataService.batch(generatedResources, {namespace: $scope.input.selectedProject.metadata.name}).then(function(result) {
var alerts, hasErrors = !_.isEmpty(result.failure);
if (hasErrors) {
// Show failure alerts.
Expand Down Expand Up @@ -286,11 +307,11 @@ angular.module("openshiftConsole")

if ($scope.isDialog) {
$scope.$emit('deployImageNewAppCreated', {
project: $scope.project,
project: $scope.input.selectedProject,
appName: $scope.app.name
});
} else {
Navigate.toNextSteps($scope.app.name, $scope.project.metadata.name);
Navigate.toNextSteps($scope.app.name, $scope.input.selectedProject.metadata.name);
}
};

Expand Down Expand Up @@ -338,17 +359,28 @@ angular.module("openshiftConsole")
$scope.create = function() {
$scope.disableInputs = true;
hideErrorNotifications();
generatedResources = getResources();

var nameTakenPromise = ApplicationGenerator.ifResourcesDontExist(generatedResources, $scope.project.metadata.name);
var checkQuotaPromise = QuotaService.getLatestQuotaAlerts(generatedResources, $scope.context);
// Don't want to wait for the name checks to finish before making the calls to quota
// so kick off the requests above and then chain the promises here
var setNameTaken = function(result) {
$scope.nameTaken = result.nameTaken;
return checkQuotaPromise;
};
nameTakenPromise.then(setNameTaken, setNameTaken).then(showWarningsOrCreate, showWarningsOrCreate);
createProjectIfNecessary().then(function(project) {
$scope.input.selectedProject = project;
generatedResources = getResources();

var nameTakenPromise = ApplicationGenerator.ifResourcesDontExist(generatedResources, $scope.input.selectedProject.metadata.name);
var checkQuotaPromise = QuotaService.getLatestQuotaAlerts(generatedResources, {namespace: $scope.input.selectedProject.metadata.name});
// Don't want to wait for the name checks to finish before making the calls to quota
// so kick off the requests above and then chain the promises here
var setNameTaken = function(result) {
$scope.nameTaken = result.nameTaken;
return checkQuotaPromise;
};
nameTakenPromise.then(setNameTaken, setNameTaken).then(showWarningsOrCreate, showWarningsOrCreate);
}, function(e) {
NotificationsService.addNotification({
id: "deploy-image-create-project-error",
type: "error",
message: "An error occurred creating project",
details: getErrorDetails(e)
});
$scope.disableInputs = false;
});
};

// When the deploy-image component is displayed in a dialog, the create
Expand Down
2 changes: 1 addition & 1 deletion app/scripts/directives/deployImageDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
],
controllerAs: '$ctrl',
bindings: {
visible: '<',
project: '<', //handle create project optionally
context: '<',
onDialogClosed: '&'
Expand All @@ -31,6 +30,7 @@

$scope.$on('deployImageNewAppCreated', function(event, message) {
ctrl.selectedProject = message.project;
ctrl.deployImageNewAppCreated = true;
ctrl.currentStep = "Results";
});

Expand Down
Loading

0 comments on commit 5671a61

Please sign in to comment.