Giter VIP home page Giter VIP logo

ecs-cf-service-broker's Introduction

ECS Open Service Broker

REPOSITORY HAS MOVED!!

NOTE: This repository is no longer maintained - all updates past v2.3.1 will be located here: https://github.com/EMCECS/ecs-cf-service-broker

Description

This service broker enables Kubernetes & Cloud Foundry applications to create, delete and modify Dell EMC ECS (Elastic Cloud Storage) and Dell Objectscale object storage buckets & namespaces; and bind multiple applications to the same resources.

Features

This service broker supports a number of Cloud Foundry and ECS features including:

  • Create and Delete Object Storage Buckets
  • Create and Delete Object Storage Namespaces
  • Bind one or more Cloud Foundry applications to a bucket or namespace, with unique credentials and permissions for each application
  • Support quota enforced plans for buckets to limit the amount of capacity
  • Support for encryption and retention of namespaces
  • Change plans of an existing bucket
  • Browse Cloud Foundry instance and binding metadata through an internal bucket
  • Specify an ECS namespace and replication group for provisioning
  • Provide a string prefix for bucket and user names
  • Support a self-signed SSL certificate for the ECS management API
  • Configure offered services & plans through a YAML based configuration
  • Support file system mounts of file access enabled buckets via NFS
  • Support for multiple PCF instances to share data through ECS buckets and namespaces

Build

To build, make sure you have a Java 11 runtime environment, and use Gradle.

# The ecs-simulator starts automatically when the test-suite is run
./gradlew test

# Then build the project
./gradlew assemble

Configuration

ECS Configuration

The service broker supports a number of configuration parameters that are available as environment variables or through Spring configuration. All parameters are prefixed with the broker-config. string. Default parameters point to the bundled ECS simulator. For more info, check the example config.

