Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit beddea9

Browse files
Aakash Shahsethboyles
andcommitted
Delete Kpack Image during AppDelete
[#171900207] Co-authored-by: Aakash Shah <ashah@pivotal.io> Co-authored-by: Seth Boyles <sboyles@pivotal.io>
1 parent 0b291cc commit beddea9

6 files changed

Lines changed: 67 additions & 0 deletions

File tree

app/actions/app_delete.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def underlying_errors
2929

3030
def initialize(user_audit_info)
3131
@user_audit_info = user_audit_info
32+
@kpack_client = CloudController::DependencyLocator.instance.kpack_client
3233
end
3334

3435
def delete(apps, record_event: true)
@@ -51,6 +52,14 @@ def delete(apps, record_event: true)
5152
app.destroy
5253
end
5354
logger.info("Deleted app: #{app.guid}")
55+
56+
if kubernetes_api_configured?
57+
logger.info('Deleting associated kpack image')
58+
@kpack_client.delete_image(
59+
app.guid,
60+
VCAP::CloudController::Config.config.get(:kubernetes, :kpack, :builder_namespace)
61+
)
62+
end
5463
end
5564
end
5665

@@ -60,6 +69,10 @@ def delete_without_event(apps)
6069

6170
private
6271

72+
def kubernetes_api_configured?
73+
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
74+
end
75+
6376
def record_audit_event(app)
6477
Repositories::AppEventRepository.new.record_app_delete_request(
6578
app,

lib/kubernetes/kpack_client.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@ def update_image(*args)
2525
rescue Kubeclient::HttpError => e
2626
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'update', e.message)
2727
end
28+
29+
def delete_image(name, namespace)
30+
@client.delete_image(name, namespace)
31+
rescue Kubeclient::HttpError => e
32+
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'delete', e.message)
33+
end
2834
end
2935
end

spec/request/organizations_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,8 +1111,10 @@ module VCAP::CloudController
11111111
s.add_shared_space(space)
11121112
s
11131113
end
1114+
let(:kpack_client) { instance_double(Kubernetes::KpackClient, delete_image: nil) }
11141115

11151116
before do
1117+
allow(CloudController::DependencyLocator.instance).to receive(:kpack_client).and_return(kpack_client)
11161118
AppModel.make(space: space)
11171119
Route.make(space: space)
11181120
org.add_user(associated_user)

spec/unit/actions/app_delete_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,29 @@ module VCAP::CloudController
319319
end
320320
end
321321
end
322+
323+
context 'when targeting a kubernetes API' do
324+
let(:kpack_client) { instance_double(Kubernetes::KpackClient) }
325+
let!(:config) do
326+
TestConfig.override(
327+
kubernetes: {
328+
host_url: 'some-kubernetes-host-url',
329+
kpack: {
330+
builder_namespace: 'builder-namespace',
331+
},
332+
},
333+
)
334+
end
335+
336+
before do
337+
allow(CloudController::DependencyLocator.instance).to receive(:kpack_client).and_return(kpack_client)
338+
end
339+
340+
it 'deletes the associated kpack Image' do
341+
expect(kpack_client).to receive(:delete_image).with(app.guid, 'builder-namespace')
342+
app_delete.delete(app_dataset)
343+
end
344+
end
322345
end
323346

324347
describe '#delete_without_event' do

spec/unit/controllers/runtime/apps_controller_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,9 +1086,11 @@ def update_app
10861086
let(:developer) { make_developer_for_space(process.space) }
10871087
let(:decoded_response) { MultiJson.load(last_response.body) }
10881088
let(:parent_app) { process.app }
1089+
let(:kpack_client) { instance_double(Kubernetes::KpackClient, delete_image: nil) }
10891090

10901091
before do
10911092
set_current_user(developer)
1093+
allow(CloudController::DependencyLocator.instance).to receive(:kpack_client).and_return(kpack_client)
10921094
end
10931095

10941096
def delete_app

spec/unit/lib/kubernetes/kpack_client_spec.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,25 @@
8383
end
8484
end
8585
end
86+
87+
describe '#delete_image' do
88+
let(:kube_client) { double(Kubeclient) }
89+
subject(:kpack_client) { Kubernetes::KpackClient.new(kube_client) }
90+
91+
it 'proxies call to kubernetes client with the same args' do
92+
expect(kube_client).to receive(:delete_image).with('resource-name', 'namespace')
93+
94+
subject.delete_image('resource-name', 'namespace')
95+
end
96+
97+
context 'when there is an error' do
98+
it 'raises as an ApiError' do
99+
allow(kube_client).to receive(:delete_image).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar'))
100+
101+
expect {
102+
subject.delete_image('resource-name', 'namespace')
103+
}.to raise_error(CloudController::Errors::ApiError)
104+
end
105+
end
106+
end
86107
end

0 commit comments

Comments
 (0)