Improve runner registration API

This commit is contained in:
Kamil Trzciński 2018-05-28 13:09:31 +02:00 committed by Dylan Griffith
parent cfee3e0c4e
commit 385f37a724
2 changed files with 14 additions and 10 deletions

View File

@ -21,24 +21,26 @@ module API
attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :maximum_timeout])
.merge(get_runner_details_from_request)
runner =
attributes =
if runner_registration_token_valid?
# 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])
# 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])
# 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
break forbidden! unless runner
runner = Ci::Runner.create(attributes)
if runner.id
if runner.persisted?
present runner, with: Entities::RunnerRegistrationDetails
else
not_found!
render_validation_error!(runner)
end
end

View File

@ -115,7 +115,9 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
post api('/runners'), token: registration_token,
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
@ -720,7 +722,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
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
request_job
@ -731,7 +733,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
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
request_job