Parameter Default Value Required Description
managementEndpoint - true ECS management API URI (https://:)
replicationGroup - true Name (not ID) of replication group
namespace - true Default ECS Namespace name
baseUrl - false ECS Base URL name (DefaultBaseUrl is picked if value is not provided)
useSsl false false Whether to use HTTPS for object endpoint connections (when base url is provided)
objectEndpoint - false Override endpoint for the object endpoint
repositoryEndpoint objectEndpoint false Override endpoint for broker metadata storage
repositoryUser user false Username to authenticate to intenal bucket
username root false Username to authenticate to ECS management API
password ChangeMe false Password to authenticate to ECS management API
repositoryBucket repository false Internal bucket for metadata storage
prefix ecs-cf-broker- false Prefix to prepend to ECS buckets and users
brokerApiVersion * false Version of the CF broker API to advertise
certificate - false ECS SSL public key cert file
ignoreSslValidation - false Allows to ignore SSL validation errors

If running within IDE, you can set the environment variables within "Run Configuration".

Objectscale Configuration

When connecting to Objectscale, Service Broker requires different set of parameters:

Parameter Default Value Required Description
apiType objectscale true Storage API type (ECS or Objectscale)
username root true Objectscale management user name
password ChangeMe true Objectscale management user password
objectscaleId - true Objectscale ID
objectscaleGatewayEndpoint - true Objectscale Gateway endpoint url
objectstoreId - true Objectstore ID
objectstoreName - true Objectstore name
objectstoreManagementEndpoint - true Objectstore management endpoint url
objectstoreS3Endpoint - true Objectstore S3 endpoint url
accountId - true Account ID
accessKey - true Access key of a pre-created IAM user with S3 access
secretKey - true Secret key of a pre-created IAM user with S3 access
repositoryBucket repository false Internal bucket name for metadata storage
prefix ecs-cf-broker- false Prefix to prepend to ECS buckets and users
brokerApiVersion * false Version of the CF broker API to advertise
certificate - false ECS SSL public key cert file
ignoreSslValidation - false Allows to ignore SSL validation errors

The ECS Simulator

The ECS Simulator is helpful for ensuring that the application starts up, without actually having an ECS cluster accessible. You'll find the simulator in the test-suite. Just run this file as a Java program, and the broker will be able to initialize against the "mocked" API calls.

You can also start the simulator from the command-line:

./gradlew simulate

The simulator is also useful when running certain JUnit tests outside of the TestSuite provided. To run an individual test that references the ECS API, just start the simulator, and then execute a test.

Self-signed certificates

To load a self-signed certificate for an ECS system, just provide a PEM formatted certificate file named localhost.pem into the src/main/resources directory.

Deploying your broker

Follow the documentation to register the broker to Cloud Foundry.

Install using the PCF Tile

Download the ECS Service Broker tile from Tanzu Network, and and follow the installation instructions found there.

End-user Broker Usage

Cloud Foundry end-users can create and bind services to their applications using the cf CLI application.

cf create-service ecs-bucket unlimited my_bucket

This creates a bucket of the ecs-bucket service with the unlimited plan and the name: my-bucket. To bind an application to this bucket:

cf bind-service my-app my-bucket

The default will give my-app "full control" of the bucket. To give a reduced set of permissions, you can provide additional configuration parameters with the -c flag:

cf bind-service my-app my-bucket -c '{"permissions": ["read", "write"]}'

Valid permissions include:

  • read
  • read_acl
  • write
  • write_acl
  • execute
  • full_control
  • privileged_write
  • delete
  • none

Service plan can be changed using update-service command. Only a subset of service attributes are applied:

  • Buckets: quota and default retention
  • Namespaces: bucket quota, retention policies, ADO, compliance and domain group admins

More detailed instructions for using the broker in Cloud Foundry can be found in the Tanzu Network ECS broker documentation.

Broker Catalog and Plan Configuration

The service broker catalog can be configured through YAML based configuration. You can create the file manually, via PCF or another build tool. Just add a catalog section to the src/main/resources/application.yml file:

The following feature flags are supported by the bucket & namespace. All parameters are optional, and can be set at the service or plan level in the service-settings block. Parameters are observed with the following precedence: service-definition (in the catalog), plan and then in command-line parameters.

Resource Parameter Default Type Description
bucket namespace false String Namespace where bucket will be created
bucket replication-group false String Replication group for bucket
bucket encrypted false Boolean Enable encryption of bucket
bucket access-during-outage false Boolean Enable potentially stale data during outage
bucket ado-read-only false Boolean Only allow read access during outage (requires ADO to be enabled)
bucket file-accessible false Boolean Enable file-access (NFS, HDFS) for bucket
bucket head-type s3 String Specify object type (s3, swift) for bucket
bucket default-retention - Int Number of seconds to prevent object deletion/modification
bucket quota* - JSON Map Quota applied to bucket
bucket remote_connection*** - JSON Map Remote connection details for previously created bucket
bucket name - String String to add to bucket name after the broker prefix (prefix-name-id)
bucket tags**** - JSON List List of tags that are key-value pairs associated with a bucket
bucket search-metadata***** - JSON List List of search metadata that are used for bucket indexing
bucket binding base-url - String Base URL name for object URI
bucket binding permissions - JSON List List of permissions for user in bucket ACL
bucket binding path-style-access true Boolean Use path style access for S3 URL, the alternative is to use host style access
bucket binding name - String String to add to binding name after the broker prefix (prefix-name-id)
namespace replication-group false String Replication group of namespace
namespace domain-group-admins - JSON List List of domain admins to be added to namespace
namespace encrypted false Boolean Enable encryption of namespace
namespace compliance-enabled false Boolean Enable compliance adhearance of retention
namespace access-during-outage false Boolean Enable potentially stale data during outage
namespace default-bucket-quota -1 Integer Default quota applied to bucket (-1 for none)
namespace quota* - JSON Map Quota applied to namespace
namespace retention** - JSON Map Retention policies applied to namespace
namespace default-retention - Int Number of seconds to prevent object deletion/modification
namespace remote_connection*** - JSON Map Remote connection details for previously created namespace
namespace name - String String to add to namespace name after the broker prefix (prefix-name-id)
namespace binding base-url - String Base URL name for object URI
namespace binding use-ssl false Boolean Use SSL for object endpoint
namespace binding name - String String to add to binding name after the broker prefix (prefix-name-id)

NOTE: When working with Objectstore, Service Broker does not support Namespace services!

* Quotas are defined with the following format: {quota: {limit: <int>, warn: <int>}}

** Retention policies are defined with the following format: {retention: {<policy name>: <seconds retained>}}

*** Remote connection details are describe below in remote connections

**** Tags are defined with the following format: {tags:[{"key": <str>,"value": <str>}, ...]}. Details about bucket tagging could be found below in Bucket Tags section

***** List of search metadata is defined with following format: {"search_metadata": [{"type": <str>,"name": <str>,"datatype": <str>>}, ...]} Details about search metadata definition are described below in Search metadata section

For more info, check the example config.

Broker security

By default the broker is secured with a dynamically generated password ala Spring Security. In order to register with Cloud Foundry, a user would need to view the output logs, and grab the password with each restart.

To statically set a broker password, simple add the following to the src/main/resources/application.yml file:

...
security:
  user:
    password: <password>
...

Volume Services

Volume services allow bucket contents to be mounted into Cloud Foundry application containers as a file system. This enables applications to interact with bucket contents as though they are ordinary files.

Prerequisites

There are a few prerequisites you must set up in your Cloud Foundry deployment in order to take advantage of volume services.

  1. In your Cloud Foundry deployment, the property cc.volume_services_enabled must be set to true.

  2. The nfsv3driver job from nfs-volume-release must be running and colocated on your diego cells. See the README for details.

  3. The ecs-bucket service in your catalog must be configured to require volume mounts. The example application.yml provided in this repo is already set up with this property:

...
catalog:
  services:
    - name: ecs-file-bucket
      type: bucket
      requires:
      - volume_mount
...

File system enabled service instances

In order to use volume services once the prerequisites above are satisfied, your service instances must be created with file-accessible set to true. This can be set either in the service or service plan exposed from your service catalog, or manually by the user during service instance creation:

cf create-service ecs-bucket 5gb mybucket -c '{"file-accessible":true}'

Buckets created in this manner will have file system access enabled, and file shares exposed. When application bindings are created, new bucket users will be created to correspond to those bindings, and uid mappings will ensure that traffic coming from the application operates as the correct user.

Information provided in response of binding creation request includes s3 URL, secret credentials and user Unix ID.

The application mount point defaults to /var/vcap/data/{binding-id-guid} so that is where the file system will appear within the application container. You can find this path and corresponding uid from within your application programmatically by parsing it from the VCAP_SERVICES environment variable. If you prefer to have the volume mounted to a specific path in your application container, you can use the mount key from within your bind configuration:

cf bind-service myapp mybucket -c '{"mount":"/var/something"}'

Remote Connections to Service Instances

A common use case for object storage, in general, and ECS specifically, is to share data across data-centers, platforms, Cloud Foundry instances, or clouds using a shared object-storage bucket. The ECS Service Broker supports with with a specialized feature, called "remote connections". This features allows you to share services across Cloud Foundry, or other service-broker-enabled platforms securely, and without user-provided-services, which can be error-prone.

To share a bucket or namespaces between Cloud Foundry instances, use the following steps:

  1. Create the ECS service at the original site or CF instance:
pcf-1$ cf create-service ecs-bucket 5gb mybucket

After creating the services, you may bind it to local applications as described above.

  1. Create a "remote connection" service-key
pcf-1$ cf create-service-key mybucket pcf2Key -c '{"remote_connection": true}'
  1. List the remote connection service key details:
pcf-1$ cf service-key mybucket pcf2Key
Getting key pcf2Key for service instance mybucket as user...
{
  "accessKey": "...",
  "instanceId": "...",
  "secretKey": "..."
}

These service keys can be used by administrators to connect the service instance to any number of Cloud Foundry instances or other service broker enabled platforms, such as Pivotal Container Service.

  1. Connect to a separate Cloud Foundry instance, and create the remote instance of the service:
pcf-2$ cf create-service ecs-bucket 5gb mybucket -c '{"remote_connection": {"accessKey": "...", "instanceId": "...", "secretKey": "..."}}'

When using multiple service-brokers, ensure that the service and plan definitions (defined in the broker catalog) are the same between the deployed brokers. If the catalog definitions differ between the two, the broker will return an error to the user, and decline to remotely connect the service instance.

At this point, the service is created at the remote instance, and can be bound to apps.

Service Deletions with Remote Connections

When deleting a service instance through a Cloud Foundry command such as:

$ cf delete-service mybucket

The broker will only delete the actual service instance (bucket or namespace) once all remote connections have been removed. Prior to that, the service instance will be removed from the Cloud Foundry database, and the remote connection will be removed from the ECS broker metadata for that instance.

Changing Plans with Remote Connections

Changing/upgrading plans with remote connections is currently disabled, as it would leave one of the Cloud Foundry instances out of date.

Search Metadata

Search metadata is used for ECS Object Storage bucket indexing and allows to lookup objects without iterating through bucket contents.

Metadata fields number is limited to 30, and must be defined when bucket is created. Note: plan changes will disable metadata search if plans defines different metadata field sets!

Each metadata field definition consists of three fields: type, name and datatype.

...
search-metadata: 
- type: <type>
  name: <name>
  datatype: <datatype>
...

There are two types of search metadata provided in the ECS buckets: System and User.

System search metadata

ECS Documentation provides following system metadata:

Name (Alias) Data Type Description
ObjectName String Name of the object.
Owner String Identify the owner of the object.
Size Integer Size of the object.
CreateTime DateTime Time at which the object was created.
LastModified DateTime Time and date at which the object was last modified.

System search metadata provided in service-settings block should be tagged with System type, existing name and corresponding datatype.

User search metadata

User defined search metadata should be tagged with User type, existing datatype and name starting with prefix x-amz-meta-. Prefix will be added to field name if it is not already there.

Metadata Search Datatypes

When writing metadata to objects, client should provide data in format appropriate for each fields' datatype. ECS supports 4 types of datatype: String, Integer, DateTime and Decimal.

Datatype Description
String Search comparisons are done over plaintext.
Integer String should contain only digits, and is converted to integer in search comparisons.
Decimal Decimal value with "." character treates as decimap point.
Datetime Expected string format is yyyy-MM-ddTHH:mm:ssZ

Example

Example of service-settings block part describing Search Metadata is presented in the listing:

...
search-metadata:
- type: System
  name: Expiration
  datatype: DateTime
- type: System
  name: Size
  datatype: Integer
- type: User
  name: x-amz-meta-my-meta
  datatype: Decimal
...

Bucket Tags

When specified in service definition or in request parameters, tags are defined with the following format: {tags:[{"key": <str>,"value": <str>}, ...]}

Tag value could contain a special placeholder, which will be replaced by request context value. Supported placeholder values are listed below:

Placeholder Platform Property Comment
$CF_ORG_GUID Cloud Foundry organization_guid The GUID of the organization that a Service Instance is associated with
$CF_ORG_NAME Cloud Foundry organization_name The name of the organization that a Service Instance is associated with.
$CF_SPACE_GUID Cloud Foundry space_guid The GUID of the space that a Service Instance is associated with.
$CF_SPACE_NAME Cloud Foundry space_name The name of the space that a Service Instance is associated with.
$CF_INSTANCE_NAME Cloud Foundry, Kubernetes instance_name The name of the Service Instance.
$CTX_NAMESPACE Kubernetes namespace The name of the Kubernetes namespace in which the Service Instance will be visible.
$CTX_CLUSTER_ID Kubernetes clusterid The unique identifier for the Kubernetes cluster from which the request was sent.

For additional details, see Open Service Broker API documentation for request context object: https://github.com/openservicebrokerapi/servicebroker/blob/master/profile.md#context-object

Example

Tag Placeholders usage example:

{ "tags":
    [
        {"key":"org_guid","value":"$CF_ORG_GUID"},
        {"key":"org_name","value":"$CF_ORG_NAME"},
        {"key":"org_space","value":"$CF_SPACE_GUID"},
        {"key":"space_name","value":"$CF_SPACE_NAME"},
        {"key":"instance_name","value":"$CF_INSTANCE_NAME"}
    ]
}

Testing

Local test suite can be run with either a live ECS platform, or using the included simulator. Configuration variables can be found and/or changed via the EcsActionTest class.

You can then run the test-suite with gradle:

./gradlew test

TODOs

Up to date tasks are on our Github issues page.

ecs-cf-service-broker's People

Contributors

gaddas3 avatar kirillston avatar ksteinfeldt avatar lwoydziak avatar maddisondavid avatar mansur51-hub avatar misanthropicat avatar napand avatar rglv avatar rogalv avatar spiegela avatar svistunovaleksandr avatar twincitiesguy avatar vchrisb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ecs-cf-service-broker's Issues

Accept group/custom permissions on bucket creation/update

Group, custom and non-application-binding permissions that aren't tied directly to an binding user should be able to be provided in create/update calls. Support for this might look something like:

$ cf create-service ecs-bucket 5gb temp-bucket -c '{ acl: [{group: "AllUsers", permissions: ["Read"]}, {user: "hdfsUser", permissions: ["Read", "Write"]} ] }'

Since this applies to buckets, these permissions must be checked to ensure that they can't grant a user access to create/delete buckets from the namespace...

This could also be supported in the catalog configuration for a service. We could add something along the lines of:

catalog:
  services:
    - id: <Service ID UUID>
      name: ecs-bucket
      description: Elastic Cloud S3 Object Storage Bucket
      acl:
        - group: AllUsers
          permissions:
            - Read
        - user: hdfsUser
          permissions:
            - Read
            - Write

In the case of YAML catalog configuration, I think the expiration should be come locked by the service, meaning that it would override a setting attempted during the service-instance creation.

Need to get some more clarification on this aspect...

Add CI testing

It would be great to hook your testing package up to Travis so that you an introduce the beginnings of CI to your project. Great work.

Support Async Broker calls

With the number of API calls, the CF creation/deletion/bind/unbind commands can be a little slow. Not so bad that anything times out, but it would be nice to have them respond immediately if it doesn't make the end-user experience more complex.

Restrict bucket create/delete rights to binding users

Currently bucket bindings (ECS object users) give the user access to create/remove buckets, which don't fall under the same quota, or could have no quota at all.

When creating bucket bindings, the object-user should not have rights to create or delete buckets through the S3 API.

Check broker compatibility

Compatibility is confirmed against service broker API 2.8. Need to determine and document Cloud Foundry release compatibility with that, and check previous service broker API releases.

Support encryption of buckets

The ECS management API now supports a is_encryption_enabled tag in the bucket creation. Need to update the management-client, and the broker options to support this. Support for this might look something like:

$ cf create-service ecs-bucket 5gb temp-bucket -c "{ encrypt: true }"

This could also be supported in the catalog configuration for a service. We could add something along the lines of:

catalog:
  services:
    - id: <Service ID UUID>
      name: ecs-bucket
      description: Elastic Cloud S3 Object Storage Bucket
      service-settings:
        service-type: bucket
        encrypt: true

In the case of YAML catalog configuration, I think the expiration should be come locked by the service, meaning that it would override a setting attempted during the service-instance creation.

Need to get some more clarification on this aspect...

Add namespace service to catalog broker capabilities

ECS has the capability to create a new namespace where an application owner can create/delete his/her own buckets for fun & [company] profit. The ECS broker, rather than creating only buckets, can also support the creation of namespaces. This would be pretty cool.

The service for a namespace would be configured in the catalog, just like bucket services/plans are now, with many similar options. configuration for this might looks something like:

catalog:
  services:
    - id: f3cbab6a-5172-4ff1-a5c7-72990f0ce2ab
      name: ecs-namespace
      description: Elastic Cloud Namespace
      bindable: true
      planUpdatable: true
      tags:
        - namespace
        - object
      metadata:
        displayName: ecs-namespace
        imageUrl: http://www.emc.com/images/products/header-image-icon-ecs.png
        longDescription: EMC Elastic Cloud Storage (ECS) namespace for creating object storage buckets and CAS pools.
        providerDisplayName: EMC Corporation
        documentationUrl: https://community.emc.com/docs/DOC-45012
        supportUrl: http://www.emc.com/products-solutions/trial-software-download/ecs.htm
      plans:
        - id: 8e777d49-0a78-4cf4-810a-b5f5173b019e
          name: limited
          free: true
          description: Free Trial
          quota-limit: 20
          quota-warning: 18
          bucket-limit: 5
          expiration: {days: 30}
          metadata:
            costs:
              - amount:
                  usd: 0.0
                unit: MONTHLY
            bullets:
              - Shared object storage
              - 20 GB Storage
              - Ability to create up to 5 buckets

unable to push the app instance

2016-06-10T09:40:18.79-0700 [APP/0] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsServiceInstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.cloudfoundry.broker.service.EcsService com.emc.ecs.cloudfoundry.broker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
2016-06-10T09:40:18.79-0700 [APP/0] ERR ... 25 more
2016-06-10T09:40:18.79-0700 [APP/0] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.cloudfoundry.broker.service.EcsService com.emc.ecs.cloudfoundry.broker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
2016-06-10T09:40:18.79-0700 [APP/0] ERR ... 37 more
2016-06-10T09:40:18.79-0700 [APP/0] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
2016-06-10T09:40:18.79-0700 [APP/0] ERR ... 39 more
2016-06-10T09:40:18.79-0700 [APP/0] ERR Caused by: java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.appendPath(JerseyUriBuilder.java:732)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.appendPath(JerseyUriBuilder.java:727)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.path(JerseyUriBuilder.java:357)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.path(JerseyUriBuilder.java:72)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at javax.ws.rs.core.UriBuilder.fromPath(UriBuilder.java:148)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at com.emc.ecs.management.sdk.Connection.getUriBuilder(Connection.java:147)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at com.emc.ecs.management.sdk.BaseUrlAction.list(BaseUrlAction.java:22)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at com.emc.ecs.cloudfoundry.broker.service.EcsService.lookupObjectEndpoints(EcsService.java:198)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at com.emc.ecs.cloudfoundry.broker.service.EcsService.initialize(EcsService.java:70)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at java.lang.reflect.Method.invoke(Method.java:497)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:305)
2016-06-10T09:40:18.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
2016-06-10T09:40:18.79-0700 [APP/0] ERR ... 51 more

