You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by da...@apache.org on 2017/04/26 23:55:22 UTC

[3/6] incubator-trafficcontrol git commit: adds api endpoint to remove a cache from a ds

adds api endpoint to remove a cache from a ds


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/29eea414
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/29eea414
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/29eea414

Branch: refs/heads/master
Commit: 29eea414a5e64f65d38e8ababaea27c4fa3bc0bd
Parents: 9607cba
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Apr 20 12:26:58 2017 -0600
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Wed Apr 26 17:54:08 2017 -0600

----------------------------------------------------------------------
 .../traffic_ops_api/v12/deliveryservice.rst     | 31 ++++++++++++++++++++
 .../app/lib/API/DeliveryServiceServer.pm        | 24 +++++++++++++++
 traffic_ops/app/lib/TrafficOpsRoutes.pm         |  7 +++--
 .../app/t/api/1.2/deliveryservice_server.t      |  5 +++-
 4 files changed, 64 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/29eea414/docs/source/development/traffic_ops_api/v12/deliveryservice.rst
----------------------------------------------------------------------
diff --git a/docs/source/development/traffic_ops_api/v12/deliveryservice.rst b/docs/source/development/traffic_ops_api/v12/deliveryservice.rst
index 8fe4e48..3ae4d24 100644
--- a/docs/source/development/traffic_ops_api/v12/deliveryservice.rst
+++ b/docs/source/development/traffic_ops_api/v12/deliveryservice.rst
@@ -910,6 +910,37 @@ Server
     }
 
 
+**DELETE /api/1.2/deliveryservices/:dsId/servers/:id**
+
+  Removes a server (cache) from a delivery service.
+
+  Authentication Required: Yes
+
+  Role(s) Required: Admin or Oper (if delivery service is not assigned to user)
+
+  **Request Route Parameters**
+
+  +-----------------+----------+---------------------------------------------------+
+  | Name            | Required | Description                                       |
+  +=================+==========+===================================================+
+  | ``dsId``        | yes      | Delivery service ID.                              |
+  +-----------------+----------+---------------------------------------------------+
+  | ``id``          | yes      | Server (cache) ID.                                |
+  +-----------------+----------+---------------------------------------------------+
+
+   **Response Example** ::
+
+    {
+           "alerts": [
+                     {
+                             "level": "success",
+                             "text": "Server removed from delivery service."
+                     }
+             ],
+    }
+
+|
+
 
 .. _to-api-v12-ds-sslkeys:
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/29eea414/traffic_ops/app/lib/API/DeliveryServiceServer.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/DeliveryServiceServer.pm b/traffic_ops/app/lib/API/DeliveryServiceServer.pm
index 3cfee04..2ee1533 100644
--- a/traffic_ops/app/lib/API/DeliveryServiceServer.pm
+++ b/traffic_ops/app/lib/API/DeliveryServiceServer.pm
@@ -176,4 +176,28 @@ sub assign_ds_to_cachegroup {
 	$self->success( $response, "Delivery services successfully assigned to all the servers of cache group $cg_id" );
 }
 
+sub remove_server_from_ds {
+	my $self     	= shift;
+	my $ds_id  	 	= $self->param('dsId');
+	my $server_id	= $self->param('id');
+
+	if ( !&is_privileged($self) && !$self->is_delivery_service_assigned($ds_id) ) {
+		$self->forbidden("Forbidden. Delivery service not assigned to user.");
+	}
+
+	my $ds_server = $self->db->resultset('DeliveryserviceServer')->search( { deliveryservice => $ds_id, server => $server_id }, { prefetch => [ 'deliveryservice', 'server' ] } );
+	if ( !defined($ds_server) ) {
+		return $self->not_found();
+	}
+
+	my $row = $ds_server->next;
+	my $rs = $ds_server->delete();
+	if ($rs) {
+		&log( $self, "Server [ " . $row->server->id . " | " . $row->server->host_name . " ] was removed from deliveryservice [ " . $row->deliveryservice->id . " | " . $row->deliveryservice->xml_id . " ].", "APICHANGE" );
+		return $self->success_message("Server removed from delivery service.");
+	}
+
+	return $self->alert( "Failed to remove server from delivery service." );
+}
+
 1;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/29eea414/traffic_ops/app/lib/TrafficOpsRoutes.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/TrafficOpsRoutes.pm b/traffic_ops/app/lib/TrafficOpsRoutes.pm
