Skip to content

Commit 8c10598

Browse files
jhadvigspadgett
authored andcommitted
Stadanlone secrets page
1 parent 16879f3 commit 8c10598

33 files changed

+1621
-519
lines changed

app/index.html

+3
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ <h1>JavaScript Required</h1>
224224
<script src="scripts/controllers/replicaSet.js"></script>
225225
<script src="scripts/controllers/services.js"></script>
226226
<script src="scripts/controllers/service.js"></script>
227+
<script src="scripts/controllers/secrets.js"></script>
228+
<script src="scripts/controllers/secret.js"></script>
229+
<script src="scripts/controllers/createSecret.js"></script>
227230
<script src="scripts/controllers/routes.js"></script>
228231
<script src="scripts/controllers/route.js"></script>
229232
<script src="scripts/controllers/storage.js"></script>

app/scripts/app.js

+14
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,20 @@ angular
248248
controller: 'StorageController',
249249
reloadOnSearch: false
250250
})
251+
.when('/project/:project/browse/secrets/:secret', {
252+
templateUrl: 'views/browse/secret.html',
253+
controller: 'SecretController',
254+
reloadOnSearch: false
255+
})
256+
.when('/project/:project/browse/secrets', {
257+
templateUrl: 'views/secrets.html',
258+
controller: 'SecretsController',
259+
reloadOnSearch: false
260+
})
261+
.when('/project/:project/create-secret', {
262+
templateUrl: 'views/create-secret.html',
263+
controller: 'CreateSecretController'
264+
})
251265
.when('/project/:project/browse/other', {
252266
templateUrl: 'views/other-resources.html',
253267
controller: 'OtherResourcesController',

app/scripts/constants.js

+4
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ window.OPENSHIFT_CONSTANTS = {
163163
label: "Quota",
164164
href: "/quota"
165165
},
166+
{
167+
label: "Secrets",
168+
href: "/browse/secrets"
169+
},
166170
{
167171
label: "Other Resources",
168172
href: "/browse/other"

app/scripts/controllers/create/createFromImage.js

+21-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ angular.module("openshiftConsole")
1414
MetricsService,
1515
HPAService,
1616
QuotaService,
17+
SecretsService,
1718
TaskList,
1819
failureObjectNameFilter,
1920
$filter,
@@ -56,6 +57,7 @@ angular.module("openshiftConsole")
5657
title: $routeParams.displayName || imageName
5758
}
5859
];
60+
$scope.alerts = {};
5961

6062
var appLabel = {name: 'app', value: ''};
6163

@@ -74,12 +76,20 @@ angular.module("openshiftConsole")
7476
scope.buildConfig = {
7577
buildOnSourceChange: true,
7678
buildOnImageChange: true,
77-
buildOnConfigChange: true
79+
buildOnConfigChange: true,
80+
secrets: {
81+
gitSecret: [{name: ""}],
82+
pullSecret: [{name: ""}],
83+
pushSecret: [{name: ""}]
84+
}
7885
};
7986
scope.buildConfigEnvVars = [];
8087
scope.deploymentConfig = {
8188
deployOnNewImage: true,
82-
deployOnConfigChange: true
89+
deployOnConfigChange: true,
90+
secrets: {
91+
pullSecrets: [{name: ""}]
92+
}
8393
};
8494
scope.DCEnvVarsFromImage;
8595
scope.DCEnvVarsFromUser = [];
@@ -131,6 +141,15 @@ angular.module("openshiftConsole")
131141
$scope.metricsWarning = !available;
132142
});
133143