Support bucket expiration via plan or instance parameters

AWS S3 bucket lifecycle properties support object/bucket expiration. The broker should be able to support this as a instance parameter provided during the service instance creation/upgrade. Support for this might look something like:

$ cf create-service ecs-bucket 5gb temp-bucket -c "{ expiration: {days: 30} }"

This could also be supported in the catalog configuration for a service. We could add something along the lines of:

catalog:
  services:
    - id: <Service ID UUID>
      name: ecs-bucket
      description: Elastic Cloud S3 Object Storage Bucket
      service-settings:
        service-type: bucket
        expiration:
          days: 30

In the case of YAML catalog configuration, I think the expiration should be come locked by the service, meaning that it would override a setting attempted during the service-instance creation.

Need to get some more clarification on this aspect...

Improve error messages for ECSService init

When the EcsService fails to start, it's typically because user configuration settings are incorrect, or the ECS management API is unavailable from the "management-endpoint"; however, the error message is cryptic. We need to improve the user experience for initial startup, and provide more meaningful errors.

Unable to create bucket with quota

Reported by @NavleenKaur-24

$ cf create-service ecs-bucket 5gb testbucket
Creating service instance testbucket in org sds / space dev as [email protected]...
FAILED
Server error, status code: 502, error code: 10001, message: Service broker error: java.lang.NullPointerException

