diff options
author | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2018-06-11 15:17:46 +0200 |
---|---|---|
committer | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2018-09-15 21:39:26 +0200 |
commit | 82546888e81488ba7b2a60a970a1cc31febcc1e9 (patch) | |
tree | af69a08e70434642862e57d549c514ff255b65cb | |
parent | 048b4469e8c46327e3e3e9bbdfd7ef9bd27e047f (diff) | |
download | gitlab-ce-82546888e81488ba7b2a60a970a1cc31febcc1e9.tar.gz |
add status param to runners api
-rw-r--r-- | doc/api/runners.md | 4 | ||||
-rw-r--r-- | lib/api/runners.rb | 9 | ||||
-rw-r--r-- | spec/requests/api/runners_spec.rb | 48 |
3 files changed, 61 insertions, 0 deletions
diff --git a/doc/api/runners.md b/doc/api/runners.md index 7763e6b2913..7a67b648b07 100644 --- a/doc/api/runners.md +++ b/doc/api/runners.md @@ -12,12 +12,14 @@ Get a list of specific runners available to the user. GET /runners GET /runners?scope=active GET /runners?type=project_type +GET /runners?status=active ``` | Attribute | Type | Required | Description | |-----------|---------|----------|---------------------| | `scope` | string | no | The scope of specific runners to show, one of: `active`, `paused`, `online`, `offline`; showing all runners if none provided | | `type` | string | no | The type of runners to show, one of: `instance_type`, `group_type`, `project_type` | +| `status` | string | no | The status of runners to show, one of: `active`, `paused`, `online`, `offline` | ``` curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/runners" @@ -59,12 +61,14 @@ is restricted to users with `admin` privileges. GET /runners/all GET /runners/all?scope=online GET /runners/all?type=project_type +GET /runners/all?status=active ``` | Attribute | Type | Required | Description | |-----------|---------|----------|---------------------| | `scope` | string | no | The scope of runners to show, one of: `specific`, `shared`, `active`, `paused`, `online`, `offline`; showing all runners if none provided | | `type` | string | no | The type of runners to show, one of: `instance_type`, `group_type`, `project_type` | +| `status` | string | no | The status of runners to show, one of: `active`, `paused`, `online`, `offline` | ``` curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/runners/all" diff --git a/lib/api/runners.rb b/lib/api/runners.rb index d24ff8641e1..9bcdfc8cb15 100644 --- a/lib/api/runners.rb +++ b/lib/api/runners.rb @@ -13,12 +13,15 @@ module API desc: 'The scope of specific runners to show' optional :type, type: String, values: Ci::Runner::AVAILABLE_TYPES, desc: 'The type of the runners to show' + optional :status, type: String, values: Ci::Runner::AVAILABLE_STATUSES, + desc: 'The status of the runners to show' use :pagination end get do runners = current_user.ci_owned_runners runners = filter_runners(runners, params[:scope], allowed_scopes: Ci::Runner::AVAILABLE_STATUSES) runners = filter_runners(runners, params[:type], allowed_scopes: Ci::Runner::AVAILABLE_TYPES) + runners = filter_runners(runners, params[:status], allowed_scopes: Ci::Runner::AVAILABLE_STATUSES) present paginate(runners), with: Entities::Runner end @@ -31,6 +34,8 @@ module API desc: 'The scope of specific runners to show' optional :type, type: String, values: Ci::Runner::AVAILABLE_TYPES, desc: 'The type of the runners to show' + optional :status, type: String, values: Ci::Runner::AVAILABLE_STATUSES, + desc: 'The status of the runners to show' use :pagination end get 'all' do @@ -39,6 +44,7 @@ module API runners = Ci::Runner.all runners = filter_runners(runners, params[:scope]) runners = filter_runners(runners, params[:type], allowed_scopes: Ci::Runner::AVAILABLE_TYPES) + runners = filter_runners(runners, params[:status], allowed_scopes: Ci::Runner::AVAILABLE_STATUSES) present paginate(runners), with: Entities::Runner end @@ -129,12 +135,15 @@ module API desc: 'The scope of specific runners to show' optional :type, type: String, values: Ci::Runner::AVAILABLE_TYPES, desc: 'The type of the runners to show' + optional :status, type: String, values: Ci::Runner::AVAILABLE_STATUSES, + desc: 'The status of the runners to show' use :pagination end get ':id/runners' do runners = Ci::Runner.owned_or_instance_wide(user_project.id) runners = filter_runners(runners, params[:scope]) runners = filter_runners(runners, params[:type], allowed_scopes: Ci::Runner::AVAILABLE_TYPES) + runners = filter_runners(runners, params[:status], allowed_scopes: Ci::Runner::AVAILABLE_STATUSES) present paginate(runners), with: Entities::Runner end diff --git a/spec/requests/api/runners_spec.rb b/spec/requests/api/runners_spec.rb index 3a318a0334f..49a79d2ccf9 100644 --- a/spec/requests/api/runners_spec.rb +++ b/spec/requests/api/runners_spec.rb @@ -74,6 +74,22 @@ describe API::Runners do expect(response).to have_gitlab_http_status(400) end + + it 'filters runners by status' do + create(:ci_runner, :project, :inactive, description: 'Inactive project runner', projects: [project]) + + get api('/runners?status=paused', user) + + expect(json_response).to match_array [ + a_hash_including('description' => 'Inactive project runner') + ] + end + + it 'does not filter by invalid status' do + get api('/runners?status=bogus', user) + + expect(response).to have_gitlab_http_status(400) + end end context 'unauthorized user' do @@ -149,6 +165,22 @@ describe API::Runners do expect(response).to have_gitlab_http_status(400) end + + it 'filters runners by status' do + create(:ci_runner, :project, :inactive, description: 'Inactive project runner', projects: [project]) + + get api('/runners/all?status=paused', admin) + + expect(json_response).to match_array [ + a_hash_including('description' => 'Inactive project runner') + ] + end + + it 'does not filter by invalid status' do + get api('/runners/all?status=bogus', admin) + + expect(response).to have_gitlab_http_status(400) + end end context 'without admin privileges' do @@ -668,6 +700,22 @@ describe API::Runners do expect(response).to have_gitlab_http_status(400) end + + it 'filters runners by status' do + create(:ci_runner, :project, :inactive, description: 'Inactive project runner', projects: [project]) + + get api("/projects/#{project.id}/runners?status=paused", user) + + expect(json_response).to match_array [ + a_hash_including('description' => 'Inactive project runner') + ] + end + + it 'does not filter by invalid status' do + get api("/projects/#{project.id}/runners?status=bogus", user) + + expect(response).to have_gitlab_http_status(400) + end end context 'authorized user without maintainer privileges' do |