Split `/runners` entrypoint to `/runners` and `/runners/all`
This commit is contained in:
parent
b56ee397bb
commit
81ced6f55b
|
@ -1,8 +1,8 @@
|
||||||
# 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:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 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
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
runners = filter_runners(runners, params[:scope])
|
# Get all runners - shared and specific
|
||||||
|
#
|
||||||
|
# Example Request:
|
||||||
|
# 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,26 +23,13 @@ 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
|
||||||
it 'should return all runners' do
|
get api('/runners', user)
|
||||||
get api('/runners', 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)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
expect(shared).to be_truthy
|
expect(shared).to be_falsey
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'authorized user without 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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should filter runners by scope' do
|
it 'should filter runners by scope' do
|
||||||
|
@ -69,6 +56,51 @@ describe API::API, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'GET /runners/all' do
|
||||||
|
context 'authorized user' do
|
||||||
|
context 'with admin privileges' do
|
||||||
|
it 'should return all runners' do
|
||||||
|
get api('/runners/all', admin)
|
||||||
|
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_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'without admin privileges' do
|
||||||
|
it 'should not return runners list' do
|
||||||
|
get api('/runners/all', user)
|
||||||
|
|
||||||
|
expect(response.status).to eq(403)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should filter runners by scope' do
|
||||||
|
get api('/runners?scope=specific', admin)
|
||||||
|
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', admin)
|
||||||
|
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/:id' do
|
describe 'GET /runners/:id' do
|
||||||
context 'admin user' do
|
context 'admin user' do
|
||||||
it "should return runner's details" do
|
it "should return runner's details" do
|
||||||
|
|
Loading…
Reference in New Issue