Problem only exhibits with quota carrying plans.

Add force delete option to bucket

Force-deleting a bucket that has objects within it is not supported by either the S3 or ECS management APIs. This isn't a limitation of ECS -- it's a limitation of the S3 API, and for some very good reasons.

That said, it would be really nice to have this functionality in the broker. Here are some of my thoughts on this:

1.) We should enable force deletes only when specifically configured in the broker-config to do so. This should not be the default configuration. We could configure it with something like:

broker:
  enable-force-delete: true

2.) We will need to delete the objects as an object user with access to the bucket. Up to this point, we've avoided having granting bucket-rights to the broker repository user. There's also no guarantee that a CF instance-binding user will have rights to modify a bucket, so do we create a temporary user, just to delete the bucket contents?

3.) Deleting the objects could take a while, we'll need to support #29 so that the command doesn't time out.

4.) The host running the async command to delete the data could fail. Cloud Foundry wouldn't auto-retry this job, so we should test CF to see what it does when a broker activity fails in the middle. Will the bucket be orphaned?

Also, on that subject, the concern is around CF users not deleting their buckets. The good news here is that, currently, the bucket can't be deleted from CF until it's empty, so it'll show up as an unbound service instance, and will create a nice little nag, for users that don't clean up after themselves...

after request api, still getting an error when trying to push the instance

E.jar!/]
2016-06-06T20:15:05.79-0700 [APP/0] ERR java.lang.reflect.InvocationTargetException
2016-06-06T20:15:05.79-0700 [APP/0] ERR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at java.lang.reflect.Method.invoke(Method.java:497)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at java.lang.Thread.run(Thread.java:745)
2016-06-06T20:15:05.79-0700 [APP/0] ERR Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceInstanceBindingController' defined in URL [jar:file
:/home/vcap/app/lib/spring-cloud-cloudfoundry-service-broker-1.0.0.BUILD-SNAPSHOT.jar!/org/springframework/cloud/servicebroker/controller/ServiceInstanceBindingController.class]: Unsatisfied dependency expressed
through constructor argument with index 1 of type [org.springframework.cloud.servicebroker.service.ServiceInstanceBindingService]: : Error creating bean with name 'ecsServiceInstanceBindingService': Injection o
f autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.cloudfoundry.broker.service.EcsService com.emc.ecs.clou
dfoundry.broker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method fa
iled; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService
InstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.cloudfoundry.broker
.service.EcsService com.emc.ecs.cloudfoundry.broker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsSe
rvice': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at com.emc.ecs.cloudfoundry.broker.config.Application.main(Application.java:30)
2016-06-06T20:15:05.79-0700 [APP/0] ERR ... 6 more
2016-06-06T20:15:05.79-0700 [APP/0] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsServiceInstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.cloudfoundry.broker.service.EcsService com.emc.ecs.cloudfoundry.broker.servi
ce.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
2016-06-06T20:15:05.79-0700 [APP/0] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)

