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

Commit 1a2f8b3

Browse files
Sannidhi Jalukarsethboyles
andcommitted
Delete Route CRD upon cf delete-route
[#171828842] Authored-by: Sannidhi Jalukar <sjalukar@pivotal.io> Co-authored-by: Seth Boyles <sboyles@pivotal.io> Co-authored-by: Sannidhi Jalukar <sjalukar@pivotal.io>
1 parent 7eb2257 commit 1a2f8b3

24 files changed

Lines changed: 167 additions & 38 deletions

app/actions/app_delete.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def delete(apps, record_event: true)
5252
end
5353
logger.info("Deleted app: #{app.guid}")
5454

55-
if kubernetes_api_configured?
55+
if VCAP::CloudController::Config.kubernetes_api_configured?
5656
logger.info('Deleting associated kpack image')
5757
kpack_client.delete_image(
5858
app.guid,
@@ -72,10 +72,6 @@ def kpack_client
7272
CloudController::DependencyLocator.instance.kpack_client
7373
end
7474

75-
def kubernetes_api_configured?
76-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
77-
end
78-
7975
def record_audit_event(app)
8076
Repositories::AppEventRepository.new.record_app_delete_request(
8177
app,

app/actions/route_create.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def create(message:, space:, domain:)
2828
manifest_triggered: false,
2929
)
3030

31-
if kubernetes_api_configured?
31+
if VCAP::CloudController::Config.kubernetes_api_configured?
3232
route_crd_client.create_route(route)
3333
end
3434

@@ -43,10 +43,6 @@ def route_crd_client
4343
@route_crd_client ||= CloudController::DependencyLocator.instance.route_crd_client
4444
end
4545

46-
def kubernetes_api_configured?
47-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
48-
end
49-
5046
def validation_error!(error, host, path, space, domain)
5147
if error.errors.on(:domain)&.include?(:invalid_relation)
5248
error!("Invalid domain. Domain '#{domain.name}' is not available in organization '#{space.organization.name}'.")

app/actions/update_route_destinations.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def update(route, to_add, to_delete, user_audit_info, manifest_triggered)
9797

9898
route.reload
9999

100-
if kubernetes_api_configured?
100+
if VCAP::CloudController::Config.kubernetes_api_configured?
101101
client = route_crd_client
102102
client.update_destinations(route)
103103
end
@@ -171,10 +171,6 @@ def route_crd_client
171171
CloudController::DependencyLocator.instance.route_crd_client
172172
end
173173

174-
def kubernetes_api_configured?
175-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
176-
end
177-
178174
def validate_unique!(new_route_mappings)
179175
raise DuplicateDestinationError.new('Destinations cannot contain duplicate entries') if new_route_mappings.any? { |rm| new_route_mappings.count(rm) > 1 }
180176
end

app/actions/v2/route_create.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def create_route(route_hash:)
1414
r
1515
end
1616

17-
if kubernetes_api_configured?
17+
if VCAP::CloudController::Config.kubernetes_api_configured?
1818
route_crd_client.create_route(route)
1919
end
2020

@@ -28,10 +28,6 @@ def create_route(route_hash:)
2828
def route_crd_client
2929
@route_crd_client ||= CloudController::DependencyLocator.instance.route_crd_client
3030
end
31-
32-
def kubernetes_api_configured?
33-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
34-
end
3531
end
3632
end
3733
end

app/actions/v2/route_mapping_create.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def add
4848
)
4949
end
5050

51-
if kubernetes_api_configured?
51+
if VCAP::CloudController::Config.kubernetes_api_configured?
5252
route_crd_client.update_destinations(route_mapping.route)
5353
end
5454

@@ -129,10 +129,6 @@ def validate_routing_api_enabled!
129129
raise RoutingApiDisabledError.new('Routing API is disabled')
130130
end
131131
end
132-
133-
def kubernetes_api_configured?
134-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
135-
end
136132
end
137133
end
138134
end

app/actions/v3/route_create.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class RouteCreate
44
class << self
55
def create_route(route_hash:, logger:, user_audit_info:, manifest_triggered: false)
66
route = Route.create_from_hash(route_hash)
7-
if kubernetes_api_configured?
7+
if VCAP::CloudController::Config.kubernetes_api_configured?
88
client = route_crd_client
99
client.create_route(route)
1010
end
@@ -17,10 +17,6 @@ def create_route(route_hash:, logger:, user_audit_info:, manifest_triggered: fal
1717
def route_crd_client
1818
CloudController::DependencyLocator.instance.route_crd_client
1919
end
20-
21-
def kubernetes_api_configured?
22-
!!VCAP::CloudController::Config.config.get(:kubernetes, :host_url)
23-
end
2420
end
2521
end
2622
end

app/models/runtime/route.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ def around_destroy
247247
loaded_apps.each do |app|
248248
ProcessRouteHandler.new(app).notify_backend_of_route_update
249249
end
250+
if VCAP::CloudController::Config.kubernetes_api_configured?
251+
CloudController::DependencyLocator.instance.route_crd_client.delete_route(self)
252+
end
250253
end
251254

252255
def validate_host_and_domain_in_different_space

lib/cloud_controller/config.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ def schema_class_for_context(context)
3434
const_get("VCAP::CloudController::ConfigSchemas::#{context.to_s.camelize}Schema")
3535
end
3636

37+
def kubernetes_api_configured?
38+
!!config.get(:kubernetes, :host_url)
39+
end
40+
3741
private
3842

3943
def merge_defaults(config)

lib/kubernetes/route_crd_client.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ def update_destinations(route)
5555
raise error
5656
end
5757

58+
def delete_route(route)
59+
@client.delete_route(route.guid, VCAP::CloudController::Config.config.get(:kubernetes, :workloads_namespace))
60+
rescue Kubeclient::ResourceNotFoundError
61+
nil
62+
rescue Kubeclient::HttpError => e
63+
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', route.guid)
64+
Steno.logger('cc.action.route_create').info("Failed to Delete Route CRD: #{e}")
65+
error.set_backtrace(e.backtrace)
66+
raise error
67+
end
68+
5869
private
5970

6071
def get_destinations(route)

spec/request/organizations_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module VCAP::CloudController
1616
organization2.add_user(user)
1717
organization3.add_user(user)
1818
Domain.dataset.destroy # this will clean up the seeded test domains
19+
TestConfig.override(kubernetes: {})
1920
end
2021

2122
describe 'POST /v3/organizations' do

0 commit comments

Comments
 (0)