diff --git a/lib/cloud_controller/config_schemas/base/api_schema.rb b/lib/cloud_controller/config_schemas/base/api_schema.rb index 4ab4e7943f..defb2f1b2f 100644 --- a/lib/cloud_controller/config_schemas/base/api_schema.rb +++ b/lib/cloud_controller/config_schemas/base/api_schema.rb @@ -365,7 +365,7 @@ class ApiSchema < VCAP::Config internal_route_vip_range: String, - default_app_lifecycle: String, + default_app_lifecycle: enum('buildpack', 'cnb'), custom_metric_tag_prefix_list: Array, optional(:cc_service_key_client_name) => String, diff --git a/lib/cloud_controller/config_schemas/base/worker_schema.rb b/lib/cloud_controller/config_schemas/base/worker_schema.rb index 224448bbfd..5c79abbb22 100644 --- a/lib/cloud_controller/config_schemas/base/worker_schema.rb +++ b/lib/cloud_controller/config_schemas/base/worker_schema.rb @@ -182,7 +182,8 @@ class WorkerSchema < VCAP::Config max_labels_per_resource: Integer, max_annotations_per_resource: Integer, internal_route_vip_range: String, - custom_metric_tag_prefix_list: Array + custom_metric_tag_prefix_list: Array, + default_app_lifecycle: enum('buildpack', 'cnb') } end # rubocop:enable Metrics/BlockLength diff --git a/spec/request/buildpacks_spec.rb b/spec/request/buildpacks_spec.rb index 09031579ca..37ec47c7d9 100644 --- a/spec/request/buildpacks_spec.rb +++ b/spec/request/buildpacks_spec.rb @@ -28,6 +28,7 @@ order_by: 'updated_at', names: 'foo', stacks: 'cf', + lifecycle: 'buildpack', label_selector: 'foo,bar', guids: 'foo,bar', created_ats: "#{Time.now.utc.iso8601},#{Time.now.utc.iso8601}", @@ -95,6 +96,7 @@ let!(:buildpack1) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 1) } let!(:buildpack2) { VCAP::CloudController::Buildpack.make(stack: stack2.name, position: 3) } let!(:buildpack3) { VCAP::CloudController::Buildpack.make(stack: stack3.name, position: 2) } + let!(:buildpack4) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 1, lifecycle: 'cnb') } it 'returns a paginated list of buildpacks, sorted by position' do get '/v3/buildpacks?page=1&per_page=2', nil, headers @@ -213,6 +215,52 @@ ) end + it 'returns a list of buildpacks filtered by lifecycle' do + get '/v3/buildpacks?lifecycle=cnb', nil, headers + + expect(parsed_response).to be_a_response_like( + { + 'pagination' => { + 'total_results' => 1, + 'total_pages' => 1, + 'first' => { + 'href' => "#{link_prefix}/v3/buildpacks?lifecycle=cnb&page=1&per_page=50" + }, + 'last' => { + 'href' => "#{link_prefix}/v3/buildpacks?lifecycle=cnb&page=1&per_page=50" + }, + 'next' => nil, + 'previous' => nil + }, + 'resources' => [ + { + 'guid' => buildpack4.guid, + 'lifecycle' => 'cnb', + 'created_at' => iso8601, + 'updated_at' => iso8601, + 'name' => buildpack4.name, + 'state' => buildpack4.state, + 'filename' => buildpack4.filename, + 'stack' => buildpack4.stack, + 'position' => 1, + 'enabled' => true, + 'locked' => false, + 'metadata' => { 'labels' => {}, 'annotations' => {} }, + 'links' => { + 'self' => { + 'href' => "#{link_prefix}/v3/buildpacks/#{buildpack4.guid}" + }, + 'upload' => { + 'href' => "#{link_prefix}/v3/buildpacks/#{buildpack4.guid}/upload", + 'method' => 'POST' + } + } + } + ] + } + ) + end + it 'orders by position' do get "/v3/buildpacks?names=#{buildpack1.name},#{buildpack3.name}&order_by=-position", nil, headers diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb index e795f9033a..31b809e0c1 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb @@ -37,6 +37,16 @@ module VCAP::CloudController expect(AppLifecycleProvider.provide_for_create(message)).to be_a(AppBuildpackLifecycle) end end + + context 'default_app_lifecycle is set to cnb' do + before do + TestConfig.override(default_app_lifecycle: 'cnb') + end + + it 'returns a AppCNBLifecycle' do + expect(AppLifecycleProvider.provide_for_create(message)).to be_a(AppCNBLifecycle) + end + end end end