Commit 81ced6f5 authored by Tomasz Maczukin's avatar Tomasz Maczukin

Split `/runners` entrypoint to `/runners` and `/runners/all`

parent b56ee397
# Runners API # Runners API
## List runners ## List owned runners
Get a list of runners. Get a list of specific runners available for user.
``` ```
GET /runners GET /runners
...@@ -37,6 +37,57 @@ Example response: ...@@ -37,6 +37,57 @@ Example response:
] ]
``` ```
## List all runners
Get a list of all runners (specific and shared). Access restricted to users with `admin` privileges.
```
GET /runners/all
```
| Attribute | Type | Required | Description |
|-----------|---------|----------|---------------------|
| `scope` | string | no | The scope of runners to show, one of: `specific`, `shared`, `active`, `paused`, `online`; showing all runners if none provided |
```
curl -H "PRIVATE_TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners/all"
```
Example response:
```json
[
{
"active": true,
"description": "shared-runner-1",
"id": 1,
"is_shared": true,
"name": null
},
{
"active": true,
"description": "shared-runner-2",
"id": 3,
"is_shared": true,
"name": null
},
{
"active": true,
"description": "test-1-20150125",
"id": 6,
"is_shared": false,
"name": null
},
{
"active": true,
"description": "test-2-20150125",
"id": 8,
"is_shared": false,
"name": null
}
]
```
## Get runner's details ## Get runner's details
Get details of a runner. Get details of a runner.
......
...@@ -4,19 +4,22 @@ module API ...@@ -4,19 +4,22 @@ module API
before { authenticate! } before { authenticate! }
resource :runners do resource :runners do
# Get available shared runners # Get runners available for user
# #
# Example Request: # Example Request:
# GET /runners # GET /runners
get do get do
runners = runners = filter_runners(current_user.ci_authorized_runners, params[:scope])
if current_user.is_admin? present paginate(runners), with: Entities::Runner
Ci::Runner.all end
else
current_user.ci_authorized_runners # Get all runners - shared and specific
end #
# Example Request:
runners = filter_runners(runners, params[:scope]) # GET /runners/all
get 'all' do
authenticated_as_admin!
runners = filter_runners(Ci::Runner.all, params[:scope])
present paginate(runners), with: Entities::Runner present paginate(runners), with: Entities::Runner
end end
......
...@@ -23,9 +23,44 @@ describe API::API, api: true do ...@@ -23,9 +23,44 @@ describe API::API, api: true do
describe 'GET /runners' do describe 'GET /runners' do
context 'authorized user' do context 'authorized user' do
context 'authorized user with admin privileges' do it 'should return user available runners' do
get api('/runners', user)
shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr}
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(shared).to be_falsey
end
it 'should filter runners by scope' do
get api('/runners?scope=specific', user)
shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr}
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(shared).to be_falsey
end
it 'should avoid filtering if scope is invalid' do
get api('/runners?scope=unknown', user)
expect(response.status).to eq(400)
end
end
context 'unauthorized user' do
it 'should not return runners' do
get api('/runners')
expect(response.status).to eq(401)
end
end
end
describe 'GET /runners/all' do
context 'authorized user' do
context 'with admin privileges' do
it 'should return all runners' do it 'should return all runners' do
get api('/runners', admin) get api('/runners/all', admin)
shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr} shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr}
expect(response.status).to eq(200) expect(response.status).to eq(200)
...@@ -34,19 +69,16 @@ describe API::API, api: true do ...@@ -34,19 +69,16 @@ describe API::API, api: true do
end end
end end
context 'authorized user without admin privileges' do context 'without admin privileges' do
it 'should return user available runners' do it 'should not return runners list' do
get api('/runners', user) get api('/runners/all', user)
shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr}
expect(response.status).to eq(200) expect(response.status).to eq(403)
expect(json_response).to be_an Array
expect(shared).to be_falsey
end end
end end
it 'should filter runners by scope' do it 'should filter runners by scope' do
get api('/runners?scope=specific', user) get api('/runners?scope=specific', admin)
shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr} shared = false || json_response.map{ |r| r['is_shared'] }.inject{ |sum, shr| sum || shr}
expect(response.status).to eq(200) expect(response.status).to eq(200)
...@@ -55,7 +87,7 @@ describe API::API, api: true do ...@@ -55,7 +87,7 @@ describe API::API, api: true do
end end
it 'should avoid filtering if scope is invalid' do it 'should avoid filtering if scope is invalid' do
get api('/runners?scope=unknown', user) get api('/runners?scope=unknown', admin)
expect(response.status).to eq(400) expect(response.status).to eq(400)
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