1
1
/*
2
- Copyright 2019 The Kubernetes Authors.
2
+ Copyright 2020 The Kubernetes Authors.
3
3
4
4
Licensed under the Apache License, Version 2.0 (the "License");
5
5
you may not use this file except in compliance with the License.
@@ -284,7 +284,7 @@ func (c *Client) ListServices() ([]osb.Service, error) {
284
284
285
285
// Provision a new service instance. Returns the async operation key (if
286
286
// acceptsIncomplete is set).
287
- func (c * Client ) Provision (instanceID , serviceID , planID , namespace string , acceptsIncomplete bool , provisionParams map [ string ] interface {} ) (string , error ) {
287
+ func (c * Client ) Provision (instanceID , serviceID , planID , namespace string , acceptsIncomplete bool , provisionParams * ProvisionParams ) (string , error ) {
288
288
klog .V (3 ).Infof ("minibroker: provisioning intance %q, service %q, namespace %q, params %v" , instanceID , serviceID , namespace , provisionParams )
289
289
ctx := context .TODO ()
290
290
@@ -369,15 +369,15 @@ func (c *Client) Provision(instanceID, serviceID, planID, namespace string, acce
369
369
}
370
370
371
371
// provisionSynchronously will provision the service instance synchronously.
372
- func (c * Client ) provisionSynchronously (instanceID , namespace , serviceID , planID , chartName , chartVersion string , provisionParams map [ string ] interface {} ) error {
372
+ func (c * Client ) provisionSynchronously (instanceID , namespace , serviceID , planID , chartName , chartVersion string , provisionParams * ProvisionParams ) error {
373
373
klog .V (3 ).Infof ("minibroker: provisioning %s/%s using helm chart %s@%s" , serviceID , planID , chartName , chartVersion )
374
374
375
375
chartDef , err := c .helm .GetChart (chartName , chartVersion )
376
376
if err != nil {
377
377
return err
378
378
}
379
379
380
- release , err := c .helm .ChartClient ().Install (chartDef , namespace , provisionParams )
380
+ release , err := c .helm .ChartClient ().Install (chartDef , namespace , provisionParams . Object )
381
381
if err != nil {
382
382
return err
383
383
}
@@ -394,7 +394,7 @@ func (c *Client) provisionSynchronously(instanceID, namespace, serviceID, planID
394
394
return err
395
395
}
396
396
for _ , service := range services .Items {
397
- err := c .labelService (service , instanceID , provisionParams )
397
+ err := c .labelService (service , instanceID )
398
398
if err != nil {
399
399
return err
400
400
}
@@ -424,7 +424,7 @@ func (c *Client) provisionSynchronously(instanceID, namespace, serviceID, planID
424
424
return nil
425
425
}
426
426
427
- func (c * Client ) labelService (service corev1.Service , instanceID string , params map [ string ] interface {} ) error {
427
+ func (c * Client ) labelService (service corev1.Service , instanceID string ) error {
428
428
ctx := context .TODO ()
429
429
430
430
labeledService := service .DeepCopy ()
@@ -484,7 +484,7 @@ func (c *Client) labelSecret(secret corev1.Secret, instanceID string) error {
484
484
485
485
// Bind the given service instance (of the given service) asynchronously; the
486
486
// binding operation key is returned.
487
- func (c * Client ) Bind (instanceID , serviceID , bindingID string , acceptsIncomplete bool , bindParams map [ string ] interface {} ) (string , error ) {
487
+ func (c * Client ) Bind (instanceID , serviceID , bindingID string , acceptsIncomplete bool , bindParams * BindParams ) (string , error ) {
488
488
klog .V (3 ).Infof ("minibroker: binding instance %q, service %q, binding %q, binding params %v" , instanceID , serviceID , bindingID , bindParams )
489
489
config , err := c .getConfigMap (instanceID )
490
490
if err != nil {
@@ -501,7 +501,7 @@ func (c *Client) Bind(instanceID, serviceID, bindingID string, acceptsIncomplete
501
501
rawProvisionParams := config .Data [ProvisionParamsKey ]
502
502
operationName := generateOperationName (OperationPrefixBind )
503
503
504
- var provisionParams map [ string ] interface {}
504
+ var provisionParams * ProvisionParams
505
505
err = json .Unmarshal ([]byte (rawProvisionParams ), & provisionParams )
506
506
if err != nil {
507
507
return "" , errors .Wrapf (err , "could not unmarshall provision parameters for instance %q" , instanceID )
@@ -510,14 +510,28 @@ func (c *Client) Bind(instanceID, serviceID, bindingID string, acceptsIncomplete
510
510
if acceptsIncomplete {
511
511
klog .V (3 ).Infof ("minibroker: initializing asynchronous binding %q" , bindingID )
512
512
go func () {
513
- _ = c .bindSynchronously (instanceID , serviceID , bindingID , releaseNamespace , bindParams , provisionParams )
513
+ _ = c .bindSynchronously (
514
+ instanceID ,
515
+ serviceID ,
516
+ bindingID ,
517
+ releaseNamespace ,
518
+ bindParams ,
519
+ provisionParams ,
520
+ )
514
521
klog .V (3 ).Infof ("minibroker: asynchronously bound instance %q, service %q, binding %q" , instanceID , serviceID , bindingID )
515
522
}()
516
523
return operationName , nil
517
524
}
518
525
519
526
klog .V (3 ).Infof ("minibroker: initializing synchronous binding %q" , bindingID )
520
- if err = c .bindSynchronously (instanceID , serviceID , bindingID , releaseNamespace , bindParams , provisionParams ); err != nil {
527
+ if err := c .bindSynchronously (
528
+ instanceID ,
529
+ serviceID ,
530
+ bindingID ,
531
+ releaseNamespace ,
532
+ bindParams ,
533
+ provisionParams ,
534
+ ); err != nil {
521
535
return "" , err
522
536
}
523
537
@@ -529,20 +543,18 @@ func (c *Client) Bind(instanceID, serviceID, bindingID string, acceptsIncomplete
529
543
// bindSynchronously creates a new binding for the given service instance. All
530
544
// results are only reported via the service instance configmap (under the
531
545
// appropriate key for the binding) for lookup by LastBindingOperationState().
532
- func (c * Client ) bindSynchronously (instanceID , serviceID , bindingID , releaseNamespace string , bindParams , provisionParams map [string ]interface {}) error {
546
+ func (c * Client ) bindSynchronously (
547
+ instanceID ,
548
+ serviceID ,
549
+ bindingID ,
550
+ releaseNamespace string ,
551
+ bindParams * BindParams ,
552
+ provisionParams * ProvisionParams ,
553
+ ) error {
533
554
ctx := context .TODO ()
534
555
535
556
// Wrap most of the code in an inner function to simplify error handling
536
557
err := func () error {
537
- // Smoosh all the params together
538
- params := make (map [string ]interface {}, len (bindParams )+ len (provisionParams ))
539
- for k , v := range provisionParams {
540
- params [k ] = v
541
- }
542
- for k , v := range bindParams {
543
- params [k ] = v
544
- }
545
-
546
558
filterByInstance := metav1.ListOptions {
547
559
LabelSelector : labels .SelectorFromSet (map [string ]string {
548
560
InstanceLabel : instanceID ,
@@ -569,7 +581,7 @@ func (c *Client) bindSynchronously(instanceID, serviceID, bindingID, releaseName
569
581
return osb.HTTPStatusCodeError {StatusCode : http .StatusNotFound }
570
582
}
571
583
572
- data := make (map [ string ] interface {} )
584
+ data := make (Object )
573
585
for _ , secret := range secrets .Items {
574
586
for key , value := range secret .Data {
575
587
data [key ] = string (value )
@@ -579,19 +591,24 @@ func (c *Client) bindSynchronously(instanceID, serviceID, bindingID, releaseName
579
591
// Apply additional provisioning logic for Service Catalog Enabled services
580
592
provider , ok := c .providers [serviceID ]
581
593
if ok {
582
- creds , err := provider .Bind (services .Items , params , data )
594
+ creds , err := provider .Bind (
595
+ services .Items ,
596
+ bindParams ,
597
+ provisionParams ,
598
+ data ,
599
+ )
583
600
if err != nil {
584
601
return errors .Wrapf (err , "unable to bind instance %s" , instanceID )
585
602
}
586
- for k , v := range creds . ToMap () {
603
+ for k , v := range creds {
587
604
data [k ] = v
588
605
}
589
606
}
590
607
591
608
// Record the result for later fetching
592
609
bindingResponse := osb.GetBindingResponse {
593
610
Credentials : data ,
594
- Parameters : bindParams ,
611
+ Parameters : bindParams . Object ,
595
612
}
596
613
bindingResponseJSON , err := json .Marshal (bindingResponse )
597
614
if err != nil {
0 commit comments