Skip to content

Commit 27f639a

Browse files
Merge pull request #2355 from jeff-phillips-18/parameters
Automatic merge from submit-queue. Handle displaying parameters when secrets are not available.
2 parents ddf87bf + 9f0c28b commit 27f639a

File tree

9 files changed

+295
-221
lines changed

9 files changed

+295
-221
lines changed

app/scripts/controllers/serviceInstance.js

+24-6
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,36 @@ angular.module('openshiftConsole')
7373
DataService.unwatchAll(secretWatchers);
7474
secretWatchers = [];
7575

76+
$scope.allowParametersReveal = AuthorizationService.canI('secrets', 'get', $scope.projectName);
7677
$scope.parameterData = {};
77-
_.each(_.keys(_.get($scope.parameterSchema, 'properties')), function(key) {
78-
$scope.parameterData[key] = $scope.parameterSchema.properties[key].default;
78+
$scope.opaqueParameterKeys = [];
79+
80+
// Set defaults for schema values
81+
var defaultValue = $scope.allowParametersReveal ? '' : '*****';
82+
_.each(_.keys(_.get($scope.parameterSchema, 'properties')), function (key) {
83+
$scope.parameterData[key] = defaultValue;
7984
});
8085

81-
$scope.parameterData = angular.extend($scope.parameterData, _.get($scope.serviceInstance, 'spec.parameters', {}));
86+
// Get the current status's parameter values
87+
var statusParameters = _.get($scope.serviceInstance, 'status.externalProperties.parameters', {});
88+
_.each(_.keys(statusParameters), function(key) {
89+
if (statusParameters[key] === '<redacted>') {
90+
$scope.parameterData[key] = '*****';
91+
} else {
92+
$scope.parameterData[key] = statusParameters[key];
93+
$scope.opaqueParameterKeys.push(key);
94+
}
95+
});
8296

83-
if (AuthorizationService.canI('secrets', 'get', $scope.projectName)) {
97+
// Fill in the secret values if they are available to the user
98+
if ($scope.allowParametersReveal) {
99+
// Get the data from each secret
84100
_.each(_.get($scope.serviceInstance, 'spec.parametersFrom'), function (parametersSource) {
85101
secretWatchers.push(DataService.watchObject("secrets", _.get(parametersSource, 'secretKeyRef.name'), $scope.projectContext, function (secret) {
86102
try {
87-
_.extend($scope.parameterData, JSON.parse(SecretsService.decodeSecretData(secret.data)[parametersSource.secretKeyRef.key]));
103+
var secretData = JSON.parse(SecretsService.decodeSecretData(secret.data)[parametersSource.secretKeyRef.key]);
104+
// TODO: Only include fields from the secret that are part of the schema
105+
_.extend($scope.parameterData, secretData);
88106
} catch (e) {
89107
Logger.warn('Unable to load parameters from secret ' + _.get(parametersSource, 'secretKeyRef.name'), e);
90108
}
@@ -107,6 +125,7 @@ angular.module('openshiftConsole')
107125
var updateParameterSchema = function() {
108126
$scope.parameterFormDefinition = angular.copy(_.get($scope.plan, 'spec.externalMetadata.schemas.service_instance.update.openshift_form_definition'));
109127
$scope.parameterSchema = _.get($scope.plan, 'spec.instanceCreateParameterSchema');
128+
updateParameterData();
110129
};
111130

112131
var updateServiceClass = function() {
@@ -132,7 +151,6 @@ angular.module('openshiftConsole')
132151
$scope.plan = plans[servicePlanName];
133152

134153
updateParameterSchema();
135-
updateParameterData();
136154
updateEditable();
137155
});
138156
});

app/scripts/directives/serviceBinding.js

+28-4
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,36 @@
3838
};
3939

4040
var updateParameterData = function() {
41-
ctrl.parameterData = angular.copy(_.get(ctrl.binding, 'spec.parameters', {}));
42-
if (AuthorizationService.canI('secrets', 'get', ctrl.namespace)) {
41+
42+
ctrl.allowParametersReveal = AuthorizationService.canI('secrets', 'get', ctrl.namespace);
43+
ctrl.parameterData = {};
44+
ctrl.opaqueParameterKeys = [];
45+
46+
// Set defaults for schema values
47+
var defaultValue = ctrl.allowParametersReveal ? '' : '*****';
48+
_.each(_.keys(_.get(ctrl.bindParameterSchema, 'properties')), function (key) {
49+
ctrl.parameterData[key] = defaultValue;
50+
});
51+
52+
// Get the current status's parameter values
53+
var statusParameters = _.get(ctrl.binding, 'status.externalProperties.parameters', {});
54+
_.each(_.keys(statusParameters), function(key) {
55+
if (statusParameters[key] === '<redacted>') {
56+
ctrl.parameterData[key] = '*****';
57+
} else {
58+
ctrl.parameterData[key] = statusParameters[key];
59+
ctrl.opaqueParameterKeys.push(key);
60+
}
61+
});
62+
63+
// Fill in the secret values if they are available to the user
64+
if (ctrl.allowParametersReveal) {
4365
_.each(_.get(ctrl.binding, 'spec.parametersFrom'), function (parametersSource) {
4466
DataService.get('secrets', _.get(parametersSource, 'secretKeyRef.name'), context).then(function (secret) {
4567
try {
46-
_.extend(ctrl.parameterData, JSON.parse(SecretsService.decodeSecretData(secret.data)[parametersSource.secretKeyRef.key]));
68+
var secretData = JSON.parse(SecretsService.decodeSecretData(secret.data)[parametersSource.secretKeyRef.key]);
69+
// TODO: Only include fields from the secret that are part of the schema
70+
_.extend(ctrl.parameterData, secretData);
4771
} catch (e) {
4872
Logger.warn('Unable to load parameters from secret ' + _.get(parametersSource, 'secretKeyRef.name'), e);
4973
}
@@ -57,6 +81,7 @@
5781
DataService.get(resource, _.get(ctrl.serviceInstance, 'spec.clusterServicePlanRef.name'), context).then(function(servicePlan) {
5882
ctrl.bindParameterFormDefinition = angular.copy(_.get(servicePlan, 'spec.externalMetadata.schemas.service_binding.create.openshift_form_definition'));
5983
ctrl.bindParameterSchema = _.get(servicePlan, 'spec.serviceBindingCreateParameterSchema');
84+
updateParameterData();
6085
});
6186
};
6287

@@ -76,7 +101,6 @@
76101
if (changes.binding || changes.serviceInstances || changes.serviceClasses) {
77102
updateServiceClass();
78103
updateParameterSchema();
79-
updateParameterData();
80104
}
81105
};
82106

app/views/browse/service-instance.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,14 @@ <h3>Plan</h3>
104104
<div ng-if="parameterSchema.properties" class="config-parameters-form">
105105
<h3>
106106
<span>Configuration</span>
107-
<a href="" class="hide-show-link" ng-click="toggleShowParameterValues()" role="button">
107+
<a ng-if="allowParametersReveal" href="" class="hide-show-link" ng-click="toggleShowParameterValues()" role="button">
108108
{{showParameterValues ? 'Hide Values' : 'Reveal Values'}}
109109
</a>
110110
</h3>
111111
<form name="forms.orderConfigureForm" >
112112
<catalog-parameters
113113
hide-values="!showParameterValues"
114+
opaque-keys="opaqueParameterKeys"
114115
model="parameterData"
115116
parameter-schema="parameterSchema"
116117
parameter-form-definition="parameterFormDefinition"

app/views/directives/_service-binding.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,13 @@ <h3>
5050
</div>
5151
<div class="service-binding-parameters" ng-if="!$ctrl.isOverview && $ctrl.bindParameterSchema.properties">
5252
<span class="component-label">Parameters</span>
53-
<a href="" class="hide-show-link" ng-click="$ctrl.toggleShowParameterValues()" role="button">
53+
<a ng-if="$ctrl.allowParametersReveal" href="" class="hide-show-link" ng-click="$ctrl.toggleShowParameterValues()" role="button">
5454
{{$ctrl.showParameterValues ? 'Hide Values' : 'Reveal Values'}}
5555
</a>
5656
<form name="ctrl.parametersForm">
5757
<catalog-parameters
5858
hide-values="!$ctrl.showParameterValues"
59+
opaque-keys="$ctrl.opaqueParameterKeys"
5960
model="$ctrl.parameterData"
6061
parameter-form-definition="$ctrl.bindParameterFormDefinition"
6162
parameter-schema="$ctrl.bindParameterSchema"

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"angular-utf8-base64": "0.0.5",
4848
"file-saver": "1.3.3",
4949
"origin-web-common": "0.0.68",
50-
"origin-web-catalog": "0.0.57"
50+
"origin-web-catalog": "0.0.58"
5151
},
5252
"devDependencies": {
5353
"angular-mocks": "1.5.11",

0 commit comments

Comments
 (0)