diff --git a/app/index.html b/app/index.html index 6a3a338b86..8f416e150c 100644 --- a/app/index.html +++ b/app/index.html @@ -224,6 +224,7 @@

JavaScript Required

+ @@ -248,6 +249,8 @@

JavaScript Required

+ + @@ -359,6 +362,7 @@

JavaScript Required

+ @@ -371,7 +375,6 @@

JavaScript Required

- diff --git a/app/scripts/app.js b/app/scripts/app.js index 484761bf54..3bb2421a25 100644 --- a/app/scripts/app.js +++ b/app/scripts/app.js @@ -272,6 +272,16 @@ angular controller: 'ServiceController', reloadOnSearch: false }) + .when('/project/:project/browse/service-instances', { + templateUrl: 'views/service-instances.html', + controller: 'ServiceInstancesController', + reloadOnSearch: false + }) + .when('/project/:project/browse/service-instances/:instance', { + templateUrl: 'views/browse/service-instance.html', + controller: 'ServiceInstanceController', + reloadOnSearch: false + }) .when('/project/:project/browse/storage', { templateUrl: 'views/storage.html', controller: 'StorageController', diff --git a/app/scripts/constants.js b/app/scripts/constants.js index 3d736f141c..a650291316 100644 --- a/app/scripts/constants.js +++ b/app/scripts/constants.js @@ -261,6 +261,18 @@ angular.extend(window.OPENSHIFT_CONSTANTS, { "/create-route", "/edit/routes/" ] + }, + { + label: "Provisioned Services", + href: "/browse/service-instances", + prefixes: [ + "/browse/service-instances/" + ], + canI: { + resource: 'serviceinstances', + group: 'servicecatalog.k8s.io', + verb: 'list' + } } ] } diff --git a/app/scripts/controllers/serviceInstance.js b/app/scripts/controllers/serviceInstance.js new file mode 100644 index 0000000000..96ab3652a1 --- /dev/null +++ b/app/scripts/controllers/serviceInstance.js @@ -0,0 +1,107 @@ +'use strict'; + +angular.module('openshiftConsole') + .controller('ServiceInstanceController', function ($scope, + $filter, + $routeParams, + DataService, + ProjectsService, + ServiceInstancesService) { + $scope.alerts = {}; + $scope.projectName = $routeParams.project; + $scope.serviceInstance = null; + $scope.serviceClass = null; + $scope.serviceClasses = null; + + $scope.breadcrumbs = [ + { + title: "Provisioned Services", + link: "project/" + $routeParams.project + "/browse/service-instances" + } + ]; + + $scope.deprovision = function() { + ServiceInstancesService.deprovision($scope.serviceInstance); + }; + + var watches = []; + + var updateBreadcrumbs = function() { + if(!$scope.serviceInstance || !$scope.serviceClasses) { + return; + } + + $scope.breadcrumbs.push({ + title: $filter('serviceInstanceDisplayName')($scope.serviceInstance, $scope.serviceClasses) + }); + }; + + var updateServiceClassMetadata = function() { + if(!$scope.serviceInstance || !$scope.serviceClasses) { + return; + } + + var serviceClassName = _.get($scope.serviceInstance.spec, 'serviceClassName'); + $scope.serviceClass = _.get($scope.serviceClasses, [serviceClassName]); + $scope.plan = _.find(_.get($scope.serviceClass, 'plans'), {name: $scope.serviceInstance.spec.planName }); + }; + + var serviceResolved = function(service, action) { + $scope.loaded = true; + $scope.serviceInstance = service; + + if (action === "DELETED") { + $scope.alerts["deleted"] = { + type: "warning", + message: "This provisioned service has been deleted." + }; + } + + updateServiceClassMetadata(); + }; + + ProjectsService + .get($routeParams.project) + .then(_.spread(function(project, context) { + $scope.project = project; + $scope.projectContext = context; + + DataService + .get({ + group: 'servicecatalog.k8s.io', + resource: 'serviceinstances' + }, $routeParams.instance, context, { errorNotification: false }) + .then(function(service) { + + serviceResolved(service); + updateBreadcrumbs(); + + watches.push(DataService.watchObject({ + group: 'servicecatalog.k8s.io', + resource: 'serviceinstances' + }, $routeParams.instance, context, serviceResolved)); + + }, function(error) { + $scope.loaded = true; + $scope.alerts["load"] = { + type: "error", + message: "The service details could not be loaded.", + details: $filter('getErrorDetails')(error) + }; + }); + + DataService.list({ + group: 'servicecatalog.k8s.io', + resource: 'serviceclasses' + }, context, function(serviceClasses) { + $scope.serviceClasses = serviceClasses.by('metadata.name'); + updateServiceClassMetadata(); + updateBreadcrumbs(); + }); + + $scope.$on('$destroy', function(){ + DataService.unwatchAll(watches); + }); + + })); + }); diff --git a/app/scripts/controllers/serviceInstances.js b/app/scripts/controllers/serviceInstances.js new file mode 100644 index 0000000000..c424daa4f9 --- /dev/null +++ b/app/scripts/controllers/serviceInstances.js @@ -0,0 +1,98 @@ +'use strict'; + +angular.module('openshiftConsole') + .controller('ServiceInstancesController', function ($scope, + $filter, + $routeParams, + APIService, + BindingService, + Constants, + DataService, + LabelFilter, + Logger, + ProjectsService) { + $scope.alerts = {}; + $scope.bindingsByInstanceRef = {}; + $scope.emptyMessage = "Loading..."; + $scope.labelSuggestions = {}; + $scope.projectName = $routeParams.project; + $scope.serviceClasses = {}; + $scope.serviceInstances = {}; + $scope.unfilteredServiceInstances = {}; + + var watches = []; + + var updateFilter = function() { + $scope.serviceInstances = LabelFilter.getLabelSelector().select($scope.unfilteredServiceInstances); + }; + + var sortServiceInstances = function() { + $scope.unfilteredServiceInstances = BindingService.sortServiceInstances($scope.unfilteredServiceInstances, $scope.serviceClasses); + }; + + ProjectsService + .get($routeParams.project) + .then(_.spread(function(project, context) { + $scope.project = project; + $scope.projectContext = context; + + watches.push(DataService.watch({ + group: 'servicecatalog.k8s.io', + resource: 'serviceinstancecredentials' + }, context, function(bindings) { + var bindingsByName = bindings.by('metadata.name'); + $scope.bindingsByInstanceRef = _.groupBy(bindingsByName, 'spec.instanceRef.name'); + })); + + watches.push(DataService.watch({ + group: 'servicecatalog.k8s.io', + resource: 'serviceinstances' + }, context, function(serviceInstances) { + $scope.emptyMessage = "No provisioned services to show"; + $scope.unfilteredServiceInstances = serviceInstances.by('metadata.name'); + + sortServiceInstances(); + updateFilter(); + updateFilterWarning(); + + LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredServiceInstances, $scope.labelSuggestions); + LabelFilter.setLabelSuggestions($scope.labelSuggestions); + + Logger.log("provisioned services (subscribe)", $scope.unfilteredServiceInstances); + })); + + DataService.list({ + group: 'servicecatalog.k8s.io', + resource: 'serviceclasses' + }, context, function(serviceClasses) { + $scope.serviceClasses = serviceClasses.by('metadata.name'); + sortServiceInstances(); + updateFilter(); + }); + + function updateFilterWarning() { + if (!LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.serviceInstances) && !_.isEmpty($scope.unfilteredServiceInstances)) { + $scope.alerts["all-instances-filtered"] = { + type: "warning", + details: "The active filters are hiding all provisioned services." + }; + } + else { + delete $scope.alerts["all-instances-filtered"]; + } + } + + LabelFilter.onActiveFiltersChanged(function(labelSelector) { + // trigger a digest loop + $scope.$evalAsync(function() { + $scope.serviceInstances = labelSelector.select($scope.unfilteredServiceInstances); + updateFilterWarning(); + }); + }); + + $scope.$on('$destroy', function(){ + DataService.unwatchAll(watches); + }); + + })); + }); diff --git a/app/scripts/directives/overview/serviceInstanceRow.js b/app/scripts/directives/overview/serviceInstanceRow.js index 41b887d6a2..264a51e0dc 100644 --- a/app/scripts/directives/overview/serviceInstanceRow.js +++ b/app/scripts/directives/overview/serviceInstanceRow.js @@ -4,12 +4,10 @@ angular.module('openshiftConsole').component('serviceInstanceRow', { controller: [ '$filter', - '$uibModal', - 'DataService', + 'AuthorizationService', 'BindingService', 'ListRowUtils', - 'NotificationsService', - 'AuthorizationService', + 'ServiceInstancesService', ServiceInstanceRow ], controllerAs: 'row', @@ -22,16 +20,13 @@ }); function ServiceInstanceRow($filter, - $uibModal, - DataService, + AuthorizationService, BindingService, ListRowUtils, - NotificationsService, - AuthorizationService) { + ServiceInstancesService) { var row = this; _.extend(row, ListRowUtils.ui); - var getErrorDetails = $filter('getErrorDetails'); var serviceInstanceDisplayName = $filter('serviceInstanceDisplayName'); var getDescription = function() { @@ -95,12 +90,14 @@ if (AuthorizationService.canI({resource: 'serviceinstances', group: 'servicecatalog.k8s.io'}, 'delete')) { return true; } + return false; }; row.closeOverlayPanel = function() { _.set(row, 'overlay.panelVisible', false); }; + row.showOverlayPanel = function(panelName, state) { _.set(row, 'overlay.panelVisible', true); _.set(row, 'overlay.panelName', panelName); @@ -108,55 +105,7 @@ }; row.deprovision = function() { - var modalScope = { - alerts: { - deprovision: { - type: 'error', - message: 'Service \'' + row.apiObject.spec.serviceClassName + '\' will be deleted and no longer available.' - } - }, - detailsMarkup: 'Delete Service?', - okButtonText: 'Delete', - okButtonClass: 'btn-danger', - cancelButtonText: 'Cancel' - }; - // TODO: we probably have to handle bindings in here. - // either: - // - automatically remove the bindings - // - tell the user they must manually unbind before continue - $uibModal.open({ - animation: true, - templateUrl: 'views/modals/confirm.html', - controller: 'ConfirmModalController', - resolve: { - modalConfig: function() { - return modalScope; - } - } - }) - .result.then(function() { - NotificationsService.hideNotification("deprovision-service-error"); - DataService.delete({ - group: 'servicecatalog.k8s.io', - resource: 'serviceinstances' - }, - row.apiObject.metadata.name, - { namespace: row.apiObject.metadata.namespace }, - { propagationPolicy: null }) // TODO - remove once this is resolved https://github.com/kubernetes-incubator/service-catalog/issues/942 - .then(function() { - NotificationsService.addNotification({ - type: "success", - message: "Successfully deleted " + row.apiObject.metadata.name + "." - }); - }, function(err) { - NotificationsService.addNotification({ - id: "deprovision-service-error", - type: "error", - message: "An error occurred while deleting " + row.apiObject.metadata.name + ".", - details: getErrorDetails(err) - }); - }); - }); + ServiceInstancesService.deprovision(row.apiObject); }; } })(); diff --git a/app/scripts/directives/resourceServiceBindings.js b/app/scripts/directives/resourceServiceBindings.js index 6a21267c60..1aa8c2aa28 100644 --- a/app/scripts/directives/resourceServiceBindings.js +++ b/app/scripts/directives/resourceServiceBindings.js @@ -27,7 +27,7 @@ function ResourceServiceBindings($filter, DataService, BindingService, CatalogSe ctrl.bindableServiceInstances = []; ctrl.serviceClasses = []; ctrl.serviceInstances = []; - ctrl.showBindings = CatalogService.SERVICE_CATALOG_ENABLED && enableTechPreviewFeature('pod_presets'); + ctrl.showBindings = CatalogService.SERVICE_CATALOG_ENABLED && (_.get(ctrl, 'apiObject.kind') === 'ServiceInstance' || enableTechPreviewFeature('pod_presets')); var limitWatches = $filter('isIE')() || $filter('isEdge')(); var DEFAULT_POLL_INTERVAL = 60 * 1000; // milliseconds diff --git a/app/scripts/directives/overview/serviceBinding.js b/app/scripts/directives/serviceBinding.js similarity index 84% rename from app/scripts/directives/overview/serviceBinding.js rename to app/scripts/directives/serviceBinding.js index 02b56107da..2c343807ef 100644 --- a/app/scripts/directives/overview/serviceBinding.js +++ b/app/scripts/directives/serviceBinding.js @@ -1,7 +1,7 @@ 'use strict'; (function() { - angular.module('openshiftConsole').component('overviewServiceBinding', { + angular.module('openshiftConsole').component('serviceBinding', { controller: [ ServiceBinding ], @@ -9,10 +9,11 @@ bindings: { namespace: '<', binding: '<', + refApiObject: ' + + + +
+
+
+
+ + +
Loading...
+
+

+ + {{serviceInstance | serviceInstanceDisplayName:serviceClasses}} + created +

+ +
+
+
+
+
+
+
+ + + Details +
+
+
+

+
+
Description:
+
+

+

+
+
Status:
+
+ + {{serviceInstance | serviceInstanceStatus | sentenceCase}} +
+
Status Reason:
+
+ {{serviceInstance | serviceInstanceConditionMessage}} +
+
+
+
+ + +
+
+ +
+
+ + Events + + +
+
+
+
+
+
+
+
diff --git a/app/views/overview/_service-binding.html b/app/views/directives/_service-binding.html similarity index 80% rename from app/views/overview/_service-binding.html rename to app/views/directives/_service-binding.html index 77c2966f09..ba05118684 100644 --- a/app/views/overview/_service-binding.html +++ b/app/views/directives/_service-binding.html @@ -3,7 +3,12 @@

- {{$ctrl.serviceClass.externalMetadata.displayName || $ctrl.serviceClass.metadata.name}} + + {{$ctrl.serviceClass.externalMetadata.displayName || $ctrl.serviceClass.metadata.name}} + + + {{$ctrl.binding.spec.secretName}} + {{$ctrl.binding.spec.instanceRef.name}} diff --git a/app/views/directives/_status-icon.html b/app/views/directives/_status-icon.html index 4302e1d2e7..96bd9dda5a 100644 --- a/app/views/directives/_status-icon.html +++ b/app/views/directives/_status-icon.html @@ -7,6 +7,7 @@ + diff --git a/app/views/directives/resource-service-bindings.html b/app/views/directives/resource-service-bindings.html index c06dc8cf25..0240b77e12 100644 --- a/app/views/directives/resource-service-bindings.html +++ b/app/views/directives/resource-service-bindings.html @@ -1,12 +1,13 @@
-

Service Bindings

- Bindings

+ - +
diff --git a/app/views/overview/_service-bindings.html b/app/views/overview/_service-bindings.html index 1eda9f8d0a..2c6503249f 100644 --- a/app/views/overview/_service-bindings.html +++ b/app/views/overview/_service-bindings.html @@ -1,13 +1,13 @@
- - +
diff --git a/app/views/overview/_service-instance-row.html b/app/views/overview/_service-instance-row.html index a7fd8d8025..769c1d0bbc 100644 --- a/app/views/overview/_service-instance-row.html +++ b/app/views/overview/_service-instance-row.html @@ -6,7 +6,7 @@

- +

diff --git a/app/views/service-instances.html b/app/views/service-instances.html new file mode 100644 index 0000000000..1b5790fe01 --- /dev/null +++ b/app/views/service-instances.html @@ -0,0 +1,84 @@ + + + + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameStatusCreatedBindings
{{emptyMessage}}
{{serviceInstance | serviceInstanceDisplayName:serviceClasses}} +
+ + {{serviceInstance | serviceInstanceStatus | sentenceCase}} +
+
+ ago + +
+

+ + {{application.metadata.name}} + + + {{firstBinding.spec.secretName}} + + + +

+
+
+ No bindings +
+
+
+
+
+
+
+
+
diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js index 6193424407..3445d4aa89 100644 --- a/dist/scripts/scripts.js +++ b/dist/scripts/scripts.js @@ -1,9 +1,9 @@ "use strict"; -function OverviewController(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f, g, h, v, y, b, C, S, w, k, j) { +function OverviewController(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f, g, h, v, y, b, C, S, w, k, j) { var P = this, R = t("isIE")() || t("isEdge")(); e.projectName = n.project, P.catalogLandingPageEnabled = !c.DISABLE_SERVICE_CATALOG_LANDING_PAGE; -var T, I, E = t("annotation"), N = t("buildConfigForBuild"), D = t("deploymentIsInProgress"), A = t("imageObjectRef"), B = t("isJenkinsPipelineStrategy"), L = t("isNewerResource"), U = t("label"), O = t("podTemplate"), F = {}, x = {}, M = {}, V = P.state = { +var I, T, E = t("annotation"), N = t("buildConfigForBuild"), D = t("deploymentIsInProgress"), A = t("imageObjectRef"), B = t("isJenkinsPipelineStrategy"), L = t("isNewerResource"), U = t("label"), O = t("podTemplate"), F = {}, x = {}, M = {}, V = P.state = { alerts: {}, builds: {}, clusterQuotas: {}, @@ -24,9 +24,9 @@ bindingsByApplicationUID: {}, applicationsByBinding: {}, showMetrics: !1 }; -P.state.breakpoint = m.getBreakpoint(); +P.state.breakpoint = p.getBreakpoint(); var q = _.throttle(function() { -var t = m.getBreakpoint(); +var t = p.getBreakpoint(); P.state.breakpoint !== t && e.$evalAsync(function() { P.state.breakpoint = t; }); @@ -155,13 +155,13 @@ V.notificationsByObjectUID[n] = t || {}; }, de = function(e) { var t = H(e); return t ? _.get(V, [ "notificationsByObjectUID", t ], {}) : {}; -}, me = function(e) { +}, pe = function(e) { if (H(e)) { var t = le(e), a = k.getPodAlerts(t, n.project); ue(e, a); } -}, pe = function(e) { -_.each(e, me); +}, me = function(e) { +_.each(e, pe); }, fe = function(e) { var t = z(e); return t ? M[t] : null; @@ -195,7 +195,7 @@ _.assign(t, n); }, Ce = function() { _.each(P.deployments, be); }, Se = function() { -pe(P.replicationControllers), pe(P.replicaSets), pe(P.statefulSets), pe(P.monopods); +me(P.replicationControllers), me(P.replicaSets), me(P.statefulSets), me(P.monopods); }, _e = _.debounce(function() { e.$evalAsync(function() { Se(), ve(), Ce(); @@ -210,15 +210,15 @@ return "Succeeded" !== e.status.phase && "Failed" !== e.status.phase && (!U(e, " V.podsByOwnerUID = C.groupByOwnerUID(P.pods), P.monopods = _.filter(V.podsByOwnerUID[""], je); }, Re = function(e) { return !!_.get(e, "status.replicas") || (!E(e, "deploymentConfig") || D(e)); -}, Te = function(e) { +}, Ie = function(e) { return E(e, "deploymentConfig"); -}, Ie = function() { +}, Te = function() { if (P.deploymentConfigs && P.replicationControllers) { var e = []; P.replicationControllersByDeploymentConfig = {}, P.currentByDeploymentConfig = {}, M = {}; var t = {}, n = {}; _.each(P.replicationControllers, function(a) { -var r = Te(a) || ""; +var r = Ie(a) || ""; (!r || !P.deploymentConfigs[r] && _.get(a, "status.replicas")) && e.push(a); var o = M[r]; o && !L(a, o) || (M[r] = a); @@ -236,9 +236,9 @@ if (_.get(e, "status.replicas")) return !0; var n = u.getRevision(e); return !n || !!t && u.getRevision(t) === n; }, Ne = function() { -P.replicaSets && T && (P.replicaSetsByDeploymentUID = b.groupByControllerUID(P.replicaSets), P.currentByDeploymentUID = {}, _.each(P.replicaSetsByDeploymentUID, function(e, t) { +P.replicaSets && I && (P.replicaSetsByDeploymentUID = b.groupByControllerUID(P.replicaSets), P.currentByDeploymentUID = {}, _.each(P.replicaSetsByDeploymentUID, function(e, t) { if (t) { -var n = T[t], a = _.filter(e, function(e) { +var n = I[t], a = _.filter(e, function(e) { return Ee(e, n); }), r = u.sortByRevision(a); P.replicaSetsByDeploymentUID[t] = r, P.currentByDeploymentUID[t] = _.head(r); @@ -376,31 +376,31 @@ V.bindableServiceInstances = w.filterBindableServiceInstances(V.serviceInstances S.get(n.project).then(_.spread(function(n, a) { V.project = e.project = n, V.context = a; var r = function() { -P.pods && p.fetchReferencedImageStreamImages(P.pods, V.imagesByDockerReference, V.imageStreamImageRefByDockerReference, a); +P.pods && m.fetchReferencedImageStreamImages(P.pods, V.imagesByDockerReference, V.imageStreamImageRefByDockerReference, a); }; Ye.push(l.watch("pods", a, function(e) { -P.pods = e.by("metadata.name"), Pe(), r(), _e(), $e(P.monopods), pe(P.monopods), we(P.monopods), ie(), h.log("pods (subscribe)", P.pods); +P.pods = e.by("metadata.name"), Pe(), r(), _e(), $e(P.monopods), me(P.monopods), we(P.monopods), ie(), h.log("pods (subscribe)", P.pods); })), Ye.push(l.watch("replicationcontrollers", a, function(e) { -P.replicationControllers = e.by("metadata.name"), Ie(), $e(P.vanillaReplicationControllers), $e(P.monopods), pe(P.vanillaReplicationControllers), we(P.vanillaReplicationControllers), Qe(), ie(), h.log("replicationcontrollers (subscribe)", P.replicationControllers); +P.replicationControllers = e.by("metadata.name"), Te(), $e(P.vanillaReplicationControllers), $e(P.monopods), me(P.vanillaReplicationControllers), we(P.vanillaReplicationControllers), Qe(), ie(), h.log("replicationcontrollers (subscribe)", P.replicationControllers); })), Ye.push(l.watch("deploymentconfigs", a, function(e) { -P.deploymentConfigs = e.by("metadata.name"), Ie(), $e(P.deploymentConfigs), $e(P.vanillaReplicationControllers), we(P.deploymentConfigs), Ce(), He(), Ge(), Qe(), ie(), h.log("deploymentconfigs (subscribe)", P.deploymentConfigs); +P.deploymentConfigs = e.by("metadata.name"), Te(), $e(P.deploymentConfigs), $e(P.vanillaReplicationControllers), we(P.deploymentConfigs), Ce(), He(), Ge(), Qe(), ie(), h.log("deploymentconfigs (subscribe)", P.deploymentConfigs); })), Ye.push(l.watch({ group: "extensions", resource: "replicasets" }, a, function(e) { -P.replicaSets = e.by("metadata.name"), Ne(), $e(P.vanillaReplicaSets), $e(P.monopods), pe(P.vanillaReplicaSets), we(P.vanillaReplicaSets), Qe(), ie(), h.log("replicasets (subscribe)", P.replicaSets); +P.replicaSets = e.by("metadata.name"), Ne(), $e(P.vanillaReplicaSets), $e(P.monopods), me(P.vanillaReplicaSets), we(P.vanillaReplicaSets), Qe(), ie(), h.log("replicasets (subscribe)", P.replicaSets); })), Ye.push(l.watch({ group: "apps", resource: "deployments" }, a, function(e) { -T = e.by("metadata.uid"), P.deployments = _.sortBy(T, "metadata.name"), Ne(), $e(P.deployments), $e(P.vanillaReplicaSets), we(P.deployments), Qe(), ie(), h.log("deployments (subscribe)", P.deploymentsByUID); +I = e.by("metadata.uid"), P.deployments = _.sortBy(I, "metadata.name"), Ne(), $e(P.deployments), $e(P.vanillaReplicaSets), we(P.deployments), Qe(), ie(), h.log("deployments (subscribe)", P.deploymentsByUID); })), Ye.push(l.watch("builds", a, function(e) { V.builds = e.by("metadata.name"), Ke(), h.log("builds (subscribe)", V.builds); })), Ye.push(l.watch({ group: "apps", resource: "statefulsets" }, a, function(e) { -P.statefulSets = e.by("metadata.name"), $e(P.statefulSets), $e(P.monopods), pe(P.statefulSets), we(P.statefulSets), Qe(), ie(), h.log("statefulsets (subscribe)", P.statefulSets); +P.statefulSets = e.by("metadata.name"), $e(P.statefulSets), $e(P.monopods), me(P.statefulSets), we(P.statefulSets), Qe(), ie(), h.log("statefulsets (subscribe)", P.statefulSets); }, { poll: R, pollInterval: 6e4 @@ -429,7 +429,7 @@ P.horizontalPodAutoscalers = e.by("metadata.name"), Le(), h.log("autoscalers (su poll: R, pollInterval: 6e4 })), Ye.push(l.watch("imagestreams", a, function(e) { -I = e.by("metadata.name"), p.buildDockerRefMapForImageStreams(I, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", I); +T = e.by("metadata.name"), m.buildDockerRefMapForImageStreams(T, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", T); }, { poll: R, pollInterval: 6e4 @@ -496,7 +496,7 @@ l.unwatchAll(Ye), $(window).off(".overview"); function ResourceServiceBindings(e, t, n, a) { var r = this, o = e("enableTechPreviewFeature"); -r.bindings = [], r.bindableServiceInstances = [], r.serviceClasses = [], r.serviceInstances = [], r.showBindings = a.SERVICE_CATALOG_ENABLED && o("pod_presets"); +r.bindings = [], r.bindableServiceInstances = [], r.serviceClasses = [], r.serviceInstances = [], r.showBindings = a.SERVICE_CATALOG_ENABLED && ("ServiceInstance" === _.get(r, "apiObject.kind") || o("pod_presets")); var i = e("isIE")() || e("isEdge")(), s = [], c = e("canI"), l = function() { r.apiObject && r.bindings && (r.bindings = n.getBindingsForResource(r.bindings, r.apiObject)); }, u = function() { @@ -771,6 +771,15 @@ prefixes: [ "/browse/services/" ] label: "Routes", href: "/browse/routes", prefixes: [ "/browse/routes/", "/create-route", "/edit/routes/" ] +}, { +label: "Provisioned Services", +href: "/browse/service-instances", +prefixes: [ "/browse/service-instances/" ], +canI: { +resource: "serviceinstances", +group: "servicecatalog.k8s.io", +verb: "list" +} } ] } ] }, { @@ -1117,6 +1126,14 @@ reloadOnSearch: !1 templateUrl: "views/browse/service.html", controller: "ServiceController", reloadOnSearch: !1 +}).when("/project/:project/browse/service-instances", { +templateUrl: "views/service-instances.html", +controller: "ServiceInstancesController", +reloadOnSearch: !1 +}).when("/project/:project/browse/service-instances/:instance", { +templateUrl: "views/browse/service-instance.html", +controller: "ServiceInstanceController", +reloadOnSearch: !1 }).when("/project/:project/browse/storage", { templateUrl: "views/storage.html", controller: "StorageController", @@ -1651,8 +1668,12 @@ c.segment("images").segmentCoded(s); break; case "ImageStreamTag": -var m = s.indexOf(":"); -c.segment("images").segmentCoded(s.substring(0, m)).segmentCoded(s.substring(m + 1)); +var p = s.indexOf(":"); +c.segment("images").segmentCoded(s.substring(0, p)).segmentCoded(s.substring(p + 1)); +break; + +case "ServiceInstance": +c.segment("service-instances").segmentCoded(s); break; case "StatefulSet": @@ -1668,15 +1689,15 @@ c.segment(i.kindToResource(t)).segmentCoded(s); break; default: -var p; -if (e.metadata) p = i.objectToResourceGroupVersion(e); else if (_.get(r, "apiVersion")) { +var m; +if (e.metadata) m = i.objectToResourceGroupVersion(e); else if (_.get(r, "apiVersion")) { var f = i.kindToResource(t), g = i.parseGroupVersion(r.apiVersion); -g.resource = f, p = i.toResourceGroupVersion(g); -} else p = i.toResourceGroupVersion(i.kindToResource(t)); -if (!i.apiInfo(p)) return null; +g.resource = f, m = i.toResourceGroupVersion(g); +} else m = i.toResourceGroupVersion(i.kindToResource(t)); +if (!i.apiInfo(m)) return null; c.segment("other").search({ kind: t, -group: p.group +group: m.group }); } return _.get(r, "tab") && c.setSearch("tab", r.tab), c.toString(); @@ -1712,6 +1733,7 @@ replicationcontrollers: "deployments", routes: "routes", secrets: "secrets", services: "services", +serviceinstances: "service-instances", persistentvolumeclaims: "storage", statefulsets: "stateful-sets" }; @@ -1820,10 +1842,10 @@ return e.find("base").attr("href") || "/"; var o = e("annotation"), i = e("buildConfigForBuild"), s = e("getErrorDetails"), c = e("isIncompleteBuild"), l = e("isJenkinsPipelineStrategy"), u = e("isNewerResource"), d = function(e) { var t = o(e, "buildNumber") || parseInt(e.metadata.name.match(/(\d+)$/), 10); return isNaN(t) ? null : t; -}, m = function(e, t) { +}, p = function(e, t) { var n = d(e); return t && n ? t + " #" + n : e.metadata.name; -}, p = function(e) { +}, m = function(e) { return "true" === o(e, "openshift.io/build-config.paused"); }, f = function(e) { return e.status.startTimestamp || e.metadata.creationTimestamp; @@ -1850,7 +1872,7 @@ name: e.metadata.name namespace: e.metadata.namespace }; return n.create("buildconfigs/instantiate", e.metadata.name, i, c).then(function(t) { -var n, i, s = m(t, e.metadata.name), c = _.get(e, "spec.runPolicy"); +var n, i, s = p(t, e.metadata.name), c = _.get(e, "spec.runPolicy"); "Serial" === c || "SerialLatestOnly" === c ? (n = _.capitalize(o) + " " + s + " successfully queued.", i = "Builds for " + e.metadata.name + " are configured to run one at a time.") : n = _.capitalize(o) + " " + s + " successfully created.", r.addNotification({ type: "success", message: n, @@ -1869,7 +1891,7 @@ details: s(e) }); }, cancelBuild: function(e, a) { -var o = l(e) ? "pipeline" : "build", i = m(e, a), c = { +var o = l(e) ? "pipeline" : "build", i = p(e, a), c = { namespace: e.metadata.namespace }, u = angular.copy(e); return u.status.cancelled = !0, n.update("builds", u.metadata.name, u, c).then(function() { @@ -1886,7 +1908,7 @@ details: s(e) }; }, cloneBuild: function(e, o) { -var i = l(e) ? "pipeline" : "build", c = m(e, o), u = { +var i = l(e) ? "pipeline" : "build", c = p(e, o), u = { kind: "BuildRequest", apiVersion: "v1", metadata: { @@ -1896,7 +1918,7 @@ name: e.metadata.name namespace: e.metadata.namespace }; return n.create("builds/clone", e.metadata.name, u, d).then(function(e) { -var t = m(e, o); +var t = p(e, o); r.addNotification({ type: "success", message: _.capitalize(i) + " " + c + " is being rebuilt as " + t + ".", @@ -1913,9 +1935,9 @@ details: s(e) }), t.reject(); }); }, -isPaused: p, +isPaused: m, canBuild: function(e) { -return !!e && !e.metadata.deletionTimestamp && !p(e); +return !!e && !e.metadata.deletionTimestamp && !m(e); }, usesDeploymentConfigs: function(e) { var t = o(e, "pipeline.alpha.openshift.io/uses"); @@ -1944,7 +1966,7 @@ t && !t(e) || u(e, n[a]) && (n[a] = e); }), n; }, getBuildNumber: d, -getBuildDisplayName: m, +getBuildDisplayName: p, getStartTimestsamp: f, getDuration: function(e) { var t = _.get(e, "status.duration"); @@ -2042,8 +2064,8 @@ details: a("getErrorDetails")(e) }); }); }); -var u = a("annotationName")("deploymentStatus"), d = a("annotationName")("deploymentStatusReason"), m = a("annotationName")("deploymentCancelled"); -i.metadata.annotations[u] = "New", delete i.metadata.annotations[d], delete i.metadata.annotations[m], n.update("replicationcontrollers", c, i, r).then(function() { +var u = a("annotationName")("deploymentStatus"), d = a("annotationName")("deploymentStatusReason"), p = a("annotationName")("deploymentCancelled"); +i.metadata.annotations[u] = "New", delete i.metadata.annotations[d], delete i.metadata.annotations[p], n.update("replicationcontrollers", c, i, r).then(function() { t.addNotification({ type: "success", message: "Retrying deployment " + c + " of " + l + "." @@ -2056,7 +2078,7 @@ details: a("getErrorDetails")(e) }); }); }, i.prototype.rollbackToDeployment = function(r, o, i, c, l) { -var u = r.metadata.name, d = s(r, "deploymentConfig"), m = { +var u = r.metadata.name, d = s(r, "deploymentConfig"), p = { apiVersion: "apps.openshift.io/v1", kind: "DeploymentConfigRollback", name: d, @@ -2073,7 +2095,7 @@ includeTriggers: c n.create({ group: "apps.openshift.io", resource: "deploymentconfigs/rollback" -}, d, m, l).then(function(r) { +}, d, p, l).then(function(r) { var o = e.objectToResourceGroupVersion(r); n.update(o, d, r, l).then(function(e) { t.addNotification({ @@ -2452,14 +2474,14 @@ return e ? e + "/m/stats/query" : e; function l(e) { return o().then(function(t) { var n; -return n = "counter" === e.type ? t + f : t + p, URI.expand(n, { +return n = "counter" === e.type ? t + f : t + m, URI.expand(n, { podUID: e.pod.metadata.uid, containerName: e.containerName, metric: e.metric }).toString(); }); } -var u, d, m, p = "/gauges/{containerName}%2F{podUID}%2F{metric}/data", f = "/counters/{containerName}%2F{podUID}%2F{metric}/data", g = function(e) { +var u, d, p, m = "/gauges/{containerName}%2F{podUID}%2F{metric}/data", f = "/counters/{containerName}%2F{podUID}%2F{metric}/data", g = function(e) { var t = e.split("/"); return { podUID: t[1], @@ -2485,10 +2507,10 @@ return _.each(e.data.counter, n), _.each(e.data.gauge, n), t; return { isAvailable: function(e) { return o().then(function(n) { -return !!n && (!e || !!d || !m && t.get(n).then(function() { +return !!n && (!e || !!d || !p && t.get(n).then(function() { return d = !0, !0; }, function(e) { -return m = !0, a.$broadcast("metrics-connection-failed", { +return p = !0, a.$broadcast("metrics-connection-failed", { url: n, response: e }), !1; @@ -2814,8 +2836,8 @@ e.maxLimitRequestRatio && (a = e.maxLimitRequestRatio[t]) && (!s.maxLimitRequest } }); }); -var l, u, d, m; -return s.min && (l = c(t, a)) && (u = r(s.min), d = Math.ceil(u[0] / (l / 100)), m = u[1] || "", s.min = "" + d + m), s; +var l, u, d, p; +return s.min && (l = c(t, a)) && (u = r(s.min), d = Math.ceil(u[0] / (l / 100)), p = u[1] || "", s.min = "" + d + p), s; }; return { getEffectiveLimitRange: d, @@ -2824,13 +2846,13 @@ isRequestCalculated: l, isLimitCalculated: u, validatePodLimits: function(t, r, o, i) { if (!o || !o.length) return []; -var s = d(t, r, "Pod", i), c = d(t, r, "Container", i), m = 0, p = 0, f = s.min && n(s.min), g = s.max && n(s.max), h = [], v = e("computeResourceLabel")(r, !0); +var s = d(t, r, "Pod", i), c = d(t, r, "Container", i), p = 0, m = 0, f = s.min && n(s.min), g = s.max && n(s.max), h = [], v = e("computeResourceLabel")(r, !0); return angular.forEach(o, function(e) { var t = e.resources || {}, a = t.requests && t.requests[r] || c.defaultRequest; -a && (m += n(a)); +a && (p += n(a)); var o = t.limits && t.limits[r] || c.defaultLimit; -o && (p += n(o)); -}), l(r, i) || (f && m < f && h.push(v + " request total for all containers is less than pod minimum (" + a(s.min, r) + ")."), g && m > g && h.push(v + " request total for all containers is greater than pod maximum (" + a(s.max, r) + ").")), u(r, i) || (f && p < f && h.push(v + " limit total for all containers is less than pod minimum (" + a(s.min, r) + ")."), g && p > g && h.push(v + " limit total for all containers is greater than pod maximum (" + a(s.max, r) + ").")), h; +o && (m += n(o)); +}), l(r, i) || (f && p < f && h.push(v + " request total for all containers is less than pod minimum (" + a(s.min, r) + ")."), g && p > g && h.push(v + " request total for all containers is greater than pod maximum (" + a(s.max, r) + ").")), u(r, i) || (f && m < f && h.push(v + " limit total for all containers is less than pod minimum (" + a(s.min, r) + ")."), g && m > g && h.push(v + " limit total for all containers is greater than pod maximum (" + a(s.max, r) + ").")), h; } }; } ]), angular.module("openshiftConsole").factory("RoutesService", [ "$filter", function(e) { @@ -2936,9 +2958,9 @@ return !!n.getEffectiveLimitRange(a, e, "Container", r)[t]; return l(e, "defaultRequest", t, n); }, d = function(e, t, n) { return l(e, "defaultLimit", t, n); -}, m = function(e, t, a) { +}, p = function(e, t, a) { return !(!s("cpu", e) && !u("cpu", t, a)) || (!(!c("cpu", e) && !d("cpu", t, e)) || !!n.isLimitCalculated("cpu", a) && (c("memory", e) || d("memory", t, a))); -}, p = e("humanizeKind"), f = e("hasDeploymentConfig"); +}, m = e("humanizeKind"), f = e("hasDeploymentConfig"); return { convertRequestPercentToLimit: function(e, t) { var n = o(t); @@ -2954,7 +2976,7 @@ if (!e) return e; var a = e / (n / 100); return Math.round(a); }, -hasCPURequest: m, +hasCPURequest: p, filterHPA: function(e, t, n) { return _.filter(e, function(e) { return e.spec.scaleTargetRef.kind === t && e.spec.scaleTargetRef.name === n; @@ -2968,7 +2990,7 @@ message: "Metrics might not be configured by your cluster administrator. Metrics reason: "MetricsNotAvailable" }); var s, c, l = _.get(e, "spec.template.spec.containers", []); -return m(l, o, i) || (s = p(e.kind), n.isRequestCalculated("cpu", i) ? (c = "This " + s + " does not have any containers with a CPU limit set. Autoscaling will not work without a CPU limit.", n.isLimitCalculated("cpu", i) && (c += " The CPU limit will be automatically calculated from the container memory limit.")) : c = "This " + s + " does not have any containers with a CPU request set. Autoscaling will not work without a CPU request.", a.push({ +return p(l, o, i) || (s = m(e.kind), n.isRequestCalculated("cpu", i) ? (c = "This " + s + " does not have any containers with a CPU limit set. Autoscaling will not work without a CPU limit.", n.isLimitCalculated("cpu", i) && (c += " The CPU limit will be automatically calculated from the container memory limit.")) : c = "This " + s + " does not have any containers with a CPU request set. Autoscaling will not work without a CPU request.", a.push({ message: c, reason: "NoCPURequest" })), _.size(r) > 1 && a.push({ @@ -3317,8 +3339,8 @@ resources: {} status: {} }; n.push(d); -var m; -return _.isEmpty(e.ports) || (m = { +var p; +return _.isEmpty(e.ports) || (p = { kind: "Service", apiVersion: "v1", metadata: { @@ -3334,7 +3356,7 @@ ports: _.map(e.ports, function(e) { return t.getServicePort(e); }) } -}, n.push(m)), n; +}, n.push(p)), n; }, getEnvironment: function(e) { return _.map(_.get(e, "image.dockerImageMetadata.Config.Env"), function(e) { @@ -3439,11 +3461,11 @@ return !0; }); }, u = function(e, t) { return e ? "Pod" === e.kind ? l(e, t) : _.has(e, "spec.template") ? l(e.spec.template, t) : t : t; -}, d = t("humanizeQuotaResource"), m = t("humanizeKind"), p = function(e, t, n) { +}, d = t("humanizeQuotaResource"), p = t("humanizeKind"), m = function(e, t, n) { var a = e.status.total || e.status; if (i(a.hard[n]) <= i(a.used[n])) { var r, o; -return r = "Pod" === t.kind ? "You will not be able to create the " + m(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + m(t.kind) + " '" + t.metadata.name + "' but no pods will be created until resources are freed.", o = "pods" === n ? "You are at your quota for pods." : "You are at your quota for " + d(n) + " on pods.", { +return r = "Pod" === t.kind ? "You will not be able to create the " + p(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + p(t.kind) + " '" + t.metadata.name + "' but no pods will be created until resources are freed.", o = "pods" === n ? "You are at your quota for pods." : "You are at your quota for " + d(n) + " on pods.", { type: "Pod" === t.kind ? "error" : "warning", message: o, details: r, @@ -3471,7 +3493,7 @@ var t = _.get(e, o); t && (s += i(t)); }), i(r.hard[a]) < i(r.used[a]) + s) { var c; -return c = "Pod" === t.kind ? "You may not be able to create the " + m(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + m(t.kind) + " '" + t.metadata.name + "' but you may not have pods created until resources are freed.", { +return c = "Pod" === t.kind ? "You may not be able to create the " + p(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + p(t.kind) + " '" + t.metadata.name + "' but you may not have pods created until resources are freed.", { type: "warning", message: "You are close to your quota for " + d(a) + " on pods.", details: c, @@ -3487,7 +3509,7 @@ var n = [], a = "Pod" === e.kind ? e : _.get(e, "spec.template"); return a ? (_.each([ "cpu", "memory", "requests.cpu", "requests.memory", "limits.cpu", "limits.memory", "pods" ], function(r) { var i = t.status.total || t.status; if (("Pod" !== e.kind || "pods" !== r) && !o(i.hard[r])) { -var s = p(t, e, r); +var s = m(t, e, r); if (s) n.push(s); else if ("pods" !== r) { var c = g(t, e, a, r); c && n.push(c); @@ -3499,14 +3521,14 @@ var r = []; return t && n ? (_.each(t, function(t) { var s = u(t, n), c = u(t, a), l = e.objectToResourceGroupVersion(t); if (l) { -var d = e.kindToResource(t.kind, !0), p = m(t.kind), f = ""; +var d = e.kindToResource(t.kind, !0), m = p(t.kind), f = ""; l.group && (f = l.group + "/"), f += l.resource; var g = function(e) { var n = e.status.total || e.status; !o(n.hard[f]) && i(n.hard[f]) <= i(n.used[f]) && r.push({ type: "error", -message: "You are at your quota of " + n.hard[f] + " " + ("1" === n.hard[f] ? p : d) + " in this project.", -details: "You will not be able to create the " + p + " '" + t.metadata.name + "'.", +message: "You are at your quota of " + n.hard[f] + " " + ("1" === n.hard[f] ? m : d) + " in this project.", +details: "You will not be able to create the " + m + " '" + t.metadata.name + "'.", links: [ { href: "project/" + e.metadata.namespace + "/quota", label: "View Quota", @@ -3592,26 +3614,26 @@ details: "The following resource versions are not supported by the server: " + d }); } if (s.length) { -var m = _.uniq(_.map(s, function(e) { +var p = _.uniq(_.map(s, function(e) { return a(e.kind); })); o.push({ type: "warning", message: "This will create resources outside of the project, which might impact all users of the cluster.", -details: "Typically only cluster administrators can create these resources. The cluster-level resources being created are: " + m.join(", ") +details: "Typically only cluster administrators can create these resources. The cluster-level resources being created are: " + p.join(", ") }); } if (c.length) { -var p = []; +var m = []; _.each(c, function(e) { _.each(e.subjects, function(e) { var t = a(e.kind) + " "; -"ServiceAccount" === e.kind && (t += (e.namespace || r) + "/"), t += e.name, p.push(t); +"ServiceAccount" === e.kind && (t += (e.namespace || r) + "/"), t += e.name, m.push(t); }); -}), p = _.uniq(p), o.push({ +}), m = _.uniq(m), o.push({ type: "warning", message: "This will grant permissions to your project.", -details: "Permissions are being granted to: " + p.join(", ") +details: "Permissions are being granted to: " + m.join(", ") }); } if (l.length && o.push({ @@ -4226,7 +4248,55 @@ controller: !0 }); } }; -}), angular.module("openshiftConsole").controller("LandingPageController", [ "$scope", "$rootScope", "AuthService", "Catalog", "Constants", "DataService", "Navigate", "NotificationsService", "RecentlyViewedServiceItems", "GuidedTourService", "HTMLService", "$timeout", "$q", "$routeParams", "$location", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f) { +}), angular.module("openshiftConsole").factory("ServiceInstancesService", [ "$filter", "$uibModal", "DataService", "NotificationsService", function(e, t, n, a) { +return { +deprovision: function(r) { +var o = e("getErrorDetails"), i = { +alerts: { +deprovision: { +type: "error", +message: "Service '" + r.spec.serviceClassName + "' will be deleted and no longer available." +} +}, +detailsMarkup: "Delete Service?", +okButtonText: "Delete", +okButtonClass: "btn-danger", +cancelButtonText: "Cancel" +}; +return t.open({ +animation: !0, +templateUrl: "views/modals/confirm.html", +controller: "ConfirmModalController", +resolve: { +modalConfig: function() { +return i; +} +} +}).result.then(function() { +return a.hideNotification("deprovision-service-error"), n.delete({ +group: "servicecatalog.k8s.io", +resource: "serviceinstances" +}, r.metadata.name, { +namespace: r.metadata.namespace +}, { +propagationPolicy: null +}).then(function() { +a.addNotification({ +type: "success", +message: "Successfully deleted provisioned service " + r.metadata.name + "." +}); +}, function(e) { +a.addNotification({ +id: "deprovision-service-error", +type: "error", +message: "An error occurred while deleting provisioned service " + r.metadata.name + ".", +details: o(e) +}); +}); +}); +} +}; +} ]), angular.module("openshiftConsole").controller("LandingPageController", [ "$scope", "$rootScope", "AuthService", "Catalog", "Constants", "DataService", "Navigate", "NotificationsService", "RecentlyViewedServiceItems", "GuidedTourService", "HTMLService", "$timeout", "$q", "$routeParams", "$location", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f) { function g() { var n = f.search().serviceClass; if (n) { @@ -4239,7 +4309,7 @@ name: n }); if (a) return void e.$broadcast("open-overlay-panel", a); } -if (v) if (p.startTour) d(function() { +if (v) if (m.startTour) d(function() { f.replace(), f.search("startTour", null), e.startGuidedTour(); }, 500); else if (_.get(h, "auto_launch")) { var r = "openshift/viewedHomePage/" + t.user.metadata.name; @@ -4262,7 +4332,7 @@ return "PartialObjectMetadata" === e.kind; }, C = function(e) { return b(e) ? o.get("templates", e.metadata.name, { namespace: e.metadata.namespace -}) : m.when(e); +}) : p.when(e); }; e.templateSelected = function(t) { C(t).then(function(t) { @@ -4314,12 +4384,12 @@ return _.get(t, [ e.metadata.uid, "cleared" ]); } }; } ]), angular.module("openshiftConsole").controller("ProjectsController", [ "$scope", "$filter", "$location", "$route", "$timeout", "AuthService", "DataService", "KeywordService", "Navigate", "Logger", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u) { -var d, m, p = [], f = [], g = !1; +var d, p, m = [], f = [], g = !1; e.alerts = e.alerts || {}, e.loading = !0, e.showGetStarted = !1, e.canCreate = void 0, e.search = { text: "" }, e.limitListTo = 250; var h, v = [ "metadata.name", 'metadata.annotations["openshift.io/display-name"]', 'metadata.annotations["openshift.io/description"]', 'metadata.annotations["openshift.io/requester"]' ], y = function() { -e.projects = s.filterForKeywords(m, v, f); +e.projects = s.filterForKeywords(p, v, f); }, b = t("displayName"), C = function() { var t = _.get(e, "sortConfig.currentField.id"); h !== t && (e.sortConfig.isAscending = "metadata.creationTimestamp" !== t); @@ -4328,15 +4398,15 @@ return b(e).toLowerCase(); }, a = e.sortConfig.isAscending ? "asc" : "desc"; switch (t) { case 'metadata.annotations["openshift.io/display-name"]': -m = _.orderBy(d, [ n, "metadata.name" ], [ a ]); +p = _.orderBy(d, [ n, "metadata.name" ], [ a ]); break; case 'metadata.annotations["openshift.io/requester"]': -m = _.orderBy(d, [ t, n ], [ a, "asc" ]); +p = _.orderBy(d, [ t, n ], [ a, "asc" ]); break; default: -m = _.orderBy(d, [ t ], [ a ]); +p = _.orderBy(d, [ t ], [ a ]); } h = t; }, S = function() { @@ -4387,7 +4457,7 @@ c.toProjectOverview(e); e.keywords = f = s.generateKeywords(t), e.$applyAsync(y); }, 350)), o.withUser().then(function() { u.list().then(function(t) { -e.isProjectListIncomplete = u.isProjectListIncomplete(), w(t), !e.isProjectListIncomplete && _.size(d) <= 250 && (p.push(u.watch(e, w)), g = !0); +e.isProjectListIncomplete = u.isProjectListIncomplete(), w(t), !e.isProjectListIncomplete && _.size(d) <= 250 && (m.push(u.watch(e, w)), g = !0); }, function() { e.isProjectListIncomplete = !0, e.loading = !1, d = [], S(); }); @@ -4407,7 +4477,7 @@ e.message && r.push(e.message); }), _.isEmpty(r) || (e.newProjectMessage = r.join("\n")); } }), e.$on("$destroy", function() { -i.unwatchAll(p); +i.unwatchAll(m); }); } ]), angular.module("openshiftConsole").controller("PodsController", [ "$routeParams", "$scope", "DataService", "ProjectsService", "$filter", "LabelFilter", "Logger", function(e, t, n, a, r, o, i) { t.projectName = e.project, t.pods = {}, t.unfilteredPods = {}, t.labelSuggestions = {}, t.alerts = t.alerts || {}, t.emptyMessage = "Loading..."; @@ -4429,7 +4499,7 @@ t.pods = e.select(t.unfilteredPods), r(); n.unwatchAll(s); }); })); -} ]), angular.module("openshiftConsole").controller("PodController", [ "$scope", "$filter", "$routeParams", "$timeout", "$uibModal", "Logger", "DataService", "FullscreenService", "ImageStreamResolver", "MetricsService", "OwnerReferencesService", "PodsService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, m) { +} ]), angular.module("openshiftConsole").controller("PodController", [ "$scope", "$filter", "$routeParams", "$timeout", "$uibModal", "Logger", "DataService", "FullscreenService", "ImageStreamResolver", "MetricsService", "OwnerReferencesService", "PodsService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, p) { e.projectName = n.project, e.pod = null, e.imageStreams = {}, e.imagesByDockerReference = {}, e.imageStreamImageRefByDockerReference = {}, e.builds = {}, e.alerts = {}, e.terminalDisconnectAlert = {}, e.renderOptions = e.renderOptions || {}, e.renderOptions.hideFilterWidget = !0, e.logOptions = {}, e.terminalTabWasSelected = !1, e.breadcrumbs = [ { title: "Pods", link: "project/" + n.project + "/browse/pods" @@ -4439,7 +4509,7 @@ title: n.pod type: "warning", message: "This terminal has been disconnected. If you reconnect, your terminal history will be lost." }, e.noContainersYet = !0, e.selectedTab = {}; -var p = [], f = null; +var m = [], f = null; l.isAvailable().then(function(t) { e.metricsAvailable = t; }); @@ -4531,13 +4601,13 @@ type: "warning", message: "This pod has been deleted." }); }; -m.get(n.project).then(_.spread(function(a, l) { +p.get(n.project).then(_.spread(function(a, l) { f = l, e.project = a, e.projectContext = l, i.get("pods", n.pod, l, { errorNotification: !1 }).then(function(t) { j(t); var a = {}; -a[t.metadata.name] = t, e.logOptions.container = n.container || t.spec.containers[0].name, e.containerTerminals = C(), S(t), c.fetchReferencedImageStreamImages(a, e.imagesByDockerReference, e.imageStreamImageRefByDockerReference, f), p.push(i.watchObject("pods", n.pod, l, function(t, n) { +a[t.metadata.name] = t, e.logOptions.container = n.container || t.spec.containers[0].name, e.containerTerminals = C(), S(t), c.fetchReferencedImageStreamImages(a, e.imagesByDockerReference, e.imageStreamImageRefByDockerReference, f), m.push(i.watchObject("pods", n.pod, l, function(t, n) { j(t, n), w(e.containerTerminals), S(t); })); }, function(n) { @@ -4546,12 +4616,12 @@ type: "error", message: "The pod details could not be loaded.", details: t("getErrorDetails")(n) }; -}), e.$watch("logOptions.container", g), p.push(i.watch("imagestreams", l, function(t) { +}), e.$watch("logOptions.container", g), m.push(i.watch("imagestreams", l, function(t) { e.imageStreams = t.by("metadata.name"), c.buildDockerRefMapForImageStreams(e.imageStreams, e.imageStreamImageRefByDockerReference), c.fetchReferencedImageStreamImages(e.pods, e.imagesByDockerReference, e.imageStreamImageRefByDockerReference, l), o.log("imagestreams (subscribe)", e.imageStreams); -})), p.push(i.watch("builds", l, function(t) { +})), m.push(i.watch("builds", l, function(t) { e.builds = t.by("metadata.name"), o.log("builds (subscribe)", e.builds); })); -var u, m = function() { +var u, p = function() { var n = e.debugPod; u && (i.unwatch(u), u = null), $(window).off("beforeunload.debugPod"), n && (i.delete("pods", n.metadata.name, l, { gracePeriodSeconds: 0 @@ -4593,7 +4663,7 @@ return _.get(e, [ "imagesByDockerReference", o.image ]); } }, backdrop: "static" -}).result.then(m); +}).result.then(p); }, function(a) { e.alerts["debug-container-error"] = { type: "error", @@ -4610,7 +4680,7 @@ return e && e.forEach(function(e) { e.state && e.state.running && t++; }), t; }, e.$on("$destroy", function() { -i.unwatchAll(p), m(), $(window).off("resize.terminalsize"); +i.unwatchAll(m), p(), $(window).off("resize.terminalsize"); }); })); } ]), angular.module("openshiftConsole").controller("OverviewController", [ "$scope", "$filter", "$routeParams", "AlertMessageService", "APIService", "AppsService", "BuildsService", "CatalogService", "Constants", "DataService", "DeploymentsService", "HPAService", "HTMLService", "ImageStreamResolver", "KeywordService", "LabelFilter", "Logger", "MetricsService", "Navigate", "OwnerReferencesService", "PodsService", "ProjectsService", "BindingService", "ResourceAlertsService", "RoutesService", OverviewController ]), angular.module("openshiftConsole").controller("QuotaController", [ "$filter", "$routeParams", "$scope", "DataService", "ProjectsService", "Logger", function(e, t, n, a, r, o) { @@ -4665,7 +4735,7 @@ a[t] = a[t] || {}, a[t].maxLimitRequestRatio = e; a.unwatchAll(i); }); })); -} ]), angular.module("openshiftConsole").controller("MonitoringController", [ "$routeParams", "$location", "$scope", "$filter", "BuildsService", "DataService", "ImageStreamResolver", "KeywordService", "Logger", "MetricsService", "Navigate", "PodsService", "ProjectsService", "$rootScope", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("MonitoringController", [ "$routeParams", "$location", "$scope", "$filter", "BuildsService", "DataService", "ImageStreamResolver", "KeywordService", "Logger", "MetricsService", "Navigate", "PodsService", "ProjectsService", "$rootScope", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { n.projectName = e.project, n.alerts = n.alerts || {}, n.renderOptions = n.renderOptions || {}, n.renderOptions.showEventsSidebar = !0, n.renderOptions.collapseEventsSidebar = "true" === localStorage.getItem("monitoring.eventsidebar.collapsed"); var f = []; n.kinds = [ { @@ -4726,9 +4796,9 @@ var t = a("annotation")(e, "deploymentVersion"); t && (n.logOptions.replicationControllers[e.metadata.name].version = t), n.logCanRun.replicationControllers[e.metadata.name] = !_.includes([ "New", "Pending" ], a("deploymentStatus")(e)); }, R = function(e) { n.logOptions.builds[e.metadata.name] = {}, n.logCanRun.builds[e.metadata.name] = !_.includes([ "New", "Pending", "Error" ], e.status.phase); -}, T = function() { -n.filteredStatefulSets = s.filterForKeywords(_.values(n.statefulSets), S, w); }, I = function() { +n.filteredStatefulSets = s.filterForKeywords(_.values(n.statefulSets), S, w); +}, T = function() { b = _.filter(n.pods, function(e) { return !n.filters.hideOlderResources || "Succeeded" !== e.status.phase && "Failed" !== e.status.phase; }), n.filteredPods = s.filterForKeywords(b, S, w); @@ -4755,50 +4825,50 @@ if (!o || !o.closest("a", t).length) { var i, s; switch (r.kind) { case "Build": -i = !n.expanded.builds[r.metadata.name], n.expanded.builds[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", p.$emit(s, r); +i = !n.expanded.builds[r.metadata.name], n.expanded.builds[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", m.$emit(s, r); var c = _.get(n.podsByName, a("annotation")(r, "buildPod")); -c && p.$emit(s, c); +c && m.$emit(s, c); break; case "ReplicationController": -i = !n.expanded.replicationControllers[r.metadata.name], n.expanded.replicationControllers[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", p.$emit(s, r); +i = !n.expanded.replicationControllers[r.metadata.name], n.expanded.replicationControllers[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", m.$emit(s, r); var l = a("annotation")(r, "deployerPod"); -l && p.$emit(s, { +l && m.$emit(s, { kind: "Pod", metadata: { name: l } }), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { -p.$emit(s, e); +m.$emit(s, e); }); break; case "ReplicaSet": -i = !n.expanded.replicaSets[r.metadata.name], n.expanded.replicaSets[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", p.$emit(s, r), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { -p.$emit(s, e); +i = !n.expanded.replicaSets[r.metadata.name], n.expanded.replicaSets[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", m.$emit(s, r), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { +m.$emit(s, e); }); break; case "Pod": -i = !n.expanded.pods[r.metadata.name], n.expanded.pods[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", p.$emit(s, r); +i = !n.expanded.pods[r.metadata.name], n.expanded.pods[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", m.$emit(s, r); break; case "StatefulSet": -i = !n.expanded.statefulSets[r.metadata.name], n.expanded.statefulSets[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", p.$emit(s, r); +i = !n.expanded.statefulSets[r.metadata.name], n.expanded.statefulSets[r.metadata.name] = i, s = i ? "event.resource.highlight" : "event.resource.clear-highlight", m.$emit(s, r); } } }, n.viewPodsForSet = function(e) { var t = _.get(n, [ "podsByOwnerUID", e.metadata.uid ], []); _.isEmpty(t) || u.toPodsForDeployment(e, t); -}, m.get(e.project).then(_.spread(function(e, a) { +}, p.get(e.project).then(_.spread(function(e, a) { n.project = e, n.projectContext = a, o.watch("pods", a, function(e) { -n.podsByName = e.by("metadata.name"), n.pods = C(n.podsByName, !0), n.podsByOwnerUID = d.groupByOwnerUID(n.pods), n.podsLoaded = !0, _.each(n.pods, j), I(), c.log("pods", n.pods); +n.podsByName = e.by("metadata.name"), n.pods = C(n.podsByName, !0), n.podsByOwnerUID = d.groupByOwnerUID(n.pods), n.podsLoaded = !0, _.each(n.pods, j), T(), c.log("pods", n.pods); }), o.watch({ resource: "statefulsets", group: "apps", version: "v1beta1" }, a, function(e) { -n.statefulSets = e.by("metadata.name"), n.statefulSetsLoaded = !0, T(), c.log("statefulSets", n.statefulSets); +n.statefulSets = e.by("metadata.name"), n.statefulSetsLoaded = !0, I(), c.log("statefulSets", n.statefulSets); }), o.watch("replicationcontrollers", a, function(e) { n.replicationControllers = C(e.by("metadata.name"), !0), n.replicationControllersLoaded = !0, _.each(n.replicationControllers, P), U(), c.log("replicationcontrollers", n.replicationControllers); }), o.watch("builds", a, function(e) { @@ -4811,7 +4881,7 @@ n.replicaSets = C(e.by("metadata.name"), !0), n.replicaSetsLoaded = !0, O(), c.l }), n.$on("$destroy", function() { o.unwatchAll(f); }), n.$watch("filters.hideOlderResources", function() { -I(), A(), U(), O(), T(); +T(), A(), U(), O(), I(); var e = t.search(); e.hideOlderResources = n.filters.hideOlderResources ? "true" : "false", t.replace().search(e); }), n.$watch("kindSelector.selected.kind", function() { @@ -4822,10 +4892,10 @@ n.filterKeywords = w = s.generateKeywords(n.filters.text), n.$apply(k); }, 50, { maxWait: 250 })), n.$watch("renderOptions.collapseEventsSidebar", function(e, t) { -e !== t && (localStorage.setItem("monitoring.eventsidebar.collapsed", n.renderOptions.collapseEventsSidebar ? "true" : "false"), p.$emit("metrics.charts.resize")); +e !== t && (localStorage.setItem("monitoring.eventsidebar.collapsed", n.renderOptions.collapseEventsSidebar ? "true" : "false"), m.$emit("metrics.charts.resize")); }); })); -} ]), angular.module("openshiftConsole").controller("MembershipController", [ "$filter", "$location", "$routeParams", "$scope", "$timeout", "$uibModal", "AuthService", "AuthorizationService", "DataService", "ProjectsService", "MembershipService", "NotificationsService", "RoleBindingsService", "RolesService", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("MembershipController", [ "$filter", "$location", "$routeParams", "$scope", "$timeout", "$uibModal", "AuthService", "AuthorizationService", "DataService", "ProjectsService", "MembershipService", "NotificationsService", "RoleBindingsService", "RolesService", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { var f, g = n.project, h = e("humanizeKind"), v = e("annotation"), y = e("canI"), b = [], C = { notice: { yourLastRole: _.template('Removing the role "<%= roleName %>" may completely remove your ability to see this project.') @@ -4882,7 +4952,7 @@ subjectKindsForUI: u.mapRolebindingsForUI(e.by("metadata.name"), b) e && (a.roleBindings[e.metadata.name] = e, a.subjectKindsForUI = u.mapRolebindingsForUI(a.roleBindings, b)), w(); }); }, P = function(t, n) { -a.disableAddForm = !0, m.create(t, n, g, f).then(function() { +a.disableAddForm = !0, p.create(t, n, g, f).then(function() { j(), S("success", C.update.subject.success({ roleName: t.metadata.name, subjectName: n.name @@ -4896,7 +4966,7 @@ httpErr: e("getErrorDetails")(a) })); }); }, R = function(t, n, r) { -a.disableAddForm = !0, m.addSubject(t, n, r, f).then(function() { +a.disableAddForm = !0, p.addSubject(t, n, r, f).then(function() { j(), S("success", C.update.subject.success({ roleName: t.roleRef.name, subjectName: n.name @@ -4909,14 +4979,14 @@ subjectName: n.name httpErr: e("getErrorDetails")(a) })); }); -}, T = {}; -n.tab && (T[n.tab] = !0); -var I = u.getSubjectKinds(); +}, I = {}; +n.tab && (I[n.tab] = !0); +var T = u.getSubjectKinds(); angular.extend(a, { -selectedTab: T, +selectedTab: I, projectName: g, forms: {}, -subjectKinds: I, +subjectKinds: T, newBinding: { role: "", kind: n.tab || "User", @@ -4992,7 +5062,7 @@ e && !_.includes(a.projects, e) ? a.projects = [ e ].concat(t) : a.projects = t; }), l.get(n.project).then(_.spread(function(n, r) { f = r, j(), k(f), angular.extend(a, { project: n, -subjectKinds: I, +subjectKinds: T, canUpdateRolebindings: y("rolebindings", "update", g), confirmRemove: function(n, r, i) { var c = null, l = E(n, r, i, a.user.metadata.name); @@ -5006,7 +5076,7 @@ return l; } } }).result.then(function() { -m.removeSubject(n, i, a.roleBindings, f).then(function(e) { +p.removeSubject(n, i, a.roleBindings, f).then(function(e) { c ? t.url("./") : (s.getProjectRules(g, !0).then(function() { j(e[0]); var t = y("rolebindings", "update", g); @@ -5046,7 +5116,7 @@ roleName: n.metadata.name, subjectName: e })) : i ? R(i, o, r) : P(n, o); } -}), p.listAllRoles(f, { +}), m.listAllRoles(f, { errorNotification: !1 }).then(function(e) { b = u.mapRolesForUI(_.head(e).by("metadata.name"), _.last(e).by("metadata.name")); @@ -5083,12 +5153,12 @@ if (l(e)) return !1; var t = r.getLabelSelector(); return !!t.isEmpty() || t.matches(e); } -function m() { +function p() { t.latestByConfig = s.latestBuildByConfig(t.builds, c), t.buildsNoConfig = _.pickBy(t.builds, d), angular.forEach(t.buildConfigs, function(e, n) { t.latestByConfig[n] = t.latestByConfig[n] || null; }); } -function p() { +function m() { var e = _.omitBy(t.latestByConfig, _.isNull); !r.getLabelSelector().isEmpty() && _.isEmpty(t.buildConfigs) && _.isEmpty(e) ? t.alerts.builds = { type: "warning", @@ -5098,12 +5168,12 @@ details: "The active filters are hiding all builds." t.project = e; var f = a("isJenkinsPipelineStrategy"); u.push(n.watch("builds", i, function(e) { -t.builds = _.omitBy(e.by("metadata.name"), f), t.emptyMessage = "No builds to show", m(), r.addLabelSuggestionsFromResources(t.builds, t.labelSuggestions), o.log("builds (subscribe)", t.builds); +t.builds = _.omitBy(e.by("metadata.name"), f), t.emptyMessage = "No builds to show", p(), r.addLabelSuggestionsFromResources(t.builds, t.labelSuggestions), o.log("builds (subscribe)", t.builds); })), u.push(n.watch("buildconfigs", i, function(e) { -t.unfilteredBuildConfigs = _.omitBy(e.by("metadata.name"), f), r.addLabelSuggestionsFromResources(t.unfilteredBuildConfigs, t.labelSuggestions), r.setLabelSuggestions(t.labelSuggestions), t.buildConfigs = r.getLabelSelector().select(t.unfilteredBuildConfigs), m(), p(), o.log("buildconfigs (subscribe)", t.buildConfigs); +t.unfilteredBuildConfigs = _.omitBy(e.by("metadata.name"), f), r.addLabelSuggestionsFromResources(t.unfilteredBuildConfigs, t.labelSuggestions), r.setLabelSuggestions(t.labelSuggestions), t.buildConfigs = r.getLabelSelector().select(t.unfilteredBuildConfigs), p(), m(), o.log("buildconfigs (subscribe)", t.buildConfigs); })), r.onActiveFiltersChanged(function(e) { t.$apply(function() { -t.buildConfigs = e.select(t.unfilteredBuildConfigs), m(), p(); +t.buildConfigs = e.select(t.unfilteredBuildConfigs), p(), m(); }); }), t.$on("$destroy", function() { n.unwatchAll(u); @@ -5114,7 +5184,7 @@ n.projectName = t.project, n.alerts = n.alerts || {}, n.buildConfigs = {}; var l = []; c.get(t.project).then(_.spread(function(t, s) { n.project = t; -var c = {}, u = e("buildConfigForBuild"), d = e("isIncompleteBuild"), m = e("isJenkinsPipelineStrategy"), p = e("isNewerResource"), f = function(e, t) { +var c = {}, u = e("buildConfigForBuild"), d = e("isIncompleteBuild"), p = e("isJenkinsPipelineStrategy"), m = e("isNewerResource"), f = function(e, t) { if (!d(t)) { n.statsByConfig[e] || (n.statsByConfig[e] = { count: 0, @@ -5126,9 +5196,9 @@ a.count++, a.totalDuration += o.getDuration(t), a.avgDuration = _.round(a.totalD }, g = function() { var e = {}, t = {}; n.statsByConfig = {}, _.each(c, function(a) { -if (m(a)) { +if (p(a)) { var r = u(a) || ""; -n.buildConfigs[r] || (n.buildConfigs[r] = null), d(a) ? _.set(e, [ r, a.metadata.name ], a) : p(a, t[r]) && (t[r] = a), f(r, a); +n.buildConfigs[r] || (n.buildConfigs[r] = null), d(a) ? _.set(e, [ r, a.metadata.name ], a) : m(a, t[r]) && (t[r] = a), f(r, a); } }), _.each(t, function(t, n) { _.set(e, [ n, t.metadata.name ], t); @@ -5139,7 +5209,7 @@ n.buildsLoaded = !0, c = e.by("metadata.name"), g(); })); var h = !1; l.push(i.watch("buildconfigs", s, function(e) { -if (n.buildConfigsLoaded = !0, n.buildConfigs = _.pickBy(e.by("metadata.name"), m), _.isEmpty(n.buildConfigs) && !h && (h = !0, a.SAMPLE_PIPELINE_TEMPLATE)) { +if (n.buildConfigsLoaded = !0, n.buildConfigs = _.pickBy(e.by("metadata.name"), p), _.isEmpty(n.buildConfigs) && !h && (h = !0, a.SAMPLE_PIPELINE_TEMPLATE)) { var t = a.SAMPLE_PIPELINE_TEMPLATE.name, o = a.SAMPLE_PIPELINE_TEMPLATE.namespace; i.get("templates", t, { namespace: o @@ -5169,13 +5239,13 @@ title: n.buildconfig var t = e.getSession(); t.setOption("tabSize", 2), t.setOption("useSoftTabs", !0), e.$blockScrolling = 1 / 0; }; -var m, p = t("buildConfigForBuild"), f = t("buildStrategy"), g = [], h = function(t) { +var p, m = t("buildConfigForBuild"), f = t("buildStrategy"), g = [], h = function(t) { e.updatedBuildConfig = angular.copy(t), e.envVars = f(e.updatedBuildConfig).env || []; }; e.compareTriggers = function(e, t) { return _.isNumber(e.value) ? -1 : "ConfigChange" === e.value ? -1 : "ConfigChange" === t.value ? 1 : "ImageChange" === e.value ? -1 : "ImageChange" === t.value ? 1 : e.value.localeCompare(t.value); }, e.saveEnvVars = function() { -l.hideNotification("save-bc-env-error"), e.envVars = _.filter(e.envVars, "name"), f(e.updatedBuildConfig).env = d.compactEntries(angular.copy(e.envVars)), i.update("buildconfigs", n.buildconfig, e.updatedBuildConfig, m).then(function() { +l.hideNotification("save-bc-env-error"), e.envVars = _.filter(e.envVars, "name"), f(e.updatedBuildConfig).env = d.compactEntries(angular.copy(e.envVars)), i.update("buildconfigs", n.buildconfig, e.updatedBuildConfig, p).then(function() { l.addNotification({ type: "success", message: "Environment variables for build config " + e.buildConfigName + " were successfully updated." @@ -5225,7 +5295,7 @@ type: "warning", details: "The active filters are hiding all builds." }; } -e.project = a, m = o, i.get("buildconfigs", n.buildconfig, o, { +e.project = a, p = o, i.get("buildconfigs", n.buildconfig, o, { errorNotification: !1 }).then(function(e) { y(e), g.push(i.watchObject("buildconfigs", n.buildconfig, o, y)); @@ -5237,7 +5307,7 @@ details: 404 === n.status ? "Any remaining build history for this build will be }; }), g.push(i.watch("builds", o, function(t, a, o) { if (e.emptyMessage = "No builds to show", a) { -if (p(o) === n.buildconfig) { +if (m(o) === n.buildconfig) { var i = o.metadata.name; switch (a) { case "ADDED": @@ -5292,15 +5362,15 @@ title: n.build }); var c, l = t("annotation"), u = [], d = function(t) { e.logCanRun = !_.includes([ "New", "Pending", "Error" ], t.status.phase); -}, m = function() { +}, p = function() { e.buildConfig ? e.canBuild = a.canBuild(e.buildConfig) : e.canBuild = !1; }; s.get(n.project).then(_.spread(function(i, s) { e.project = i, e.projectContext = s, e.logOptions = {}; -var p = function() { +var m = function() { e.eventObjects = c ? [ e.build, c ] : [ e.build ]; }, f = function(t, n) { -e.loaded = !0, e.build = t, d(t), p(); +e.loaded = !0, e.build = t, d(t), m(); var a = l(t, "buildNumber"); a && (e.breadcrumbs[2].title = "#" + a), "DELETED" === n && (e.alerts.deleted = { type: "warning", @@ -5310,13 +5380,13 @@ var o; c || (o = l(t, "buildPod")) && r.get("pods", o, s, { errorNotification: !1 }).then(function(e) { -c = e, p(); +c = e, m(); }); }, g = function(t, n) { "DELETED" === n && (e.alerts.deleted = { type: "warning", message: "Build configuration " + e.buildConfigName + " has been deleted." -}, e.buildConfigDeleted = !0), e.buildConfig = t, e.buildConfigPaused = a.isPaused(e.buildConfig), m(); +}, e.buildConfigDeleted = !0), e.buildConfig = t, e.buildConfigPaused = a.isPaused(e.buildConfig), p(); }; r.get("builds", n.build, s, { errorNotification: !1 @@ -5460,11 +5530,11 @@ return t && (n += "/" + t.name), n; }; } ]), angular.module("openshiftConsole").controller("DeploymentsController", [ "$scope", "$filter", "$routeParams", "DataService", "DeploymentsService", "LabelFilter", "Logger", "OwnerReferencesService", "ProjectsService", function(e, t, n, a, r, o, i, s, c) { e.projectName = n.project, e.replicationControllers = {}, e.unfilteredDeploymentConfigs = {}, e.unfilteredDeployments = {}, e.replicationControllersByDC = {}, e.labelSuggestions = {}, e.alerts = e.alerts || {}, e.emptyMessage = "Loading...", e.expandedDeploymentConfigRow = {}, e.unfilteredReplicaSets = {}, e.unfilteredReplicationControllers = {}; -var l, u, d = t("annotation"), m = function() { +var l, u, d = t("annotation"), p = function() { l && u && (e.replicaSetsByDeploymentUID = s.groupByControllerUID(l), e.unfilteredReplicaSets = _.get(e, [ "replicaSetsByDeploymentUID", "" ], {}), o.addLabelSuggestionsFromResources(e.unfilteredReplicaSets, e.labelSuggestions), o.setLabelSuggestions(e.labelSuggestions), e.replicaSets = o.getLabelSelector().select(e.unfilteredReplicaSets), e.latestReplicaSetByDeploymentUID = {}, _.each(e.replicaSetsByDeploymentUID, function(t, n) { n && (e.latestReplicaSetByDeploymentUID[n] = r.getActiveReplicaSet(t, u[n])); })); -}, p = []; +}, m = []; c.get(n.project).then(_.spread(function(n, s) { function c() { o.getLabelSelector().isEmpty() ? delete e.alerts.deployments : _.isEmpty(e.unfilteredDeploymentConfigs) && _.isEmpty(e.unfilteredReplicationControllers) && _.isEmpty(e.unfilteredDeployments) && _.isEmpty(e.unfilteredReplicaSets) ? delete e.alerts.deployments : _.isEmpty(e.deploymentConfigs) && _.isEmpty(e.replicationControllersByDC[""]) && _.isEmpty(e.deployments) && _.isEmpty(e.replicaSets) ? e.alerts.deployments = { @@ -5472,30 +5542,30 @@ type: "warning", details: "The active filters are hiding all deployments." } : delete e.alerts.deployments; } -e.project = n, p.push(a.watch("replicationcontrollers", s, function(n, a, s) { +e.project = n, m.push(a.watch("replicationcontrollers", s, function(n, a, s) { e.replicationControllers = n.by("metadata.name"); var l, u; if (s && (l = d(s, "deploymentConfig"), u = s.metadata.name), e.replicationControllersByDC = r.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], o.addLabelSuggestionsFromResources(e.unfilteredReplicationControllers, e.labelSuggestions), o.setLabelSuggestions(e.labelSuggestions), e.replicationControllersByDC[""] = o.getLabelSelector().select(e.replicationControllersByDC[""])), c(), a) { if ("ADDED" === a || "MODIFIED" === a && [ "New", "Pending", "Running" ].indexOf(t("deploymentStatus")(s)) > -1) e.deploymentConfigDeploymentsInProgress[l] = e.deploymentConfigDeploymentsInProgress[l] || {}, e.deploymentConfigDeploymentsInProgress[l][u] = s; else if ("MODIFIED" === a) { -var m = t("deploymentStatus")(s); -"Complete" !== m && "Failed" !== m || delete e.deploymentConfigDeploymentsInProgress[l][u]; +var p = t("deploymentStatus")(s); +"Complete" !== p && "Failed" !== p || delete e.deploymentConfigDeploymentsInProgress[l][u]; } } else e.deploymentConfigDeploymentsInProgress = r.associateRunningDeploymentToDeploymentConfig(e.replicationControllersByDC); s ? "DELETED" !== a && (s.causes = t("deploymentCauses")(s)) : angular.forEach(e.replicationControllers, function(e) { e.causes = t("deploymentCauses")(e); }), i.log("replicationControllers (subscribe)", e.replicationControllers); -})), p.push(a.watch({ +})), m.push(a.watch({ group: "extensions", resource: "replicasets" }, s, function(t) { -l = t.by("metadata.name"), m(), i.log("replicasets (subscribe)", e.replicaSets); -})), p.push(a.watch("deploymentconfigs", s, function(t) { +l = t.by("metadata.name"), p(), i.log("replicasets (subscribe)", e.replicaSets); +})), m.push(a.watch("deploymentconfigs", s, function(t) { e.unfilteredDeploymentConfigs = t.by("metadata.name"), o.addLabelSuggestionsFromResources(e.unfilteredDeploymentConfigs, e.labelSuggestions), o.setLabelSuggestions(e.labelSuggestions), e.deploymentConfigs = o.getLabelSelector().select(e.unfilteredDeploymentConfigs), e.emptyMessage = "No deployment configurations to show", e.replicationControllersByDC = r.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], e.replicationControllersByDC[""] = o.getLabelSelector().select(e.replicationControllersByDC[""])), c(), i.log("deploymentconfigs (subscribe)", e.deploymentConfigs); -})), p.push(a.watch({ +})), m.push(a.watch({ group: "apps", resource: "deployments" }, s, function(t) { -u = e.unfilteredDeployments = t.by("metadata.uid"), o.addLabelSuggestionsFromResources(e.unfilteredDeployments, e.labelSuggestions), o.setLabelSuggestions(e.labelSuggestions), e.deployments = o.getLabelSelector().select(e.unfilteredDeployments), m(), i.log("deployments (subscribe)", e.unfilteredDeployments); +u = e.unfilteredDeployments = t.by("metadata.uid"), o.addLabelSuggestionsFromResources(e.unfilteredDeployments, e.labelSuggestions), o.setLabelSuggestions(e.labelSuggestions), e.deployments = o.getLabelSelector().select(e.unfilteredDeployments), p(), i.log("deployments (subscribe)", e.unfilteredDeployments); })), e.showEmptyMessage = function() { return 0 === t("hashSize")(e.replicationControllersByDC) || !(1 !== t("hashSize")(e.replicationControllersByDC) || !e.replicationControllersByDC[""]); }, o.onActiveFiltersChanged(function(t) { @@ -5503,10 +5573,10 @@ e.$apply(function() { e.deploymentConfigs = t.select(e.unfilteredDeploymentConfigs), e.replicationControllersByDC = r.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], e.replicationControllersByDC[""] = o.getLabelSelector().select(e.replicationControllersByDC[""])), e.deployments = t.select(e.unfilteredDeployments), e.replicaSets = t.select(e.unfilteredReplicaSets), c(); }); }), e.$on("$destroy", function() { -a.unwatchAll(p); +a.unwatchAll(m); }); })); -} ]), angular.module("openshiftConsole").controller("DeploymentController", [ "$scope", "$filter", "$routeParams", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "LabelFilter", "Logger", "ModalsService", "Navigate", "OwnerReferencesService", "ProjectsService", "StorageService", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("DeploymentController", [ "$scope", "$filter", "$routeParams", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "LabelFilter", "Logger", "ModalsService", "Navigate", "OwnerReferencesService", "ProjectsService", "StorageService", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { var f = {}; e.projectName = n.project, e.name = n.deployment, e.replicaSetsForDeployment = {}, e.unfilteredReplicaSetsForDeployment = {}, e.labelSuggestions = {}, e.emptyMessage = "Loading...", e.forms = {}, e.alerts = {}, e.imagesByDockerReference = {}, e.breadcrumbs = [ { title: "Deployments", @@ -5515,14 +5585,14 @@ link: "project/" + n.project + "/browse/deployments" title: n.deployment } ], e.healthCheckURL = u.healthCheckURL(n.project, "Deployment", n.deployment, "apps"); var g = []; -m.get(n.project).then(_.spread(function(u, m) { +p.get(n.project).then(_.spread(function(u, p) { function h() { s.getLabelSelector().isEmpty() || !_.isEmpty(e.replicaSetsForDeployment) || _.isEmpty(e.unfilteredReplicaSetsForDeployment) ? delete e.alerts["filter-hiding-all"] : e.alerts["filter-hiding-all"] = { type: "warning", details: "The active filters are hiding all rollout history." }; } -e.project = u, e.projectContext = m; +e.project = u, e.projectContext = p; var v = {}, y = function() { o.getHPAWarnings(e.deployment, e.autoscalers, v, u).then(function(t) { e.hpaWarnings = t; @@ -5531,21 +5601,21 @@ e.hpaWarnings = t; a.get({ group: "apps", resource: "deployments" -}, n.deployment, m, { +}, n.deployment, p, { errorNotification: !1 }).then(function(t) { e.loaded = !0, e.deployment = t, y(), g.push(a.watchObject({ group: "apps", resource: "deployments" -}, n.deployment, m, function(t, n) { +}, n.deployment, p, function(t, n) { "DELETED" === n && (e.alerts.deleted = { type: "warning", message: "This deployment has been deleted." -}), e.deployment = t, e.updatingPausedState = !1, y(), i.fetchReferencedImageStreamImages([ t.spec.template ], e.imagesByDockerReference, f, m); +}), e.deployment = t, e.updatingPausedState = !1, y(), i.fetchReferencedImageStreamImages([ t.spec.template ], e.imagesByDockerReference, f, p); })), g.push(a.watch({ group: "extensions", resource: "replicasets" -}, m, function(n) { +}, p, function(n) { e.emptyMessage = "No deployments to show"; var a = n.by("metadata.name"); a = d.filterForController(a, t), e.inProgressDeployment = _.chain(a).filter("status.replicas").length > 1, e.unfilteredReplicaSetsForDeployment = r.sortByRevision(a), e.replicaSetsForDeployment = s.getLabelSelector().select(e.unfilteredReplicaSetsForDeployment), h(), s.addLabelSuggestionsFromResources(e.unfilteredReplicaSetsForDeployment, e.labelSuggestions), s.setLabelSuggestions(e.labelSuggestions); @@ -5556,18 +5626,18 @@ type: "error", message: 404 === n.status ? "This deployment can not be found, it may have been deleted." : "The deployment details could not be loaded.", details: t("getErrorDetails")(n) }; -}), a.list("limitranges", m).then(function(e) { +}), a.list("limitranges", p).then(function(e) { v = e.by("metadata.name"), y(); -}), g.push(a.watch("imagestreams", m, function(t) { +}), g.push(a.watch("imagestreams", p, function(t) { var n = t.by("metadata.name"); -i.buildDockerRefMapForImageStreams(n, f), e.deployment && i.fetchReferencedImageStreamImages([ e.deployment.spec.template ], e.imagesByDockerReference, f, m), c.log("imagestreams (subscribe)", e.imageStreams); +i.buildDockerRefMapForImageStreams(n, f), e.deployment && i.fetchReferencedImageStreamImages([ e.deployment.spec.template ], e.imagesByDockerReference, f, p), c.log("imagestreams (subscribe)", e.imageStreams); })), g.push(a.watch({ group: "autoscaling", resource: "horizontalpodautoscalers", version: "v1" -}, m, function(t) { +}, p, function(t) { e.autoscalers = o.filterHPA(t.by("metadata.name"), "Deployment", n.deployment), y(); -})), g.push(a.watch("builds", m, function(t) { +})), g.push(a.watch("builds", p, function(t) { e.builds = t.by("metadata.name"), c.log("builds (subscribe)", e.builds); })), s.onActiveFiltersChanged(function(t) { e.$evalAsync(function() { @@ -5582,7 +5652,7 @@ details: t("getErrorDetails")(n) }; }); }, e.setPaused = function(n) { -e.updatingPausedState = !0, r.setPaused(e.deployment, n, m).then(_.noop, function(a) { +e.updatingPausedState = !0, r.setPaused(e.deployment, n, p).then(_.noop, function(a) { e.updatingPausedState = !1, e.alerts = e.alerts || {}, e.alerts.scale = { type: "error", message: "An error occurred " + (n ? "pausing" : "resuming") + " the deployment.", @@ -5599,13 +5669,13 @@ okButtonText: "Remove", okButtonClass: "btn-danger", cancelButtonText: "Cancel" }).then(function() { -p.removeVolume(e.deployment, t, m); +m.removeVolume(e.deployment, t, p); }); }, e.$on("$destroy", function() { a.unwatchAll(g); }); })); -} ]), angular.module("openshiftConsole").controller("DeploymentConfigController", [ "$scope", "$filter", "$routeParams", "BreadcrumbsService", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "ModalsService", "Navigate", "NotificationsService", "Logger", "ProjectsService", "StorageService", "LabelFilter", "labelNameFilter", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f, g) { +} ]), angular.module("openshiftConsole").controller("DeploymentConfigController", [ "$scope", "$filter", "$routeParams", "BreadcrumbsService", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "ModalsService", "Navigate", "NotificationsService", "Logger", "ProjectsService", "StorageService", "LabelFilter", "labelNameFilter", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f, g) { var h = {}; e.projectName = n.project, e.deploymentConfigName = n.deploymentconfig, e.deploymentConfig = null, e.deployments = {}, e.unfilteredDeployments = {}, e.imagesByDockerReference = {}, e.builds = {}, e.labelSuggestions = {}, e.forms = {}, e.alerts = {}, e.breadcrumbs = a.getBreadcrumbs({ name: n.deploymentconfig, @@ -5613,7 +5683,7 @@ kind: "DeploymentConfig", namespace: n.project }), e.emptyMessage = "Loading...", e.healthCheckURL = l.healthCheckURL(n.project, "DeploymentConfig", n.deploymentconfig); var v = t("mostRecent"), y = t("orderObjectsByDate"), b = []; -m.get(n.project).then(_.spread(function(a, l) { +p.get(n.project).then(_.spread(function(a, l) { function u() { f.getLabelSelector().isEmpty() || !$.isEmptyObject(e.deployments) || $.isEmptyObject(e.unfilteredDeployments) ? delete e.alerts.deployments : e.alerts.deployments = { type: "warning", @@ -5621,8 +5691,8 @@ details: "The active filters are hiding all deployments." }; } e.project = a, e.projectContext = l; -var m = {}, C = function() { -i.getHPAWarnings(e.deploymentConfig, e.autoscalers, m, a).then(function(t) { +var p = {}, C = function() { +i.getHPAWarnings(e.deploymentConfig, e.autoscalers, p, a).then(function(t) { e.hpaWarnings = t; }); }; @@ -5670,7 +5740,7 @@ labelSelector: g("deploymentConfig") + "=" + e.deploymentConfigName } } })), r.list("limitranges", l).then(function(e) { -m = e.by("metadata.name"), C(); +p = e.by("metadata.name"), C(); }), b.push(r.watch("imagestreams", l, function(t) { var n = t.by("metadata.name"); s.buildDockerRefMapForImageStreams(n, h), e.deploymentConfig && s.fetchReferencedImageStreamImages([ e.deploymentConfig.spec.template ], e.imagesByDockerReference, h, l), d.log("imagestreams (subscribe)", e.imageStreams); @@ -5724,24 +5794,24 @@ okButtonText: "Remove", okButtonClass: "btn-danger", cancelButtonText: "Cancel" }).then(function() { -p.removeVolume(e.deploymentConfig, t, l); +m.removeVolume(e.deploymentConfig, t, l); }); }, e.$on("$destroy", function() { r.unwatchAll(b); }); })); -} ]), angular.module("openshiftConsole").controller("ReplicaSetController", [ "$scope", "$filter", "$routeParams", "AuthorizationService", "BreadcrumbsService", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "Logger", "MetricsService", "ModalsService", "Navigate", "OwnerReferencesService", "PodsService", "ProjectsService", "StorageService", "keyValueEditorUtils", "kind", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f, g, h, v, y) { +} ]), angular.module("openshiftConsole").controller("ReplicaSetController", [ "$scope", "$filter", "$routeParams", "AuthorizationService", "BreadcrumbsService", "DataService", "DeploymentsService", "HPAService", "ImageStreamResolver", "Logger", "MetricsService", "ModalsService", "Navigate", "OwnerReferencesService", "PodsService", "ProjectsService", "StorageService", "keyValueEditorUtils", "kind", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f, g, h, v, y) { var b = !1, C = t("annotation"), S = t("humanizeKind")(y), w = t("hasDeployment"); switch (y) { case "ReplicaSet": e.resource = { group: "extensions", resource: "replicasets" -}, e.healthCheckURL = m.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"); +}, e.healthCheckURL = p.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"); break; case "ReplicationController": -e.resource = "replicationcontrollers", e.healthCheckURL = m.healthCheckURL(n.project, "ReplicationController", n.replicaSet); +e.resource = "replicationcontrollers", e.healthCheckURL = p.healthCheckURL(n.project, "ReplicationController", n.replicaSet); } var k = {}; e.projectName = n.project, e.kind = y, e.replicaSet = null, e.deploymentConfig = null, e.deploymentConfigMissing = !1, e.imagesByDockerReference = {}, e.builds = {}, e.alerts = {}, e.renderOptions = e.renderOptions || {}, e.renderOptions.hideFilterWidget = !0, e.forms = {}, e.logOptions = {}; @@ -5751,10 +5821,10 @@ e.metricsAvailable = t; }); var P = t("deploymentStatus"), R = function(t) { e.logCanRun = !_.includes([ "New", "Pending" ], P(t)); -}, T = t("isIE")() || t("isEdge")(); +}, I = t("isIE")() || t("isEdge")(); g.get(n.project).then(_.spread(function(u, g) { e.project = u, e.projectContext = g; -var v = {}, I = function() { +var v = {}, T = function() { if (e.hpaForRS = s.filterHPA(v, y, n.replicaSet), e.deploymentConfigName && e.isActive) { var t = s.filterHPA(v, "DeploymentConfig", e.deploymentConfigName); e.autoscalers = e.hpaForRS.concat(t); @@ -5767,7 +5837,7 @@ j.push(o.watch(e.resource, g, function(t) { var n, a = []; angular.forEach(t.by("metadata.name"), function(t) { (C(t, "deploymentConfig") || "") === e.deploymentConfigName && a.push(t); -}), n = i.getActiveDeployment(a), e.isActive = n && n.metadata.uid === e.replicaSet.metadata.uid, I(); +}), n = i.getActiveDeployment(a), e.isActive = n && n.metadata.uid === e.replicaSet.metadata.uid, T(); })); }, N = function() { s.getHPAWarnings(e.replicaSet, e.autoscalers, e.limitRanges, u).then(function(t) { @@ -5778,7 +5848,7 @@ var r = C(a, "deploymentConfig"); if (r) { b = !0, e.deploymentConfigName = r; var i = C(a, "deploymentVersion"); -i && (e.logOptions.version = i), e.healthCheckURL = m.healthCheckURL(n.project, "DeploymentConfig", r), o.get("deploymentconfigs", r, g, { +i && (e.logOptions.version = i), e.healthCheckURL = p.healthCheckURL(n.project, "DeploymentConfig", r), o.get("deploymentconfigs", r, g, { errorNotification: !1 }).then(function(t) { e.deploymentConfig = t; @@ -5795,37 +5865,37 @@ e.isActive = i.isActiveReplicaSet(e.replicaSet, e.deployment); }, A = function(t) { return _.some(t, function(t) { if (_.get(t, "status.replicas") && _.get(t, "metadata.uid") !== _.get(e.replicaSet, "metadata.uid")) { -var n = p.getControllerReferences(t); +var n = m.getControllerReferences(t); return _.some(n, { uid: e.deployment.metadata.uid }); } }); }, B = !1, L = function() { -var t = p.getControllerReferences(e.replicaSet), a = _.find(t, { +var t = m.getControllerReferences(e.replicaSet), a = _.find(t, { kind: "Deployment" }); a && o.get({ group: "apps", resource: "deployments" }, a.name, g).then(function(t) { -e.deployment = t, e.healthCheckURL = m.healthCheckURL(n.project, "Deployment", t.metadata.name, "apps"), j.push(o.watchObject({ +e.deployment = t, e.healthCheckURL = p.healthCheckURL(n.project, "Deployment", t.metadata.name, "apps"), j.push(o.watchObject({ group: "apps", resource: "deployments" }, t.metadata.name, g, function(t, a) { if ("DELETED" === a) return e.alerts["deployment-deleted"] = { type: "warning", message: "The deployment controlling this replica set has been deleted." -}, e.healthCheckURL = m.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"), e.deploymentMissing = !0, void delete e.deployment; +}, e.healthCheckURL = p.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"), e.deploymentMissing = !0, void delete e.deployment; e.deployment = t, e.breadcrumbs = r.getBreadcrumbs({ object: e.replicaSet, displayName: "#" + i.getRevision(e.replicaSet), parent: { title: e.deployment.metadata.name, -link: m.resourceURL(e.deployment) +link: p.resourceURL(e.deployment) }, humanizedKind: "Deployments" -}), $(), I(); +}), $(), T(); })), j.push(o.watch({ group: "extensions", resource: "replicasets" @@ -5888,9 +5958,9 @@ group: "autoscaling", resource: "horizontalpodautoscalers", version: "v1" }, g, function(e) { -v = e.by("metadata.name"), I(), N(); +v = e.by("metadata.name"), T(), N(); }, { -poll: T, +poll: I, pollInterval: 6e4 })), o.list("limitranges", g).then(function(t) { e.limitRanges = t.by("metadata.name"), N(); @@ -6104,6 +6174,94 @@ e.routesForService = {}, angular.forEach(n.by("metadata.name"), function(n) { n.unwatchAll(i); }); })); +} ]), angular.module("openshiftConsole").controller("ServiceInstancesController", [ "$scope", "$filter", "$routeParams", "APIService", "BindingService", "Constants", "DataService", "LabelFilter", "Logger", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l) { +e.alerts = {}, e.bindingsByInstanceRef = {}, e.emptyMessage = "Loading...", e.labelSuggestions = {}, e.projectName = n.project, e.serviceClasses = {}, e.serviceInstances = {}, e.unfilteredServiceInstances = {}; +var u = [], d = function() { +e.serviceInstances = s.getLabelSelector().select(e.unfilteredServiceInstances); +}, p = function() { +e.unfilteredServiceInstances = r.sortServiceInstances(e.unfilteredServiceInstances, e.serviceClasses); +}; +l.get(n.project).then(_.spread(function(t, n) { +function a() { +s.getLabelSelector().isEmpty() || !_.isEmpty(e.serviceInstances) || _.isEmpty(e.unfilteredServiceInstances) ? delete e.alerts["all-instances-filtered"] : e.alerts["all-instances-filtered"] = { +type: "warning", +details: "The active filters are hiding all provisioned services." +}; +} +e.project = t, e.projectContext = n, u.push(i.watch({ +group: "servicecatalog.k8s.io", +resource: "serviceinstancecredentials" +}, n, function(t) { +var n = t.by("metadata.name"); +e.bindingsByInstanceRef = _.groupBy(n, "spec.instanceRef.name"); +})), u.push(i.watch({ +group: "servicecatalog.k8s.io", +resource: "serviceinstances" +}, n, function(t) { +e.emptyMessage = "No provisioned services to show", e.unfilteredServiceInstances = t.by("metadata.name"), p(), d(), a(), s.addLabelSuggestionsFromResources(e.unfilteredServiceInstances, e.labelSuggestions), s.setLabelSuggestions(e.labelSuggestions), c.log("provisioned services (subscribe)", e.unfilteredServiceInstances); +})), i.list({ +group: "servicecatalog.k8s.io", +resource: "serviceclasses" +}, n, function(t) { +e.serviceClasses = t.by("metadata.name"), p(), d(); +}), s.onActiveFiltersChanged(function(t) { +e.$evalAsync(function() { +e.serviceInstances = t.select(e.unfilteredServiceInstances), a(); +}); +}), e.$on("$destroy", function() { +i.unwatchAll(u); +}); +})); +} ]), angular.module("openshiftConsole").controller("ServiceInstanceController", [ "$scope", "$filter", "$routeParams", "DataService", "ProjectsService", "ServiceInstancesService", function(e, t, n, a, r, o) { +e.alerts = {}, e.projectName = n.project, e.serviceInstance = null, e.serviceClass = null, e.serviceClasses = null, e.breadcrumbs = [ { +title: "Provisioned Services", +link: "project/" + n.project + "/browse/service-instances" +} ], e.deprovision = function() { +o.deprovision(e.serviceInstance); +}; +var i = [], s = function() { +e.serviceInstance && e.serviceClasses && e.breadcrumbs.push({ +title: t("serviceInstanceDisplayName")(e.serviceInstance, e.serviceClasses) +}); +}, c = function() { +if (e.serviceInstance && e.serviceClasses) { +var t = _.get(e.serviceInstance.spec, "serviceClassName"); +e.serviceClass = _.get(e.serviceClasses, [ t ]), e.plan = _.find(_.get(e.serviceClass, "plans"), { +name: e.serviceInstance.spec.planName +}); +} +}, l = function(t, n) { +e.loaded = !0, e.serviceInstance = t, "DELETED" === n && (e.alerts.deleted = { +type: "warning", +message: "This provisioned service has been deleted." +}), c(); +}; +r.get(n.project).then(_.spread(function(r, o) { +e.project = r, e.projectContext = o, a.get({ +group: "servicecatalog.k8s.io", +resource: "serviceinstances" +}, n.instance, o, { +errorNotification: !1 +}).then(function(e) { +l(e), s(), i.push(a.watchObject({ +group: "servicecatalog.k8s.io", +resource: "serviceinstances" +}, n.instance, o, l)); +}, function(n) { +e.loaded = !0, e.alerts.load = { +type: "error", +message: "The service details could not be loaded.", +details: t("getErrorDetails")(n) +}; +}), a.list({ +group: "servicecatalog.k8s.io", +resource: "serviceclasses" +}, o, function(t) { +e.serviceClasses = t.by("metadata.name"), c(), s(); +}), e.$on("$destroy", function() { +a.unwatchAll(i); +}); +})); } ]), angular.module("openshiftConsole").controller("SecretsController", [ "$routeParams", "$scope", "DataService", "ProjectsService", function(e, t, n, a) { t.projectName = e.project, t.secretsByType = {}, t.alerts = t.alerts || {}, a.get(e.project).then(_.spread(function(e, a) { t.project = e, t.context = a, n.list("secrets", a).then(function(e) { @@ -6393,7 +6551,7 @@ default: return !0; } }); -var m = function(e) { +var p = function(e) { if (e) { var t = l.kindToResourceGroupVersion(e), n = l.apiInfo(t); return !n || !n.verbs || _.includes(n.verbs, "list"); @@ -6407,9 +6565,9 @@ kind: t, group: _.get(n, "kindSelector.selected.group", "") }).toString() : ""; }; -var p; +var m; n.isDuplicateKind = function(e) { -return p || (p = _.countBy(n.kinds, "kind")), p[e] > 1; +return m || (m = _.countBy(n.kinds, "kind")), m[e] > 1; }; var f = function(e, t) { return _.some(n.kinds, function(n) { @@ -6422,7 +6580,7 @@ var t = { resource: l.kindToResource(e.kind), group: e.group || "" }; -return !!m(e) && (!!a.checkResource(t.resource) && a.canI(t, "list", n.projectName)); +return !!p(e) && (!!a.checkResource(t.resource) && a.canI(t, "list", n.projectName)); }), n.project = t, n.context = r, n.kindSelector.disabled = !1, e.kind && f(e.kind, e.group) && (_.set(n, "kindSelector.selected.kind", e.kind), _.set(n, "kindSelector.selected.group", e.group || "")); })), n.loadKind = d, n.$watch("kindSelector.selected", function() { n.alerts = {}, d(); @@ -6463,10 +6621,10 @@ details: r("getErrorDetails")(t) n.unwatchAll(o); }); })); -} ]), angular.module("openshiftConsole").controller("SetLimitsController", [ "$filter", "$location", "$parse", "$routeParams", "$scope", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "LimitRangesService", "Navigate", "NotificationsService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, m) { +} ]), angular.module("openshiftConsole").controller("SetLimitsController", [ "$filter", "$location", "$parse", "$routeParams", "$scope", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "LimitRangesService", "Navigate", "NotificationsService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, p) { if (a.kind && a.name) { -var p = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; -if (_.includes(p, a.kind)) { +var m = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; +if (_.includes(m, a.kind)) { var f = e("humanizeKind"), g = f(a.kind, !0) + " " + a.name; r.name = a.name, "ReplicationController" !== a.kind && "ReplicaSet" !== a.kind || (r.showPodWarning = !0), r.renderOptions = { hideFilterWidget: !0 @@ -6488,7 +6646,7 @@ t.url(r.resourceURL); }, b = function() { d.hideNotification("set-compute-limits-error"); }; -r.cancel = y, r.$on("$destroy", b), m.get(a.project).then(_.spread(function(e, t) { +r.cancel = y, r.$on("$destroy", b), p.get(a.project).then(_.spread(function(e, t) { var n = { resource: o.kindToResource(a.kind), group: a.group @@ -6513,17 +6671,17 @@ r.disableInputs = !1, v(g + " could not be updated.", h(e)); }, function(e) { v(g + " could not be loaded.", h(e)); }); -var m = function() { +var p = function() { r.hideCPU || (r.cpuProblems = l.validatePodLimits(r.limitRanges, "cpu", r.containers, e)), r.memoryProblems = l.validatePodLimits(r.limitRanges, "memory", r.containers, e); }; c.list("limitranges", t).then(function(e) { -r.limitRanges = e.by("metadata.name"), _.isEmpty(r.limitRanges) || r.$watch("containers", m, !0); +r.limitRanges = e.by("metadata.name"), _.isEmpty(r.limitRanges) || r.$watch("containers", p, !0); }); } else u.toErrorPage("You do not have authority to update " + f(a.kind) + " " + a.name + ".", "access_denied"); })); } else u.toErrorPage("Health checks are not supported for kind " + a.kind + "."); } else u.toErrorPage("Kind or name parameter missing."); -} ]), angular.module("openshiftConsole").controller("EditBuildConfigController", [ "$scope", "$filter", "$location", "$routeParams", "$window", "ApplicationGenerator", "AuthorizationService", "DataService", "Navigate", "NotificationsService", "ProjectsService", "SOURCE_URL_PATTERN", "SecretsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("EditBuildConfigController", [ "$scope", "$filter", "$location", "$routeParams", "$window", "ApplicationGenerator", "AuthorizationService", "DataService", "Navigate", "NotificationsService", "ProjectsService", "SOURCE_URL_PATTERN", "SecretsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { e.projectName = a.project, e.buildConfig = null, e.alerts = {}, e.sourceURLPattern = d, e.options = {}, e.jenkinsfileOptions = { type: "path" }, e.selectTypes = { @@ -6659,8 +6817,8 @@ e.$on("$destroy", b), u.get(a.project).then(_.spread(function(n, r) { e.project = n, e.context = r, i.canI("buildconfigs", "update", a.project) ? s.get("buildconfigs", a.buildconfig, r, { errorNotification: !1 }).then(function(t) { -e.buildConfig = t, f(), e.updatedBuildConfig = angular.copy(e.buildConfig), e.buildStrategy = v(e.updatedBuildConfig), e.strategyType = e.buildConfig.spec.strategy.type, e.envVars = e.buildStrategy.env || [], e.triggers = C(e.triggers, e.buildConfig.spec.triggers), e.sources = T(e.sources, e.buildConfig.spec.source), _.has(t, "spec.strategy.jenkinsPipelineStrategy.jenkinsfile") && (e.jenkinsfileOptions.type = "inline"), s.list("secrets", r).then(function(t) { -var n = m.groupSecretsByType(t), a = _.mapValues(n, function(e) { +e.buildConfig = t, f(), e.updatedBuildConfig = angular.copy(e.buildConfig), e.buildStrategy = v(e.updatedBuildConfig), e.strategyType = e.buildConfig.spec.strategy.type, e.envVars = e.buildStrategy.env || [], e.triggers = C(e.triggers, e.buildConfig.spec.triggers), e.sources = I(e.sources, e.buildConfig.spec.source), _.has(t, "spec.strategy.jenkinsPipelineStrategy.jenkinsfile") && (e.jenkinsfileOptions.type = "inline"), s.list("secrets", r).then(function(t) { +var n = p.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); e.secrets.secretsByType = _.each(a, function(e) { @@ -6779,7 +6937,7 @@ var t = e.getSession(); t.setOption("tabSize", 2), t.setOption("useSoftTabs", !0), e.$blockScrolling = 1 / 0; }; var S = function(e) { -return _.map(p.compactEntries(e), function(e) { +return _.map(m.compactEntries(e), function(e) { return { sourcePath: e.name, destinationDir: e.value @@ -6852,7 +7010,7 @@ var a = "Custom" === e.strategyType ? "secretSource" : "secret", r = _.filter(n, return e[a].name; }); _.isEmpty(r) ? delete t.secrets : t.secrets = r; -}, T = function(e, t) { +}, I = function(e, t) { return "None" === t.type ? e : (e.none = !1, angular.forEach(t, function(t, n) { e[n] = !0; }), e); @@ -6880,7 +7038,7 @@ break; case "JenkinsPipeline": "path" === e.jenkinsfileOptions.type ? delete e.updatedBuildConfig.spec.strategy.jenkinsPipelineStrategy.jenkinsfile : delete e.updatedBuildConfig.spec.strategy.jenkinsPipelineStrategy.jenkinsfilePath; } -switch (e.sources.images && !_.isEmpty(e.sourceImages) && (e.updatedBuildConfig.spec.source.images[0].paths = S(e.imageSourcePaths), e.updatedBuildConfig.spec.source.images[0].from = w(e.imageOptions.fromSource)), "None" === e.imageOptions.from.type ? delete v(e.updatedBuildConfig).from : v(e.updatedBuildConfig).from = w(e.imageOptions.from), "None" === e.imageOptions.to.type ? delete e.updatedBuildConfig.spec.output.to : e.updatedBuildConfig.spec.output.to = w(e.imageOptions.to), v(e.updatedBuildConfig).env = p.compactEntries(e.envVars), P(e.updatedBuildConfig.spec.source, _.head(e.secrets.picked.gitSecret), "sourceSecret"), P(v(e.updatedBuildConfig), _.head(e.secrets.picked.pullSecret), "pullSecret"), P(e.updatedBuildConfig.spec.output, _.head(e.secrets.picked.pushSecret), "pushSecret"), e.strategyType) { +switch (e.sources.images && !_.isEmpty(e.sourceImages) && (e.updatedBuildConfig.spec.source.images[0].paths = S(e.imageSourcePaths), e.updatedBuildConfig.spec.source.images[0].from = w(e.imageOptions.fromSource)), "None" === e.imageOptions.from.type ? delete v(e.updatedBuildConfig).from : v(e.updatedBuildConfig).from = w(e.imageOptions.from), "None" === e.imageOptions.to.type ? delete e.updatedBuildConfig.spec.output.to : e.updatedBuildConfig.spec.output.to = w(e.imageOptions.to), v(e.updatedBuildConfig).env = m.compactEntries(e.envVars), P(e.updatedBuildConfig.spec.source, _.head(e.secrets.picked.gitSecret), "sourceSecret"), P(v(e.updatedBuildConfig), _.head(e.secrets.picked.pullSecret), "pullSecret"), P(e.updatedBuildConfig.spec.output, _.head(e.secrets.picked.pushSecret), "pushSecret"), e.strategyType) { case "Source": case "Docker": R(e.updatedBuildConfig.spec.source, e.secrets.picked.sourceSecrets); @@ -6917,10 +7075,10 @@ var u = function(e) { return _.get(e, "metadata.resourceVersion"); }, d = function() { s.hideNotification("edit-config-map-error"); -}, m = function() { +}, p = function() { a.history.back(); }; -n.cancel = m, c.get(t.project).then(_.spread(function(a, c) { +n.cancel = p, c.get(t.project).then(_.spread(function(a, c) { r.get("configmaps", t.configMap, c, { errorNotification: !1 }).then(function(e) { @@ -6939,7 +7097,7 @@ n.forms.editConfigMapForm.$valid && (d(), n.disableInputs = !0, r.update("config s.addNotification({ type: "success", message: "Config map " + n.configMap.metadata.name + " successfully updated." -}), m(); +}), p(); }, function(t) { n.disableInputs = !1, s.addNotification({ id: "edit-config-map-error", @@ -6952,7 +7110,7 @@ details: e("getErrorDetails")(t) r.unwatchAll(l), d(); }); })); -} ]), angular.module("openshiftConsole").controller("EditDeploymentConfigController", [ "$scope", "$filter", "$location", "$routeParams", "$uibModal", "$window", "AuthorizationService", "BreadcrumbsService", "DataService", "EnvironmentService", "Navigate", "NotificationsService", "ProjectsService", "SecretsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f) { +} ]), angular.module("openshiftConsole").controller("EditDeploymentConfigController", [ "$scope", "$filter", "$location", "$routeParams", "$uibModal", "$window", "AuthorizationService", "BreadcrumbsService", "DataService", "EnvironmentService", "Navigate", "NotificationsService", "ProjectsService", "SecretsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f) { e.projectName = a.project, e.deploymentConfig = null, e.alerts = {}, e.view = { advancedStrategyOptions: !1, advancedImageOptions: !1 @@ -6985,7 +7143,7 @@ default: return void Logger.error("Unknown deployment strategy type: " + e); } }; -m.get(a.project).then(_.spread(function(n, r) { +p.get(a.project).then(_.spread(function(n, r) { e.project = n, e.context = r, i.canI("deploymentconfigs", "update", a.project) ? c.get("deploymentconfigs", a.deploymentconfig, r, { errorNotification: !1 }).then(function(t) { @@ -7044,7 +7202,7 @@ b = g(t.by("metadata.name")), e.availableConfigMaps = b, e.valueFromObjects = b. errorNotification: !1 }).then(function(t) { C = g(t.by("metadata.name")), e.availableSecrets = C, e.valueFromObjects = C.concat(b); -var n = p.groupSecretsByType(t), a = _.mapValues(n, function(e) { +var n = m.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); e.secretsByType = _.each(a, function(e) { @@ -7163,7 +7321,7 @@ o.history.back(); }, e.$on("$destroy", function() { c.unwatchAll(y), R(); }); -} ]), angular.module("openshiftConsole").controller("EditAutoscalerController", [ "$scope", "$filter", "$routeParams", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "HPAService", "MetricsService", "Navigate", "NotificationsService", "ProjectsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("EditAutoscalerController", [ "$scope", "$filter", "$routeParams", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "HPAService", "MetricsService", "Navigate", "NotificationsService", "ProjectsService", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { if (n.kind && n.name) { var f = [ "Deployment", "DeploymentConfig", "HorizontalPodAutoscaler", "ReplicaSet", "ReplicationController" ]; if (_.includes(f, n.kind)) { @@ -7179,21 +7337,21 @@ e.cancel = h; var v = function() { d.hideNotification("edit-hpa-error"); }; -e.$on("$destroy", v), m.get(n.project).then(_.spread(function(t, a) { +e.$on("$destroy", v), p.get(n.project).then(_.spread(function(t, a) { e.project = t; var l = "HorizontalPodAutoscaler" === n.kind ? "update" : "create"; if (o.canI({ resource: "horizontalpodautoscalers", group: "autoscaling" }, l, n.project)) { -var m = function() { +var p = function() { e.disableInputs = !0, v(); var t = { apiVersion: "autoscaling/v1", kind: "HorizontalPodAutoscaler", metadata: { name: e.autoscaling.name, -labels: p.mapEntries(p.compactEntries(e.labels)) +labels: m.mapEntries(m.compactEntries(e.labels)) }, spec: { scaleTargetRef: { @@ -7224,7 +7382,7 @@ details: g(t) }); }); }, f = function(t) { -e.disableInputs = !0, (t = angular.copy(t)).metadata.labels = p.mapEntries(p.compactEntries(e.labels)), t.spec.minReplicas = e.autoscaling.minReplicas, t.spec.maxReplicas = e.autoscaling.maxReplicas, t.spec.targetCPUUtilizationPercentage = e.autoscaling.targetCPU || e.autoscaling.defaultTargetCPU || null, s.update({ +e.disableInputs = !0, (t = angular.copy(t)).metadata.labels = m.mapEntries(m.compactEntries(e.labels)), t.spec.minReplicas = e.autoscaling.minReplicas, t.spec.maxReplicas = e.autoscaling.maxReplicas, t.spec.targetCPUUtilizationPercentage = e.autoscaling.targetCPU || e.autoscaling.defaultTargetCPU || null, s.update({ resource: "horizontalpodautoscalers", group: "autoscaling" }, t.metadata.name, t, a).then(function(e) { @@ -7271,7 +7429,7 @@ e.breadcrumbs = i.getBreadcrumbs({ object: r, project: t, subpage: "Autoscale" -}), e.save = m; +}), e.save = p; var o = {}, l = function() { var n = _.get(r, "spec.template.spec.containers", []); e.showCPURequestWarning = !c.hasCPURequest(n, o, t); @@ -7295,7 +7453,7 @@ kind: n.kind, namespace: n.project, subpage: "Edit Health Checks" }), a.previousProbes = {}; -var m = e("getErrorDetails"), p = e("upperFirst"), f = function(e, t) { +var p = e("getErrorDetails"), m = e("upperFirst"), f = function(e, t) { l.addNotification({ id: "add-health-check-error", type: "error", @@ -7328,14 +7486,14 @@ _.set(a.previousProbes, [ e.name, t ], e[t]), delete e[t], a.form.$setDirty(); a.disableInputs = !0, h(), s.update(i.kindToResource(n.kind), a.name, r, u).then(function() { l.addNotification({ type: "success", -message: p(d) + " was updated." +message: m(d) + " was updated." }), g(); }, function(e) { -a.disableInputs = !1, f(p(d) + " could not be updated.", m(e)); +a.disableInputs = !1, f(m(d) + " could not be updated.", p(e)); }); }; }, function(e) { -f(p(d) + " could not be loaded.", m(e)); +f(m(d) + " could not be loaded.", p(e)); }) : c.toErrorPage("You do not have authority to update " + d + ".", "access_denied"); })); } else c.toErrorPage("Health checks are not supported for kind " + n.kind + "."); @@ -7361,33 +7519,33 @@ t.path(a.routeURL); }; a.cancel = d, c.get(n.project).then(_.spread(function(t, c) { if (a.project = t, r.canI("routes", "update", n.project)) { -var m, p = e("orderByDisplayName"), f = function() { +var p, m = e("orderByDisplayName"), f = function() { i.toErrorPage('Editing routes with non-service targets is unsupported. You can edit the route with the "Edit YAML" action instead.'); }; o.get("routes", a.routeName, c).then(function(e) { if ("Service" === e.spec.to.kind) { -m = angular.copy(e); -var t = _.get(m, "spec.host"); -"Subdomain" === _.get(m, "spec.wildcardPolicy") && (t = "*." + l.getSubdomain(m)), a.routing = { +p = angular.copy(e); +var t = _.get(p, "spec.host"); +"Subdomain" === _.get(p, "spec.wildcardPolicy") && (t = "*." + l.getSubdomain(p)), a.routing = { host: t, -wildcardPolicy: _.get(m, "spec.wildcardPolicy"), -path: _.get(m, "spec.path"), -targetPort: _.get(m, "spec.port.targetPort"), -tls: angular.copy(_.get(m, "spec.tls")) +wildcardPolicy: _.get(p, "spec.wildcardPolicy"), +path: _.get(p, "spec.path"), +targetPort: _.get(p, "spec.port.targetPort"), +tls: angular.copy(_.get(p, "spec.tls")) }, o.list("services", c).then(function(e) { a.loading = !1; var t = e.by("metadata.name"); -a.routing.to = m.spec.to, a.routing.alternateServices = [], _.each(_.get(m, "spec.alternateBackends"), function(e) { +a.routing.to = p.spec.to, a.routing.alternateServices = [], _.each(_.get(p, "spec.alternateBackends"), function(e) { if ("Service" !== e.kind) return f(), !1; a.routing.alternateServices.push(e); -}), a.services = p(t); +}), a.services = m(t); }); } else f(); }, function() { i.toErrorPage("Could not load route " + a.routeName + "."); }); var g = function() { -var e = angular.copy(m), t = _.get(a, "routing.to.name"); +var e = angular.copy(p), t = _.get(a, "routing.to.name"); _.set(e, "spec.to.name", t); var n = _.get(a, "routing.to.weight"); isNaN(n) || _.set(e, "spec.to.weight", n), e.spec.path = a.routing.path; @@ -7425,14 +7583,14 @@ details: e("getErrorDetails")(t) })); } ]), angular.module("openshiftConsole").controller("EditYAMLController", [ "$scope", "$filter", "$location", "$routeParams", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "Navigate", "NotificationsService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d) { if (a.kind && a.name) { -var m = t("humanizeKind"); +var p = t("humanizeKind"); e.alerts = {}, e.name = a.name, e.resourceURL = l.resourceURL(e.name, a.kind, a.project), e.breadcrumbs = [ { title: a.name, link: a.returnURL }, { title: "Edit YAML" } ]; -var p = function() { +var m = function() { e.modified = !1, a.returnURL ? n.url(a.returnURL) : r.history.back(); }; e.$watch("updated.resource", function(t, n) { @@ -7462,13 +7620,13 @@ namespace: i.metadata.namespace var r = _.get(n, "metadata.resourceVersion"); if (_.get(t, "metadata.resourceVersion") === r) return e.alerts["no-changes-applied"] = { type: "warning", -message: "No changes were applied to " + m(a.kind) + " " + a.name + ".", +message: "No changes were applied to " + p(a.kind) + " " + a.name + ".", details: "Make sure any new fields you may have added are supported API fields." }, void (e.updatingNow = !1); u.addNotification({ type: "success", -message: m(a.kind, !0) + " " + a.name + " was successfully updated." -}), p(); +message: p(a.kind, !0) + " " + a.name + " was successfully updated." +}), m(); }, function(n) { e.updatingNow = !1, e.error = { message: t("getErrorDetails")(n) @@ -7484,17 +7642,17 @@ message: o.invalidObjectKindOrVersion(n) message: "Cannot change resource kind (original: " + i.kind + ", modified: " + (n.kind || "") + ")." }; }, e.cancel = function() { -p(); +m(); }, f.push(c.watchObject(s, e.name, r, function(t, n) { e.resourceChanged = l(t) !== l(i), e.resourceDeleted = "DELETED" === n; }, { errorNotification: !1 })); }, function(e) { -l.toErrorPage("Could not load " + m(a.kind) + " '" + a.name + "'. " + t("getErrorDetails")(e)); +l.toErrorPage("Could not load " + p(a.kind) + " '" + a.name + "'. " + t("getErrorDetails")(e)); }), e.$on("$destroy", function() { c.unwatchAll(f); -})) : l.toErrorPage("You do not have authority to update " + m(a.kind) + " " + a.name + ".", "access_denied"); +})) : l.toErrorPage("You do not have authority to update " + p(a.kind) + " " + a.name + ".", "access_denied"); })); } else l.toErrorPage("Kind or name parameter missing."); } ]), angular.module("openshiftConsole").controller("BrowseCategoryController", [ "$scope", "$filter", "$location", "$q", "$routeParams", "$uibModal", "Constants", "DataService", "LabelFilter", "Navigate", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u) { @@ -7514,10 +7672,10 @@ label: "" } return !1; }), a; -}, m = i.CATALOG_CATEGORIES, p = "none" === r.category ? "" : r.category; -if (e.category = d(m, p), e.category) { +}, p = i.CATALOG_CATEGORIES, m = "none" === r.category ? "" : r.category; +if (e.category = d(p, m), e.category) { var f, g; -!r.subcategory || (f = e.category, p = "none" === r.subcategory ? "" : r.subcategory, g = _.get(e.category, "subcategories", []), e.category = d(g, p), e.category) ? (e.alerts = e.alerts || {}, e.breadcrumbs = [ { +!r.subcategory || (f = e.category, m = "none" === r.subcategory ? "" : r.subcategory, g = _.get(e.category, "subcategories", []), e.category = d(g, m), e.category) ? (e.alerts = e.alerts || {}, e.breadcrumbs = [ { title: "Add to Project", link: "project/" + e.projectName + "/create" }, { @@ -7548,7 +7706,7 @@ e.projectTemplates = t.by("metadata.name"); })); }))) : l.toErrorPage("Catalog category " + r.category + "/" + r.subcategory + " not found."); } else l.toErrorPage("Catalog category " + r.category + " not found."); -} ]), angular.module("openshiftConsole").controller("CreateFromImageController", [ "$scope", "$filter", "$parse", "$q", "$routeParams", "$uibModal", "APIService", "ApplicationGenerator", "DataService", "HPAService", "ImagesService", "LimitRangesService", "Logger", "MetricsService", "Navigate", "NotificationsService", "ProjectsService", "QuotaService", "SOURCE_URL_PATTERN", "SecretsService", "TaskList", "failureObjectNameFilter", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f, g, h, v, y, b, C, S, w) { +} ]), angular.module("openshiftConsole").controller("CreateFromImageController", [ "$scope", "$filter", "$parse", "$q", "$routeParams", "$uibModal", "APIService", "ApplicationGenerator", "DataService", "HPAService", "ImagesService", "LimitRangesService", "Logger", "MetricsService", "Navigate", "NotificationsService", "ProjectsService", "QuotaService", "SOURCE_URL_PATTERN", "SecretsService", "TaskList", "failureObjectNameFilter", "keyValueEditorUtils", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m, f, g, h, v, y, b, C, S, w) { var k = t("displayName"), j = t("humanize"); e.projectName = r.project, e.sourceURLPattern = y; var P = r.imageStream; @@ -7563,10 +7721,10 @@ link: "project/" + e.projectName + "/create?tab=fromCatalog" }, { title: R } ]; -var T = { +var I = { name: "app", value: "" -}, I = t("orderByDisplayName"), E = t("getErrorDetails"), N = {}, D = function() { +}, T = t("orderByDisplayName"), E = t("getErrorDetails"), N = {}, D = function() { g.hideNotification("create-builder-list-config-maps-error"), g.hideNotification("create-builder-list-secrets-error"), _.each(N, function(e) { !e.id || "error" !== e.type && "warning" !== e.type || g.hideNotification(e.id); }); @@ -7583,11 +7741,11 @@ var h, y, S = function() { e.scaling.autoscale ? e.showCPURequestWarning = !l.hasCPURequest([ e.container ], e.limitRanges, t) : e.showCPURequestWarning = !1; }; c.list("resourcequotas", n).then(function(e) { -h = e.by("metadata.name"), m.log("quotas", h); +h = e.by("metadata.name"), p.log("quotas", h); }), c.list("appliedclusterresourcequotas", n).then(function(e) { -y = e.by("metadata.name"), m.log("cluster quotas", y); +y = e.by("metadata.name"), p.log("cluster quotas", y); }), e.$watch("scaling.autoscale", S), e.$watch("container", S, !0), e.$watch("name", function(e, t) { -T.value && T.value !== t || (T.value = e); +I.value && I.value !== t || (I.value = e); }), function(a) { a.name = r.name, a.imageName = P, a.imageTag = r.imageTag, a.namespace = r.namespace, a.buildConfig = { buildOnSourceChange: !0, @@ -7607,7 +7765,7 @@ deployOnConfigChange: !0 }, a.DCEnvVarsFromImage, a.DCEnvVarsFromUser = [], a.routing = { include: !0, portOptions: [] -}, a.labelArray = [ T ], a.annotations = {}, a.scaling = { +}, a.labelArray = [ I ], a.annotations = {}, a.scaling = { replicas: 1, autoscale: !1, autoscaleOptions: [ { @@ -7624,14 +7782,14 @@ var e; (a.image || a.image.metadata || a.image.metadata.annotations) && (e = a.image.metadata.annotations, a.buildConfig.sourceUrl = e.sampleRepo || "", a.buildConfig.gitRef = e.sampleRef || "", a.buildConfig.contextDir = e.sampleContextDir || "", (e.sampleRef || e.sampleContextDir) && (a.advancedSourceOptions = !0)); }, a.usingSampleRepo = function() { return a.buildConfig.sourceUrl === _.get(a, "image.metadata.annotations.sampleRepo"); -}, p.isAvailable().then(function(t) { +}, m.isAvailable().then(function(t) { e.metricsWarning = !t; }); var o = [], i = []; e.valueFromObjects = [], c.list("configmaps", n, null, { errorNotification: !1 }).then(function(t) { -o = I(t.by("metadata.name")), e.valueFromObjects = o.concat(i); +o = T(t.by("metadata.name")), e.valueFromObjects = o.concat(i); }, function(e) { 403 !== e.code && g.addNotification({ id: "create-builder-list-config-maps-error", @@ -7642,7 +7800,7 @@ details: E(e) }), c.list("secrets", n, null, { errorNotification: !1 }).then(function(t) { -i = I(t.by("metadata.name")), e.valueFromObjects = i.concat(o); +i = T(t.by("metadata.name")), e.valueFromObjects = i.concat(o); var n = b.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); @@ -7743,7 +7901,7 @@ return k(this.project) || this.projectName; e.disableInputs = !0, D(), e.buildConfig.envVars = w.compactEntries(e.buildConfigEnvVars), e.deploymentConfig.envVars = w.compactEntries(e.DCEnvVarsFromUser), e.labels = w.mapEntries(w.compactEntries(e.labelArray)); var t = s.generate(e); $ = [], angular.forEach(t, function(e) { -null !== e && (m.debug("Generated resource definition:", e), $.push(e)); +null !== e && (p.debug("Generated resource definition:", e), $.push(e)); }); var a = s.ifResourcesDontExist($, e.projectName), r = v.getLatestQuotaAlerts($, n), o = function(t) { return e.nameTaken = t.nameTaken, r; @@ -7754,7 +7912,7 @@ a.then(o, o).then(L, L); f.toProjectOverview(e.projectName); }; } else f.toErrorPage("Cannot create from source: a base image tag was not specified"); else f.toErrorPage("Cannot create from source: a base image was not specified"); -} ]), angular.module("openshiftConsole").controller("NextStepsController", [ "$scope", "$http", "$routeParams", "DataService", "$q", "$location", "TaskList", "$parse", "Navigate", "Logger", "$filter", "imageObjectRefFilter", "failureObjectNameFilter", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("NextStepsController", [ "$scope", "$http", "$routeParams", "DataService", "$q", "$location", "TaskList", "$parse", "Navigate", "Logger", "$filter", "imageObjectRefFilter", "failureObjectNameFilter", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { u("displayName"); var f = []; e.alerts = [], e.loginBaseUrl = a.openshiftAPIBaseUrl(), e.buildConfigs = {}, e.projectName = n.project, e.fromSampleRepo = n.fromSample, e.breadcrumbs = [ { @@ -7764,7 +7922,7 @@ link: "project/" + e.projectName + "/create" title: n.breadcrumbTitle || n.name }, { title: "Next Steps" -} ], p.get(n.project).then(_.spread(function(t, r) { +} ], m.get(n.project).then(_.spread(function(t, r) { e.project = t, f.push(a.watch("buildconfigs", r, function(t) { e.buildConfigs = t.by("metadata.name"), e.createdBuildConfig = e.buildConfigs[n.name], l.log("buildconfigs (subscribe)", e.buildConfigs); })), e.$on("$destroy", function() { @@ -7784,7 +7942,7 @@ function d(e) { for (var t = [], n = w.exec(e); n; ) t.push(n[1]), n = w.exec(e); return t; } -function m() { +function p() { var e = g(); r.templateImages = _.map(k, function(t) { return _.isEmpty(t.usesParameters) ? t : { @@ -7795,7 +7953,7 @@ usesParameters: t.usesParameters }; }); } -function p(e) { +function m(e) { var t = [], n = y(e); return n && angular.forEach(n, function(n) { var a = n.image, r = u(e, n); @@ -7815,7 +7973,7 @@ usesParameters: d(a) var r = S(C(e), v); r && (n[r] = !0); } -"DeploymentConfig" === e.kind && (t = t.concat(p(e))); +"DeploymentConfig" === e.kind && (t = t.concat(m(e))); }), t.forEach(function(e) { n[e] || k.push({ name: e, @@ -7863,7 +8021,7 @@ return !_.isEmpty(e.usesParameters); }) ? (r.parameterDisplayNames = {}, _.each(t.parameters, function(e) { r.parameterDisplayNames[e.name] = e.displayName || e.name; }), r.$watch("template.parameters", _.debounce(function() { -r.$apply(m); +r.$apply(p); }, 50, { maxWait: 250 }), !0)) : r.templateImages = k; @@ -8030,11 +8188,11 @@ type: "error", message: "The templateParamsMap is not valid JSON. " + t }; } -}, m = window.OPENSHIFT_CONSTANTS.CREATE_FROM_URL_WHITELIST, p = [ "namespace", "name", "imageStream", "imageTag", "sourceURI", "sourceRef", "contextDir", "template", "templateParamsMap" ], f = _.pickBy(t, function(e, t) { -return _.includes(p, t) && _.isString(e); +}, p = window.OPENSHIFT_CONSTANTS.CREATE_FROM_URL_WHITELIST, m = [ "namespace", "name", "imageStream", "imageTag", "sourceURI", "sourceRef", "contextDir", "template", "templateParamsMap" ], f = _.pickBy(t, function(e, t) { +return _.includes(m, t) && _.isString(e); }); f.namespace = f.namespace || "openshift"; -_.includes(m, f.namespace) ? f.imageStream && f.template ? e.alerts.invalidResource = { +_.includes(p, f.namespace) ? f.imageStream && f.template ? e.alerts.invalidResource = { type: "error", message: "Image streams and templates cannot be combined." } : f.imageStream || f.template ? f.name && !function(e) { @@ -8148,12 +8306,12 @@ var d = function() { c.hideNotification("create-route-error"); }; n.$on("$destroy", d); -var m = function() { +var p = function() { a.history.back(); }; -n.cancel = m, l.get(t.project).then(_.spread(function(a, l) { +n.cancel = p, l.get(t.project).then(_.spread(function(a, l) { if (n.project = a, o.canI("routes", "create", t.project)) { -var p, f = e("orderByDisplayName"); +var m, f = e("orderByDisplayName"); n.routing.to = { kind: "Service", name: n.serviceName, @@ -8161,7 +8319,7 @@ weight: 1 }; var g, h = function() { var e = g, t = _.get(n, "routing.to.name"); -g = _.get(p, [ t, "metadata", "labels" ], {}); +g = _.get(m, [ t, "metadata", "labels" ], {}); var a = u.mapEntries(u.compactEntries(n.labels)), r = _.assign(a, g); e && (r = _.omitBy(r, function(t, n) { return e[n] && !g[n]; @@ -8173,7 +8331,7 @@ value: e }); }; i.list("services", l).then(function(e) { -p = e.by("metadata.name"), n.services = f(p), n.$watch("routing.to.name", h); +m = e.by("metadata.name"), n.services = f(m), n.$watch("routing.to.name", h); }), n.createRoute = function() { if (n.createRouteForm.$valid) { d(), n.disableInputs = !0; @@ -8188,7 +8346,7 @@ weight: e.weight c.addNotification({ type: "success", message: "Route " + o.metadata.name + " was successfully created." -}), m(); +}), p(); }, function(t) { n.disableInputs = !1, c.addNotification({ type: "error", @@ -8201,7 +8359,7 @@ details: e("getErrorDetails")(t) }; } else s.toErrorPage("You do not have authority to create routes in project " + t.project + ".", "access_denied"); })); -} ]), angular.module("openshiftConsole").controller("AttachPVCController", [ "$filter", "$routeParams", "$scope", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "QuotaService", "Navigate", "NotificationsService", "ProjectsService", "StorageService", "RELATIVE_PATH_PATTERN", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("AttachPVCController", [ "$filter", "$routeParams", "$scope", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "QuotaService", "Navigate", "NotificationsService", "ProjectsService", "StorageService", "RELATIVE_PATH_PATTERN", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { if (t.kind && t.name) { var f = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ], g = e("humanizeKind"); if (_.includes(f, t.kind)) { @@ -8209,7 +8367,7 @@ var h = { resource: r.kindToResource(t.kind), group: t.group }; -n.projectName = t.project, n.kind = t.kind, n.name = t.name, n.RELATIVE_PATH_PATTERN = p, n.outOfClaims = !1, n.attach = { +n.projectName = t.project, n.kind = t.kind, n.name = t.name, n.RELATIVE_PATH_PATTERN = m, n.outOfClaims = !1, n.attach = { persistentVolumeClaim: null, volumeName: null, mountPath: null, @@ -8222,7 +8380,7 @@ namespace: t.project, subpage: "Add Storage" }), d.get(t.project).then(_.spread(function(r, d) { if (n.project = r, o.canI(h, "update", t.project)) { -var p = e("orderByDisplayName"), f = e("getErrorDetails"), v = e("generateName"), y = function(e, t) { +var m = e("orderByDisplayName"), f = e("getErrorDetails"), v = e("generateName"), y = function(e, t) { n.disableInputs = !0, u.addNotification({ id: "attach-pvc-error", type: "error", @@ -8241,7 +8399,7 @@ var S = function(e) { return n.attach.allContainers || n.attach.containers[e.name]; }, w = function() { var e = _.get(n, "attach.resource.spec.template"); -n.existingMountPaths = m.getMountPaths(e, S); +n.existingMountPaths = p.getMountPaths(e, S); }; n.$watchGroup([ "attach.resource", "attach.allContainers" ], w), n.$watch("attach.containers", w, !0); s.get(h, t.name, d).then(function(e) { @@ -8251,11 +8409,11 @@ project: r, subpage: "Add Storage" }); var t = _.get(e, "spec.template"); -n.existingVolumeNames = m.getVolumeNames(t); +n.existingVolumeNames = p.getVolumeNames(t); }, function(e) { y(t.name + " could not be loaded.", f(e)); }), s.list("persistentvolumeclaims", d).then(function(e) { -n.pvcs = p(e.by("metadata.name")), _.isEmpty(n.pvcs) || n.attach.persistentVolumeClaim || (n.attach.persistentVolumeClaim = _.head(n.pvcs)); +n.pvcs = m(e.by("metadata.name")), _.isEmpty(n.pvcs) || n.attach.persistentVolumeClaim || (n.attach.persistentVolumeClaim = _.head(n.pvcs)); }), s.list("resourcequotas", { namespace: n.projectName }, function(e) { @@ -8270,12 +8428,12 @@ n.attach.volumeName || (n.attach.volumeName = v("volume-")); var e = n.attach.resource, a = _.get(e, "spec.template"), r = n.attach.persistentVolumeClaim, o = n.attach.volumeName, i = n.attach.mountPath, c = n.attach.subPath, l = n.attach.readOnly; i && angular.forEach(a.spec.containers, function(e) { if (S(e)) { -var t = m.createVolumeMount(o, i, c, l); +var t = p.createVolumeMount(o, i, c, l); e.volumeMounts || (e.volumeMounts = []), e.volumeMounts.push(t); } }); -var p = m.createVolume(o, r); -a.spec.volumes || (a.spec.volumes = []), a.spec.volumes.push(p), s.update(h, e.metadata.name, n.attach.resource, d).then(function() { +var m = p.createVolume(o, r); +a.spec.volumes || (a.spec.volumes = []), a.spec.volumes.push(m), s.update(h, e.metadata.name, n.attach.resource, d).then(function() { var e; i || (e = "No mount path was provided. The volume reference was added to the configuration, but it will not be mounted into running pods."), u.addNotification({ type: "success", @@ -8291,7 +8449,7 @@ y("An error occurred attaching the persistent volume claim to the " + g(t.kind) })); } else l.toErrorPage("Storage is not supported for kind " + g(t.kind) + "."); } else l.toErrorPage("Kind or name parameter missing."); -} ]), angular.module("openshiftConsole").controller("AddConfigVolumeController", [ "$filter", "$location", "$routeParams", "$scope", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "Navigate", "NotificationsService", "ProjectsService", "StorageService", "RELATIVE_PATH_PATTERN", function(e, t, n, a, r, o, i, s, c, l, u, d, m, p) { +} ]), angular.module("openshiftConsole").controller("AddConfigVolumeController", [ "$filter", "$location", "$routeParams", "$scope", "$window", "APIService", "AuthorizationService", "BreadcrumbsService", "DataService", "Navigate", "NotificationsService", "ProjectsService", "StorageService", "RELATIVE_PATH_PATTERN", function(e, t, n, a, r, o, i, s, c, l, u, d, p, m) { if (n.kind && n.name) { var f = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; if (_.includes(f, n.kind)) { @@ -8302,7 +8460,7 @@ group: n.group a.projectName = n.project, a.kind = n.kind, a.name = n.name, a.attach = { allContainers: !0, pickKeys: !1 -}, a.forms = {}, a.RELATIVE_PATH_PATTERN = p, a.breadcrumbs = s.getBreadcrumbs({ +}, a.forms = {}, a.RELATIVE_PATH_PATTERN = m, a.breadcrumbs = s.getBreadcrumbs({ name: n.name, kind: n.kind, namespace: n.project, @@ -8337,7 +8495,7 @@ a.attach.items.push({}), v(); a.attach.items.splice(e, 1), v(); }, d.get(n.project).then(_.spread(function(t, r) { if (a.project = t, i.canI(g, "update", n.project)) { -var o = e("orderByDisplayName"), d = e("getErrorDetails"), p = e("generateName"); +var o = e("orderByDisplayName"), d = e("getErrorDetails"), m = e("generateName"); c.get(g, n.name, r, { errorNotification: !1 }).then(function(e) { @@ -8365,7 +8523,7 @@ var f = function(e) { return a.attach.allContainers || a.attach.containers[e.name]; }, v = function() { var e = _.get(a, "targetObject.spec.template"); -a.existingMountPaths = m.getMountPaths(e, f); +a.existingMountPaths = p.getMountPaths(e, f); }; a.$watchGroup([ "targetObject", "attach.allContainers" ], v), a.$watch("attach.containers", v, !0); a.$watch("attach.items", function() { @@ -8373,28 +8531,28 @@ var e = _.map(a.attach.items, "path"); a.itemPaths = _.compact(e); }, !0), a.addVolume = function() { if (!a.forms.addConfigVolumeForm.$invalid) { -var t = a.targetObject, o = _.get(a, "attach.source"), i = _.get(t, "spec.template"), s = p("volume-"), l = { +var t = a.targetObject, o = _.get(a, "attach.source"), i = _.get(t, "spec.template"), s = m("volume-"), l = { name: s, mountPath: _.get(a, "attach.mountPath") }; "Secret" === o.kind && (l.readOnly = !0), _.each(i.spec.containers, function(e) { f(e) && (e.volumeMounts = e.volumeMounts || [], e.volumeMounts.push(l)); }); -var m, h = { +var p, h = { name: s }; -switch (a.attach.pickKeys && (m = a.attach.items), o.kind) { +switch (a.attach.pickKeys && (p = a.attach.items), o.kind) { case "ConfigMap": h.configMap = { name: o.metadata.name, -items: m +items: p }; break; case "Secret": h.secret = { secretName: o.metadata.name, -items: m +items: p }; } i.spec.volumes = i.spec.volumes || [], i.spec.volumes.push(h), a.disableInputs = !0, C(); @@ -8502,10 +8660,10 @@ var d = function() { c.hideNotification("create-pvc-error"); }; n.$on("$destroy", d); -var m = function() { +var p = function() { a.history.back(); }; -n.cancel = m, l.get(t.project).then(_.spread(function(a, r) { +n.cancel = p, l.get(t.project).then(_.spread(function(a, r) { function l() { var e = { kind: "PersistentVolumeClaim", @@ -8537,7 +8695,7 @@ i.create("persistentvolumeclaims", null, t, r).then(function(e) { c.addNotification({ type: "success", message: "Persistent volume claim " + e.metadata.name + " successfully created." -}), m(); +}), p(); }, function(t) { n.disableInputs = !1, c.addNotification({ id: "create-pvc-error", @@ -8785,7 +8943,7 @@ deleteImmediately: !1 }; var d = function(e) { a.stayOnCurrentPage && a.alerts ? a.alerts[e.name] = e.data : c.addNotification(e.data); -}, m = function(e) { +}, p = function(e) { return i.delete({ resource: "horizontalpodautoscalers", group: "autoscaling" @@ -8805,7 +8963,7 @@ message: "Horizontal pod autoscaler " + e.metadata.name + " could not be deleted } }), l.error("HPA " + e.metadata.name + " could not be deleted.", t); }); -}, p = function() { +}, m = function() { if (!a.stayOnCurrentPage) if (a.redirectUrl) t.url(a.redirectUrl); else if ("Project" === a.kind) if ("/" !== t.path()) { var e = URI("/"); t.url(e); @@ -8828,7 +8986,7 @@ group: a.group c.addNotification({ type: "success", message: s + " was marked for deletion." -}), a.success && a.success(), a.options.deleteHPAs && _.each(a.hpaList, m), p(); +}), a.success && a.success(), a.options.deleteHPAs && _.each(a.hpaList, p), m(); }).catch(function(e) { d({ name: t, @@ -8915,15 +9073,15 @@ var t = _.get(e, "sortConfig.currentField.id", "lastTimestamp"); l !== t && (l = t, e.sortConfig.isAscending = !u[l]); var n = e.sortConfig.isAscending ? "asc" : "desc"; c = _.orderBy(e.events, [ t ], [ n ]); -}, m = [], p = function() { -e.filterExpressions = m = a.generateKeywords(_.get(e, "filter.text")); +}, p = [], m = function() { +e.filterExpressions = p = a.generateKeywords(_.get(e, "filter.text")); }, f = [ "reason", "message", "type" ]; e.resourceKind && e.resourceName || f.splice(0, 0, "involvedObject.name", "involvedObject.kind"); var g = function() { -e.filteredEvents = a.filterForKeywords(c, f, m); +e.filteredEvents = a.filterForKeywords(c, f, p); }; e.$watch("filter.text", _.debounce(function() { -p(), e.$evalAsync(g); +m(), e.$evalAsync(g); }, 50, { maxWait: 250 })); @@ -9045,7 +9203,7 @@ t.unwatchAll(r); }); } ] }; -} ]), angular.module("openshiftConsole").directive("fromFile", [ "$filter", "$location", "$q", "$uibModal", "APIService", "CachedTemplateService", "DataService", "Navigate", "NotificationsService", "QuotaService", "SecurityCheckService", "TaskList", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, m) { +} ]), angular.module("openshiftConsole").directive("fromFile", [ "$filter", "$location", "$q", "$uibModal", "APIService", "CachedTemplateService", "DataService", "Navigate", "NotificationsService", "QuotaService", "SecurityCheckService", "TaskList", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l, u, d, p) { return { restrict: "E", scope: { @@ -9053,18 +9211,18 @@ project: "=", isDialog: "=" }, templateUrl: "views/directives/from-file.html", -controller: [ "$scope", function(p) { +controller: [ "$scope", function(m) { function f(e) { -return !!e.kind || (p.error = { +return !!e.kind || (m.error = { message: "Resource is missing kind field." }, !1); } function g(e) { -return !!p.isList || (e.metadata ? e.metadata.name ? !e.metadata.namespace || e.metadata.namespace === p.input.selectedProject.metadata.name || (p.error = { +return !!m.isList || (e.metadata ? e.metadata.name ? !e.metadata.namespace || e.metadata.namespace === m.input.selectedProject.metadata.name || (m.error = { message: e.kind + " " + e.metadata.name + " can't be created in project " + e.metadata.namespace + ". Can't create resource in different projects." -}, !1) : (p.error = { +}, !1) : (m.error = { message: "Resource name is missing in metadata field." -}, !1) : (p.error = { +}, !1) : (m.error = { message: "Resource is missing metadata field." }, !1)); } @@ -9073,9 +9231,9 @@ a.open({ animation: !0, templateUrl: "views/modals/process-or-save-template.html", controller: "ProcessOrSaveTemplateModalController", -scope: p +scope: m }).result.then(function() { -p.templateOptions.add ? y() : (o.setTemplate(p.resourceList[0]), b()); +m.templateOptions.add ? y() : (o.setTemplate(m.resourceList[0]), b()); }); } function v() { @@ -9083,52 +9241,52 @@ a.open({ animation: !0, templateUrl: "views/modals/confirm-replace.html", controller: "ConfirmReplaceModalController", -scope: p +scope: m }).result.then(function() { -l.getLatestQuotaAlerts(p.createResources, { -namespace: p.input.selectedProject.metadata.name +l.getLatestQuotaAlerts(m.createResources, { +namespace: m.input.selectedProject.metadata.name }).then(N); }); } function y() { -var e = p.createResources.length, t = p.updateResources.length; -if (p.resourceKind.endsWith("List")) { +var e = m.createResources.length, t = m.updateResources.length; +if (m.resourceKind.endsWith("List")) { var a = []; t > 0 && a.push(k()), e > 0 && a.push(w()), n.all(a).then(b); } else S(); } function b() { var e, n; -E(), "Template" === p.resourceKind && p.templateOptions.process && !p.errorOccurred ? p.isDialog ? p.$emit("fileImportedFromYAMLOrJSON", { -project: p.input.selectedProject, -template: p.resource -}) : (n = p.templateOptions.add || p.updateResources.length > 0 ? p.input.selectedProject.metadata.name : "", e = s.createFromTemplateURL(p.resource, p.input.selectedProject.metadata.name, { +E(), "Template" === m.resourceKind && m.templateOptions.process && !m.errorOccurred ? m.isDialog ? m.$emit("fileImportedFromYAMLOrJSON", { +project: m.input.selectedProject, +template: m.resource +}) : (n = m.templateOptions.add || m.updateResources.length > 0 ? m.input.selectedProject.metadata.name : "", e = s.createFromTemplateURL(m.resource, m.input.selectedProject.metadata.name, { namespace: n -}), t.url(e)) : p.isDialog ? p.$emit("fileImportedFromYAMLOrJSON", { -project: p.input.selectedProject -}) : (e = s.projectOverviewURL(p.input.selectedProject.metadata.name), t.url(e)); +}), t.url(e)) : m.isDialog ? m.$emit("fileImportedFromYAMLOrJSON", { +project: m.input.selectedProject +}) : (e = s.projectOverviewURL(m.input.selectedProject.metadata.name), t.url(e)); } function C(e) { var t = r.objectToResourceGroupVersion(e); return t ? r.apiInfo(t) ? i.get(t, e.metadata.name, { -namespace: p.input.selectedProject.metadata.name +namespace: m.input.selectedProject.metadata.name }, { errorNotification: !1 }).then(function(t) { var n = angular.copy(e), a = angular.copy(t.metadata); -a.annotations = e.metadata.annotations, a.labels = e.metadata.labels, n.metadata = a, p.updateResources.push(n); +a.annotations = e.metadata.annotations, a.labels = e.metadata.labels, n.metadata = a, m.updateResources.push(n); }, function() { -p.createResources.push(e); -}) : (p.errorOccurred = !0, void (p.error = { +m.createResources.push(e); +}) : (m.errorOccurred = !0, void (m.error = { message: r.unsupportedObjectKindOrVersion(e) -})) : (p.errorOccurred = !0, void (p.error = { +})) : (m.errorOccurred = !0, void (m.error = { message: r.invalidObjectKindOrVersion(e) })); } function S() { var t; -_.isEmpty(p.createResources) ? (t = _.head(p.updateResources), i.update(r.kindToResource(t.kind), t.metadata.name, t, { -namespace: p.input.selectedProject.metadata.name +_.isEmpty(m.createResources) ? (t = _.head(m.updateResources), i.update(r.kindToResource(t.kind), t.metadata.name, t, { +namespace: m.input.selectedProject.metadata.name }).then(function() { var e = P(t.kind); c.addNotification({ @@ -9142,8 +9300,8 @@ type: "error", message: "Unable to update the " + P(t.kind) + " '" + t.metadata.name + "'.", details: e("getErrorDetails")(n) }); -})) : (t = _.head(p.createResources), i.create(r.kindToResource(t.kind), null, t, { -namespace: p.input.selectedProject.metadata.name +})) : (t = _.head(m.createResources), i.create(r.kindToResource(t.kind), null, t, { +namespace: m.input.selectedProject.metadata.name }).then(function() { var e = P(t.kind); c.addNotification({ @@ -9161,17 +9319,17 @@ details: e("getErrorDetails")(n) } function w() { var e = { -started: "Creating resources in project " + $(p.input.selectedProject), -success: "Creating resources in project " + $(p.input.selectedProject), -failure: "Failed to create some resources in project " + $(p.input.selectedProject) +started: "Creating resources in project " + $(m.input.selectedProject), +success: "Creating resources in project " + $(m.input.selectedProject), +failure: "Failed to create some resources in project " + $(m.input.selectedProject) }, t = {}; -d.add(e, t, p.input.selectedProject.metadata.name, function() { +d.add(e, t, m.input.selectedProject.metadata.name, function() { var e = n.defer(); -return i.batch(p.createResources, { -namespace: p.input.selectedProject.metadata.name +return i.batch(m.createResources, { +namespace: m.input.selectedProject.metadata.name }, "create").then(function(t) { var n = [], a = !1; -if (t.failure.length > 0) a = !0, p.errorOccurred = !0, t.failure.forEach(function(e) { +if (t.failure.length > 0) a = !0, m.errorOccurred = !0, t.failure.forEach(function(e) { n.push({ type: "error", message: "Cannot create " + P(e.object.kind) + ' "' + e.object.metadata.name + '". ', @@ -9184,7 +9342,7 @@ message: "Created " + P(e.kind) + ' "' + e.metadata.name + '" successfully. ' }); }); else { var r; -r = p.isList ? "All items in list were created successfully." : P(p.resourceKind) + " " + p.resourceName + " was successfully created.", n.push({ +r = m.isList ? "All items in list were created successfully." : P(m.resourceKind) + " " + m.resourceName + " was successfully created.", n.push({ type: "success", message: r }); @@ -9198,17 +9356,17 @@ hasErrors: a } function k() { var e = { -started: "Updating resources in project " + $(p.input.selectedProject), -success: "Updated resources in project " + $(p.input.selectedProject), -failure: "Failed to update some resources in project " + $(p.input.selectedProject) +started: "Updating resources in project " + $(m.input.selectedProject), +success: "Updated resources in project " + $(m.input.selectedProject), +failure: "Failed to update some resources in project " + $(m.input.selectedProject) }, t = {}; -d.add(e, t, p.input.selectedProject.metadata.name, function() { +d.add(e, t, m.input.selectedProject.metadata.name, function() { var e = n.defer(); -return i.batch(p.updateResources, { -namespace: p.input.selectedProject.metadata.name +return i.batch(m.updateResources, { +namespace: m.input.selectedProject.metadata.name }, "update").then(function(t) { var n = [], a = !1; -if (t.failure.length > 0) a = !0, p.errorOccurred = !0, t.failure.forEach(function(e) { +if (t.failure.length > 0) a = !0, m.errorOccurred = !0, t.failure.forEach(function(e) { n.push({ type: "error", message: "Cannot update " + P(e.object.kind) + ' "' + e.object.metadata.name + '". ', @@ -9221,7 +9379,7 @@ message: "Updated " + P(e.kind) + ' "' + e.metadata.name + '" successfully. ' }); }); else { var r; -r = p.isList ? "All items in list were updated successfully." : P(p.resourceKind) + " " + p.resourceName + " was successfully updated.", n.push({ +r = m.isList ? "All items in list were updated successfully." : P(m.resourceKind) + " " + m.resourceName + " was successfully updated.", n.push({ type: "success", message: r }); @@ -9243,12 +9401,12 @@ alerts: n }); } var j, P = e("humanizeKind"), R = e("getErrorDetails"); -d.clear(), p.input = { -selectedProject: p.project -}, p.aceLoaded = function(e) { +d.clear(), m.input = { +selectedProject: m.project +}, m.aceLoaded = function(e) { (j = e.getSession()).setOption("tabSize", 2), j.setOption("useSoftTabs", !0), e.setDragDelay = 0, e.$blockScrolling = 1 / 0; }; -var T = function(e) { +var I = function(e) { a.open({ animation: !0, templateUrl: "views/modals/confirm.html", @@ -9265,38 +9423,38 @@ cancelButtonText: "Cancel" } } }).result.then(y); -}, I = {}, E = function() { -c.hideNotification("from-file-error"), _.each(I, function(e) { +}, T = {}, E = function() { +c.hideNotification("from-file-error"), _.each(T, function(e) { !e.id || "error" !== e.type && "warning" !== e.type || c.hideNotification(e.id); }); }, N = function(e) { -E(), I = u.getSecurityAlerts(p.createResources, p.input.selectedProject.metadata.name); +E(), T = u.getSecurityAlerts(m.createResources, m.input.selectedProject.metadata.name); var t = e.quotaAlerts || []; -I = I.concat(t), _.filter(I, { +T = T.concat(t), _.filter(T, { type: "error" -}).length ? (_.each(I, function(e) { +}).length ? (_.each(T, function(e) { e.id = _.uniqueId("from-file-alert-"), c.addNotification(e); -}), p.disableInputs = !1) : I.length ? (T(I), p.disableInputs = !1) : y(); +}), m.disableInputs = !1) : T.length ? (I(T), m.disableInputs = !1) : y(); }, D = function() { -if (_.has(p.input.selectedProject, "metadata.uid")) return n.when(p.input.selectedProject); -var t = p.input.selectedProject.metadata.name, a = p.input.selectedProject.metadata.annotations["new-display-name"], r = e("description")(p.input.selectedProject); -return m.create(t, a, r); +if (_.has(m.input.selectedProject, "metadata.uid")) return n.when(m.input.selectedProject); +var t = m.input.selectedProject.metadata.name, a = m.input.selectedProject.metadata.annotations["new-display-name"], r = e("description")(m.input.selectedProject); +return p.create(t, a, r); }; -p.create = function() { -if (delete p.error, f(p.resource) && (p.resourceKind = p.resource.kind, p.resourceKind.endsWith("List") ? p.isList = !0 : p.isList = !1, g(p.resource))) { -p.isList ? (p.resourceList = p.resource.items, p.resourceName = "") : (p.resourceList = [ p.resource ], p.resourceName = p.resource.metadata.name, "Template" === p.resourceKind && (p.templateOptions = { +m.create = function() { +if (delete m.error, f(m.resource) && (m.resourceKind = m.resource.kind, m.resourceKind.endsWith("List") ? m.isList = !0 : m.isList = !1, g(m.resource))) { +m.isList ? (m.resourceList = m.resource.items, m.resourceName = "") : (m.resourceList = [ m.resource ], m.resourceName = m.resource.metadata.name, "Template" === m.resourceKind && (m.templateOptions = { process: !0, add: !1 -})), p.updateResources = [], p.createResources = []; +})), m.updateResources = [], m.createResources = []; var e = []; -p.errorOccurred = !1, _.forEach(p.resourceList, function(t) { -if (!g(t)) return p.errorOccurred = !0, !1; +m.errorOccurred = !1, _.forEach(m.resourceList, function(t) { +if (!g(t)) return m.errorOccurred = !0, !1; e.push(C(t)); }), D().then(function(t) { -p.input.selectedProject = t, n.all(e).then(function() { -p.errorOccurred || (1 === p.createResources.length && "Template" === p.resourceList[0].kind ? h() : _.isEmpty(p.updateResources) ? l.getLatestQuotaAlerts(p.createResources, { -namespace: p.input.selectedProject.metadata.name -}).then(N) : (p.updateTemplate = 1 === p.updateResources.length && "Template" === p.updateResources[0].kind, p.updateTemplate ? h() : v())); +m.input.selectedProject = t, n.all(e).then(function() { +m.errorOccurred || (1 === m.createResources.length && "Template" === m.resourceList[0].kind ? h() : _.isEmpty(m.updateResources) ? l.getLatestQuotaAlerts(m.createResources, { +namespace: m.input.selectedProject.metadata.name +}).then(N) : (m.updateTemplate = 1 === m.updateResources.length && "Template" === m.updateResources[0].kind, m.updateTemplate ? h() : v())); }); }, function(e) { c.addNotification({ @@ -9307,11 +9465,11 @@ details: R(e) }); }); } -}, p.cancel = function() { -E(), s.toProjectOverview(p.input.selectedProject.metadata.name); +}, m.cancel = function() { +E(), s.toProjectOverview(m.input.selectedProject.metadata.name); }; var $ = e("displayName"); -p.$on("importFileFromYAMLOrJSON", p.create), p.$on("$destroy", E); +m.$on("importFileFromYAMLOrJSON", m.create), m.$on("$destroy", E); } ] }; } ]), angular.module("openshiftConsole").directive("oscFileInput", [ "Logger", function(e) { @@ -9547,14 +9705,14 @@ n += _.get(e, "weight", 0); var r = e / n * 100; return t ? d3.round(r, 1) + "%" : r; }; -var m = !1; +var p = !1; a.$watch("route.alternateServices.length", function(e) { if (0 === e && _.has(a, "route.to.weight") && delete a.route.to.weight, 1 === e) { if (0 === a.route.to.weight && 0 === a.route.alternateServices[0].weight) return void (a.controls.hideSlider = !0); -m = !0, a.controls.rangeSlider = a.weightAsPercentage(a.route.to.weight); +p = !0, a.controls.rangeSlider = a.weightAsPercentage(a.route.to.weight); } }), a.$watch("controls.rangeSlider", function(e, t) { -m ? m = !1 : e !== t && (e = parseInt(e, 10), _.set(a, "route.to.weight", e), _.set(a, "route.alternateServices[0].weight", 100 - e)); +p ? p = !1 : e !== t && (e = parseInt(e, 10), _.set(a, "route.to.weight", e), _.set(a, "route.alternateServices[0].weight", 100 - e)); }); } }; @@ -10058,7 +10216,7 @@ return !!t && (l.activeSecondary = t, !0); }); }; d(), l.$on("$routeChangeSuccess", d); -var m = function() { +var p = function() { _.each(l.navItems, function(e) { e.isHover = !1; }); @@ -10072,7 +10230,7 @@ group: e.canI.group }, e.canI.verb, l.projectName)); }, l.itemClicked = function(e) { if (e.href) return l.nav.showMobileNav = !1, void (l.sidebar.secondaryOpen = !1); -m(), e.isHover = !0, e.mobileSecondary = l.isMobile, l.sidebar.showMobileSecondary = l.isMobile, l.sidebar.secondaryOpen = !0; +p(), e.isHover = !0, e.mobileSecondary = l.isMobile, l.sidebar.showMobileSecondary = l.isMobile, l.sidebar.secondaryOpen = !0; }, l.onMouseEnter = function(e) { _.isEmpty(e.secondaryNavSections) || (e.mouseLeaveTimeout && (n.cancel(e.mouseLeaveTimeout), e.mouseLeaveTimeout = null), e.mouseEnterTimeout = n(function() { e.isHover = !0, e.mouseEnterTimeout = null, l.sidebar.secondaryOpen = !0; @@ -10084,16 +10242,16 @@ return e.isHover && !_.isEmpty(e.secondaryNavSections); }); }, 500)); }, l.closeNav = function() { -m(), l.nav.showMobileNav = !1, l.sidebar.secondaryOpen = !1; +p(), l.nav.showMobileNav = !1, l.sidebar.secondaryOpen = !1; }, l.collapseMobileSecondary = function(e, t) { e.mobileSecondary = !1, t.stopPropagation(); }; -var p = function() { +var m = function() { return s.isWindowBelowBreakpoint(s.WINDOW_SIZE_SM); }; -l.isMobile = p(); +l.isMobile = m(); var f = _.throttle(function() { -var e = p(); +var e = m(); e !== l.isMobile && l.$evalAsync(function() { l.isMobile = e, e || (_.set(a, "nav.showMobileNav", !1), _.each(l.navItems, function(e) { e.mobileSecondary = !1; @@ -10106,11 +10264,11 @@ $(window).off(".verticalnav"); } ] }; } ]).directive("oscHeader", [ "$filter", "$location", "$rootScope", "$routeParams", "$timeout", "AuthorizationService", "Constants", "ProjectsService", "projectOverviewURLFilter", function(e, t, n, a, r, o, i, s, c) { -var l = {}, u = [], d = e("displayName"), m = e("uniqueDisplayName"); +var l = {}, u = [], d = e("displayName"), p = e("uniqueDisplayName"); return { restrict: "EA", templateUrl: "views/directives/header/header.html", -link: function(r, p) { +link: function(r, m) { r.currentProject = l[a.project]; var f = function(e, t) { var a; @@ -10138,12 +10296,12 @@ _.set(r, "ordering.panelName", ""); }, r.showOrderingPanel = function(e) { _.set(r, "ordering.panelName", e); }, r.catalogLandingPageEnabled = !i.DISABLE_SERVICE_CATALOG_LANDING_PAGE; -var v = p.find(".selectpicker"), y = [], b = function() { +var v = m.find(".selectpicker"), y = [], b = function() { var t = r.currentProjectName; if (t) { var n = function(e, n) { var a = $("