Commit 385f37a7 authored by Kamil Trzciński's avatar Kamil Trzciński Committed by Dylan Griffith

Improve runner registration API

parent cfee3e0c
...@@ -21,24 +21,26 @@ module API ...@@ -21,24 +21,26 @@ module API
attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :maximum_timeout]) attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :maximum_timeout])
.merge(get_runner_details_from_request) .merge(get_runner_details_from_request)
runner = attributes =
if runner_registration_token_valid? if runner_registration_token_valid?
# Create shared runner. Requires admin access # Create shared runner. Requires admin access
Ci::Runner.create(attributes.merge(is_shared: true, runner_type: :instance_type)) attributes.merge(is_shared: true, runner_type: :instance_type)
elsif project = Project.find_by(runners_token: params[:token]) elsif project = Project.find_by(runners_token: params[:token])
# Create a specific runner for the project # Create a specific runner for the project
project.runners.create(attributes.merge(runner_type: :project_type)) attributes.merge(is_shared: false, runner_type: :project_type, projects: [project])
elsif group = Group.find_by(runners_token: params[:token]) elsif group = Group.find_by(runners_token: params[:token])
# Create a specific runner for the group # Create a specific runner for the group
group.runners.create(attributes.merge(runner_type: :group_type)) attributes.merge(is_shared: false, runner_type: :group_type, groups: [group])
else
forbidden!
end end
break forbidden! unless runner runner = Ci::Runner.create(attributes)
if runner.id if runner.persisted?
present runner, with: Entities::RunnerRegistrationDetails present runner, with: Entities::RunnerRegistrationDetails
else else
not_found! render_validation_error!(runner)
end end
end end
......
...@@ -115,7 +115,9 @@ describe API::Runner, :clean_gitlab_redis_shared_state do ...@@ -115,7 +115,9 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
post api('/runners'), token: registration_token, post api('/runners'), token: registration_token,
run_untagged: false run_untagged: false
expect(response).to have_gitlab_http_status 404 expect(response).to have_gitlab_http_status 400
expect(json_response['message']).to include(
'tags_list' => ['can not be empty when runner is not allowed to pick untagged jobs'])
end end
end end
end end
...@@ -720,7 +722,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do ...@@ -720,7 +722,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end end
context 'when runner specifies lower timeout' do context 'when runner specifies lower timeout' do
let(:runner) { create(:ci_runner, maximum_timeout: 1000) } let(:runner) { create(:ci_runner, :project, maximum_timeout: 1000, projects: [project]) }
it 'contains info about timeout overridden by runner' do it 'contains info about timeout overridden by runner' do
request_job request_job
...@@ -731,7 +733,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do ...@@ -731,7 +733,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end end
context 'when runner specifies bigger timeout' do context 'when runner specifies bigger timeout' do
let(:runner) { create(:ci_runner, maximum_timeout: 2000) } let(:runner) { create(:ci_runner, :project, maximum_timeout: 2000, projects: [project]) }
it 'contains info about timeout not overridden by runner' do it 'contains info about timeout not overridden by runner' do
request_job request_job
......
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