diff --git a/app/actions/app_delete.rb b/app/actions/app_delete.rb index 180a5fd187e..567e860a773 100644 --- a/app/actions/app_delete.rb +++ b/app/actions/app_delete.rb @@ -60,7 +60,7 @@ def delete(apps, record_event: true) app.guid, VCAP::CloudController::Config.config.kpack_builder_namespace, ) - k8s_api_client.delete_custom_builder( + k8s_api_client.delete_builder( "app-#{app.guid}", VCAP::CloudController::Config.config.kpack_builder_namespace, ) diff --git a/app/fetchers/kpack_buildpack_list_fetcher.rb b/app/fetchers/kpack_buildpack_list_fetcher.rb index 91afcfb85bf..476beaad6c4 100644 --- a/app/fetchers/kpack_buildpack_list_fetcher.rb +++ b/app/fetchers/kpack_buildpack_list_fetcher.rb @@ -7,7 +7,7 @@ module VCAP::CloudController class KpackBuildpackListFetcher def fetch_all(message=EmptyBuildpackListMessage) staging_namespace = VCAP::CloudController::Config.config.kpack_builder_namespace - default_builder = k8s_api_client.get_custom_builder('cf-default-builder', staging_namespace) + default_builder = k8s_api_client.get_builder('cf-default-builder', staging_namespace) version_map = default_builder.status.builderMetadata.each.with_object({}) do |metadata, h| h[metadata.id] = metadata.version diff --git a/errors/v2.yml b/errors/v2.yml index 0dc20838fb3..4b3373e249a 100644 --- a/errors/v2.yml +++ b/errors/v2.yml @@ -1310,6 +1310,6 @@ message: "Failed to %s Image resource for staging: '%s'" 400003: - name: KpackCustomBuilderError + name: KpackBuilderError http_code: 422 - message: "Failed to %s CustomBuilder resource: '%s'" + message: "Failed to %s Builder resource: '%s'" diff --git a/lib/cloud_controller/dependency_locator.rb b/lib/cloud_controller/dependency_locator.rb index 4c7d0a63a6e..47071c6decf 100644 --- a/lib/cloud_controller/dependency_locator.rb +++ b/lib/cloud_controller/dependency_locator.rb @@ -374,14 +374,14 @@ def statsd_client def k8s_api_client config = VCAP::CloudController::Config.config build_kube_client = Kubernetes::KubeClientBuilder.build( - api_group_url: "#{config.kubernetes_host_url}/apis/build.pivotal.io", + api_group_url: "#{config.kubernetes_host_url}/apis/kpack.io", version: 'v1alpha1', service_account_token: config.kubernetes_service_account_token, ca_crt: config.kubernetes_ca_cert, ) kpack_kube_client = Kubernetes::KubeClientBuilder.build( - api_group_url: "#{config.kubernetes_host_url}/apis/experimental.kpack.pivotal.io", + api_group_url: "#{config.kubernetes_host_url}/apis/kpack.io", version: 'v1alpha1', service_account_token: config.kubernetes_service_account_token, ca_crt: config.kubernetes_ca_cert, diff --git a/lib/cloud_controller/kpack/stager.rb b/lib/cloud_controller/kpack/stager.rb index 4082d08224b..5ad62ebdf42 100644 --- a/lib/cloud_controller/kpack/stager.rb +++ b/lib/cloud_controller/kpack/stager.rb @@ -4,7 +4,7 @@ module Kpack class Stager CF_DEFAULT_BUILDER_REFERENCE = { name: 'cf-default-builder', - kind: 'CustomBuilder' + kind: 'Builder' }.freeze APP_GUID_LABEL_KEY = 'cloudfoundry.org/app_guid'.freeze BUILD_GUID_LABEL_KEY = 'cloudfoundry.org/build_guid'.freeze @@ -111,33 +111,33 @@ def get_environment_variables(staging_details) def find_or_create_builder_reference(staging_details) return CF_DEFAULT_BUILDER_REFERENCE unless staging_details.lifecycle.buildpack_infos.present? - custom_builder_name = "app-#{staging_details.package.app.guid}" - create_or_update_custom_builder(custom_builder_name, staging_details) + builder_name = "app-#{staging_details.package.app.guid}" + create_or_update_builder(builder_name, staging_details) { - name: custom_builder_name, - kind: 'CustomBuilder' + name: builder_name, + kind: 'Builder' } end - def create_or_update_custom_builder(name, staging_details) - desired_custom_builder = generate_custom_builder_from_default(name, staging_details) + def create_or_update_builder(name, staging_details) + desired_builder = generate_builder_from_default(name, staging_details) - unless client.get_custom_builder(name, builder_namespace).present? - return client.create_custom_builder(desired_custom_builder) + unless client.get_builder(name, builder_namespace).present? + return client.create_builder(desired_builder) end - reapply_client.apply_custom_builder_update(name, builder_namespace) do |existing_custom_builder| - desired_custom_builder.metadata.resourceVersion = existing_custom_builder.metadata.resourceVersion - desired_custom_builder.apiVersion = existing_custom_builder.apiVersion - desired_custom_builder + reapply_client.apply_builder_update(name, builder_namespace) do |existing_builder| + desired_builder.metadata.resourceVersion = existing_builder.metadata.resourceVersion + desired_builder.apiVersion = existing_builder.apiVersion + desired_builder end end - def generate_custom_builder_from_default(name, staging_details) - default_builder = client.get_custom_builder(CF_DEFAULT_BUILDER_REFERENCE[:name], builder_namespace) + def generate_builder_from_default(name, staging_details) + default_builder = client.get_builder(CF_DEFAULT_BUILDER_REFERENCE[:name], builder_namespace) Kubeclient::Resource.new({ - kind: 'CustomBuilder', + kind: 'Builder', metadata: { name: name, namespace: builder_namespace, @@ -151,7 +151,7 @@ def generate_custom_builder_from_default(name, staging_details) serviceAccount: default_builder.spec.serviceAccount, stack: default_builder.spec.stack, store: default_builder.spec.store, - tag: "#{registry_tag_base}/#{staging_details.package.app.guid}-custom-builder", + tag: "#{registry_tag_base}/#{staging_details.package.app.guid}-builder", order: [ group: staging_details.lifecycle.buildpack_infos.map { |buildpack| { id: buildpack } } ] diff --git a/lib/kubernetes/api_client.rb b/lib/kubernetes/api_client.rb index 7f9640c380f..a8825e617b5 100644 --- a/lib/kubernetes/api_client.rb +++ b/lib/kubernetes/api_client.rb @@ -89,45 +89,45 @@ def delete_route(name, namespace) raise error end - def update_custom_builder(resource_config) - @kpack_kube_client.update_custom_builder(resource_config) + def update_builder(resource_config) + @kpack_kube_client.update_builder(resource_config) rescue Kubeclient::HttpError => e - logger.error('update_custom_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) + logger.error('update_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) raise ConflictError.new("Conflict on update of #{resource_name(resource_config)}") if e.error_code == 409 - error = CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'update', e.message) + error = CloudController::Errors::ApiError.new_from_details('KpackBuilderError', 'update', e.message) error.set_backtrace(e.backtrace) raise error end - def create_custom_builder(resource_config) - @kpack_kube_client.create_custom_builder(resource_config) + def create_builder(resource_config) + @kpack_kube_client.create_builder(resource_config) rescue Kubeclient::HttpError => e - logger.error('create_custom_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) - error = CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'create', e.message) + logger.error('create_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) + error = CloudController::Errors::ApiError.new_from_details('KpackBuilderError', 'create', e.message) error.set_backtrace(e.backtrace) raise error end - def delete_custom_builder(name, namespace) - @kpack_kube_client.delete_custom_builder(name, namespace) + def delete_builder(name, namespace) + @kpack_kube_client.delete_builder(name, namespace) rescue Kubeclient::ResourceNotFoundError nil rescue Kubeclient::HttpError => e - logger.error('delete_custom_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) - error = CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'delete', e.message) + logger.error('delete_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) + error = CloudController::Errors::ApiError.new_from_details('KpackBuilderError', 'delete', e.message) error.set_backtrace(e.backtrace) raise error end - def get_custom_builder(name, namespace) - @kpack_kube_client.get_custom_builder(name, namespace) + def get_builder(name, namespace) + @kpack_kube_client.get_builder(name, namespace) rescue Kubeclient::ResourceNotFoundError nil rescue Kubeclient::HttpError => e - logger.error('get_custom_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) - error = CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'get', e.message) + logger.error('get_builder', error: e.inspect, response: e.response, backtrace: e.backtrace) + error = CloudController::Errors::ApiError.new_from_details('KpackBuilderError', 'get', e.message) error.set_backtrace(e.backtrace) raise error end diff --git a/lib/kubernetes/update_reapply_client.rb b/lib/kubernetes/update_reapply_client.rb index e4a7261c602..7205d9ee5ff 100644 --- a/lib/kubernetes/update_reapply_client.rb +++ b/lib/kubernetes/update_reapply_client.rb @@ -27,11 +27,11 @@ def apply_image_update(name, namespace, &block) end end - def apply_custom_builder_update(name, namespace, &block) + def apply_builder_update(name, namespace, &block) raise MalformedBlockError if block.arity != 1 retry_on_conflict do - @client.update_custom_builder(block.call(@client.get_custom_builder(name, namespace))) + @client.update_builder(block.call(@client.get_builder(name, namespace))) end end diff --git a/spec/api/documentation/apps_api_spec.rb b/spec/api/documentation/apps_api_spec.rb index db91de2cceb..5adfa6e7b3c 100644 --- a/spec/api/documentation/apps_api_spec.rb +++ b/spec/api/documentation/apps_api_spec.rb @@ -122,7 +122,7 @@ def self.fields_info(required) end describe 'Standard endpoints' do - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/kubernetes/update_reapply_client_spec.rb b/spec/kubernetes/update_reapply_client_spec.rb index 041a3a99606..4c051b3cf8f 100644 --- a/spec/kubernetes/update_reapply_client_spec.rb +++ b/spec/kubernetes/update_reapply_client_spec.rb @@ -141,31 +141,32 @@ module Kubernetes end end - describe '#apply_custom_builder_update' do - let(:name) { 'custom_builder' } - let(:remote_custom_builder) { Kubeclient::Resource.new( - kind: 'CustomBuilder', - metadata: { - 'cloudfoundry.org/bogus_guid' => 'bogus', - }, - spec: { - host: 'internet', - }, - ) - } + describe '#apply_builder_update' do + let(:name) { 'builder' } + let(:remote_builder) do + Kubeclient::Resource.new( + kind: 'Builder', + metadata: { + 'cloudfoundry.org/bogus_guid' => 'bogus', + }, + spec: { + host: 'internet', + }, + ) + end before do - allow(api_client).to receive(:get_custom_builder).with(name, namespace).and_return(remote_custom_builder) - allow(api_client).to receive(:update_custom_builder) + allow(api_client).to receive(:get_builder).with(name, namespace).and_return(remote_builder) + allow(api_client).to receive(:update_builder) end it 'applies the update in the block' do - reapply_client.apply_custom_builder_update(name, namespace) do |remote_custom_builder| - remote_custom_builder.spec.domain = 'website.biz' - remote_custom_builder + reapply_client.apply_builder_update(name, namespace) do |remote_builder| + remote_builder.spec.domain = 'website.biz' + remote_builder end - expect(api_client).to have_received(:update_custom_builder) do |update| + expect(api_client).to have_received(:update_builder) do |update| expect(update.spec.domain).to eq('website.biz') expect(update.spec.host).to eq('internet') end @@ -176,32 +177,32 @@ module Kubernetes before do # raise a 409 twice, then succeed - expect(api_client).to receive(:update_custom_builder).once.with(any_args).and_raise(error) - expect(api_client).to receive(:update_custom_builder).once.with(any_args).and_raise(error) - expect(api_client).to receive(:update_custom_builder).once.with(any_args) + expect(api_client).to receive(:update_builder).once.with(any_args).and_raise(error) + expect(api_client).to receive(:update_builder).once.with(any_args).and_raise(error) + expect(api_client).to receive(:update_builder).once.with(any_args) end - it 'retries 3 times, fetching the custom_builder to patch each time' do + it 'retries 3 times, fetching the builder to patch each time' do expect { - reapply_client.apply_custom_builder_update(name, namespace) do |custom_builder| - custom_builder.spec = {} - custom_builder + reapply_client.apply_builder_update(name, namespace) do |builder| + builder.spec = {} + builder end }.not_to raise_error - expect(api_client).to have_received(:get_custom_builder).exactly(3).times + expect(api_client).to have_received(:get_builder).exactly(3).times end end it 'errors when no block is provided' do expect do - reapply_client.apply_custom_builder_update(name, namespace) + reapply_client.apply_builder_update(name, namespace) end.to raise_error(NoMethodError) end it 'errors when the block provided doesnt take an arg' do expect do - reapply_client.apply_custom_builder_update(name, namespace) do + reapply_client.apply_builder_update(name, namespace) do puts 'lul' end end.to raise_error(UpdateReapplyClient::MalformedBlockError) diff --git a/spec/request/apps_spec.rb b/spec/request/apps_spec.rb index d258ffc2af6..7136a765a08 100644 --- a/spec/request/apps_spec.rb +++ b/spec/request/apps_spec.rb @@ -1519,7 +1519,7 @@ let!(:process) { VCAP::CloudController::ProcessModel.make(app: app_model) } let!(:deployment) { VCAP::CloudController::DeploymentModel.make(app: app_model) } let(:user_email) { nil } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do space.organization.add_user(user) diff --git a/spec/request/buildpacks_spec.rb b/spec/request/buildpacks_spec.rb index fda16d0aaa1..93c5b7cf148 100644 --- a/spec/request/buildpacks_spec.rb +++ b/spec/request/buildpacks_spec.rb @@ -282,19 +282,19 @@ let(:kubernetes_api_url) { 'https://kube.example.com' } before do - stub_request(:get, "#{kubernetes_api_url}/apis/experimental.kpack.pivotal.io/v1alpha1").to_return( + stub_request(:get, "#{kubernetes_api_url}/apis/kpack.io/v1alpha1").to_return( status: 200, body: ' { "kind": "APIResourceList", "apiVersion": "v1", - "groupVersion": "experimental.kpack.pivotal.io/v1alpha1", + "groupVersion": "kpack.io/v1alpha1", "resources": [ { - "name": "custombuilders", - "singularName": "custombuilder", + "name": "builders", + "singularName": "builder", "namespaced": true, - "kind": "CustomBuilder", + "kind": "Builder", "verbs": [ "delete", "deletecollection", @@ -314,10 +314,10 @@ "storageVersionHash": "2afHeqawAfQ=" }, { - "name": "custombuilders/status", + "name": "builders/status", "singularName": "", "namespaced": true, - "kind": "CustomBuilder", + "kind": "Builder", "verbs": [ "get", "patch", @@ -328,18 +328,18 @@ } ' ) - stub_request(:get, "#{kubernetes_api_url}/apis/experimental.kpack.pivotal.io/v1alpha1/namespaces/cf-workloads-staging/custombuilders/cf-default-builder"). + stub_request(:get, "#{kubernetes_api_url}/apis/kpack.io/v1alpha1/namespaces/cf-workloads-staging/builders/cf-default-builder"). to_return( status: 200, # rubocop:disable Layout/LineLength body: ' { - "apiVersion": "experimental.kpack.pivotal.io/v1alpha1", - "kind": "CustomBuilder", + "apiVersion": "kpack.io/v1alpha1", + "kind": "Builder", "metadata": { "annotations": { - "kapp.k14s.io/identity": "v1;cf-workloads-staging/experimental.kpack.pivotal.io/CustomBuilder/cf-default-builder;experimental.kpack.pivotal.io/v1alpha1", - "kapp.k14s.io/original": "{\"apiVersion\":\"experimental.kpack.pivotal.io/v1alpha1\",\"kind\":\"CustomBuilder\",\"metadata\":{\"labels\":{\"kapp.k14s.io/app\":\"1593227539339407000\",\"kapp.k14s.io/association\":\"v1.b29251cc7bb0f9e1950aad9f9ea1d82a\"},\"name\":\"cf-default-builder\",\"namespace\":\"cf-workloads-staging\"},\"spec\":{\"order\":[{\"group\":[{\"id\":\"paketo-community/ruby\"}]},{\"group\":[{\"id\":\"paketo-community/python\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/java\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/nodejs\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/go\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/dotnet-core\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/php\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/httpd\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/nginx\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/procfile\"}]}],\"serviceAccount\":\"cc-kpack-registry-service-account\",\"stack\":\"cflinuxfs3-stack\",\"store\":\"cf-buildpack-store\",\"tag\":\"gcr.io/cf-capi-arya/cf-workloads/cf-default-builder\"}}", + "kapp.k14s.io/identity": "v1;cf-workloads-staging/kpack.io/Builder/cf-default-builder;kpack.io/v1alpha1", + "kapp.k14s.io/original": "{\"apiVersion\":\"kpack.io/v1alpha1\",\"kind\":\"Builder\",\"metadata\":{\"labels\":{\"kapp.k14s.io/app\":\"1593227539339407000\",\"kapp.k14s.io/association\":\"v1.b29251cc7bb0f9e1950aad9f9ea1d82a\"},\"name\":\"cf-default-builder\",\"namespace\":\"cf-workloads-staging\"},\"spec\":{\"order\":[{\"group\":[{\"id\":\"paketo-community/ruby\"}]},{\"group\":[{\"id\":\"paketo-community/python\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/java\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/nodejs\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/go\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/dotnet-core\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/php\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/httpd\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/nginx\"}]},{\"group\":[{\"id\":\"paketo-buildpacks/procfile\"}]}],\"serviceAccount\":\"cc-kpack-registry-service-account\",\"stack\":\"cflinuxfs3-stack\",\"store\":\"cf-buildpack-store\",\"tag\":\"gcr.io/cf-capi-arya/cf-workloads/cf-default-builder\"}}", "kapp.k14s.io/original-diff-md5": "c6e94dc94aed3401b5d0f26ed6c0bff3" }, "creationTimestamp": "2020-06-27T03:13:07Z", @@ -351,7 +351,7 @@ "name": "cf-default-builder", "namespace": "cf-workloads-staging", "resourceVersion": "5467789", - "selfLink": "/apis/experimental.kpack.pivotal.io/v1alpha1/namespaces/cf-workloads-staging/custombuilders/cf-default-builder", + "selfLink": "/apis/kpack.io/v1alpha1/namespaces/cf-workloads-staging/builders/cf-default-builder", "uid": "82ede34e-20ae-4d81-8813-ac57134d4062" }, "spec": { diff --git a/spec/request/builds_spec.rb b/spec/request/builds_spec.rb index 9add668db80..f6780c66272 100644 --- a/spec/request/builds_spec.rb +++ b/spec/request/builds_spec.rb @@ -141,10 +141,10 @@ before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) allow(k8s_api_client).to receive(:create_image) - allow(k8s_api_client).to receive(:create_custom_builder) - allow(k8s_api_client).to receive(:update_custom_builder) + allow(k8s_api_client).to receive(:create_builder) + allow(k8s_api_client).to receive(:update_builder) allow(k8s_api_client).to receive(:get_image) - allow(k8s_api_client).to receive(:get_custom_builder).and_return(Kubeclient::Resource.new({ + allow(k8s_api_client).to receive(:get_builder).and_return(Kubeclient::Resource.new({ metadata: { creationTimestamp: '1/1', }, @@ -209,7 +209,7 @@ expect(parsed_response['lifecycle']['data']['buildpacks']).to eq ['paketo-buildpacks/java', 'paketo-community/ruby'] expect(parsed_response['state']).to eq 'STAGING' - expect(k8s_api_client).to have_received(:update_custom_builder) + expect(k8s_api_client).to have_received(:update_builder) end end diff --git a/spec/request/organizations_spec.rb b/spec/request/organizations_spec.rb index b90b90a93de..6f692e8720b 100644 --- a/spec/request/organizations_spec.rb +++ b/spec/request/organizations_spec.rb @@ -1132,7 +1132,7 @@ module VCAP::CloudController s.add_shared_space(space) s end - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/request/spaces_spec.rb b/spec/request/spaces_spec.rb index c226f1d4e4e..75048cc2992 100644 --- a/spec/request/spaces_spec.rb +++ b/spec/request/spaces_spec.rb @@ -900,7 +900,7 @@ s.add_shared_space(space) s end - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/request/v2/apps_spec.rb b/spec/request/v2/apps_spec.rb index bb5c80080c9..d9b09a37dc6 100644 --- a/spec/request/v2/apps_spec.rb +++ b/spec/request/v2/apps_spec.rb @@ -1127,7 +1127,7 @@ describe 'DELETE /v2/apps/:guid' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space: space) } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/actions/app_delete_spec.rb b/spec/unit/actions/app_delete_spec.rb index e2aef80a256..f19d45328c3 100644 --- a/spec/unit/actions/app_delete_spec.rb +++ b/spec/unit/actions/app_delete_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController let!(:app) { AppModel.make } let!(:app_dataset) { [app] } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } let(:route_resource_manager) { instance_double(Kubernetes::RouteResourceManager, update_destinations: nil) } before do @@ -51,7 +51,7 @@ module VCAP::CloudController it 'deletes the associated kpack resources' do build_namespace = VCAP::CloudController::Config.config.kpack_builder_namespace expect(k8s_api_client).to receive(:delete_image).with(app.guid, build_namespace) - expect(k8s_api_client).to receive(:delete_custom_builder).with("app-#{app.guid}", build_namespace) + expect(k8s_api_client).to receive(:delete_builder).with("app-#{app.guid}", build_namespace) app_delete.delete(app_dataset) end diff --git a/spec/unit/actions/organization_delete_spec.rb b/spec/unit/actions/organization_delete_spec.rb index 0985bfc49a4..53cecd7a872 100644 --- a/spec/unit/actions/organization_delete_spec.rb +++ b/spec/unit/actions/organization_delete_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController let(:services_event_repository) { Repositories::ServiceEventRepository.new(user_audit_info) } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } let(:space_delete) { SpaceDelete.new(user_audit_info, services_event_repository) } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } subject(:org_delete) { OrganizationDelete.new(space_delete, user_audit_info) } before do @@ -56,7 +56,7 @@ module VCAP::CloudController let!(:org_dataset) { Organization.where(guid: [org_1.guid, org_2.guid]) } let(:user) { User.make } let(:user_email) { 'user@example.com' } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/actions/space_delete_spec.rb b/spec/unit/actions/space_delete_spec.rb index 348ce6fb9ed..dece1dca496 100644 --- a/spec/unit/actions/space_delete_spec.rb +++ b/spec/unit/actions/space_delete_spec.rb @@ -15,7 +15,7 @@ module VCAP::CloudController let(:space_dataset) { Space.dataset } let(:user) { User.make } let(:user_email) { 'user@example.com' } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/actions/v2/organization_delete_spec.rb b/spec/unit/actions/v2/organization_delete_spec.rb index c86cde4c09b..831b120f5e2 100644 --- a/spec/unit/actions/v2/organization_delete_spec.rb +++ b/spec/unit/actions/v2/organization_delete_spec.rb @@ -37,7 +37,7 @@ module V2 let!(:org_dataset) { Organization.where(guid: [org_1.guid, org_2.guid]) } let(:user) { User.make } let(:user_email) { 'user@example.com' } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/controllers/runtime/apps_controller_spec.rb b/spec/unit/controllers/runtime/apps_controller_spec.rb index 04037e657d0..bc177997abc 100644 --- a/spec/unit/controllers/runtime/apps_controller_spec.rb +++ b/spec/unit/controllers/runtime/apps_controller_spec.rb @@ -1211,7 +1211,7 @@ def update_app let(:developer) { make_developer_for_space(process.space) } let(:decoded_response) { MultiJson.load(last_response.body) } let(:parent_app) { process.app } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do set_current_user(developer) diff --git a/spec/unit/controllers/runtime/organizations_controller_spec.rb b/spec/unit/controllers/runtime/organizations_controller_spec.rb index 4b555c4a6a9..f9fd3c4e94f 100644 --- a/spec/unit/controllers/runtime/organizations_controller_spec.rb +++ b/spec/unit/controllers/runtime/organizations_controller_spec.rb @@ -1384,7 +1384,7 @@ def decoded_guids end context 'with recursive=true' do - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/controllers/runtime/spaces_controller_spec.rb b/spec/unit/controllers/runtime/spaces_controller_spec.rb index d1dbe9de077..b9d36addc44 100644 --- a/spec/unit/controllers/runtime/spaces_controller_spec.rb +++ b/spec/unit/controllers/runtime/spaces_controller_spec.rb @@ -951,7 +951,7 @@ def decoded_guids let!(:service_instance) { ManagedServiceInstance.make(space_guid: space_guid) } let!(:service_instance_guid) { service_instance.guid } let!(:user) { make_manager_for_org(org) } - let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_custom_builder: nil) } + let(:k8s_api_client) { instance_double(Kubernetes::ApiClient, delete_image: nil, delete_builder: nil) } before do allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(k8s_api_client) diff --git a/spec/unit/fetchers/kpack_buildpack_list_fetcher_spec.rb b/spec/unit/fetchers/kpack_buildpack_list_fetcher_spec.rb index 92cc8424dc8..b6723f5a12c 100644 --- a/spec/unit/fetchers/kpack_buildpack_list_fetcher_spec.rb +++ b/spec/unit/fetchers/kpack_buildpack_list_fetcher_spec.rb @@ -15,7 +15,7 @@ module VCAP::CloudController let(:default_builder_obj) { Kubeclient::Resource.new( - kind: 'CustomBuilder', + kind: 'Builder', metadata: { creationTimestamp: default_builder_created_at_str, }, @@ -58,7 +58,7 @@ module VCAP::CloudController }, ) allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(client) - allow(client).to receive(:get_custom_builder).and_return(default_builder_obj) + allow(client).to receive(:get_builder).and_return(default_builder_obj) end describe '#fetch_all' do @@ -97,7 +97,7 @@ module VCAP::CloudController expect(buildpack2.labels).to(be_empty) expect(buildpack2.annotations).to(be_empty) - expect(client).to have_received(:get_custom_builder).with('cf-default-builder', builder_namespace) + expect(client).to have_received(:get_builder).with('cf-default-builder', builder_namespace) end context 'without a message' do @@ -106,7 +106,7 @@ module VCAP::CloudController it 'can be called without a message' do expect(result.length).to(eq(2)) - expect(client).to have_received(:get_custom_builder).with('cf-default-builder', builder_namespace) + expect(client).to have_received(:get_builder).with('cf-default-builder', builder_namespace) end end diff --git a/spec/unit/lib/cloud_controller/dependency_locator_spec.rb b/spec/unit/lib/cloud_controller/dependency_locator_spec.rb index bc798abdab2..c820418ed9a 100644 --- a/spec/unit/lib/cloud_controller/dependency_locator_spec.rb +++ b/spec/unit/lib/cloud_controller/dependency_locator_spec.rb @@ -778,11 +778,11 @@ expect(build_kube_client_arg.ssl_options).to eq({ ca: 'my crt' }) expect(build_kube_client_arg.auth_options).to eq({ bearer_token: 'token' }) - expect(build_kube_client_arg.api_endpoint.to_s).to eq 'https://my.kubernetes.io/apis/build.pivotal.io' + expect(build_kube_client_arg.api_endpoint.to_s).to eq 'https://my.kubernetes.io/apis/kpack.io' expect(kpack_kube_client_arg.ssl_options).to eq({ ca: 'my crt' }) expect(kpack_kube_client_arg.auth_options).to eq({ bearer_token: 'token' }) - expect(kpack_kube_client_arg.api_endpoint.to_s).to eq 'https://my.kubernetes.io/apis/experimental.kpack.pivotal.io' + expect(kpack_kube_client_arg.api_endpoint.to_s).to eq 'https://my.kubernetes.io/apis/kpack.io' expect(route_kube_client_arg.ssl_options).to eq({ ca: 'my crt' }) expect(route_kube_client_arg.auth_options).to eq({ bearer_token: 'token' }) diff --git a/spec/unit/lib/cloud_controller/kpack/stager_spec.rb b/spec/unit/lib/cloud_controller/kpack/stager_spec.rb index 311044fc324..075f48d7c28 100644 --- a/spec/unit/lib/cloud_controller/kpack/stager_spec.rb +++ b/spec/unit/lib/cloud_controller/kpack/stager_spec.rb @@ -29,8 +29,14 @@ module Kpack creationTimestamp: '2020-06-27T03:13:07Z', }, spec: { - stack: 'cflinuxfs3-stack', - store: 'cf-buildpack-store', + stack: { + name: 'cflinuxfs3-stack', + kind: 'ClusterStack', + }, + store: { + name: 'cf-buildpack-store', + kind: 'ClusterStore', + }, serviceAccount: 'gcr-service-account', order: [ { group: [{ id: 'paketo-community/ruby' }] }, @@ -66,7 +72,7 @@ module Kpack allow(CloudController::DependencyLocator.instance).to receive(:k8s_api_client).and_return(client) allow(CloudController::DependencyLocator.instance).to receive(:blobstore_url_generator).and_return(blobstore_url_generator) allow(client).to receive(:get_image).and_return(nil) - allow(client).to receive(:get_custom_builder).and_return(default_builder_obj) + allow(client).to receive(:get_builder).and_return(default_builder_obj) end it_behaves_like 'a stager' @@ -110,7 +116,7 @@ module Kpack it 'creates an image with an image path from a registry for the source code using the kpack client' do expect(client).to_not receive(:update_image) - expect(client).to_not receive(:create_custom_builder) + expect(client).to_not receive(:create_builder) expect(client).to receive(:create_image).with(Kubeclient::Resource.new({ metadata: { name: package.app.guid, @@ -130,7 +136,7 @@ module Kpack serviceAccount: 'gcr-service-account', builder: { name: 'cf-default-builder', - kind: 'CustomBuilder' + kind: 'Builder' }, source: { registry: { @@ -157,7 +163,7 @@ module Kpack it 'creates an image with a blobstore url for the source code using the kpack client' do expect(client).to_not receive(:update_image) - expect(client).to_not receive(:create_custom_builder) + expect(client).to_not receive(:create_builder) expect(client).to receive(:create_image).with(Kubeclient::Resource.new({ metadata: { name: package.app.guid, @@ -177,7 +183,7 @@ module Kpack serviceAccount: 'gcr-service-account', builder: { name: 'cf-default-builder', - kind: 'CustomBuilder' + kind: 'Builder' }, source: { blob: { @@ -200,7 +206,7 @@ module Kpack it 'creates an image with an image path from a registry for the source code using the kpack client' do expect(client).to_not receive(:update_image) - expect(client).to_not receive(:create_custom_builder) + expect(client).to_not receive(:create_builder) expect(client).to receive(:create_image).with(Kubeclient::Resource.new({ metadata: { name: package.app.guid, @@ -220,7 +226,7 @@ module Kpack serviceAccount: 'gcr-service-account', builder: { name: 'cf-default-builder', - kind: 'CustomBuilder' + kind: 'Builder' }, source: { registry: { @@ -249,14 +255,14 @@ module Kpack let(:package) { VCAP::CloudController::PackageModel.make(app: VCAP::CloudController::AppModel.make(:kpack)) } before do - allow(client).to receive(:get_custom_builder). + allow(client).to receive(:get_builder). with("app-#{package.app.guid}", 'namespace'). and_return(nil) end - it 'creates a custom builder' do - expect(client).to receive(:create_custom_builder).with(Kubeclient::Resource.new({ - kind: 'CustomBuilder', + it 'creates a builder' do + expect(client).to receive(:create_builder).with(Kubeclient::Resource.new({ + kind: 'Builder', metadata: { name: "app-#{package.app.guid}", namespace: 'namespace', @@ -267,10 +273,16 @@ module Kpack } }, spec: { - tag: "gcr.io/capi-images/#{package.app.guid}-custom-builder", + tag: "gcr.io/capi-images/#{package.app.guid}-builder", serviceAccount: 'gcr-service-account', - stack: 'cflinuxfs3-stack', - store: 'cf-buildpack-store', + stack: Kubeclient::Resource.new({ + name: 'cflinuxfs3-stack', + kind: 'ClusterStack', + }), + store: Kubeclient::Resource.new({ + name: 'cf-buildpack-store', + kind: 'ClusterStore', + }), order: [ { group: [{ id: 'paketo-buildpacks/java' }] }, ], @@ -281,12 +293,12 @@ module Kpack stager.stage(staging_details) end - context 'when the custombuilder already exists' do + context 'when the Builder already exists' do before do - allow(client).to receive(:get_custom_builder). + allow(client).to receive(:get_builder). with("app-#{package.app.guid}", 'namespace'). and_return(Kubeclient::Resource.new({ - kind: 'CustomBuilder', + kind: 'Builder', apiVersion: 'fake', metadata: { resourceVersion: 'bogus', @@ -294,9 +306,9 @@ module Kpack })) end - it 'overrides the existing custombuilder' do - expect(client).to receive(:update_custom_builder).with(Kubeclient::Resource.new({ - kind: 'CustomBuilder', + it 'overrides the existing Builder' do + expect(client).to receive(:update_builder).with(Kubeclient::Resource.new({ + kind: 'Builder', apiVersion: 'fake', metadata: { resourceVersion: 'bogus', @@ -309,10 +321,16 @@ module Kpack } }, spec: { - tag: "gcr.io/capi-images/#{package.app.guid}-custom-builder", + tag: "gcr.io/capi-images/#{package.app.guid}-builder", serviceAccount: 'gcr-service-account', - stack: 'cflinuxfs3-stack', - store: 'cf-buildpack-store', + stack: Kubeclient::Resource.new({ + name: 'cflinuxfs3-stack', + kind: 'ClusterStack', + }), + store: Kubeclient::Resource.new({ + name: 'cf-buildpack-store', + kind: 'ClusterStore', + }), order: [ { group: [{ id: 'paketo-buildpacks/java' }] }, ], @@ -366,7 +384,7 @@ module Kpack tag: "gcr.io/capi-images/#{package.app.guid}", serviceAccount: 'gcr-service-account', builder: { - name: 'cf-autodetect-builder', # legacy Builder to verify that image update includes new CustomBuilder + name: 'cf-autodetect-builder', # legacy Builder to verify that image update includes new Builder kind: 'Builder' }, source: { # here we test that blob sources can be upgraded to registry sources in-place @@ -401,7 +419,7 @@ module Kpack updated_image.spec.build.env = [ { name: 'FOO', value: 'BAR' } ] - updated_image.spec.builder.kind = 'CustomBuilder' + updated_image.spec.builder.kind = 'Builder' updated_image.spec.builder.name = 'cf-default-builder' expect(client).to_not receive(:create_image) diff --git a/spec/unit/lib/kubernetes/api_client_spec.rb b/spec/unit/lib/kubernetes/api_client_spec.rb index 62dbc6d3f1c..7a7194b48f0 100644 --- a/spec/unit/lib/kubernetes/api_client_spec.rb +++ b/spec/unit/lib/kubernetes/api_client_spec.rb @@ -338,116 +338,116 @@ end end - context 'custom builder resources' do - describe '#create_custom_builder' do + context 'builder resources' do + describe '#create_builder' do let(:resource_config) { { metadata: { name: 'resource-name' } } } it 'proxies call to kubernetes client with the same args' do - allow(kpack_kube_client).to receive(:create_custom_builder).with(resource_config) + allow(kpack_kube_client).to receive(:create_builder).with(resource_config) - subject.create_custom_builder(resource_config) + subject.create_builder(resource_config) - expect(kpack_kube_client).to have_received(:create_custom_builder).with(resource_config).once + expect(kpack_kube_client).to have_received(:create_builder).with(resource_config).once end context 'when there is an error' do it 'raises as an ApiError' do - allow(kpack_kube_client).to receive(:create_custom_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) + allow(kpack_kube_client).to receive(:create_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) expect { - subject.create_custom_builder(resource_config) + subject.create_builder(resource_config) }.to raise_error(CloudController::Errors::ApiError) end end end - describe '#delete_custom_builder' do + describe '#delete_builder' do it 'proxies calls to the k8s client with the same args' do - allow(kpack_kube_client).to receive(:delete_custom_builder).with('name', 'namespace') + allow(kpack_kube_client).to receive(:delete_builder).with('name', 'namespace') - subject.delete_custom_builder('name', 'namespace') + subject.delete_builder('name', 'namespace') - expect(kpack_kube_client).to have_received(:delete_custom_builder).with('name', 'namespace').once + expect(kpack_kube_client).to have_received(:delete_builder).with('name', 'namespace').once end context 'when there is an error' do it 'raises as an ApiError' do - allow(kpack_kube_client).to receive(:delete_custom_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) + allow(kpack_kube_client).to receive(:delete_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) expect { - subject.delete_custom_builder('name', 'namespace') + subject.delete_builder('name', 'namespace') }.to raise_error(CloudController::Errors::ApiError) end end context 'when it returns a 404' do it 'eats the error' do - allow(kpack_kube_client).to receive(:delete_custom_builder). - and_raise(Kubeclient::ResourceNotFoundError.new(404, 'custombuilders not found', '{"kind": "Status"}')) + allow(kpack_kube_client).to receive(:delete_builder). + and_raise(Kubeclient::ResourceNotFoundError.new(404, 'builders not found', '{"kind": "Status"}')) expect { - subject.delete_custom_builder('name', 'namespace') + subject.delete_builder('name', 'namespace') }.not_to raise_error end end end - describe '#get_custom_builder' do + describe '#get_builder' do let(:response) { double(Kubeclient::Resource) } - it 'fetches the custom builder from Kubernetes' do - allow(kpack_kube_client).to receive(:get_custom_builder).with('name', 'namespace').and_return(response) + it 'fetches the builder from Kubernetes' do + allow(kpack_kube_client).to receive(:get_builder).with('name', 'namespace').and_return(response) - custombuilder = subject.get_custom_builder('name', 'namespace') - expect(custombuilder).to eq(response) + builder = subject.get_builder('name', 'namespace') + expect(builder).to eq(response) end - context 'when the custombuilder is not present' do + context 'when the builder is not present' do it 'returns nil' do - allow(kpack_kube_client).to receive(:get_custom_builder).with('name', 'namespace'). - and_raise(Kubeclient::ResourceNotFoundError.new(404, 'custombuilders not found', '{"kind": "Status"}')) + allow(kpack_kube_client).to receive(:get_builder).with('name', 'namespace'). + and_raise(Kubeclient::ResourceNotFoundError.new(404, 'builders not found', '{"kind": "Status"}')) - custombuilder = subject.get_custom_builder('name', 'namespace') - expect(custombuilder).to be_nil + builder = subject.get_builder('name', 'namespace') + expect(builder).to be_nil end end context 'when there is an error' do it 'raises as an ApiError' do - allow(kpack_kube_client).to receive(:get_custom_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) + allow(kpack_kube_client).to receive(:get_builder).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar')) expect { - subject.get_custom_builder('name', 'namespace') + subject.get_builder('name', 'namespace') }.to raise_error(CloudController::Errors::ApiError) end end end - describe '#update_custom_builder' do + describe '#update_builder' do let(:resource_config) { { metadata: { name: 'resource-name' } } } let(:response) { double(Kubeclient::Resource) } it 'proxies call to kubernetes client with the same args' do - allow(kpack_kube_client).to receive(:update_custom_builder).with(resource_config) + allow(kpack_kube_client).to receive(:update_builder).with(resource_config) - subject.update_custom_builder(resource_config) + subject.update_builder(resource_config) - expect(kpack_kube_client).to have_received(:update_custom_builder).with(resource_config).once + expect(kpack_kube_client).to have_received(:update_builder).with(resource_config).once end context 'when there is an error' do let(:error) { Kubeclient::HttpError.new(422, 'foo', 'bar') } let(:logger) { instance_double(Steno::Logger, error: nil) } before do - allow(kpack_kube_client).to receive(:update_custom_builder).and_raise(error) + allow(kpack_kube_client).to receive(:update_builder).and_raise(error) allow(Steno).to receive(:logger).and_return(logger) end it 'raises as an ApiError' do - allow(kpack_kube_client).to receive(:update_custom_builder).and_raise(error) + allow(kpack_kube_client).to receive(:update_builder).and_raise(error) expect { - subject.update_custom_builder(resource_config) + subject.update_builder(resource_config) }.to raise_error(CloudController::Errors::ApiError) end @@ -456,9 +456,9 @@ it 'raises as an ApiError that includes the resource name' do expect { - subject.update_custom_builder(resource_config) + subject.update_builder(resource_config) }.to raise_error(Kubernetes::ApiClient::ConflictError) - expect(logger).to have_received(:error).with('update_custom_builder', error: /status code/, response: error.response, backtrace: error.backtrace) + expect(logger).to have_received(:error).with('update_builder', error: /status code/, response: error.response, backtrace: error.backtrace) end end end