Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 64dc9bb

Browse files
authored
Merge pull request cloudfoundry#1984 from cloudfoundry/fix-service-key-k8s-175562836
make credential_client_id optional when creating service keys [#175562836](https://www.pivotaltracker.com/story/show/175562836)
2 parents 7a9ed4e + 41502da commit 64dc9bb

3 files changed

Lines changed: 62 additions & 12 deletions

File tree

lib/cloud_controller/config_schemas/api_schema.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,10 @@ class ApiSchema < VCAP::Config
361361
registry_tag_base: String,
362362
}
363363
},
364+
optional(:cc_service_key_client_name) => String,
365+
optional(:cc_service_key_client_secret) => String,
364366

365367
**VCAP::Config::Dsl.omit_on_k8s(
366-
cc_service_key_client_name: String,
367-
cc_service_key_client_secret: String,
368-
369368
diego: {
370369
bbs: {
371370
url: String,

lib/services/service_brokers/v2/client.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,11 @@ def create_service_key(key, arbitrary_parameters: {})
7171
body = {
7272
service_id: key.service.broker_provided_id,
7373
plan_id: key.service_plan.broker_provided_id,
74-
bind_resource: { credential_client_id: @config.get(:cc_service_key_client_name) },
74+
bind_resource: {},
7575
context: context_hash(key.service_instance),
7676
}
7777

78+
body[:bind_resource][:credential_client_id] = @config.get(:cc_service_key_client_name) if @config.get(:cc_service_key_client_name).present?
7879
body[:parameters] = arbitrary_parameters if arbitrary_parameters.present?
7980

8081
begin
@@ -95,12 +96,11 @@ def create_service_key(key, arbitrary_parameters: {})
9596

9697
def bind(binding, arbitrary_parameters: {}, accepts_incomplete: false)
9798
path = service_binding_resource_path(binding.guid, binding.service_instance.guid, accepts_incomplete: accepts_incomplete)
98-
key_required_parameters = { credential_client_id: @config.get(:cc_service_key_client_name) } if binding.is_a?(VCAP::CloudController::ServiceKey)
9999
body = {
100100
service_id: binding.service.broker_provided_id,
101101
plan_id: binding.service_plan.broker_provided_id,
102102
app_guid: binding.try(:app_guid),
103-
bind_resource: binding.required_parameters || key_required_parameters,
103+
bind_resource: binding_required_parameters(binding),
104104
context: context_hash(binding.service_instance)
105105
}
106106
body = body.reject { |_, v| v.nil? }
@@ -319,6 +319,14 @@ def fetch_service_binding(service_binding)
319319

320320
private
321321

322+
def binding_required_parameters(binding)
323+
if binding.is_a?(VCAP::CloudController::ServiceKey) && @config.get(:cc_service_key_client_name).present?
324+
service_key_parameters = { credential_client_id: @config.get(:cc_service_key_client_name) }
325+
end
326+
327+
binding.required_parameters || service_key_parameters || {}
328+
end
329+
322330
def context_hash_with_instance_name(service_instance, name: service_instance.name)
323331
context_hash(service_instance).merge(instance_name: name)
324332
end

spec/unit/lib/services/service_brokers/v2/client_spec.rb

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,32 @@ module VCAP::Services::ServiceBrokers::V2
976976
)
977977
end
978978

979+
context 'when cc_service_key_client is configured' do
980+
it 'includes the optional credential_client_id parameter' do
981+
client.create_service_key(key)
982+
983+
expect(http_client).to have_received(:put).
984+
with(anything,
985+
hash_including({ bind_resource: { credential_client_id: cc_service_key_client_name } })
986+
)
987+
end
988+
end
989+
990+
context 'when cc_service_key_client is NOT present' do
991+
before do
992+
TestConfig.override(cc_service_key_client_name: nil)
993+
end
994+
995+
it 'does NOT include the optional credential_client_id parameter' do
996+
client.create_service_key(key)
997+
998+
expect(http_client).to have_received(:put).
999+
with(anything,
1000+
hash_excluding({ bind_resource: { credential_client_id: anything } })
1001+
)
1002+
end
1003+
end
1004+
9791005
it 'sets the credentials on the key' do
9801006
attributes = client.create_service_key(key)
9811007
key.set(attributes)
@@ -1224,13 +1250,30 @@ module VCAP::Services::ServiceBrokers::V2
12241250
context 'when the binding is of type key' do
12251251
let(:binding) { VCAP::CloudController::ServiceKey.make }
12261252

1227-
it 'sends the right bind_resource' do
1228-
client.bind(binding)
1253+
context 'when cc_service_key_client is configured' do
1254+
it 'includes the optional credential_client_id parameter' do
1255+
client.bind(binding)
12291256

1230-
expect(http_client).to have_received(:put).
1231-
with(anything,
1232-
hash_including({ bind_resource: { credential_client_id: 'cc_service_key_client' } })
1233-
)
1257+
expect(http_client).to have_received(:put).
1258+
with(anything,
1259+
hash_including({ bind_resource: { credential_client_id: 'cc_service_key_client' } })
1260+
)
1261+
end
1262+
end
1263+
1264+
context 'when cc_service_key_client is NOT present' do
1265+
before do
1266+
TestConfig.override(cc_service_key_client_name: nil)
1267+
end
1268+
1269+
it 'does NOT include the optional credential_client_id parameter' do
1270+
client.bind(binding)
1271+
1272+
expect(http_client).to have_received(:put).
1273+
with(anything,
1274+
hash_excluding({ bind_resource: { credential_client_id: anything } })
1275+
)
1276+
end
12341277
end
12351278

12361279
it 'does not send the app_guid in the request' do

0 commit comments

Comments
 (0)