Travis build failing

The travis tests are currently failing. I believe it's due to the Codacy integration, which needs to be updated. Here is the expected updates to the before_script and after_script for the travis config below, but I will need to word the the {code} team to generate updated Codacy encrypted env vars.

before_script:
  - sudo apt-get install jq
  - wget -O ~/codacy-coverage-reporter-assembly-latest.jar $(curl https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r .assets[0].browser_download_url)
after_script:
  - java -cp ~/codacy-coverage-reporter-assembly-latest.jar com.codacy.CodacyCoverageReporter -l Java -r build/reports/jacoco/test/jacocoTestReport.xml

Add support for multi-cloud foundry clouds

OK! Some brainstorming with Pivotal folks has definitely paid off this week!

I have a decent solution for supporting multiple Cloud Foundry clouds that is far superior to previous work arounds.

Basically, we'll support a new user-provided parameter when creating the bucket/namespace of the existing bucket in the cloud, and create a new service-instance to support that. It's totally going to work. I can feel it.

Question on ECS SB

Hi,

Quick questions to validate my POC:

  1. Which version of ECS is supported by this Service Broker? Is this service broker works for both public and on-premise version of ECS?
  2. Basic Authentication is still supported? I could see in EMC API documentation it says Authorization SigV2 for encryption?
  3. Regarding Ports:
    Public ECS solution supports only 443, 9020 ad 9021 ports is for On-premise ECS Solution?