144+
DataService.list("secrets", context, function(secrets) {
145+
var secretsByType = SecretsService.groupSecretsByType(secrets);
146+
var secretNamesByType =_.mapValues(secretsByType, function(secrets) {return _.map(secrets, 'metadata.name')});
147+
// Add empty option to the image/source secrets
148+
$scope.secretsByType = _.each(secretNamesByType, function(secretsArray) {
149+
secretsArray.unshift("");
150+
});
151+
});
152+
134153
DataService.get("imagestreams", scope.imageName, {namespace: (scope.namespace || $routeParams.project)}).then(function(imageStream){
135154
scope.imageStream = imageStream;
136155
var imageName = scope.imageTag;
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
3+
/**
4+
* @ngdoc function
5+
* @name openshiftConsole.controller:CreateSecretController
6+
* @description
7+
* # CreateSecretController
8+
* Controller of the openshiftConsole
9+
*/
10+
angular.module('openshiftConsole')
11+
.controller('CreateSecretController', function ($filter, $routeParams, $scope, $window, AlertMessageService, ApplicationGenerator, DataService, Navigate, ProjectsService) {
12+
$scope.alerts = {};
13+
$scope.projectName = $routeParams.project;
14+
15+
$scope.breadcrumbs = [
16+
{
17+
title: $scope.projectName,
18+
link: "project/" + $scope.projectName
19+
},
20+
{
21+
title: "Secrets",
22+
link: "project/" + $scope.projectName + "/browse/secrets"
23+
},
24+
{
25+
title: "Create Secret"
26+
}
27+
];
28+
29+
ProjectsService
30+
.get($routeParams.project)
31+
.then(_.spread(function(project, context) {
32+
$scope.project = project;
33+
$scope.context = context;
34+
$scope.breadcrumbs[0].title = $filter('displayName')(project);
35+
36+
$scope.postCreateAction = function(newSecret, creationAlert) {
37+
AlertMessageService.addAlert(creationAlert);
38+
Navigate.toResourceList('secrets', $scope.projectName);
39+
};
40+
$scope.cancel = function() {
41+
Navigate.toResourceList('secrets', $scope.projectName);
42+
};
43+
}));
44+
});

app/scripts/controllers/edit/buildConfig.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,9 @@ angular.module('openshiftConsole')
140140

141141
DataService.list("secrets", context, function(secrets) {
142142
var secretsByType = SecretsService.groupSecretsByType(secrets);
143+
var secretNamesByType =_.mapValues(secretsByType, function(secrets) {return _.map(secrets, 'metadata.name')});
143144
// Add empty option to the image/source secrets
144-
$scope.secrets.secretsByType = _.each(secretsByType, function(secretsArray) {
145+
$scope.secrets.secretsByType = _.each(secretNamesByType, function(secretsArray) {
145146
secretsArray.unshift("");
146147
});
147148
loadBuildConfigSecrets();

app/scripts/controllers/edit/deploymentConfig.js

+14-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ angular.module('openshiftConsole')
1515
advancedStrategyOptions: false,
1616
advancedImageOptions: false
1717
};
18+
$scope.triggers = {};
1819
$scope.breadcrumbs = BreadcrumbsService.getBreadcrumbs({
1920
name: $routeParams.name,
2021
kind: $routeParams.kind,
@@ -105,6 +106,7 @@ angular.module('openshiftConsole')
105106
$scope.strategyData = angular.copy($scope.deploymentConfig.spec.strategy);
106107
$scope.originalStrategy = $scope.strategyData.type;
107108
$scope.strategyParamsPropertyName = getParamsPropertyName($scope.strategyData.type);
109+
$scope.triggers.hasConfigTrigger = _.some($scope.updatedDeploymentConfig.spec.triggers, {type: 'ConfigChange'});
108110

109111
// If strategy is 'Custom' and no environment variables are present, initiliaze them.
110112
if ($scope.strategyData.type === 'Custom' && !_.has($scope.strategyData, 'customParams.environment')) {
@@ -113,8 +115,9 @@ angular.module('openshiftConsole')
113115

114116
DataService.list("secrets", context, function(secrets) {
115117
var secretsByType = SecretsService.groupSecretsByType(secrets);
118+
var secretNamesByType =_.mapValues(secretsByType, function(secrets) {return _.map(secrets, 'metadata.name')});
116119
// Add empty option to the image/source secrets
117-
$scope.secretsByType = _.each(secretsByType, function(secretsArray) {
120+
$scope.secretsByType = _.each(secretNamesByType, function(secretsArray) {
118121
secretsArray.unshift("");
119122
});
120123
});
@@ -229,7 +232,11 @@ angular.module('openshiftConsole')
229232
};
230233

231234
var updateTriggers = function() {
232-
var updatedTriggers = _.filter($scope.updatedDeploymentConfig.spec.triggers, function(trigger) {return trigger.type !== 'ImageChange'});
235+
// Preserve any triggers we don't handle in the editor.
236+
var updatedTriggers = _.reject($scope.updatedDeploymentConfig.spec.triggers, function(trigger) {
237+
return trigger.type === 'ImageChange' || trigger.type === 'ConfigChange';
238+
});
239+
233240
_.each($scope.containerConfigByName, function(containerData, containerName) {
234241
if (containerData.hasDeploymentTrigger) {
235242
updatedTriggers.push(assembleImageChangeTrigger(containerName, containerData.triggerData.istag, containerData.triggerData.data));
@@ -238,6 +245,11 @@ angular.module('openshiftConsole')
238245
imageSpec.image = containerData.image;
239246
}
240247
});
248+
if ($scope.triggers.hasConfigTrigger) {
249+
updatedTriggers.push({
250+
type: "ConfigChange"
251+
});
252+
}
241253
return updatedTriggers;
242254
};
243255

app/scripts/controllers/modals/createSecretModal.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ angular.module('openshiftConsole')
1414
$scope.postCreateAction = function(newSecret, creationAlert) {
1515
$uibModalInstance.close(newSecret);
1616
// Add creation alert into scope
17-
_.extend($scope.alerts, creationAlert);
17+
$scope.alerts[creationAlert.name] = creationAlert.data;
1818
};
1919

2020
$scope.cancel = function() {

app/scripts/controllers/secret.js

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
'use strict';
2+
3+
/**
4+
* @ngdoc function
5+
* @name openshiftConsole.controller:SecretController
6+
* @description
7+
* # SecretController
8+
* Controller of the openshiftConsole
9+
*/
10+
angular.module('openshiftConsole')
11+
.controller('SecretController', function ($routeParams, $filter, $scope, AlertMessageService, DataService, ProjectsService, SecretsService) {
12+
$scope.projectName = $routeParams.project;
13+
$scope.secretName = $routeParams.secret;
14+
$scope.view = {
15+
showSecret: false
16+
};
17+
18+
$scope.alerts = $scope.alerts || {};
19+
$scope.emptyMessage = "Loading...";
20+
21+
$scope.breadcrumbs = [
22+
{
23+
title: "Secrets",
24+
link: "project/" + $routeParams.project + "/browse/secrets"
25+
},
26+
{
27+
title: $scope.secretName
28+
}
29+
];
30+
31+
AlertMessageService.getAlerts().forEach(function(alert) {
32+
$scope.alerts[alert.name] = alert.data;
33+
});
34+
35+
AlertMessageService.clearAlerts();
36+
37+
ProjectsService
38+
.get($routeParams.project)
39+
.then(_.spread(function(project, context) {
40+
$scope.project = project;
41+
$scope.context = context;
42+
43+
DataService.get("secrets", $scope.secretName, context).then(
44+
function(secret) {
45+
$scope.secret = secret;
46+
$scope.decodedSecretData = SecretsService.decodeSecretData($scope.secret.data);
47+
$scope.loaded = true;
48+
},
49+
function(e) {
50+
$scope.loaded = true;
51+
$scope.alerts["load"] = {
52+
type: "error",
53+
message: "The secret details could not be loaded.",
54+
details: "Reason: " + $filter('getErrorDetails')(e)
55+
};
56+
});
57+
}));
58+
});

app/scripts/controllers/secrets.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
3+
/**
4+
* @ngdoc function
5+
* @name openshiftConsole.controller:SecretsController
6+
* @description
7+
* # ProjectController
8+
* Controller of the openshiftConsole
9+
*/
10+
angular.module('openshiftConsole')
11+
.controller('SecretsController', function ($routeParams, $scope, AlertMessageService, DataService, ProjectsService, SecretsService) {
12+
$scope.projectName = $routeParams.project;
13+
$scope.secretsByType = {};
14+
$scope.alerts = $scope.alerts || {};
15+
16+
AlertMessageService.getAlerts().forEach(function(alert) {
17+
$scope.alerts[alert.name] = alert.data;
18+
});
19+
20+
AlertMessageService.clearAlerts();
21+
22+
ProjectsService
23+
.get($routeParams.project)
24+
.then(_.spread(function(project, context) {
25+
$scope.project = project;
26+
$scope.context = context;
27+
28+
DataService.list("secrets", context, function(secrets) {
29+
$scope.secretsByType = SecretsService.groupSecretsByType(secrets);
30+
$scope.loaded = true;
31+
});
32+
}));
33+
});

0 commit comments

Comments
 (0)