github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v2action/service_binding.go (about)

     1  package v2action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     7  )
     8  
     9  // ServiceBinding represents the link between a service instance and an
    10  // application.
    11  type ServiceBinding ccv2.ServiceBinding
    12  
    13  // BindServiceByApplicationAndServiceInstance binds the service instance to an application.
    14  func (actor Actor) BindServiceByApplicationAndServiceInstance(appGUID string, serviceInstanceGUID string) (Warnings, error) {
    15  	_, warnings, err := actor.CloudControllerClient.CreateServiceBinding(appGUID, serviceInstanceGUID, nil)
    16  
    17  	return Warnings(warnings), err
    18  }
    19  
    20  // BindServiceBySpace binds the service instance to an application for a given space.
    21  func (actor Actor) BindServiceBySpace(appName string, serviceInstanceName string, spaceGUID string, parameters map[string]interface{}) (Warnings, error) {
    22  	var allWarnings Warnings
    23  	app, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
    24  	allWarnings = append(allWarnings, warnings...)
    25  	if err != nil {
    26  		return allWarnings, err
    27  	}
    28  
    29  	serviceInstance, warnings, err := actor.GetServiceInstanceByNameAndSpace(serviceInstanceName, spaceGUID)
    30  	allWarnings = append(allWarnings, warnings...)
    31  	if err != nil {
    32  		return allWarnings, err
    33  	}
    34  
    35  	_, ccv2Warnings, err := actor.CloudControllerClient.CreateServiceBinding(app.GUID, serviceInstance.GUID, parameters)
    36  	allWarnings = append(allWarnings, ccv2Warnings...)
    37  
    38  	return allWarnings, err
    39  }
    40  
    41  // GetServiceBindingByApplicationAndServiceInstance returns a service binding
    42  // given an application GUID and and service instance GUID.
    43  func (actor Actor) GetServiceBindingByApplicationAndServiceInstance(appGUID string, serviceInstanceGUID string) (ServiceBinding, Warnings, error) {
    44  	serviceBindings, warnings, err := actor.CloudControllerClient.GetServiceBindings(
    45  		ccv2.Filter{
    46  			Type:     constant.AppGUIDFilter,
    47  			Operator: constant.EqualOperator,
    48  			Values:   []string{appGUID},
    49  		},
    50  		ccv2.Filter{
    51  			Type:     constant.ServiceInstanceGUIDFilter,
    52  			Operator: constant.EqualOperator,
    53  			Values:   []string{serviceInstanceGUID},
    54  		},
    55  	)
    56  
    57  	if err != nil {
    58  		return ServiceBinding{}, Warnings(warnings), err
    59  	}
    60  
    61  	if len(serviceBindings) == 0 {
    62  		return ServiceBinding{}, Warnings(warnings), actionerror.ServiceBindingNotFoundError{
    63  			AppGUID:             appGUID,
    64  			ServiceInstanceGUID: serviceInstanceGUID,
    65  		}
    66  	}
    67  
    68  	return ServiceBinding(serviceBindings[0]), Warnings(warnings), err
    69  }
    70  
    71  // UnbindServiceBySpace deletes the service binding between an application and
    72  // service instance for a given space.
    73  func (actor Actor) UnbindServiceBySpace(appName string, serviceInstanceName string, spaceGUID string) (Warnings, error) {
    74  	var allWarnings Warnings
    75  
    76  	app, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
    77  	allWarnings = append(allWarnings, warnings...)
    78  	if err != nil {
    79  		return allWarnings, err
    80  	}
    81  
    82  	serviceInstance, warnings, err := actor.GetServiceInstanceByNameAndSpace(serviceInstanceName, spaceGUID)
    83  	allWarnings = append(allWarnings, warnings...)
    84  	if err != nil {
    85  		return allWarnings, err
    86  	}
    87  
    88  	serviceBinding, warnings, err := actor.GetServiceBindingByApplicationAndServiceInstance(app.GUID, serviceInstance.GUID)
    89  	allWarnings = append(allWarnings, warnings...)
    90  	if err != nil {
    91  		return allWarnings, err
    92  	}
    93  
    94  	ccWarnings, err := actor.CloudControllerClient.DeleteServiceBinding(serviceBinding.GUID)
    95  	allWarnings = append(allWarnings, ccWarnings...)
    96  
    97  	return allWarnings, err
    98  }
    99  
   100  func (actor Actor) GetServiceBindingsByServiceInstance(serviceInstanceGUID string) ([]ServiceBinding, Warnings, error) {
   101  	serviceBindings, warnings, err := actor.CloudControllerClient.GetServiceInstanceServiceBindings(serviceInstanceGUID)
   102  	if err != nil {
   103  		return nil, Warnings(warnings), err
   104  	}
   105  
   106  	allServiceBindings := []ServiceBinding{}
   107  	for _, serviceBinding := range serviceBindings {
   108  		allServiceBindings = append(allServiceBindings, ServiceBinding(serviceBinding))
   109  	}
   110  
   111  	return allServiceBindings, Warnings(warnings), nil
   112  }
   113  
   114  func (actor Actor) GetServiceBindingsByUserProvidedServiceInstance(userProvidedServiceInstanceGUID string) ([]ServiceBinding, Warnings, error) {
   115  	serviceBindings, warnings, err := actor.CloudControllerClient.GetUserProvidedServiceInstanceServiceBindings(userProvidedServiceInstanceGUID)
   116  	if err != nil {
   117  		return nil, Warnings(warnings), err
   118  	}
   119  	allServiceBindings := []ServiceBinding{}
   120  	for _, serviceBinding := range serviceBindings {
   121  		allServiceBindings = append(allServiceBindings, ServiceBinding(serviceBinding))
   122  	}
   123  
   124  	return allServiceBindings, Warnings(warnings), nil
   125  }