I tried running this service broker on CF, but resulting with 400 error during Login->jerseyClient.target(uriBuilder).request().get(). I am suspecting the support of https://baseurl:9021/login

Your inputs are very much appreciated.

Thanks
MR

Set the NS, RG and base URL in the service definition

Right now, there are settings for namespace, replication group & base urls that are global for the broker. If we add these as configuration parameters in the service definition, we can allow the configuration of multiple namespace/replication-group/base-url options as separate service plans.

BASE URL should be used instead of Object Endpoint

The current process requires an object-endpoint entry, which can be overridden by the base-url. No intelligent default is detected. I think the following ordering makes betters sense:

  1. If a object-endpoint config is provided, this should override all
  2. If a base-url is provided, then that is selected, and the URL in it is used as the object-endpoint
  3. If no configuration is provided, try to detect a default base URL.
  4. If no default is found, pick the first base URL in the list.

As an aside, this will also likely make the binding steps faster, since it'll save an API call looking up the base URL.

Add retention period support to catalog and/or service instance parameters

Default retention of objects within a bucket can be updated on the bucket at service-instance creation/update. Support for this might look like:

$ cf create-service ecs-bucket 5gb temp-bucket -c "{ retention: {days: 30} }"

This could also be supported in the catalog configuration for a service. We could add something along the lines of:

catalog:
  services:
    - id: <Service ID UUID>
      name: ecs-bucket
      description: Elastic Cloud S3 Object Storage Bucket
      service-settings:
        service-type: bucket
        retention:
          days: 30

In the case of YAML catalog configuration, I think the expiration should be come locked by the service, meaning that it would override a setting attempted during the service-instance creation.

Need to get some more clarification on this aspect...

Service broker app crashing

I pushed the service broker and added the environment variables, but the app keeps crashing with the following error. Wondering if I am missing any settings. Appreciate any help.

Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR java.lang.reflect.InvocationTargetException��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at java.lang.reflect.Method.invoke(Method.java:497)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at java.lang.Thread.run(Thread.java:745)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceInstanceBindingController' defined in URL [jar:file:/home/vcap/app/lib/spring-cloud-cloudfoundry-service-broker-1.0.0.BUILD-SNAPSHOT.jar!/org/springframework/cloud/servicebroker/controller/ServiceInstanceBindingController.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [org.springframework.cloud.servicebroker.service.ServiceInstanceBindingService]: : Error creating bean with name 'ecsServiceInstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.serviceBroker.EcsService com.emc.ecs.serviceBroker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsServiceInstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.serviceBroker.EcsService com.emc.ecs.serviceBroker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at com.emc.ecs.serviceBroker.config.Application.main(Application.java:34)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR ... 6 more��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsServiceInstanceBindingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.serviceBroker.EcsService com.emc.ecs.serviceBroker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR ... 25 more��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.emc.ecs.serviceBroker.EcsService com.emc.ecs.serviceBroker.service.EcsServiceInstanceBindingService.ecs; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR ... 37 more��
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ecsService': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: "segments" parameter is null.���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)���
Fri Apr 22 2016 12:43:16 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR ... 39 more��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR Caused by: java.lang.IllegalArgumentException: "segments" parameter is null.��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.appendPath(JerseyUriBuilder.java:732)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.appendPath(JerseyUriBuilder.java:727)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.path(JerseyUriBuilder.java:357)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.glassfish.jersey.uri.internal.JerseyUriBuilder.path(JerseyUriBuilder.java:72)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at javax.ws.rs.core.UriBuilder.fromPath(UriBuilder.java:112)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at com.emc.ecs.managementClient.Connection.getUriBuilder(Connection.java:144)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at com.emc.ecs.managementClient.BaseUrlAction.list(BaseUrlAction.java:17)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at com.emc.ecs.serviceBroker.EcsService.lookupObjectEndpoints(EcsService.java:64)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at com.emc.ecs.serviceBroker.EcsService.initialize(EcsService.java:54)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at java.lang.reflect.Method.invoke(Method.java:497)��
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:305)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)���
Fri Apr 22 2016 12:43:17 GMT-0500 (CDT) [APP] ERR ... 51 more��

Broker Parameters

From where can I get the Broker parameters , can I push the jar created as a CF App?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.