index 15aaac8..683df81 100644
--- a/traffic_ops/app/lib/TrafficOpsRoutes.pm
+++ b/traffic_ops/app/lib/TrafficOpsRoutes.pm
@@ -495,14 +495,17 @@ sub api_routes {
 	$r->get("/api/$version/user/:id/deliveryservices/available" => [ id => qr/\d+/ ] )->over( authenticated => 1 )
 		->to( 'User#get_available_deliveryservices', namespace => $namespace );
 
+	# delivery service / server assignments
+	$r->post("/api/$version/deliveryservices/:xml_id/servers")->over( authenticated => 1 )
+		->to( 'Deliveryservice2#assign_servers', namespace => $namespace );
+	$r->delete("/api/$version/deliveryservices/:dsId/servers/:id" => [ dsId => qr/\d+/, id => qr/\d+/ ] )->over( authenticated => 1 )->to( 'DeliveryServiceServer#remove_server_from_ds', namespace => $namespace );
+
 	# alternate deliveryservice routes
 	$r->get("/api/$version/deliveryservices/list")->over( authenticated => 1 )->to( 'Deliveryservice2#delivery_services', namespace => $namespace );
 	$r->get( "/api/$version/deliveryservices/:id/get" => [ id => qr/\d+/ ] )->over( authenticated => 1 )
 		->to( 'Deliveryservice2#delivery_services', namespace => $namespace );
 	$r->post("/api/$version/deliveryservices/create")->over( authenticated => 1 )->to( 'Deliveryservice2#create', namespace => $namespace );
 	$r->put("/api/$version/deliveryservices/:id/update")->over( authenticated => 1 )->to( 'Deliveryservice2#update', namespace => $namespace );
-	$r->post("/api/$version/deliveryservices/:xml_id/servers")->over( authenticated => 1 )
-		->to( 'Deliveryservice2#assign_servers', namespace => $namespace );
 
 	# -- DELIVERYSERVICES: HEALTH
 	$r->get("/api/$version/deliveryservices/:id/health" => [ id => qr/\d+/ ] )->over( authenticated => 1 )->to( 'Deliveryservice#health', namespace => $namespace );

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/29eea414/traffic_ops/app/t/api/1.2/deliveryservice_server.t
----------------------------------------------------------------------
diff --git a/traffic_ops/app/t/api/1.2/deliveryservice_server.t b/traffic_ops/app/t/api/1.2/deliveryservice_server.t
index 59a9a4d..ba9ad80 100644
--- a/traffic_ops/app/t/api/1.2/deliveryservice_server.t
+++ b/traffic_ops/app/t/api/1.2/deliveryservice_server.t
@@ -50,7 +50,7 @@ ok $t->post_ok('/api/1.2/cachegroups/300/deliveryservices' => {Accept => 'applic
      ->json_is( "/alerts/0/text" => "Delivery services successfully assigned to all the servers of cache group 300" )
             , 'Does the delivery services assign details return?';
 
-ok $t->get_ok('/api/1.2/deliveryserviceserver.json')
+ok $t->get_ok('/api/1.2/deliveryserviceserver')
      ->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
      ->json_is( "/response/0/deliveryService" => "100" )
      ->json_is( "/response/0/server" => 100 )
@@ -60,6 +60,9 @@ ok $t->get_ok('/api/1.2/deliveryserviceserver.json')
      ->json_is( "/response/2/server" => 600 )
             , 'Does the delivery services servers details return?';
 
+ok $t->delete_ok('/api/1.2/deliveryservices/100/servers/100')->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } );
+ok $t->delete_ok('/api/1.2/deliveryservices/100/servers/999')->status_is(404)->or( sub { diag $t->tx->res->content->asset->{content}; } );
+
 ok $t->get_ok('/logout')->status_is(302)->or( sub { diag $t->tx->res->content->asset->{content}; } );
 $dbh->disconnect();
 done_testing();