Improve runner registration API
This commit is contained in:
parent
cfee3e0c4e
commit
385f37a724
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue