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

JavaScript Required

+ diff --git a/app/scripts/directives/editEnvironmentFrom.js b/app/scripts/directives/editEnvironmentFrom.js new file mode 100644 index 0000000000..7c0093910e --- /dev/null +++ b/app/scripts/directives/editEnvironmentFrom.js @@ -0,0 +1,191 @@ +"use strict"; +(function() { + angular.module("openshiftConsole").component('editEnvironmentFrom', { + controller: [ + '$attrs', + '$filter', + 'keyValueEditorUtils', + EditEnvironmentFrom + ], + bindings: { + addRowLink: '@', // creates a link to "add row" and sets its text label + entries: '=', // an array of objects containing configmaps and secrets + envFromSelectorOptions: '<', // dropdown selector options, an array of objects + selectorPlaceholder: '@' // placeholder copy for dropdown selector + }, + templateUrl: 'views/directives/edit-environment-from.html' + }); + + function EditEnvironmentFrom($attrs, + $filter, + utils) { + var ctrl = this; + + var canI = $filter('canI'); + var humanizeKind = $filter('humanizeKind'); + var uniqueId = _.uniqueId(); + + ctrl.setFocusClass = 'edit-environment-from-set-focus-' + uniqueId; + + var addEntry = function(entries, entry) { + entries && entries.push(entry || {}); + }; + + ctrl.onAddRow = function() { + addEntry(ctrl.envFromEntries); + utils.setFocusOn('.'+ ctrl.setFocusClass); + }; + + ctrl.deleteEntry = function(start, deleteCount) { + if(ctrl.envFromEntries && !ctrl.envFromEntries.length) { + return; + } + + ctrl.envFromEntries.splice(start, deleteCount); + if(!ctrl.envFromEntries.length && ctrl.addRowLink) { + addEntry(ctrl.envFromEntries); + } + + ctrl.updateEntries(ctrl.envFromEntries); + ctrl.editEnvironmentFromForm.$setDirty(); + }; + + ctrl.isEnvFromReadonly = function(entry) { + return ctrl.isReadonlyAny || + entry.isReadonlyValue === true || + ((entry.secretRef || entry.configMapRef) && !entry.selectedEnvFrom) || + _.isEmpty(ctrl.envFromSelectorOptions); + }; + + ctrl.groupByKind = function(object) { + return humanizeKind(object.kind); + }; + + //ctrl.uniqueForValue = utils.uniqueForValue; + ctrl.dragControlListeners = { + accept: function (sourceItemHandleScope, destSortableScope) { + return sourceItemHandleScope.itemScope.sortableScope.$id === destSortableScope.$id; + }, + orderChanged: function() { + ctrl.editEnvironmentFromForm.$setDirty(); + } + }; + + ctrl.envFromObjectSelected = function(index, entry, selected) { + var newEnvFrom = {}; + + switch (selected.kind) { + case 'Secret': + newEnvFrom.secretRef = { + name: selected.metadata.name + }; + delete ctrl.envFromEntries[index].configMapRef; + break; + case 'ConfigMap': + newEnvFrom.configMapRef = { + name: selected.metadata.name + }; + delete ctrl.envFromEntries[index].secretRef; + break; + } + + _.assign(ctrl.envFromEntries[index], newEnvFrom); + ctrl.updateEntries(ctrl.envFromEntries); + }; + + ctrl.updateEntries = function(entries) { + ctrl.entries = _.filter(entries, function (val) { + return val.secretRef || val.configMapRef; + }); + }; + + var updateEnvFromEntries = function(entries) { + ctrl.envFromEntries = entries || []; + + if(!ctrl.envFromEntries.length) { + addEntry(ctrl.envFromEntries); + } + + _.each(ctrl.envFromEntries, function(entry) { + if(entry) { + if(entry.configMapRef && !canI('configmaps', 'get')) { + entry.isReadonlyValue = true; + } + + if(entry.secretRef && !canI('secrets', 'get')) { + entry.isReadonlyValue = true; + } + } + }); + }; + + var getReferenceValue = function(option) { + var referenceValue; + + switch(option.kind) { + case 'ConfigMap': + referenceValue = _.find(ctrl.envFromEntries, {configMapRef: {name: option.metadata.name}}); + break; + case 'Secret': + referenceValue = _.find(ctrl.envFromEntries, {secretRef: {name: option.metadata.name}}); + break; + } + + return referenceValue; + }; + + ctrl.checkEntries = function(option) { + return !!(getReferenceValue(option)); + }; + + var findReferenceValueForEntries = function(entries, envFromSelectorOptions) { + ctrl.cannotAdd = (ctrl.isReadonlyAny || _.isEmpty(envFromSelectorOptions)); + + if(envFromSelectorOptions) { + _.each(envFromSelectorOptions, function(option) { + var referenceValue = getReferenceValue(option); + + if (referenceValue) { + _.set(referenceValue, 'selectedEnvFrom', option); + } + }); + } + }; + + ctrl.$onInit = function() { + updateEnvFromEntries(ctrl.entries); + findReferenceValueForEntries(ctrl.entries, ctrl.envFromSelectorOptions); + + if('cannotDelete' in $attrs) { + ctrl.cannotDeleteAny = true; + } + + if('cannotSort' in $attrs) { + ctrl.cannotSort = true; + } + + if('isReadonly' in $attrs) { + ctrl.isReadonlyAny = true; + } + + if('showHeader' in $attrs) { + ctrl.showHeader = true; + } + + if(ctrl.envFromEntries && !ctrl.envFromEntries.length) { + addEntry(ctrl.envFromEntries); + } + }; + + ctrl.$onChanges = function(changes) { + if(changes.entries) { + updateEnvFromEntries(changes.entries.currentValue); + } + + if(changes.envFromSelectorOptions) { + findReferenceValueForEntries(ctrl.envFromEntries, changes.envFromSelectorOptions.currentValue); + } + }; + } +})(); + diff --git a/app/scripts/services/environment.js b/app/scripts/services/environment.js index 6e6ecd9b54..ddcc534a6b 100644 --- a/app/scripts/services/environment.js +++ b/app/scripts/services/environment.js @@ -21,6 +21,7 @@ angular.module("openshiftConsole") var containers = getContainers(object); _.each(containers, function(container) { container.env = container.env || []; + container.envFrom = container.envFrom || []; }); }, @@ -50,7 +51,7 @@ angular.module("openshiftConsole") return false; } - var i, leftEnv, rightEnv; + var i, leftEnv, rightEnv, leftEnvFrom, rightEnvFrom; for (i = 0; i < leftContainers.length; i++) { // If a container name has changed, consider it a conflict. if (leftContainers[i].name !== rightContainers[i].name) { @@ -60,7 +61,11 @@ angular.module("openshiftConsole") // Check if any of the variable names or values are different. leftEnv = leftContainers[i].env || []; rightEnv = rightContainers[i].env || []; - if (!_.isEqual(leftEnv, rightEnv)) { + + leftEnvFrom = leftContainers[i].envFrom || []; + rightEnvFrom = rightContainers[i].envFrom || []; + + if (!_.isEqual(leftEnv, rightEnv) || !_.isEqual(leftEnvFrom, rightEnvFrom)) { return false; } } @@ -78,6 +83,7 @@ angular.module("openshiftConsole") var targetContainers = getContainers(copy); for (i = 0; i < targetContainers.length; i++) { targetContainers[i].env = _.get(sourceContainers, [i, 'env'], []); + targetContainers[i].envFrom = _.get(sourceContainers, [i, 'envFrom'], []); } return copy; diff --git a/app/styles/_kve.less b/app/styles/_kve.less index cc923e8f50..41a2c81835 100644 --- a/app/styles/_kve.less +++ b/app/styles/_kve.less @@ -1,6 +1,7 @@ // Angular Key Value Editor styles -.key-value-editor { +.key-value-editor, +.environment-from-editor { &.as-sortable-dragging { .as-sortable-item-delete, .input-group-addon, @@ -101,21 +102,47 @@ border-collapse: separate; display: table; position: relative; + &.faux-input-single-input { + width: 100%; + } } - .key-value-editor-buttons { + .key-value-editor-buttons, + .environment-from-editor-button { position: absolute; right: 0; top: 0; width: (@as-sortable-item-button-width * 2); } - .key-value-editor-entry { + .key-value-editor-entry, + .environment-from-entry { display: table; padding-right: (@as-sortable-item-button-width * 2); position: relative; table-layout: fixed; width: 100%; + @media(min-width: @screen-md-min) { + .environment-from-editor-button { + float: left; + padding-right: 5px; + position: relative; + width: 50%; + } + } + .environment-from-input { + float: left; + padding-right: 5px; + width: 100%; + @media(min-width: @screen-md-min) { + width: 50%; + } + .faux-input-group, + .ui-select { + float: left; + width: 100%; + } + } } .key-value-editor-input .ui-select { @@ -140,10 +167,12 @@ width: 50%; } -.key-value-editor-entry-header { +.key-value-editor-entry-header, +.environment-from-editor-entry-header { padding-right: (@as-sortable-item-button-width * 2); } -.key-value-editor-header { +.key-value-editor-header, +.environment-from-editor-header { margin-bottom: 5px; } diff --git a/app/views/directives/edit-environment-from.html b/app/views/directives/edit-environment-from.html new file mode 100644 index 0000000000..4ba9c96c4a --- /dev/null +++ b/app/views/directives/edit-environment-from.html @@ -0,0 +1,81 @@ + +
+
+
+ {{$ctrl.selectorPlaceholder}} +
+
+
+ +
+
+ +
+
+
+ No secrets or config maps have been added as Environment From. +
+
+ Use all keys and values from + config map {{entry.configMapRef.name}} + secret {{entry.secretRef.name}} +
+
+ +
+
+ + + + {{$select.selected.metadata.name}} + – {{$select.selected.kind | humanizeKind : true}} + + + + + + +
+
+
+ +
+ + +
+
+ +
+ {{ $ctrl.addRowLink }} +
+
+
diff --git a/app/views/directives/edit-environment-variables.html b/app/views/directives/edit-environment-variables.html index 358bd77d1c..2b824c9501 100644 --- a/app/views/directives/edit-environment-variables.html +++ b/app/views/directives/edit-environment-variables.html @@ -2,6 +2,8 @@

Container {{container.name}}

+ +

Variables

No environment variables set in the {{$ctrl.apiObject.kind | humanizeKind}} @@ -28,10 +30,25 @@

Container {{container.name}}

key-validator="[A-Za-z_][A-Za-z0-9_]*" key-validator-error="Please enter a valid key." key-validator-error-tooltip="A valid environment variable name is an alphanumeric (a-z and 0-9) string beginning with a letter that may contain underscores." - add-row-link="Add Environment Variable" - add-row-with-selectors-link="Add Environment Variable Using a Config Map or Secret" + add-row-link="Add Variable" + add-row-with-selectors-link="Add Variable from Config Map or Secret" show-header> + +

+ Environment From + +

+ +
diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js index 561e36b52b..52f3632af1 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, p, m, 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, m, p, 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 I, T, N = t("annotation"), E = 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, E, T = 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 = p.getBreakpoint(); +P.state.breakpoint = m.getBreakpoint(); var q = _.throttle(function() { -var t = p.getBreakpoint(); +var t = m.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 ], {}) : {}; -}, pe = function(e) { +}, me = function(e) { if (H(e)) { var t = le(e), a = k.getPodAlerts(t, n.project); ue(e, a); } -}, me = function(e) { -_.each(e, pe); +}, pe = function(e) { +_.each(e, me); }, 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() { -me(P.replicationControllers), me(P.replicaSets), me(P.statefulSets), me(P.monopods); +pe(P.replicationControllers), pe(P.replicaSets), pe(P.statefulSets), pe(P.monopods); }, _e = _.debounce(function() { e.$evalAsync(function() { Se(), ve(), Ce(); @@ -205,14 +205,14 @@ _.isEmpty(e) || (g.addLabelSuggestionsFromResources(e, F), "pipeline" !== P.view }, ke = function(e) { _.isEmpty(e) || (g.addLabelSuggestionsFromResources(e, x), "pipeline" === P.viewBy && g.setLabelSuggestions(x)); }, je = function(e) { -return "Succeeded" !== e.status.phase && "Failed" !== e.status.phase && (!U(e, "openshift.io/deployer-pod-for.name") && (!N(e, "openshift.io/build.name") && "slave" !== U(e, "jenkins"))); +return "Succeeded" !== e.status.phase && "Failed" !== e.status.phase && (!U(e, "openshift.io/deployer-pod-for.name") && (!T(e, "openshift.io/build.name") && "slave" !== U(e, "jenkins"))); }, Pe = function() { V.podsByOwnerUID = C.groupByOwnerUID(P.pods), P.monopods = _.filter(V.podsByOwnerUID[""], je); }, Re = function(e) { -return !!_.get(e, "status.replicas") || (!N(e, "deploymentConfig") || D(e)); +return !!_.get(e, "status.replicas") || (!T(e, "deploymentConfig") || D(e)); }, Ie = function(e) { -return N(e, "deploymentConfig"); -}, Te = function() { +return T(e, "deploymentConfig"); +}, Ee = function() { if (P.deploymentConfigs && P.replicationControllers) { var e = []; P.replicationControllersByDeploymentConfig = {}, P.currentByDeploymentConfig = {}, M = {}; @@ -223,7 +223,7 @@ var r = Ie(a) || ""; var o = M[r]; o && !L(a, o) || (M[r] = a); var i; -"Complete" === N(a, "deploymentStatus") && ((i = t[r]) && !L(a, i) || (t[r] = a)), Re(a) && _.set(n, [ r, a.metadata.name ], a); +"Complete" === T(a, "deploymentStatus") && ((i = t[r]) && !L(a, i) || (t[r] = a)), Re(a) && _.set(n, [ r, a.metadata.name ], a); }), _.each(t, function(e, t) { _.set(n, [ t, e.metadata.name ], e); }), _.each(n, function(e, t) { @@ -231,15 +231,15 @@ var n = u.sortByDeploymentVersion(e, !0); P.replicationControllersByDeploymentConfig[t] = n, P.currentByDeploymentConfig[t] = _.head(n); }), P.vanillaReplicationControllers = _.sortBy(e, "metadata.name"), ve(); } -}, Ne = function(e, t) { +}, Te = function(e, t) { if (_.get(e, "status.replicas")) return !0; var n = u.getRevision(e); return !n || !!t && u.getRevision(t) === n; -}, Ee = function() { +}, Ne = function() { P.replicaSets && I && (P.replicaSetsByDeploymentUID = b.groupByControllerUID(P.replicaSets), P.currentByDeploymentUID = {}, _.each(P.replicaSetsByDeploymentUID, function(e, t) { if (t) { var n = I[t], a = _.filter(e, function(e) { -return Ne(e, n); +return Te(e, n); }), r = u.sortByRevision(a); P.replicaSetsByDeploymentUID[t] = r, P.currentByDeploymentUID[t] = _.head(r); } @@ -265,7 +265,7 @@ V.routesByService = _.mapValues(e, j.sortRoutesByScore), Y(); }, Le = function() { V.hpaByResource = d.groupHPAs(P.horizontalPodAutoscalers); }, Ue = function(e) { -var t = E(e), n = P.buildConfigs[t]; +var t = N(e), n = P.buildConfigs[t]; if (n) { P.recentPipelinesByBuildConfig[t] = P.recentPipelinesByBuildConfig[t] || [], P.recentPipelinesByBuildConfig[t].push(e); var a = i.usesDeploymentConfigs(n); @@ -320,7 +320,7 @@ if (V.builds && P.buildConfigs) { P.recentPipelinesByBuildConfig = {}, V.recentBuildsByBuildConfig = {}, V.recentPipelinesByDeploymentConfig = {}; var e = {}; _.each(i.interestingBuilds(V.builds), function(t) { -var n = E(t); +var n = N(t); B(t) ? Ue(t) : (e[n] = e[n] || [], e[n].push(t)); }), P.recentPipelinesByBuildConfig = _.mapValues(P.recentPipelinesByBuildConfig, function(e) { return i.sortBuilds(e, !0); @@ -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 && m.fetchReferencedImageStreamImages(P.pods, V.imagesByDockerReference, V.imageStreamImageRefByDockerReference, a); +P.pods && p.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(), Ae(P.monopods), me(P.monopods), we(P.monopods), ie(), h.log("pods (subscribe)", P.pods); +P.pods = e.by("metadata.name"), Pe(), r(), _e(), Ae(P.monopods), pe(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"), Te(), Ae(P.vanillaReplicationControllers), Ae(P.monopods), me(P.vanillaReplicationControllers), we(P.vanillaReplicationControllers), Qe(), ie(), h.log("replicationcontrollers (subscribe)", P.replicationControllers); +P.replicationControllers = e.by("metadata.name"), Ee(), Ae(P.vanillaReplicationControllers), Ae(P.monopods), pe(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"), Te(), Ae(P.deploymentConfigs), Ae(P.vanillaReplicationControllers), we(P.deploymentConfigs), Ce(), He(), Ge(), Qe(), ie(), h.log("deploymentconfigs (subscribe)", P.deploymentConfigs); +P.deploymentConfigs = e.by("metadata.name"), Ee(), Ae(P.deploymentConfigs), Ae(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"), Ee(), Ae(P.vanillaReplicaSets), Ae(P.monopods), me(P.vanillaReplicaSets), we(P.vanillaReplicaSets), Qe(), ie(), h.log("replicasets (subscribe)", P.replicaSets); +P.replicaSets = e.by("metadata.name"), Ne(), Ae(P.vanillaReplicaSets), Ae(P.monopods), pe(P.vanillaReplicaSets), we(P.vanillaReplicaSets), Qe(), ie(), h.log("replicasets (subscribe)", P.replicaSets); })), Ye.push(l.watch({ group: "apps", resource: "deployments" }, a, function(e) { -I = e.by("metadata.uid"), P.deployments = _.sortBy(I, "metadata.name"), Ee(), Ae(P.deployments), Ae(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(), Ae(P.deployments), Ae(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"), Ae(P.statefulSets), Ae(P.monopods), me(P.statefulSets), we(P.statefulSets), Qe(), ie(), h.log("statefulsets (subscribe)", P.statefulSets); +P.statefulSets = e.by("metadata.name"), Ae(P.statefulSets), Ae(P.monopods), pe(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) { -T = e.by("metadata.name"), m.buildDockerRefMapForImageStreams(T, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", T); +E = e.by("metadata.name"), p.buildDockerRefMapForImageStreams(E, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", E); }, { poll: R, pollInterval: 6e4 @@ -1671,8 +1671,8 @@ c.segment("images").segmentCoded(s); break; case "ImageStreamTag": -var p = s.indexOf(":"); -c.segment("images").segmentCoded(s.substring(0, p)).segmentCoded(s.substring(p + 1)); +var m = s.indexOf(":"); +c.segment("images").segmentCoded(s.substring(0, m)).segmentCoded(s.substring(m + 1)); break; case "ServiceInstance": @@ -1692,15 +1692,15 @@ c.segment(i.kindToResource(t)).segmentCoded(s); break; default: -var m; -if (e.metadata) m = i.objectToResourceGroupVersion(e); else if (_.get(r, "apiVersion")) { +var p; +if (e.metadata) p = i.objectToResourceGroupVersion(e); else if (_.get(r, "apiVersion")) { var f = i.kindToResource(t), g = i.parseGroupVersion(r.apiVersion); -g.resource = f, m = i.toResourceGroupVersion(g); -} else m = i.toResourceGroupVersion(i.kindToResource(t)); -if (!i.apiInfo(m)) return null; +g.resource = f, p = i.toResourceGroupVersion(g); +} else p = i.toResourceGroupVersion(i.kindToResource(t)); +if (!i.apiInfo(p)) return null; c.segment("other").search({ kind: t, -group: m.group +group: p.group }); } return _.get(r, "tab") && c.setSearch("tab", r.tab), c.toString(); @@ -1845,10 +1845,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; -}, p = function(e, t) { +}, m = function(e, t) { var n = d(e); return t && n ? t + " #" + n : e.metadata.name; -}, m = function(e) { +}, p = function(e) { return "true" === o(e, "openshift.io/build-config.paused"); }, f = function(e) { return e.status.startTimestamp || e.metadata.creationTimestamp; @@ -1875,7 +1875,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 = p(t, e.metadata.name), c = _.get(e, "spec.runPolicy"); +var n, i, s = m(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, @@ -1894,7 +1894,7 @@ details: s(e) }); }, cancelBuild: function(e, a) { -var o = l(e) ? "pipeline" : "build", i = p(e, a), c = { +var o = l(e) ? "pipeline" : "build", i = m(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() { @@ -1911,7 +1911,7 @@ details: s(e) }; }, cloneBuild: function(e, o) { -var i = l(e) ? "pipeline" : "build", c = p(e, o), u = { +var i = l(e) ? "pipeline" : "build", c = m(e, o), u = { kind: "BuildRequest", apiVersion: "v1", metadata: { @@ -1921,7 +1921,7 @@ name: e.metadata.name namespace: e.metadata.namespace }; return n.create("builds/clone", e.metadata.name, u, d).then(function(e) { -var t = p(e, o); +var t = m(e, o); r.addNotification({ type: "success", message: _.capitalize(i) + " " + c + " is being rebuilt as " + t + ".", @@ -1938,9 +1938,9 @@ details: s(e) }), t.reject(); }); }, -isPaused: m, +isPaused: p, canBuild: function(e) { -return !!e && !e.metadata.deletionTimestamp && !m(e); +return !!e && !e.metadata.deletionTimestamp && !p(e); }, usesDeploymentConfigs: function(e) { var t = o(e, "pipeline.alpha.openshift.io/uses"); @@ -1969,7 +1969,7 @@ t && !t(e) || u(e, n[a]) && (n[a] = e); }), n; }, getBuildNumber: d, -getBuildDisplayName: p, +getBuildDisplayName: m, getStartTimestsamp: f, getDuration: function(e) { var t = _.get(e, "status.duration"); @@ -2067,8 +2067,8 @@ details: a("getErrorDetails")(e) }); }); }); -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() { +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() { t.addNotification({ type: "success", message: "Retrying deployment " + c + " of " + l + "." @@ -2081,7 +2081,7 @@ details: a("getErrorDetails")(e) }); }); }, i.prototype.rollbackToDeployment = function(r, o, i, c, l) { -var u = r.metadata.name, d = s(r, "deploymentConfig"), p = { +var u = r.metadata.name, d = s(r, "deploymentConfig"), m = { apiVersion: "apps.openshift.io/v1", kind: "DeploymentConfigRollback", name: d, @@ -2098,7 +2098,7 @@ includeTriggers: c n.create({ group: "apps.openshift.io", resource: "deploymentconfigs/rollback" -}, d, p, l).then(function(r) { +}, d, m, l).then(function(r) { var o = e.objectToResourceGroupVersion(r); n.update(o, d, r, l).then(function(e) { t.addNotification({ @@ -2477,14 +2477,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 + m, URI.expand(n, { +return n = "counter" === e.type ? t + f : t + p, URI.expand(n, { podUID: e.pod.metadata.uid, containerName: e.containerName, metric: e.metric }).toString(); }); } -var u, d, p, m = "/gauges/{containerName}%2F{podUID}%2F{metric}/data", f = "/counters/{containerName}%2F{podUID}%2F{metric}/data", g = function(e) { +var u, d, m, p = "/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], @@ -2510,10 +2510,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 || !p && t.get(n).then(function() { +return !!n && (!e || !!d || !m && t.get(n).then(function() { return d = !0, !0; }, function(e) { -return p = !0, a.$broadcast("metrics-connection-failed", { +return m = !0, a.$broadcast("metrics-connection-failed", { url: n, response: e }), !1; @@ -2839,8 +2839,8 @@ e.maxLimitRequestRatio && (a = e.maxLimitRequestRatio[t]) && (!s.maxLimitRequest } }); }); -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; +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; }; return { getEffectiveLimitRange: d, @@ -2849,13 +2849,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), p = 0, m = 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), m = 0, p = 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 && (p += n(a)); +a && (m += n(a)); var o = t.limits && t.limits[r] || c.defaultLimit; -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; +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; } }; } ]), angular.module("openshiftConsole").factory("RoutesService", [ "$filter", function(e) { @@ -2961,9 +2961,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); -}, p = function(e, t, a) { +}, m = 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))); -}, m = e("humanizeKind"), f = e("hasDeploymentConfig"); +}, p = e("humanizeKind"), f = e("hasDeploymentConfig"); return { convertRequestPercentToLimit: function(e, t) { var n = o(t); @@ -2979,7 +2979,7 @@ if (!e) return e; var a = e / (n / 100); return Math.round(a); }, -hasCPURequest: p, +hasCPURequest: m, filterHPA: function(e, t, n) { return _.filter(e, function(e) { return e.spec.scaleTargetRef.kind === t && e.spec.scaleTargetRef.name === n; @@ -2993,7 +2993,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 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({ +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({ message: c, reason: "NoCPURequest" })), _.size(r) > 1 && a.push({ @@ -3342,8 +3342,8 @@ resources: {} status: {} }; n.push(d); -var p; -return _.isEmpty(e.ports) || (p = { +var m; +return _.isEmpty(e.ports) || (m = { kind: "Service", apiVersion: "v1", metadata: { @@ -3359,7 +3359,7 @@ ports: _.map(e.ports, function(e) { return t.getServicePort(e); }) } -}, n.push(p)), n; +}, n.push(m)), n; }, getEnvironment: function(e) { return _.map(_.get(e, "image.dockerImageMetadata.Config.Env"), function(e) { @@ -3430,12 +3430,12 @@ return (e = e || {}).object ? c(e.object, e) : e.kind && e.name && e.namespace ? } }; } ]), angular.module("openshiftConsole").factory("QuotaService", [ "APIService", "$filter", "$location", "$rootScope", "$routeParams", "$q", "Constants", "DataService", "EventsService", "Logger", "NotificationsService", function(e, t, n, a, r, o, i, s, c, l, u) { -var d = t("isNil"), p = t("usageValue"), m = t("usageWithUnits"), f = t("percent"), g = function(e) { +var d = t("isNil"), m = t("usageValue"), p = t("usageWithUnits"), f = t("percent"), g = function(e) { return _.every(e.spec.containers, function(e) { var t = _.some(_.get(e, "resources.requests"), function(e) { -return !d(e) && 0 !== p(e); +return !d(e) && 0 !== m(e); }), n = _.some(_.get(e, "resources.limits"), function(e) { -return !d(e) && 0 !== p(e); +return !d(e) && 0 !== m(e); }); return !t && !n; }); @@ -3466,7 +3466,7 @@ return !0; return e ? "Pod" === e.kind ? v(e, t) : _.has(e, "spec.template") ? v(e.spec.template, t) : t : t; }, b = t("humanizeQuotaResource"), C = t("humanizeKind"), S = function(e, t, n) { var a = e.status.total || e.status; -if (p(a.hard[n]) <= p(a.used[n])) { +if (m(a.hard[n]) <= m(a.used[n])) { var r, o; return r = "Pod" === t.kind ? "You will not be able to create the " + C(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + C(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 " + b(n) + " on pods.", { type: "Pod" === t.kind ? "error" : "warning", @@ -3493,8 +3493,8 @@ persistentvolumeclaims: "resources.limits.persistentvolumeclaims", var r = e.status.total || e.status, o = w[a], i = 0; if (_.each(n.spec.containers, function(e) { var t = _.get(e, o); -t && (i += p(t)); -}), p(r.hard[a]) < p(r.used[a]) + i) { +t && (i += m(t)); +}), m(r.hard[a]) < m(r.used[a]) + i) { var s; return s = "Pod" === t.kind ? "You may not be able to create the " + C(t.kind) + " '" + t.metadata.name + "'." : "You can still create " + C(t.kind) + " '" + t.metadata.name + "' but you may not have pods created until resources are freed.", { type: "warning", @@ -3526,9 +3526,9 @@ var o = y(t, n), i = y(t, a), s = e.objectToResourceGroupVersion(t); if (s) { var c = e.kindToResource(t.kind, !0), l = C(t.kind), u = ""; s.group && (u = s.group + "/"), u += s.resource; -var m = function(e) { +var p = function(e) { var n = e.status.total || e.status; -!d(n.hard[u]) && p(n.hard[u]) <= p(n.used[u]) && r.push({ +!d(n.hard[u]) && m(n.hard[u]) <= m(n.used[u]) && r.push({ type: "error", message: "You are at your quota of " + n.hard[u] + " " + ("1" === n.hard[u] ? l : c) + " in this project.", details: "You will not be able to create the " + l + " '" + t.metadata.name + "'.", @@ -3539,20 +3539,20 @@ target: "_blank" } ] }), r = r.concat(j(t, e)); }; -_.each(o, m), _.each(i, m); +_.each(o, p), _.each(i, p); } }), r) : r; }, R = [ "cpu", "requests.cpu", "memory", "requests.memory", "limits.cpu", "limits.memory" ], I = function(e, t, n, a, r) { var o, s = "Your project is " + (a < t ? "over" : "at") + " quota. "; -return o = _.includes(R, r) ? s + "It is using " + f(t / a, 0) + " of " + m(n, r) + " " + b(r) + "." : s + "It is using " + t + " of " + a + " " + b(r) + ".", o = _.escape(o), i.QUOTA_NOTIFICATION_MESSAGE && i.QUOTA_NOTIFICATION_MESSAGE[r] && (o += " " + i.QUOTA_NOTIFICATION_MESSAGE[r]), o; -}, T = function(e, t, n) { +return o = _.includes(R, r) ? s + "It is using " + f(t / a, 0) + " of " + p(n, r) + " " + b(r) + "." : s + "It is using " + t + " of " + a + " " + b(r) + ".", o = _.escape(o), i.QUOTA_NOTIFICATION_MESSAGE && i.QUOTA_NOTIFICATION_MESSAGE[r] && (o += " " + i.QUOTA_NOTIFICATION_MESSAGE[r]), o; +}, E = function(e, t, n) { var a = function(e) { var t = e.status.total || e.status; return _.some(t.hard, function(e, a) { if ("resourcequotas" === a) return !1; if (!n || _.includes(n, a)) { -if (!(e = p(e))) return !1; -var r = p(_.get(t, [ "used", a ])); +if (!(e = m(e))) return !1; +var r = m(_.get(t, [ "used", a ])); return !!r && e <= r; } }); @@ -3577,17 +3577,17 @@ quotaAlerts: P(e, n, a) }; }); }, -isAnyQuotaExceeded: T, +isAnyQuotaExceeded: E, isAnyStorageQuotaExceeded: function(e, t) { -return T(e, t, [ "requests.storage", "persistentvolumeclaims" ]); +return E(e, t, [ "requests.storage", "persistentvolumeclaims" ]); }, willRequestExceedQuota: function(e, t, n, a) { var r = function(e) { -var t = e.status.total || e.status, r = p(a); +var t = e.status.total || e.status, r = m(a); if (!n) return !1; var o = _.get(t.hard, n); -if (!(o = p(o))) return !1; -var i = p(_.get(t, [ "used", n ])); +if (!(o = m(o))) return !1; +var i = m(_.get(t, [ "used", n ])); return i ? o < i + r : o < r; }; return _.some(e, r) || _.some(t, r); @@ -3596,7 +3596,7 @@ getQuotaNotifications: function(e, t, o) { var i = [], s = function(e) { var t = e.status.total || e.status; _.each(t.hard, function(e, s) { -var c = p(e), l = _.get(t, [ "used", s ]), d = p(l); +var c = m(e), l = _.get(t, [ "used", s ]), d = m(l); "resourcequotas" !== s && c && d && c <= d && i.push({ id: "quota-limit-reached-" + s, namespace: o, @@ -3657,26 +3657,26 @@ details: "The following resource versions are not supported by the server: " + d }); } if (s.length) { -var p = _.uniq(_.map(s, function(e) { +var m = _.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: " + p.join(", ") +details: "Typically only cluster administrators can create these resources. The cluster-level resources being created are: " + m.join(", ") }); } if (c.length) { -var m = []; +var p = []; _.each(c, function(e) { _.each(e.subjects, function(e) { var t = a(e.kind) + " "; -"ServiceAccount" === e.kind && (t += (e.namespace || r) + "/"), t += e.name, m.push(t); +"ServiceAccount" === e.kind && (t += (e.namespace || r) + "/"), t += e.name, p.push(t); }); -}), m = _.uniq(m), o.push({ +}), p = _.uniq(p), o.push({ type: "warning", message: "This will grant permissions to your project.", -details: "Permissions are being granted to: " + m.join(", ") +details: "Permissions are being granted to: " + p.join(", ") }); } if (l.length && o.push({ @@ -3911,7 +3911,7 @@ getContainers: n, normalize: function(e) { var t = n(e); _.each(t, function(e) { -e.env = e.env || []; +e.env = e.env || [], e.envFrom = e.envFrom || []; }); }, compact: function(e) { @@ -3927,16 +3927,16 @@ return this.normalize(t), t; isEnvironmentEqual: function(e, t) { var a = n(e), r = n(t); if (a.length !== r.length) return !1; -var o, i, s; +var o, i, s, c, l; for (o = 0; o < a.length; o++) { if (a[o].name !== r[o].name) return !1; -if (i = a[o].env || [], s = r[o].env || [], !_.isEqual(i, s)) return !1; +if (i = a[o].env || [], s = r[o].env || [], c = a[o].envFrom || [], l = r[o].envFrom || [], !_.isEqual(i, s) || !_.isEqual(c, l)) return !1; } return !0; }, mergeEdits: function(e, t) { var a, r = angular.copy(t), o = n(e), i = n(r); -for (a = 0; a < i.length; a++) i[a].env = _.get(o, [ a, "env" ], []); +for (a = 0; a < i.length; a++) i[a].env = _.get(o, [ a, "env" ], []), i[a].envFrom = _.get(o, [ a, "envFrom" ], []); return r; } }; @@ -4357,7 +4357,7 @@ d(e, t), u(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) { +} ]), 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) { function g() { var n = f.search().serviceClass; if (n) { @@ -4370,7 +4370,7 @@ name: n }); if (a) return void e.$broadcast("open-overlay-panel", a); } -if (v) if (m.startTour) d(function() { +if (v) if (p.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; @@ -4393,7 +4393,7 @@ return "PartialObjectMetadata" === e.kind; }, C = function(e) { return b(e) ? o.get("templates", e.metadata.name, { namespace: e.metadata.namespace -}) : p.when(e); +}) : m.when(e); }; e.templateSelected = function(t) { C(t).then(function(t) { @@ -4444,12 +4444,12 @@ return _.get(t, [ e, "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, p, m = [], f = [], g = !1; +var d, m, p = [], 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(p, v, f); +e.projects = s.filterForKeywords(m, v, f); }, b = t("displayName"), C = function() { var t = _.get(e, "sortConfig.currentField.id"); h !== t && (e.sortConfig.isAscending = "metadata.creationTimestamp" !== t); @@ -4458,15 +4458,15 @@ return b(e).toLowerCase(); }, a = e.sortConfig.isAscending ? "asc" : "desc"; switch (t) { case 'metadata.annotations["openshift.io/display-name"]': -p = _.orderBy(d, [ n, "metadata.name" ], [ a ]); +m = _.orderBy(d, [ n, "metadata.name" ], [ a ]); break; case 'metadata.annotations["openshift.io/requester"]': -p = _.orderBy(d, [ t, n ], [ a, "asc" ]); +m = _.orderBy(d, [ t, n ], [ a, "asc" ]); break; default: -p = _.orderBy(d, [ t ], [ a ]); +m = _.orderBy(d, [ t ], [ a ]); } h = t; }, S = function() { @@ -4517,7 +4517,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 && (m.push(u.watch(e, w)), g = !0); +e.isProjectListIncomplete = u.isProjectListIncomplete(), w(t), !e.isProjectListIncomplete && _.size(d) <= 250 && (p.push(u.watch(e, w)), g = !0); }, function() { e.isProjectListIncomplete = !0, e.loading = !1, d = [], S(); }); @@ -4537,7 +4537,7 @@ e.message && r.push(e.message); }), _.isEmpty(r) || (e.newProjectMessage = r.join("\n")); } }), e.$on("$destroy", function() { -i.unwatchAll(m); +i.unwatchAll(p); }); } ]), 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..."; @@ -4559,7 +4559,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, p) { +} ]), 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) { 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" @@ -4569,7 +4569,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 m = [], f = null; +var p = [], f = null; l.isAvailable().then(function(t) { e.metricsAvailable = t; }); @@ -4661,13 +4661,13 @@ type: "warning", message: "This pod has been deleted." }); }; -p.get(n.project).then(_.spread(function(a, l) { +m.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), m.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), p.push(i.watchObject("pods", n.pod, l, function(t, n) { j(t, n), w(e.containerTerminals), S(t); })); }, function(n) { @@ -4676,12 +4676,12 @@ type: "error", message: "The pod details could not be loaded.", details: t("getErrorDetails")(n) }; -}), e.$watch("logOptions.container", g), m.push(i.watch("imagestreams", l, function(t) { +}), e.$watch("logOptions.container", g), p.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); -})), m.push(i.watch("builds", l, function(t) { +})), p.push(i.watch("builds", l, function(t) { e.builds = t.by("metadata.name"), o.log("builds (subscribe)", e.builds); })); -var u, p = function() { +var u, m = 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 @@ -4723,7 +4723,7 @@ return _.get(e, [ "imagesByDockerReference", o.image ]); } }, backdrop: "static" -}).result.then(p); +}).result.then(m); }, function(a) { e.alerts["debug-container-error"] = { type: "error", @@ -4740,7 +4740,7 @@ return e && e.forEach(function(e) { e.state && e.state.running && t++; }), t; }, e.$on("$destroy", function() { -i.unwatchAll(m), p(), $(window).off("resize.terminalsize"); +i.unwatchAll(p), m(), $(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) { @@ -4795,7 +4795,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, p, m) { +} ]), 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) { 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 = [ { @@ -4858,16 +4858,16 @@ t && (n.logOptions.replicationControllers[e.metadata.name].version = t), n.logCa n.logOptions.builds[e.metadata.name] = {}, n.logCanRun.builds[e.metadata.name] = !_.includes([ "New", "Pending", "Error" ], e.status.phase); }, I = function() { n.filteredStatefulSets = s.filterForKeywords(_.values(n.statefulSets), S, w); -}, T = function() { +}, E = 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); -}, N = a("isIncompleteBuild"), E = a("buildConfigForBuild"), D = a("isRecentBuild"), A = function() { +}, T = a("isIncompleteBuild"), N = a("buildConfigForBuild"), D = a("isRecentBuild"), A = function() { moment().subtract(5, "m"); h = _.filter(n.builds, function(e) { if (!n.filters.hideOlderResources) return !0; -if (N(e)) return !0; -var t = E(e); +if (T(e)) return !0; +var t = N(e); return t ? n.latestBuildByConfig[t].metadata.name === e.metadata.name : D(e); }), n.filteredBuilds = s.filterForKeywords(h, S, w); }, B = a("deploymentStatus"), L = a("deploymentIsInProgress"), U = function() { @@ -4885,44 +4885,44 @@ 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", m.$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", p.$emit(s, r); var c = _.get(n.podsByName, a("annotation")(r, "buildPod")); -c && m.$emit(s, c); +c && p.$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", m.$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", p.$emit(s, r); var l = a("annotation")(r, "deployerPod"); -l && m.$emit(s, { +l && p.$emit(s, { kind: "Pod", metadata: { name: l } }), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { -m.$emit(s, e); +p.$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", m.$emit(s, r), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { -m.$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", p.$emit(s, r), _.each(n.podsByOwnerUID[r.metadata.uid], function(e) { +p.$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", m.$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", p.$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", m.$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", p.$emit(s, r); } } }, n.viewPodsForSet = function(e) { var t = _.get(n, [ "podsByOwnerUID", e.metadata.uid ], []); _.isEmpty(t) || u.toPodsForDeployment(e, t); -}, p.get(e.project).then(_.spread(function(e, a) { +}, m.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), T(), 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), E(), c.log("pods", n.pods); }), o.watch({ resource: "statefulsets", group: "apps", @@ -4941,7 +4941,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() { -T(), A(), U(), O(), I(); +E(), 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() { @@ -4952,10 +4952,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"), m.$emit("metrics.charts.resize")); +e !== t && (localStorage.setItem("monitoring.eventsidebar.collapsed", n.renderOptions.collapseEventsSidebar ? "true" : "false"), p.$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, p, m) { +} ]), 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) { 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.') @@ -5012,7 +5012,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, p.create(t, n, g, f).then(function() { +a.disableAddForm = !0, m.create(t, n, g, f).then(function() { j(), S("success", C.update.subject.success({ roleName: t.metadata.name, subjectName: n.name @@ -5026,7 +5026,7 @@ httpErr: e("getErrorDetails")(a) })); }); }, R = function(t, n, r) { -a.disableAddForm = !0, p.addSubject(t, n, r, f).then(function() { +a.disableAddForm = !0, m.addSubject(t, n, r, f).then(function() { j(), S("success", C.update.subject.success({ roleName: t.roleRef.name, subjectName: n.name @@ -5041,12 +5041,12 @@ httpErr: e("getErrorDetails")(a) }); }, I = {}; n.tab && (I[n.tab] = !0); -var T = u.getSubjectKinds(); +var E = u.getSubjectKinds(); angular.extend(a, { selectedTab: I, projectName: g, forms: {}, -subjectKinds: T, +subjectKinds: E, newBinding: { role: "", kind: n.tab || "User", @@ -5079,7 +5079,7 @@ return e ? a + (v(e, "description") || "") : ""; } } }); -var N = function(e, t, n, r) { +var T = function(e, t, n, r) { var o = { alerts: {}, detailsMarkup: C.remove.areYouSure.html.subject({ @@ -5122,10 +5122,10 @@ 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: T, +subjectKinds: E, canUpdateRolebindings: y("rolebindings", "update", g), confirmRemove: function(n, r, i) { -var c = null, l = N(n, r, i, a.user.metadata.name); +var c = null, l = T(n, r, i, a.user.metadata.name); _.isEqual(n, a.user.metadata.name) && u.isLastRole(a.user.metadata.name, a.roleBindings) && (c = !0), o.open({ animation: !0, templateUrl: "views/modals/confirm.html", @@ -5136,7 +5136,7 @@ return l; } } }).result.then(function() { -p.removeSubject(n, i, a.roleBindings, f).then(function(e) { +m.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); @@ -5176,7 +5176,7 @@ roleName: n.metadata.name, subjectName: e })) : i ? R(i, o, r) : P(n, o); } -}), m.listAllRoles(f, { +}), p.listAllRoles(f, { errorNotification: !1 }).then(function(e) { b = u.mapRolesForUI(_.head(e).by("metadata.name"), _.last(e).by("metadata.name")); @@ -5200,7 +5200,7 @@ a.toggle.roles = !a.toggle.roles, a.toggle.roles ? a.filteredRoles = t : (a.filt })); } ]), angular.module("openshiftConsole").controller("BuildsController", [ "$filter", "$location", "$routeParams", "$scope", "APIService", "BuildsService", "DataService", "LabelFilter", "Logger", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l) { a.projectName = n.project, a.builds = {}, a.unfilteredBuildConfigs = {}, a.buildConfigs = void 0, a.labelSuggestions = {}, a.alerts = a.alerts || {}, a.emptyMessage = "Loading...", a.latestByConfig = {}; -var u = e("buildConfigForBuild"), d = r.getPreferredVersion("builds"), p = r.getPreferredVersion("buildconfigs"), m = []; +var u = e("buildConfigForBuild"), d = r.getPreferredVersion("builds"), m = r.getPreferredVersion("buildconfigs"), p = []; l.get(n.project).then(_.spread(function(t, n) { function r(e) { var t = s.getLabelSelector(); @@ -5227,16 +5227,16 @@ details: "The active filters are hiding all builds." } a.project = t; var h = e("isJenkinsPipelineStrategy"); -m.push(i.watch(d, n, function(e) { +p.push(i.watch(d, n, function(e) { a.builds = _.omitBy(e.by("metadata.name"), h), a.emptyMessage = "No builds to show", f(), s.addLabelSuggestionsFromResources(a.builds, a.labelSuggestions), c.log("builds (subscribe)", a.builds); -})), m.push(i.watch(p, n, function(e) { +})), p.push(i.watch(m, n, function(e) { a.unfilteredBuildConfigs = _.omitBy(e.by("metadata.name"), h), s.addLabelSuggestionsFromResources(a.unfilteredBuildConfigs, a.labelSuggestions), s.setLabelSuggestions(a.labelSuggestions), a.buildConfigs = s.getLabelSelector().select(a.unfilteredBuildConfigs), f(), g(), c.log("buildconfigs (subscribe)", a.buildConfigs); })), s.onActiveFiltersChanged(function(e) { a.$apply(function() { a.buildConfigs = e.select(a.unfilteredBuildConfigs), f(), g(); }); }), a.$on("$destroy", function() { -i.unwatchAll(m); +i.unwatchAll(p); }); })); } ]), angular.module("openshiftConsole").controller("PipelinesController", [ "$filter", "$routeParams", "$scope", "Constants", "Navigate", "BuildsService", "DataService", "Logger", "ProjectsService", function(e, t, n, a, r, o, i, s, c) { @@ -5244,7 +5244,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"), p = e("isJenkinsPipelineStrategy"), m = e("isNewerResource"), f = function(e, t) { +var c = {}, u = e("buildConfigForBuild"), d = e("isIncompleteBuild"), m = e("isJenkinsPipelineStrategy"), p = e("isNewerResource"), f = function(e, t) { if (!d(t)) { n.statsByConfig[e] || (n.statsByConfig[e] = { count: 0, @@ -5256,9 +5256,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 (p(a)) { +if (m(a)) { var r = u(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); +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); } }), _.each(t, function(t, n) { _.set(e, [ n, t.metadata.name ], t); @@ -5269,7 +5269,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"), p), _.isEmpty(n.buildConfigs) && !h && (h = !0, a.SAMPLE_PIPELINE_TEMPLATE)) { +if (n.buildConfigsLoaded = !0, n.buildConfigs = _.pickBy(e.by("metadata.name"), m), _.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 @@ -5299,13 +5299,13 @@ title: n.buildconfig var t = e.getSession(); t.setOption("tabSize", 2), t.setOption("useSoftTabs", !0), e.$blockScrolling = 1 / 0; }; -var p = t("buildConfigForBuild"), m = t("buildStrategy"), f = [], g = function(t) { -e.updatedBuildConfig = angular.copy(t), e.envVars = m(e.updatedBuildConfig).env || []; +var m = t("buildConfigForBuild"), p = t("buildStrategy"), f = [], g = function(t) { +e.updatedBuildConfig = angular.copy(t), e.envVars = p(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"), m(e.updatedBuildConfig).env = d.compactEntries(angular.copy(e.envVars)), i.update(e.buildConfigsVersion, n.buildconfig, e.updatedBuildConfig, e.projectContext).then(function() { +l.hideNotification("save-bc-env-error"), e.envVars = _.filter(e.envVars, "name"), p(e.updatedBuildConfig).env = d.compactEntries(angular.copy(e.envVars)), i.update(e.buildConfigsVersion, n.buildconfig, e.updatedBuildConfig, e.projectContext).then(function() { l.addNotification({ type: "success", message: "Environment variables for build config " + e.buildConfigName + " were successfully updated." @@ -5325,7 +5325,7 @@ var h, v = function(n, s) { e.loaded = !0, e.buildConfig = n, e.buildConfigPaused = r.isPaused(e.buildConfig), e.buildConfig.spec.source.images && (e.imageSources = e.buildConfig.spec.source.images, e.imageSourcesPaths = [], e.imageSources.forEach(function(n) { e.imageSourcesPaths.push(t("destinationSourcePair")(n.paths)); })); -var c = _.get(m(n), "from", {}), l = c.kind + "/" + c.name + "/" + (c.namespace || e.projectName); +var c = _.get(p(n), "from", {}), l = c.kind + "/" + c.name + "/" + (c.namespace || e.projectName); h !== l && (_.includes([ "ImageStreamTag", "ImageStreamImage" ], c.kind) ? (h = l, i.get(a.kindToResource(c.kind), c.name, { namespace: c.namespace || e.projectName }, { @@ -5367,7 +5367,7 @@ details: 404 === n.status ? "Any remaining build history for this build will be }; }), f.push(i.watch(e.buildsVersion, 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": @@ -5420,9 +5420,9 @@ link: "project/" + n.project + "/browse/builds/" + n.buildconfig })), e.breadcrumbs.push({ title: n.build }), e.buildsVersion = a.getPreferredVersion("builds"), e.buildConfigsVersion = a.getPreferredVersion("buildconfigs"), e.podsVersion = a.getPreferredVersion("pods"); -var l, u = t("annotation"), d = [], p = function(t) { +var l, u = t("annotation"), d = [], m = function(t) { e.logCanRun = !_.includes([ "New", "Pending", "Error" ], t.status.phase); -}, m = function() { +}, p = function() { e.buildConfig ? e.canBuild = r.canBuild(e.buildConfig) : e.canBuild = !1; }; c.get(n.project).then(_.spread(function(a, s) { @@ -5430,7 +5430,7 @@ e.project = a, e.projectContext = s, e.logOptions = {}; var c = function() { e.eventObjects = l ? [ e.build, l ] : [ e.build ]; }, f = function(t, n) { -e.loaded = !0, e.build = t, p(t), c(); +e.loaded = !0, e.build = t, m(t), c(); var a = u(t, "buildNumber"); a && (e.breadcrumbs[2].title = "#" + a), "DELETED" === n && (e.alerts.deleted = { type: "warning", @@ -5446,7 +5446,7 @@ l = e, c(); "DELETED" === n && (e.alerts.deleted = { type: "warning", message: "Build configuration " + e.buildConfigName + " has been deleted." -}, e.buildConfigDeleted = !0), e.buildConfig = t, e.buildConfigPaused = r.isPaused(e.buildConfig), m(); +}, e.buildConfigDeleted = !0), e.buildConfig = t, e.buildConfigPaused = r.isPaused(e.buildConfig), p(); }; o.get(e.buildsVersion, n.build, s, { errorNotification: !1 @@ -5475,7 +5475,7 @@ function c(e, a) { var r = o.tagsByName(e); t.imageStream = e, t.tagsByName = r, t.tagName = n.tag; var i = r[n.tag]; -i ? (delete t.alerts.load, p(i, a)) : t.alerts.load = { +i ? (delete t.alerts.load, m(i, a)) : t.alerts.load = { type: "error", message: "The image tag was not found in the stream." }; @@ -5489,7 +5489,7 @@ link: "project/" + n.project + "/browse/images/" + n.imagestream }, { title: ":" + n.tag } ]; -var l = a.getPreferredVersion("imagestreamtags"), u = a.getPreferredVersion("imagestreams"), d = [], p = _.debounce(function(a, o) { +var l = a.getPreferredVersion("imagestreamtags"), u = a.getPreferredVersion("imagestreams"), d = [], m = _.debounce(function(a, o) { var s = n.imagestream + ":" + n.tag; r.get(l, s, o).then(function(e) { t.loaded = !0, t.image = e.image, t.layers = i(t.image); @@ -5500,7 +5500,7 @@ message: "The image details could not be loaded.", details: e("getErrorDetails")(n) }; }); -}, 200), m = function(e, n, a) { +}, 200), p = function(e, n, a) { c(e, n), "DELETED" === a && (t.alerts.deleted = { type: "warning", message: "This image stream has been deleted." @@ -5510,8 +5510,8 @@ s.get(n.project).then(_.spread(function(a, o) { t.project = a, r.get(u, n.imagestream, o, { errorNotification: !1 }).then(function(e) { -m(e, o), d.push(r.watchObject(u, n.imagestream, o, function(e, t) { -m(e, o, t); +p(e, o), d.push(r.watchObject(u, n.imagestream, o, function(e, t) { +p(e, o, t); })); }, function(n) { t.loaded = !0, t.alerts.load = { @@ -5590,7 +5590,7 @@ return t && (n += "/" + t.name), n; }; } ]), angular.module("openshiftConsole").controller("DeploymentsController", [ "$scope", "$filter", "$routeParams", "APIService", "DataService", "DeploymentsService", "LabelFilter", "Logger", "OwnerReferencesService", "ProjectsService", function(e, t, n, a, r, o, i, s, c, l) { 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 u, d, p = t("annotation"), m = a.getPreferredVersion("deployments"), f = a.getPreferredVersion("deploymentconfigs"), g = a.getPreferredVersion("replicationcontrollers"), h = a.getPreferredVersion("replicasets"), v = function() { +var u, d, m = t("annotation"), p = a.getPreferredVersion("deployments"), f = a.getPreferredVersion("deploymentconfigs"), g = a.getPreferredVersion("replicationcontrollers"), h = a.getPreferredVersion("replicasets"), v = function() { u && d && (e.replicaSetsByDeploymentUID = c.groupByControllerUID(u), e.unfilteredReplicaSets = _.get(e, [ "replicaSetsByDeploymentUID", "" ], {}), i.addLabelSuggestionsFromResources(e.unfilteredReplicaSets, e.labelSuggestions), i.setLabelSuggestions(e.labelSuggestions), e.replicaSets = i.getLabelSelector().select(e.unfilteredReplicaSets), e.latestReplicaSetByDeploymentUID = {}, _.each(e.replicaSetsByDeploymentUID, function(t, n) { n && (e.latestReplicaSetByDeploymentUID[n] = o.getActiveReplicaSet(t, d[n])); })); @@ -5605,7 +5605,7 @@ details: "The active filters are hiding all deployments." e.project = n, y.push(r.watch(g, a, function(n, a, r) { e.replicationControllers = n.by("metadata.name"); var l, u; -if (r && (l = p(r, "deploymentConfig"), u = r.metadata.name), e.replicationControllersByDC = o.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], i.addLabelSuggestionsFromResources(e.unfilteredReplicationControllers, e.labelSuggestions), i.setLabelSuggestions(e.labelSuggestions), e.replicationControllersByDC[""] = i.getLabelSelector().select(e.replicationControllersByDC[""])), c(), a) { +if (r && (l = m(r, "deploymentConfig"), u = r.metadata.name), e.replicationControllersByDC = o.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], i.addLabelSuggestionsFromResources(e.unfilteredReplicationControllers, e.labelSuggestions), i.setLabelSuggestions(e.labelSuggestions), e.replicationControllersByDC[""] = i.getLabelSelector().select(e.replicationControllersByDC[""])), c(), a) { if ("ADDED" === a || "MODIFIED" === a && [ "New", "Pending", "Running" ].indexOf(t("deploymentStatus")(r)) > -1) e.deploymentConfigDeploymentsInProgress[l] = e.deploymentConfigDeploymentsInProgress[l] || {}, e.deploymentConfigDeploymentsInProgress[l][u] = r; else if ("MODIFIED" === a) { var d = t("deploymentStatus")(r); "Complete" !== d && "Failed" !== d || delete e.deploymentConfigDeploymentsInProgress[l][u]; @@ -5618,7 +5618,7 @@ e.causes = t("deploymentCauses")(e); u = t.by("metadata.name"), v(), s.log("replicasets (subscribe)", e.replicaSets); })), y.push(r.watch(f, a, function(t) { e.unfilteredDeploymentConfigs = t.by("metadata.name"), i.addLabelSuggestionsFromResources(e.unfilteredDeploymentConfigs, e.labelSuggestions), i.setLabelSuggestions(e.labelSuggestions), e.deploymentConfigs = i.getLabelSelector().select(e.unfilteredDeploymentConfigs), e.emptyMessage = "No deployment configurations to show", e.replicationControllersByDC = o.associateDeploymentsToDeploymentConfig(e.replicationControllers, e.deploymentConfigs, !0), e.replicationControllersByDC[""] && (e.unfilteredReplicationControllers = e.replicationControllersByDC[""], e.replicationControllersByDC[""] = i.getLabelSelector().select(e.replicationControllersByDC[""])), c(), s.log("deploymentconfigs (subscribe)", e.deploymentConfigs); -})), y.push(r.watch(m, a, function(t) { +})), y.push(r.watch(p, a, function(t) { d = e.unfilteredDeployments = t.by("metadata.uid"), i.addLabelSuggestionsFromResources(e.unfilteredDeployments, e.labelSuggestions), i.setLabelSuggestions(e.labelSuggestions), e.deployments = i.getLabelSelector().select(e.unfilteredDeployments), v(), s.log("deployments (subscribe)", e.unfilteredDeployments); })), e.showEmptyMessage = function() { return 0 === t("hashSize")(e.replicationControllersByDC) || !(1 !== t("hashSize")(e.replicationControllersByDC) || !e.replicationControllersByDC[""]); @@ -5630,7 +5630,7 @@ e.deploymentConfigs = t.select(e.unfilteredDeploymentConfigs), e.replicationCont r.unwatchAll(y); }); })); -} ]), 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) { +} ]), 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) { 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", @@ -5639,14 +5639,14 @@ link: "project/" + n.project + "/browse/deployments" title: n.deployment } ], e.healthCheckURL = u.healthCheckURL(n.project, "Deployment", n.deployment, "apps"); var g = []; -p.get(n.project).then(_.spread(function(u, p) { +m.get(n.project).then(_.spread(function(u, m) { 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 = p; +e.project = u, e.projectContext = m; var v = {}, y = function() { o.getHPAWarnings(e.deployment, e.autoscalers, v, u).then(function(t) { e.hpaWarnings = t; @@ -5655,21 +5655,21 @@ e.hpaWarnings = t; a.get({ group: "apps", resource: "deployments" -}, n.deployment, p, { +}, n.deployment, m, { errorNotification: !1 }).then(function(t) { e.loaded = !0, e.deployment = t, y(), g.push(a.watchObject({ group: "apps", resource: "deployments" -}, n.deployment, p, function(t, n) { +}, n.deployment, m, 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, p); +}), e.deployment = t, e.updatingPausedState = !1, y(), i.fetchReferencedImageStreamImages([ t.spec.template ], e.imagesByDockerReference, f, m); })), g.push(a.watch({ group: "extensions", resource: "replicasets" -}, p, function(n) { +}, m, 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); @@ -5680,18 +5680,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", p).then(function(e) { +}), a.list("limitranges", m).then(function(e) { v = e.by("metadata.name"), y(); -}), g.push(a.watch("imagestreams", p, function(t) { +}), g.push(a.watch("imagestreams", m, function(t) { var n = t.by("metadata.name"); -i.buildDockerRefMapForImageStreams(n, f), e.deployment && i.fetchReferencedImageStreamImages([ e.deployment.spec.template ], e.imagesByDockerReference, f, p), c.log("imagestreams (subscribe)", e.imageStreams); +i.buildDockerRefMapForImageStreams(n, f), e.deployment && i.fetchReferencedImageStreamImages([ e.deployment.spec.template ], e.imagesByDockerReference, f, m), c.log("imagestreams (subscribe)", e.imageStreams); })), g.push(a.watch({ group: "autoscaling", resource: "horizontalpodautoscalers", version: "v1" -}, p, function(t) { +}, m, function(t) { e.autoscalers = o.filterHPA(t.by("metadata.name"), "Deployment", n.deployment), y(); -})), g.push(a.watch("builds", p, function(t) { +})), g.push(a.watch("builds", m, function(t) { e.builds = t.by("metadata.name"), c.log("builds (subscribe)", e.builds); })), s.onActiveFiltersChanged(function(t) { e.$evalAsync(function() { @@ -5706,7 +5706,7 @@ details: t("getErrorDetails")(n) }; }); }, e.setPaused = function(n) { -e.updatingPausedState = !0, r.setPaused(e.deployment, n, p).then(_.noop, function(a) { +e.updatingPausedState = !0, r.setPaused(e.deployment, n, m).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.", @@ -5723,13 +5723,13 @@ okButtonText: "Remove", okButtonClass: "btn-danger", cancelButtonText: "Cancel" }).then(function() { -m.removeVolume(e.deployment, t, p); +p.removeVolume(e.deployment, t, m); }); }, 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, p, m, 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, m, p, 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, @@ -5737,7 +5737,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 = []; -p.get(n.project).then(_.spread(function(a, l) { +m.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", @@ -5745,8 +5745,8 @@ details: "The active filters are hiding all deployments." }; } e.project = a, e.projectContext = l; -var p = {}, C = function() { -i.getHPAWarnings(e.deploymentConfig, e.autoscalers, p, a).then(function(t) { +var m = {}, C = function() { +i.getHPAWarnings(e.deploymentConfig, e.autoscalers, m, a).then(function(t) { e.hpaWarnings = t; }); }; @@ -5794,7 +5794,7 @@ labelSelector: g("deploymentConfig") + "=" + e.deploymentConfigName } } })), r.list("limitranges", l).then(function(e) { -p = e.by("metadata.name"), C(); +m = 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); @@ -5848,24 +5848,24 @@ okButtonText: "Remove", okButtonClass: "btn-danger", cancelButtonText: "Cancel" }).then(function() { -m.removeVolume(e.deploymentConfig, t, l); +p.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, p, m, 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, m, p, 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 = p.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"); +}, e.healthCheckURL = m.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"); break; case "ReplicationController": -e.resource = "replicationcontrollers", e.healthCheckURL = p.healthCheckURL(n.project, "ReplicationController", n.replicaSet); +e.resource = "replicationcontrollers", e.healthCheckURL = m.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 = {}; @@ -5878,7 +5878,7 @@ e.logCanRun = !_.includes([ "New", "Pending" ], P(t)); }, I = t("isIE")() || t("isEdge")(); g.get(n.project).then(_.spread(function(u, g) { e.project = u, e.projectContext = g; -var v = {}, T = function() { +var v = {}, E = 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); @@ -5886,14 +5886,14 @@ e.autoscalers = e.hpaForRS.concat(t); var a = s.filterHPA(v, "Deployment", e.deployment.metadata.name); e.autoscalers = e.hpaForRS.concat(a); } else e.autoscalers = e.hpaForRS; -}, N = function() { +}, T = function() { 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, T(); +}), n = i.getActiveDeployment(a), e.isActive = n && n.metadata.uid === e.replicaSet.metadata.uid, E(); })); -}, E = function() { +}, N = function() { s.getHPAWarnings(e.replicaSet, e.autoscalers, e.limitRanges, u).then(function(t) { e.hpaWarnings = t; }); @@ -5902,7 +5902,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 = p.healthCheckURL(n.project, "DeploymentConfig", r), o.get("deploymentconfigs", r, g, { +i && (e.logOptions.version = i), e.healthCheckURL = m.healthCheckURL(n.project, "DeploymentConfig", r), o.get("deploymentconfigs", r, g, { errorNotification: !1 }).then(function(t) { e.deploymentConfig = t; @@ -5919,37 +5919,37 @@ e.isActive = i.isActiveReplicaSet(e.replicaSet, e.deployment); }, $ = function(t) { return _.some(t, function(t) { if (_.get(t, "status.replicas") && _.get(t, "metadata.uid") !== _.get(e.replicaSet, "metadata.uid")) { -var n = m.getControllerReferences(t); +var n = p.getControllerReferences(t); return _.some(n, { uid: e.deployment.metadata.uid }); } }); }, B = !1, L = function() { -var t = m.getControllerReferences(e.replicaSet), a = _.find(t, { +var t = p.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 = p.healthCheckURL(n.project, "Deployment", t.metadata.name, "apps"), j.push(o.watchObject({ +e.deployment = t, e.healthCheckURL = m.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 = p.healthCheckURL(n.project, "ReplicaSet", n.replicaSet, "extensions"), e.deploymentMissing = !0, void delete e.deployment; +}, e.healthCheckURL = m.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: p.resourceURL(e.deployment) +link: m.resourceURL(e.deployment) }, humanizedKind: "Deployments" -}), A(), T(); +}), A(), E(); })), j.push(o.watch({ group: "extensions", resource: "replicasets" @@ -5975,14 +5975,14 @@ break; case "ReplicaSet": L(); } -E(), e.breadcrumbs = r.getBreadcrumbs({ +N(), e.breadcrumbs = r.getBreadcrumbs({ object: t }), j.push(o.watchObject(e.resource, n.replicaSet, g, function(t, n) { "DELETED" === n && (e.alerts.deleted = { type: "warning", message: "This " + S + " has been deleted." -}), e.replicaSet = t, R(t), E(), U(), e.deployment && A(); -})), e.deploymentConfigName && N(), j.push(o.watch("pods", g, function(t) { +}), e.replicaSet = t, R(t), N(), U(), e.deployment && A(); +})), e.deploymentConfigName && T(), j.push(o.watch("pods", g, function(t) { var n = t.by("metadata.name"); e.podsForDeployment = f.filterForOwner(n, e.replicaSet); })); @@ -6012,12 +6012,12 @@ group: "autoscaling", resource: "horizontalpodautoscalers", version: "v1" }, g, function(e) { -v = e.by("metadata.name"), T(), E(); +v = e.by("metadata.name"), E(), N(); }, { poll: I, pollInterval: 6e4 })), o.list("limitranges", g).then(function(t) { -e.limitRanges = t.by("metadata.name"), E(); +e.limitRanges = t.by("metadata.name"), N(); }); j.push(o.watch("resourcequotas", g, function(t) { e.quotas = t.by("metadata.name"); @@ -6232,7 +6232,7 @@ n.unwatchAll(i); 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() { +}, m = function() { e.unfilteredServiceInstances = r.sortServiceInstances(e.unfilteredServiceInstances, e.serviceClasses); }; l.get(n.project).then(_.spread(function(t, n) { @@ -6252,12 +6252,12 @@ e.bindingsByInstanceRef = _.groupBy(n, "spec.instanceRef.name"); 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); +e.emptyMessage = "No provisioned services to show", e.unfilteredServiceInstances = t.by("metadata.name"), m(), 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" }, {}, function(t) { -e.serviceClasses = t.by("metadata.name"), p(), d(); +e.serviceClasses = t.by("metadata.name"), m(), d(); }), s.onActiveFiltersChanged(function(t) { e.$evalAsync(function() { e.serviceInstances = t.select(e.unfilteredServiceInstances), a(); @@ -6609,7 +6609,7 @@ default: return !0; } }); -var p = function(e) { +var m = function(e) { if (e) { var t = l.kindToResourceGroupVersion(e), n = l.apiInfo(t); return !n || !n.verbs || _.includes(n.verbs, "list"); @@ -6623,9 +6623,9 @@ kind: t, group: _.get(n, "kindSelector.selected.group", "") }).toString() : ""; }; -var m; +var p; n.isDuplicateKind = function(e) { -return m || (m = _.countBy(n.kinds, "kind")), m[e] > 1; +return p || (p = _.countBy(n.kinds, "kind")), p[e] > 1; }; var f = function(e, t) { return _.some(n.kinds, function(n) { @@ -6638,7 +6638,7 @@ var t = { resource: l.kindToResource(e.kind), group: e.group || "" }; -return !!p(e) && (!!a.checkResource(t.resource) && a.canI(t, "list", n.projectName)); +return !!m(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(); @@ -6679,10 +6679,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, p) { +} ]), 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) { if (a.kind && a.name) { -var m = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; -if (_.includes(m, a.kind)) { +var p = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; +if (_.includes(p, 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 @@ -6704,7 +6704,7 @@ t.url(r.resourceURL); }, b = function() { d.hideNotification("set-compute-limits-error"); }; -r.cancel = y, r.$on("$destroy", b), p.get(a.project).then(_.spread(function(e, t) { +r.cancel = y, r.$on("$destroy", b), m.get(a.project).then(_.spread(function(e, t) { var n = { resource: o.kindToResource(a.kind), group: a.group @@ -6729,17 +6729,17 @@ r.disableInputs = !1, v(g + " could not be updated.", h(e)); }, function(e) { v(g + " could not be loaded.", h(e)); }); -var p = function() { +var m = 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", p, !0); +r.limitRanges = e.by("metadata.name"), _.isEmpty(r.limitRanges) || r.$watch("containers", m, !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, p, m) { +} ]), 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) { e.projectName = a.project, e.buildConfig = null, e.alerts = {}, e.sourceURLPattern = d, e.options = {}, e.jenkinsfileOptions = { type: "path" }, e.selectTypes = { @@ -6876,7 +6876,7 @@ e.project = n, e.context = r, i.canI("buildconfigs", "update", a.project) ? s.ge 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 = 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) { +var n = m.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); e.secrets.secretsByType = _.each(a, function(e) { @@ -6995,7 +6995,7 @@ var t = e.getSession(); t.setOption("tabSize", 2), t.setOption("useSoftTabs", !0), e.$blockScrolling = 1 / 0; }; var S = function(e) { -return _.map(m.compactEntries(e), function(e) { +return _.map(p.compactEntries(e), function(e) { return { sourcePath: e.name, destinationDir: e.value @@ -7096,7 +7096,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 = 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) { +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) { case "Source": case "Docker": R(e.updatedBuildConfig.spec.source, e.secrets.picked.sourceSecrets); @@ -7133,10 +7133,10 @@ var u = function(e) { return _.get(e, "metadata.resourceVersion"); }, d = function() { s.hideNotification("edit-config-map-error"); -}, p = function() { +}, m = function() { a.history.back(); }; -n.cancel = p, c.get(t.project).then(_.spread(function(a, c) { +n.cancel = m, c.get(t.project).then(_.spread(function(a, c) { r.get("configmaps", t.configMap, c, { errorNotification: !1 }).then(function(e) { @@ -7155,7 +7155,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." -}), p(); +}), m(); }, function(t) { n.disableInputs = !1, s.addNotification({ id: "edit-config-map-error", @@ -7168,7 +7168,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, p, m, 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, m, p, f) { e.projectName = a.project, e.deploymentConfig = null, e.alerts = {}, e.view = { advancedStrategyOptions: !1, advancedImageOptions: !1 @@ -7201,7 +7201,7 @@ default: return void Logger.error("Unknown deployment strategy type: " + e); } }; -p.get(a.project).then(_.spread(function(n, r) { +m.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) { @@ -7260,7 +7260,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 = m.groupSecretsByType(t), a = _.mapValues(n, function(e) { +var n = p.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); e.secretsByType = _.each(a, function(e) { @@ -7379,7 +7379,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, p, m) { +} ]), 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) { if (n.kind && n.name) { var f = [ "Deployment", "DeploymentConfig", "HorizontalPodAutoscaler", "ReplicaSet", "ReplicationController" ]; if (_.includes(f, n.kind)) { @@ -7395,21 +7395,21 @@ e.cancel = h; var v = function() { d.hideNotification("edit-hpa-error"); }; -e.$on("$destroy", v), p.get(n.project).then(_.spread(function(t, a) { +e.$on("$destroy", v), m.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 p = function() { +var m = function() { e.disableInputs = !0, v(); var t = { apiVersion: "autoscaling/v1", kind: "HorizontalPodAutoscaler", metadata: { name: e.autoscaling.name, -labels: m.mapEntries(m.compactEntries(e.labels)) +labels: p.mapEntries(p.compactEntries(e.labels)) }, spec: { scaleTargetRef: { @@ -7440,7 +7440,7 @@ details: g(t) }); }); }, f = function(t) { -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({ +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({ resource: "horizontalpodautoscalers", group: "autoscaling" }, t.metadata.name, t, a).then(function(e) { @@ -7487,7 +7487,7 @@ e.breadcrumbs = i.getBreadcrumbs({ object: r, project: t, subpage: "Autoscale" -}), e.save = p; +}), e.save = m; var o = {}, l = function() { var n = _.get(r, "spec.template.spec.containers", []); e.showCPURequestWarning = !c.hasCPURequest(n, o, t); @@ -7511,7 +7511,7 @@ kind: n.kind, namespace: n.project, subpage: "Edit Health Checks" }), a.previousProbes = {}; -var p = e("getErrorDetails"), m = e("upperFirst"), f = function(e, t) { +var m = e("getErrorDetails"), p = e("upperFirst"), f = function(e, t) { l.addNotification({ id: "add-health-check-error", type: "error", @@ -7544,14 +7544,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: m(d) + " was updated." +message: p(d) + " was updated." }), g(); }, function(e) { -a.disableInputs = !1, f(m(d) + " could not be updated.", p(e)); +a.disableInputs = !1, f(p(d) + " could not be updated.", m(e)); }); }; }, function(e) { -f(m(d) + " could not be loaded.", p(e)); +f(p(d) + " could not be loaded.", m(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 + "."); @@ -7577,33 +7577,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 p, m = e("orderByDisplayName"), f = function() { +var m, p = 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) { -p = angular.copy(e); -var t = _.get(p, "spec.host"); -"Subdomain" === _.get(p, "spec.wildcardPolicy") && (t = "*." + l.getSubdomain(p)), a.routing = { +m = angular.copy(e); +var t = _.get(m, "spec.host"); +"Subdomain" === _.get(m, "spec.wildcardPolicy") && (t = "*." + l.getSubdomain(m)), a.routing = { host: t, -wildcardPolicy: _.get(p, "spec.wildcardPolicy"), -path: _.get(p, "spec.path"), -targetPort: _.get(p, "spec.port.targetPort"), -tls: angular.copy(_.get(p, "spec.tls")) +wildcardPolicy: _.get(m, "spec.wildcardPolicy"), +path: _.get(m, "spec.path"), +targetPort: _.get(m, "spec.port.targetPort"), +tls: angular.copy(_.get(m, "spec.tls")) }, o.list("services", c).then(function(e) { a.loading = !1; var t = e.by("metadata.name"); -a.routing.to = p.spec.to, a.routing.alternateServices = [], _.each(_.get(p, "spec.alternateBackends"), function(e) { +a.routing.to = m.spec.to, a.routing.alternateServices = [], _.each(_.get(m, "spec.alternateBackends"), function(e) { if ("Service" !== e.kind) return f(), !1; a.routing.alternateServices.push(e); -}), a.services = m(t); +}), a.services = p(t); }); } else f(); }, function() { i.toErrorPage("Could not load route " + a.routeName + "."); }); var g = function() { -var e = angular.copy(p), t = _.get(a, "routing.to.name"); +var e = angular.copy(m), 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; @@ -7641,14 +7641,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 p = t("humanizeKind"); +var m = 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 m = function() { +var p = function() { e.modified = !1, a.returnURL ? n.url(a.returnURL) : r.history.back(); }, f = []; d.get(a.project).then(_.spread(function(n, r) { @@ -7676,13 +7676,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 " + p(a.kind) + " " + a.name + ".", +message: "No changes were applied to " + m(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: p(a.kind, !0) + " " + a.name + " was successfully updated." -}), m(); +message: m(a.kind, !0) + " " + a.name + " was successfully updated." +}), p(); }, function(n) { e.updatingNow = !1, e.error = { message: t("getErrorDetails")(n) @@ -7698,17 +7698,17 @@ message: o.invalidObjectKindOrVersion(n) message: "Cannot change resource kind (original: " + i.kind + ", modified: " + (n.kind || "") + ")." }; }, e.cancel = function() { -m(); +p(); }, 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 " + p(a.kind) + " '" + a.name + "'. " + t("getErrorDetails")(e)); +l.toErrorPage("Could not load " + m(a.kind) + " '" + a.name + "'. " + t("getErrorDetails")(e)); }), e.$on("$destroy", function() { c.unwatchAll(f); -})) : l.toErrorPage("You do not have authority to update " + p(a.kind) + " " + a.name + ".", "access_denied"); +})) : l.toErrorPage("You do not have authority to update " + m(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) { @@ -7728,10 +7728,10 @@ label: "" } return !1; }), a; -}, p = i.CATALOG_CATEGORIES, m = "none" === r.category ? "" : r.category; -if (e.category = d(p, m), e.category) { +}, m = i.CATALOG_CATEGORIES, p = "none" === r.category ? "" : r.category; +if (e.category = d(m, p), e.category) { var f, g; -!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 = [ { +!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 = [ { title: "Add to Project", link: "project/" + e.projectName + "/create" }, { @@ -7762,7 +7762,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, p, m, 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, m, p, 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; @@ -7780,8 +7780,8 @@ title: R var I = { name: "app", value: "" -}, T = t("orderByDisplayName"), N = t("getErrorDetails"), E = {}, D = function() { -g.hideNotification("create-builder-list-config-maps-error"), g.hideNotification("create-builder-list-secrets-error"), _.each(E, function(e) { +}, E = t("orderByDisplayName"), T = 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); }); }; @@ -7797,9 +7797,9 @@ 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"), p.log("quotas", h); +h = e.by("metadata.name"), m.log("quotas", h); }), c.list("appliedclusterresourcequotas", n).then(function(e) { -y = e.by("metadata.name"), p.log("cluster quotas", y); +y = e.by("metadata.name"), m.log("cluster quotas", y); }), e.$watch("scaling.autoscale", S), e.$watch("container", S, !0), e.$watch("name", function(e, t) { I.value && I.value !== t || (I.value = e); }), function(a) { @@ -7838,25 +7838,25 @@ 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"); -}, m.isAvailable().then(function(t) { +}, p.isAvailable().then(function(t) { e.metricsWarning = !t; }); var o = [], i = []; e.valueFromObjects = [], c.list("configmaps", n, null, { errorNotification: !1 }).then(function(t) { -o = T(t.by("metadata.name")), e.valueFromObjects = o.concat(i); +o = E(t.by("metadata.name")), e.valueFromObjects = o.concat(i); }, function(e) { 403 !== e.code && g.addNotification({ id: "create-builder-list-config-maps-error", type: "error", message: "Could not load config maps.", -details: N(e) +details: T(e) }); }), c.list("secrets", n, null, { errorNotification: !1 }).then(function(t) { -i = T(t.by("metadata.name")), e.valueFromObjects = i.concat(o); +i = E(t.by("metadata.name")), e.valueFromObjects = i.concat(o); var n = b.groupSecretsByType(t), a = _.mapValues(n, function(e) { return _.map(e, "metadata.name"); }); @@ -7868,7 +7868,7 @@ e.unshift(""); id: "create-builder-list-secrets-error", type: "error", message: "Could not load secrets.", -details: N(e) +details: T(e) }); }), c.get("imagestreams", a.imageName, { namespace: a.namespace || r.project @@ -7945,11 +7945,11 @@ cancelButtonText: "Cancel" } }).result.then($); }, L = function(t) { -D(), E = t.quotaAlerts || [], e.nameTaken || _.some(E, { +D(), N = t.quotaAlerts || [], e.nameTaken || _.some(N, { type: "error" -}) ? (e.disableInputs = !1, _.each(E, function(e) { +}) ? (e.disableInputs = !1, _.each(N, function(e) { e.id = _.uniqueId("create-builder-alert-"), g.addNotification(e); -})) : _.isEmpty(E) ? $() : (B(E), e.disableInputs = !1); +})) : _.isEmpty(N) ? $() : (B(N), e.disableInputs = !1); }; e.projectDisplayName = function() { return k(this.project) || this.projectName; @@ -7957,7 +7957,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); A = [], angular.forEach(t, function(e) { -null !== e && (p.debug("Generated resource definition:", e), A.push(e)); +null !== e && (m.debug("Generated resource definition:", e), A.push(e)); }); var a = s.ifResourcesDontExist(A, e.projectName), r = v.getLatestQuotaAlerts(A, n), o = function(t) { return e.nameTaken = t.nameTaken, r; @@ -7968,7 +7968,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, p, m) { +} ]), 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) { u("displayName"); var f = []; e.alerts = [], e.loginBaseUrl = a.openshiftAPIBaseUrl(), e.buildConfigs = {}, e.projectName = n.project, e.fromSampleRepo = n.fromSample, e.breadcrumbs = [ { @@ -7978,7 +7978,7 @@ link: "project/" + e.projectName + "/create" title: n.breadcrumbTitle || n.name }, { title: "Next Steps" -} ], m.get(n.project).then(_.spread(function(t, r) { +} ], p.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() { @@ -7998,7 +7998,7 @@ function d(e) { for (var t = [], n = w.exec(e); n; ) t.push(n[1]), n = w.exec(e); return t; } -function p() { +function m() { var e = g(); r.templateImages = _.map(k, function(t) { return _.isEmpty(t.usesParameters) ? t : { @@ -8009,7 +8009,7 @@ usesParameters: t.usesParameters }; }); } -function m(e) { +function p(e) { var t = [], n = y(e); return n && angular.forEach(n, function(n) { var a = n.image, r = u(e, n); @@ -8029,7 +8029,7 @@ usesParameters: d(a) var r = S(C(e), v); r && (n[r] = !0); } -"DeploymentConfig" === e.kind && (t = t.concat(m(e))); +"DeploymentConfig" === e.kind && (t = t.concat(p(e))); }), t.forEach(function(e) { n[e] || k.push({ name: e, @@ -8077,7 +8077,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(p); +r.$apply(m); }, 50, { maxWait: 250 }), !0)) : r.templateImages = k; @@ -8244,11 +8244,11 @@ type: "error", message: "The templateParamsMap is not valid JSON. " + t }; } -}, 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); +}, 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); }); f.namespace = f.namespace || "openshift"; -_.includes(p, f.namespace) ? f.imageStream && f.template ? e.alerts.invalidResource = { +_.includes(m, 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) { @@ -8358,7 +8358,7 @@ link: "project/" + n.projectName + "/browse/routes" }, { title: "Create Route" } ]; -var p = r.getPreferredVersion("routes"), m = r.getPreferredVersion("services"), f = function() { +var m = r.getPreferredVersion("routes"), p = r.getPreferredVersion("services"), f = function() { l.hideNotification("create-route-error"); }; n.$on("$destroy", f); @@ -8366,7 +8366,7 @@ var g = function() { a.history.back(); }; n.cancel = g, u.get(t.project).then(_.spread(function(a, u) { -if (n.project = a, i.canI(p, "create", t.project)) { +if (n.project = a, i.canI(m, "create", t.project)) { var h, v = e("orderByDisplayName"); n.routing.to = { kind: "Service", @@ -8386,7 +8386,7 @@ value: e }; }); }; -s.list(m, u).then(function(e) { +s.list(p, u).then(function(e) { h = e.by("metadata.name"), n.services = v(h), n.$watch("routing.to.name", b); }), n.createRoute = function() { if (n.createRouteForm.$valid) { @@ -8399,8 +8399,8 @@ name: e.name, weight: e.weight }; })); -var p = r.objectToResourceGroupVersion(i); -s.create(p, null, i, u).then(function() { +var m = r.objectToResourceGroupVersion(i); +s.create(m, null, i, u).then(function() { l.addNotification({ type: "success", message: "Route " + i.metadata.name + " was successfully created." @@ -8417,7 +8417,7 @@ details: e("getErrorDetails")(t) }; } else c.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, p, m) { +} ]), 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) { if (t.kind && t.name) { var f = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ], g = e("humanizeKind"); if (_.includes(f, t.kind)) { @@ -8425,7 +8425,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 = m, n.outOfClaims = !1, n.attach = { +n.projectName = t.project, n.kind = t.kind, n.name = t.name, n.RELATIVE_PATH_PATTERN = p, n.outOfClaims = !1, n.attach = { persistentVolumeClaim: null, volumeName: null, mountPath: null, @@ -8440,7 +8440,7 @@ subpage: "Add Storage" var v = r.getPreferredVersion("resourcequotas"), y = r.getPreferredVersion("appliedclusterresourcequotas"); d.get(t.project).then(_.spread(function(r, d) { if (n.project = r, o.canI(h, "update", t.project)) { -var m = e("orderByDisplayName"), f = e("getErrorDetails"), b = e("generateName"), C = function(e, t) { +var p = e("orderByDisplayName"), f = e("getErrorDetails"), b = e("generateName"), C = function(e, t) { n.disableInputs = !0, u.addNotification({ id: "attach-pvc-error", type: "error", @@ -8459,7 +8459,7 @@ var k = function(e) { return n.attach.allContainers || n.attach.containers[e.name]; }, j = function() { var e = _.get(n, "attach.resource.spec.template"); -n.existingMountPaths = p.getMountPaths(e, k); +n.existingMountPaths = m.getMountPaths(e, k); }; n.$watchGroup([ "attach.resource", "attach.allContainers" ], j), n.$watch("attach.containers", j, !0); s.get(h, t.name, d).then(function(e) { @@ -8469,11 +8469,11 @@ project: r, subpage: "Add Storage" }); var t = _.get(e, "spec.template"); -n.existingVolumeNames = p.getVolumeNames(t); +n.existingVolumeNames = m.getVolumeNames(t); }, function(e) { C(t.name + " could not be loaded.", f(e)); }), s.list(n.pvcVersion, d).then(function(e) { -n.pvcs = m(e.by("metadata.name")), _.isEmpty(n.pvcs) || n.attach.persistentVolumeClaim || (n.attach.persistentVolumeClaim = _.head(n.pvcs)); +n.pvcs = p(e.by("metadata.name")), _.isEmpty(n.pvcs) || n.attach.persistentVolumeClaim || (n.attach.persistentVolumeClaim = _.head(n.pvcs)); }), s.list(v, { namespace: n.projectName }, function(e) { @@ -8488,12 +8488,12 @@ n.attach.volumeName || (n.attach.volumeName = b("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 (k(e)) { -var t = p.createVolumeMount(o, i, c, l); +var t = m.createVolumeMount(o, i, c, l); e.volumeMounts || (e.volumeMounts = []), e.volumeMounts.push(t); } }); -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 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 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", @@ -8509,7 +8509,7 @@ C("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, p, m) { +} ]), 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) { if (n.kind && n.name) { var f = [ "Deployment", "DeploymentConfig", "ReplicaSet", "ReplicationController" ]; if (_.includes(f, n.kind)) { @@ -8520,7 +8520,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 = m, a.breadcrumbs = s.getBreadcrumbs({ +}, a.forms = {}, a.RELATIVE_PATH_PATTERN = p, a.breadcrumbs = s.getBreadcrumbs({ name: n.name, kind: n.kind, namespace: n.project, @@ -8555,7 +8555,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"), m = e("generateName"); +var o = e("orderByDisplayName"), d = e("getErrorDetails"), p = e("generateName"); c.get(g, n.name, r, { errorNotification: !1 }).then(function(e) { @@ -8583,7 +8583,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 = p.getMountPaths(e, f); +a.existingMountPaths = m.getMountPaths(e, f); }; a.$watchGroup([ "targetObject", "attach.allContainers" ], v), a.$watch("attach.containers", v, !0); a.$watch("attach.items", function() { @@ -8591,28 +8591,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 = m("volume-"), l = { +var t = a.targetObject, o = _.get(a, "attach.source"), i = _.get(t, "spec.template"), s = p("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 p, h = { +var m, h = { name: s }; -switch (a.attach.pickKeys && (p = a.attach.items), o.kind) { +switch (a.attach.pickKeys && (m = a.attach.items), o.kind) { case "ConfigMap": h.configMap = { name: o.metadata.name, -items: p +items: m }; break; case "Secret": h.secret = { secretName: o.metadata.name, -items: p +items: m }; } i.spec.volumes = i.spec.volumes || [], i.spec.volumes.push(h), a.disableInputs = !0, C(); @@ -8714,7 +8714,7 @@ link: "project/" + n.projectName + "/browse/storage" }, { title: "Create Storage" } ]; -var p = { +var m = { kind: "PersistentVolumeClaim", apiVersion: "v1", metadata: { @@ -8727,7 +8727,7 @@ resources: { requests: {} } } -}, m = r.objectToResourceGroupVersion(p), f = function() { +}, p = r.objectToResourceGroupVersion(m), f = function() { l.hideNotification("create-pvc-error"); }; n.$on("$destroy", f); @@ -8736,7 +8736,7 @@ a.history.back(); }; n.cancel = g, u.get(t.project).then(_.spread(function(a, r) { function o() { -var e = angular.copy(p); +var e = angular.copy(m); e.metadata.name = n.claim.name, e.spec.accessModes = [ n.claim.accessModes || "ReadWriteOnce" ]; var t = n.claim.unit || "Mi"; if (e.spec.resources.requests.storage = n.claim.amount + t, n.claim.selectedLabels) { @@ -8745,11 +8745,11 @@ _.isEmpty(a) || _.set(e, "spec.selector.matchLabels", a); } return n.claim.storageClass && "No Storage Class" !== n.claim.storageClass.metadata.name && (e.metadata.annotations["volume.beta.kubernetes.io/storage-class"] = n.claim.storageClass.metadata.name), e; } -n.project = a, i.canI(m, "create", t.project) ? n.createPersistentVolumeClaim = function() { +n.project = a, i.canI(p, "create", t.project) ? n.createPersistentVolumeClaim = function() { if (f(), n.createPersistentVolumeClaimForm.$valid) { n.disableInputs = !0; var t = o(); -s.create(m, null, t, r).then(function(e) { +s.create(p, null, t, r).then(function(e) { l.addNotification({ type: "success", message: "Persistent volume claim " + e.metadata.name + " successfully created." @@ -9001,7 +9001,7 @@ deleteImmediately: !1 }; var d = function(e) { a.stayOnCurrentPage && a.alerts ? a.alerts[e.name] = e.data : c.addNotification(e.data); -}, p = function(e) { +}, m = function(e) { return i.delete({ resource: "horizontalpodautoscalers", group: "autoscaling" @@ -9021,7 +9021,7 @@ message: "Horizontal pod autoscaler " + e.metadata.name + " could not be deleted } }), l.error("HPA " + e.metadata.name + " could not be deleted.", t); }); -}, m = function() { +}, p = 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); @@ -9044,7 +9044,7 @@ group: a.group c.addNotification({ type: "success", message: s + " was marked for deletion." -}), a.success && a.success(), a.options.deleteHPAs && _.each(a.hpaList, p), m(); +}), a.success && a.success(), a.options.deleteHPAs && _.each(a.hpaList, m), p(); }).catch(function(e) { d({ name: t, @@ -9107,7 +9107,97 @@ n[e.key] = e.value; }); } }; -} ]), angular.module("openshiftConsole").directive("events", [ "$routeParams", "$filter", "DataService", "KeywordService", "ProjectsService", "Logger", function(e, t, n, a, r, o) { +} ]), function() { +angular.module("openshiftConsole").component("editEnvironmentFrom", { +controller: [ "$attrs", "$filter", "keyValueEditorUtils", function(e, t, n) { +var a = this, r = t("canI"), o = t("humanizeKind"), i = _.uniqueId(); +a.setFocusClass = "edit-environment-from-set-focus-" + i; +var s = function(e, t) { +e && e.push(t || {}); +}; +a.onAddRow = function() { +s(a.envFromEntries), n.setFocusOn("." + a.setFocusClass); +}, a.deleteEntry = function(e, t) { +a.envFromEntries && !a.envFromEntries.length || (a.envFromEntries.splice(e, t), !a.envFromEntries.length && a.addRowLink && s(a.envFromEntries), a.updateEntries(a.envFromEntries), a.editEnvironmentFromForm.$setDirty()); +}, a.isEnvFromReadonly = function(e) { +return a.isReadonlyAny || !0 === e.isReadonlyValue || (e.secretRef || e.configMapRef) && !e.selectedEnvFrom || _.isEmpty(a.envFromSelectorOptions); +}, a.groupByKind = function(e) { +return o(e.kind); +}, a.dragControlListeners = { +accept: function(e, t) { +return e.itemScope.sortableScope.$id === t.$id; +}, +orderChanged: function() { +a.editEnvironmentFromForm.$setDirty(); +} +}, a.envFromObjectSelected = function(e, t, n) { +var r = {}; +switch (n.kind) { +case "Secret": +r.secretRef = { +name: n.metadata.name +}, delete a.envFromEntries[e].configMapRef; +break; + +case "ConfigMap": +r.configMapRef = { +name: n.metadata.name +}, delete a.envFromEntries[e].secretRef; +} +_.assign(a.envFromEntries[e], r), a.updateEntries(a.envFromEntries); +}, a.updateEntries = function(e) { +a.entries = _.filter(e, function(e) { +return e.secretRef || e.configMapRef; +}); +}; +var c = function(e) { +a.envFromEntries = e || [], a.envFromEntries.length || s(a.envFromEntries), _.each(a.envFromEntries, function(e) { +e && (e.configMapRef && !r("configmaps", "get") && (e.isReadonlyValue = !0), e.secretRef && !r("secrets", "get") && (e.isReadonlyValue = !0)); +}); +}, l = function(e) { +var t; +switch (e.kind) { +case "ConfigMap": +t = _.find(a.envFromEntries, { +configMapRef: { +name: e.metadata.name +} +}); +break; + +case "Secret": +t = _.find(a.envFromEntries, { +secretRef: { +name: e.metadata.name +} +}); +} +return t; +}; +a.checkEntries = function(e) { +return !!l(e); +}; +var u = function(e, t) { +a.cannotAdd = a.isReadonlyAny || _.isEmpty(t), t && _.each(t, function(e) { +var t = l(e); +t && _.set(t, "selectedEnvFrom", e); +}); +}; +a.$onInit = function() { +c(a.entries), u(a.entries, a.envFromSelectorOptions), "cannotDelete" in e && (a.cannotDeleteAny = !0), "cannotSort" in e && (a.cannotSort = !0), "isReadonly" in e && (a.isReadonlyAny = !0), "showHeader" in e && (a.showHeader = !0), a.envFromEntries && !a.envFromEntries.length && s(a.envFromEntries); +}, a.$onChanges = function(e) { +e.entries && c(e.entries.currentValue), e.envFromSelectorOptions && u(a.envFromEntries, e.envFromSelectorOptions.currentValue); +}; +} ], +bindings: { +addRowLink: "@", +entries: "=", +envFromSelectorOptions: "<", +selectorPlaceholder: "@" +}, +templateUrl: "views/directives/edit-environment-from.html" +}); +}(), angular.module("openshiftConsole").directive("events", [ "$routeParams", "$filter", "DataService", "KeywordService", "ProjectsService", "Logger", function(e, t, n, a, r, o) { return { restrict: "E", scope: { @@ -9131,15 +9221,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 ]); -}, p = [], m = function() { -e.filterExpressions = p = a.generateKeywords(_.get(e, "filter.text")); +}, m = [], p = function() { +e.filterExpressions = m = 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, p); +e.filteredEvents = a.filterForKeywords(c, f, m); }; e.$watch("filter.text", _.debounce(function() { -m(), e.$evalAsync(g); +p(), e.$evalAsync(g); }, 50, { maxWait: 250 })); @@ -9261,7 +9351,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, p) { +} ]), 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) { return { restrict: "E", scope: { @@ -9269,18 +9359,18 @@ project: "=", isDialog: "=" }, templateUrl: "views/directives/from-file.html", -controller: [ "$scope", function(m) { +controller: [ "$scope", function(p) { function f(e) { -return !!e.kind || (m.error = { +return !!e.kind || (p.error = { message: "Resource is missing kind field." }, !1); } function g(e) { -return !!m.isList || (e.metadata ? e.metadata.name ? !e.metadata.namespace || e.metadata.namespace === m.input.selectedProject.metadata.name || (m.error = { +return !!p.isList || (e.metadata ? e.metadata.name ? !e.metadata.namespace || e.metadata.namespace === p.input.selectedProject.metadata.name || (p.error = { message: e.kind + " " + e.metadata.name + " can't be created in project " + e.metadata.namespace + ". Can't create resource in different projects." -}, !1) : (m.error = { +}, !1) : (p.error = { message: "Resource name is missing in metadata field." -}, !1) : (m.error = { +}, !1) : (p.error = { message: "Resource is missing metadata field." }, !1)); } @@ -9289,9 +9379,9 @@ a.open({ animation: !0, templateUrl: "views/modals/process-or-save-template.html", controller: "ProcessOrSaveTemplateModalController", -scope: m +scope: p }).result.then(function() { -m.templateOptions.add ? y() : (o.setTemplate(m.resourceList[0]), b()); +p.templateOptions.add ? y() : (o.setTemplate(p.resourceList[0]), b()); }); } function v() { @@ -9299,52 +9389,52 @@ a.open({ animation: !0, templateUrl: "views/modals/confirm-replace.html", controller: "ConfirmReplaceModalController", -scope: m +scope: p }).result.then(function() { -l.getLatestQuotaAlerts(m.createResources, { -namespace: m.input.selectedProject.metadata.name -}).then(E); +l.getLatestQuotaAlerts(p.createResources, { +namespace: p.input.selectedProject.metadata.name +}).then(N); }); } function y() { -var e = m.createResources.length, t = m.updateResources.length; -if (m.resourceKind.endsWith("List")) { +var e = p.createResources.length, t = p.updateResources.length; +if (p.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; -N(), "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, { +T(), "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, { namespace: n -}), t.url(e)) : m.isDialog ? m.$emit("fileImportedFromYAMLOrJSON", { -project: m.input.selectedProject -}) : (e = s.projectOverviewURL(m.input.selectedProject.metadata.name), t.url(e)); +}), t.url(e)) : p.isDialog ? p.$emit("fileImportedFromYAMLOrJSON", { +project: p.input.selectedProject +}) : (e = s.projectOverviewURL(p.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: m.input.selectedProject.metadata.name +namespace: p.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, m.updateResources.push(n); +a.annotations = e.metadata.annotations, a.labels = e.metadata.labels, n.metadata = a, p.updateResources.push(n); }, function() { -m.createResources.push(e); -}) : (m.errorOccurred = !0, void (m.error = { +p.createResources.push(e); +}) : (p.errorOccurred = !0, void (p.error = { message: r.unsupportedObjectKindOrVersion(e) -})) : (m.errorOccurred = !0, void (m.error = { +})) : (p.errorOccurred = !0, void (p.error = { message: r.invalidObjectKindOrVersion(e) })); } function S() { var t; -_.isEmpty(m.createResources) ? (t = _.head(m.updateResources), i.update(r.kindToResource(t.kind), t.metadata.name, t, { -namespace: m.input.selectedProject.metadata.name +_.isEmpty(p.createResources) ? (t = _.head(p.updateResources), i.update(r.kindToResource(t.kind), t.metadata.name, t, { +namespace: p.input.selectedProject.metadata.name }).then(function() { var e = P(t.kind); c.addNotification({ @@ -9358,8 +9448,8 @@ type: "error", message: "Unable to update the " + P(t.kind) + " '" + t.metadata.name + "'.", details: e("getErrorDetails")(n) }); -})) : (t = _.head(m.createResources), i.create(r.kindToResource(t.kind), null, t, { -namespace: m.input.selectedProject.metadata.name +})) : (t = _.head(p.createResources), i.create(r.kindToResource(t.kind), null, t, { +namespace: p.input.selectedProject.metadata.name }).then(function() { var e = P(t.kind); c.addNotification({ @@ -9377,17 +9467,17 @@ details: e("getErrorDetails")(n) } function w() { var e = { -started: "Creating resources in project " + A(m.input.selectedProject), -success: "Creating resources in project " + A(m.input.selectedProject), -failure: "Failed to create some resources in project " + A(m.input.selectedProject) +started: "Creating resources in project " + A(p.input.selectedProject), +success: "Creating resources in project " + A(p.input.selectedProject), +failure: "Failed to create some resources in project " + A(p.input.selectedProject) }, t = {}; -d.add(e, t, m.input.selectedProject.metadata.name, function() { +d.add(e, t, p.input.selectedProject.metadata.name, function() { var e = n.defer(); -return i.batch(m.createResources, { -namespace: m.input.selectedProject.metadata.name +return i.batch(p.createResources, { +namespace: p.input.selectedProject.metadata.name }, "create").then(function(t) { var n = [], a = !1; -if (t.failure.length > 0) a = !0, m.errorOccurred = !0, t.failure.forEach(function(e) { +if (t.failure.length > 0) a = !0, p.errorOccurred = !0, t.failure.forEach(function(e) { n.push({ type: "error", message: "Cannot create " + P(e.object.kind) + ' "' + e.object.metadata.name + '". ', @@ -9400,7 +9490,7 @@ message: "Created " + P(e.kind) + ' "' + e.metadata.name + '" successfully. ' }); }); else { var r; -r = m.isList ? "All items in list were created successfully." : P(m.resourceKind) + " " + m.resourceName + " was successfully created.", n.push({ +r = p.isList ? "All items in list were created successfully." : P(p.resourceKind) + " " + p.resourceName + " was successfully created.", n.push({ type: "success", message: r }); @@ -9414,17 +9504,17 @@ hasErrors: a } function k() { var e = { -started: "Updating resources in project " + A(m.input.selectedProject), -success: "Updated resources in project " + A(m.input.selectedProject), -failure: "Failed to update some resources in project " + A(m.input.selectedProject) +started: "Updating resources in project " + A(p.input.selectedProject), +success: "Updated resources in project " + A(p.input.selectedProject), +failure: "Failed to update some resources in project " + A(p.input.selectedProject) }, t = {}; -d.add(e, t, m.input.selectedProject.metadata.name, function() { +d.add(e, t, p.input.selectedProject.metadata.name, function() { var e = n.defer(); -return i.batch(m.updateResources, { -namespace: m.input.selectedProject.metadata.name +return i.batch(p.updateResources, { +namespace: p.input.selectedProject.metadata.name }, "update").then(function(t) { var n = [], a = !1; -if (t.failure.length > 0) a = !0, m.errorOccurred = !0, t.failure.forEach(function(e) { +if (t.failure.length > 0) a = !0, p.errorOccurred = !0, t.failure.forEach(function(e) { n.push({ type: "error", message: "Cannot update " + P(e.object.kind) + ' "' + e.object.metadata.name + '". ', @@ -9437,7 +9527,7 @@ message: "Updated " + P(e.kind) + ' "' + e.metadata.name + '" successfully. ' }); }); else { var r; -r = m.isList ? "All items in list were updated successfully." : P(m.resourceKind) + " " + m.resourceName + " was successfully updated.", n.push({ +r = p.isList ? "All items in list were updated successfully." : P(p.resourceKind) + " " + p.resourceName + " was successfully updated.", n.push({ type: "success", message: r }); @@ -9459,9 +9549,9 @@ alerts: n }); } var j, P = e("humanizeKind"), R = e("getErrorDetails"); -d.clear(), m.input = { -selectedProject: m.project -}, m.aceLoaded = function(e) { +d.clear(), p.input = { +selectedProject: p.project +}, p.aceLoaded = function(e) { (j = e.getSession()).setOption("tabSize", 2), j.setOption("useSoftTabs", !0), e.setDragDelay = 0, e.$blockScrolling = 1 / 0; }; var I = function(e) { @@ -9481,38 +9571,38 @@ cancelButtonText: "Cancel" } } }).result.then(y); -}, T = {}, N = function() { -c.hideNotification("from-file-error"), _.each(T, function(e) { +}, E = {}, T = function() { +c.hideNotification("from-file-error"), _.each(E, function(e) { !e.id || "error" !== e.type && "warning" !== e.type || c.hideNotification(e.id); }); -}, E = function(e) { -N(), T = u.getSecurityAlerts(m.createResources, m.input.selectedProject.metadata.name); +}, N = function(e) { +T(), E = u.getSecurityAlerts(p.createResources, p.input.selectedProject.metadata.name); var t = e.quotaAlerts || []; -T = T.concat(t), _.filter(T, { +E = E.concat(t), _.filter(E, { type: "error" -}).length ? (_.each(T, function(e) { +}).length ? (_.each(E, function(e) { e.id = _.uniqueId("from-file-alert-"), c.addNotification(e); -}), m.disableInputs = !1) : T.length ? (I(T), m.disableInputs = !1) : y(); +}), p.disableInputs = !1) : E.length ? (I(E), p.disableInputs = !1) : y(); }, D = function() { -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); +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); }; -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 = { +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 = { process: !0, add: !1 -})), m.updateResources = [], m.createResources = []; +})), p.updateResources = [], p.createResources = []; var e = []; -m.errorOccurred = !1, _.forEach(m.resourceList, function(t) { -if (!g(t)) return m.errorOccurred = !0, !1; +p.errorOccurred = !1, _.forEach(p.resourceList, function(t) { +if (!g(t)) return p.errorOccurred = !0, !1; e.push(C(t)); }), D().then(function(t) { -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(E) : (m.updateTemplate = 1 === m.updateResources.length && "Template" === m.updateResources[0].kind, m.updateTemplate ? h() : v())); +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())); }); }, function(e) { c.addNotification({ @@ -9523,11 +9613,11 @@ details: R(e) }); }); } -}, m.cancel = function() { -N(), s.toProjectOverview(m.input.selectedProject.metadata.name); +}, p.cancel = function() { +T(), s.toProjectOverview(p.input.selectedProject.metadata.name); }; var A = e("displayName"); -m.$on("importFileFromYAMLOrJSON", m.create), m.$on("$destroy", N); +p.$on("importFileFromYAMLOrJSON", p.create), p.$on("$destroy", T); } ] }; } ]), angular.module("openshiftConsole").directive("oscFileInput", [ "Logger", function(e) { @@ -9763,14 +9853,14 @@ n += _.get(e, "weight", 0); var r = e / n * 100; return t ? d3.round(r, 1) + "%" : r; }; -var p = !1; +var m = !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); -p = !0, a.controls.rangeSlider = a.weightAsPercentage(a.route.to.weight); +m = !0, a.controls.rangeSlider = a.weightAsPercentage(a.route.to.weight); } }), a.$watch("controls.rangeSlider", function(e, t) { -p ? p = !1 : e !== t && (e = parseInt(e, 10), _.set(a, "route.to.weight", e), _.set(a, "route.alternateServices[0].weight", 100 - e)); +m ? m = !1 : e !== t && (e = parseInt(e, 10), _.set(a, "route.to.weight", e), _.set(a, "route.alternateServices[0].weight", 100 - e)); }); } }; @@ -10274,7 +10364,7 @@ return !!t && (l.activeSecondary = t, !0); }); }; d(), l.$on("$routeChangeSuccess", d); -var p = function() { +var m = function() { _.each(l.navItems, function(e) { e.isHover = !1; }); @@ -10288,7 +10378,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); -p(), e.isHover = !0, e.mobileSecondary = l.isMobile, l.sidebar.showMobileSecondary = l.isMobile, l.sidebar.secondaryOpen = !0; +m(), 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; @@ -10300,16 +10390,16 @@ return e.isHover && !_.isEmpty(e.secondaryNavSections); }); }, 500)); }, l.closeNav = function() { -p(), l.nav.showMobileNav = !1, l.sidebar.secondaryOpen = !1; +m(), l.nav.showMobileNav = !1, l.sidebar.secondaryOpen = !1; }, l.collapseMobileSecondary = function(e, t) { e.mobileSecondary = !1, t.stopPropagation(); }; -var m = function() { +var p = function() { return s.isWindowBelowBreakpoint(s.WINDOW_SIZE_SM); }; -l.isMobile = m(); +l.isMobile = p(); var f = _.throttle(function() { -var e = m(); +var e = p(); e !== l.isMobile && l.$evalAsync(function() { l.isMobile = e, e || (_.set(a, "nav.showMobileNav", !1), _.each(l.navItems, function(e) { e.mobileSecondary = !1; @@ -10322,11 +10412,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"), p = e("uniqueDisplayName"); +var l = {}, u = [], d = e("displayName"), m = e("uniqueDisplayName"); return { restrict: "EA", templateUrl: "views/directives/header/header.html", -link: function(r, m) { +link: function(r, p) { r.currentProject = l[a.project]; var f = function(e, t) { var a; @@ -10354,12 +10444,12 @@ _.set(r, "ordering.panelName", ""); }, r.showOrderingPanel = function(e) { _.set(r, "ordering.panelName", e); }, r.catalogLandingPageEnabled = !i.DISABLE_SERVICE_CATALOG_LANDING_PAGE; -var v = m.find(".selectpicker"), y = [], b = function() { +var v = p.find(".selectpicker"), y = [], b = function() { var t = r.currentProjectName; if (t) { var n = function(e, n) { var a = $("