Commit b3700dea authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch '27142-api-replace-destroy-with-stop-environment' into 'master'

API: Add environment action with /stop action

Closes #27142

See merge request !8808
parents c391df80 8c569e21
---
title: API: Add environment stop action
merge_request: 8808
author:
...@@ -33,7 +33,7 @@ Example response: ...@@ -33,7 +33,7 @@ Example response:
Creates a new environment with the given name and external_url. Creates a new environment with the given name and external_url.
It returns 201 if the environment was successfully created, 400 for wrong parameters. It returns `201` if the environment was successfully created, `400` for wrong parameters.
``` ```
POST /projects/:id/environment POST /projects/:id/environment
...@@ -64,7 +64,7 @@ Example response: ...@@ -64,7 +64,7 @@ Example response:
Updates an existing environment's name and/or external_url. Updates an existing environment's name and/or external_url.
It returns 200 if the environment was successfully updated. In case of an error, a status code 400 is returned. It returns `200` if the environment was successfully updated. In case of an error, a status code `400` is returned.
``` ```
PUT /projects/:id/environments/:environments_id PUT /projects/:id/environments/:environments_id
...@@ -94,7 +94,7 @@ Example response: ...@@ -94,7 +94,7 @@ Example response:
## Delete an environment ## Delete an environment
It returns 200 if the environment was successfully deleted, and 404 if the environment does not exist. It returns `200` if the environment was successfully deleted, and `404` if the environment does not exist.
``` ```
DELETE /projects/:id/environments/:environment_id DELETE /projects/:id/environments/:environment_id
...@@ -108,3 +108,31 @@ DELETE /projects/:id/environments/:environment_id ...@@ -108,3 +108,31 @@ DELETE /projects/:id/environments/:environment_id
```bash ```bash
curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/environments/1" curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/environments/1"
``` ```
## Stop an environment
It returns `200` if the environment was successfully stopped, and `404` if the environment does not exist.
```
POST /projects/:id/environments/:environment_id/stop
```
| Attribute | Type | Required | Description |
| --------- | ------- | -------- | --------------------- |
| `id` | integer | yes | The ID of the project |
| `environment_id` | integer | yes | The ID of the environment |
```bash
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/environments/1/stop"
```
Example response:
```json
{
"id": 1,
"name": "deploy",
"slug": "deploy",
"external_url": "https://deploy.example.gitlab.com"
}
```
...@@ -30,6 +30,7 @@ changes are in V4: ...@@ -30,6 +30,7 @@ changes are in V4:
- Moved `DELETE /todos` to `POST /todos/mark_as_done` and `DELETE /todos/:todo_id` to `POST /todos/:todo_id/mark_as_done` [!9410](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9410) - Moved `DELETE /todos` to `POST /todos/mark_as_done` and `DELETE /todos/:todo_id` to `POST /todos/:todo_id/mark_as_done` [!9410](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9410)
- Endpoints `/projects/owned`, `/projects/visible`, `/projects/starred` & `/projects/all` are consolidated into `/projects` using query parameters [!8962](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8962) - Endpoints `/projects/owned`, `/projects/visible`, `/projects/starred` & `/projects/all` are consolidated into `/projects` using query parameters [!8962](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8962)
- Return pagination headers for all endpoints that return an array [!8606](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8606) - Return pagination headers for all endpoints that return an array [!8606](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8606)
- Added `POST /environments/:environment_id/stop` to stop an environment [!8808](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8808)
- Removed `DELETE projects/:id/deploy_keys/:key_id/disable`. Use `DELETE projects/:id/deploy_keys/:key_id` instead [!9366](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9366) - Removed `DELETE projects/:id/deploy_keys/:key_id/disable`. Use `DELETE projects/:id/deploy_keys/:key_id` instead [!9366](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9366)
- Moved `PUT /users/:id/(block|unblock)` to `POST /users/:id/(block|unblock)` [!9371](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9371) - Moved `PUT /users/:id/(block|unblock)` to `POST /users/:id/(block|unblock)` [!9371](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9371)
- Make subscription API more RESTful. Use `post ":project_id/:subscribable_type/:subscribable_id/subscribe"` to subscribe and `post ":project_id/:subscribable_type/:subscribable_id/unsubscribe"` to unsubscribe from a resource. [!9325](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9325) - Make subscription API more RESTful. Use `post ":project_id/:subscribable_type/:subscribable_id/subscribe"` to subscribe and `post ":project_id/:subscribable_type/:subscribable_id/unsubscribe"` to unsubscribe from a resource. [!9325](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9325)
......
...@@ -81,6 +81,23 @@ module API ...@@ -81,6 +81,23 @@ module API
environment.destroy environment.destroy
end end
desc 'Stops an existing environment' do
success Entities::Environment
end
params do
requires :environment_id, type: Integer, desc: 'The environment ID'
end
post ':id/environments/:environment_id/stop' do
authorize! :create_deployment, user_project
environment = user_project.environments.find(params[:environment_id])
environment.stop_with_action!(current_user)
status 200
present environment, with: Entities::Environment
end
end end
end end
end end
...@@ -141,4 +141,39 @@ describe API::Environments, api: true do ...@@ -141,4 +141,39 @@ describe API::Environments, api: true do
end end
end end
end end
describe 'POST /projects/:id/environments/:environment_id/stop' do
context 'as a master' do
context 'with a stoppable environment' do
before do
environment.update(state: :available)
post api("/projects/#{project.id}/environments/#{environment.id}/stop", user)
end
it 'returns a 200' do
expect(response).to have_http_status(200)
end
it 'actually stops the environment' do
expect(environment.reload).to be_stopped
end
end
it 'returns a 404 for non existing id' do
post api("/projects/#{project.id}/environments/12345/stop", user)
expect(response).to have_http_status(404)
expect(json_response['message']).to eq('404 Not found')
end
end
context 'a non member' do
it 'rejects the request' do
post api("/projects/#{project.id}/environments/#{environment.id}/stop", non_member)
expect(response).to have_http_status(404)
end
end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment