diff options
Diffstat (limited to 'lib/api/admin/ci/variables.rb')
-rw-r--r-- | lib/api/admin/ci/variables.rb | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/lib/api/admin/ci/variables.rb b/lib/api/admin/ci/variables.rb new file mode 100644 index 00000000000..df731148bac --- /dev/null +++ b/lib/api/admin/ci/variables.rb @@ -0,0 +1,137 @@ +# frozen_string_literal: true + +module API + module Admin + module Ci + class Variables < Grape::API + include PaginationParams + + before { authenticated_as_admin! } + + namespace 'admin' do + namespace 'ci' do + namespace 'variables' do + desc 'Get instance-level variables' do + success Entities::Variable + end + params do + use :pagination + end + get '/' do + variables = ::Ci::InstanceVariable.all + + present paginate(variables), with: Entities::Variable + end + + desc 'Get a specific variable from a group' do + success Entities::Variable + end + params do + requires :key, type: String, desc: 'The key of the variable' + end + get ':key' do + key = params[:key] + variable = ::Ci::InstanceVariable.find_by_key(key) + + break not_found!('InstanceVariable') unless variable + + present variable, with: Entities::Variable + end + + desc 'Create a new instance-level variable' do + success Entities::Variable + end + params do + requires :key, + type: String, + desc: 'The key of the variable' + + requires :value, + type: String, + desc: 'The value of the variable' + + optional :protected, + type: String, + desc: 'Whether the variable is protected' + + optional :masked, + type: String, + desc: 'Whether the variable is masked' + + optional :variable_type, + type: String, + values: ::Ci::InstanceVariable.variable_types.keys, + desc: 'The type of variable, must be one of env_var or file. Defaults to env_var' + end + post '/' do + variable_params = declared_params(include_missing: false) + + variable = ::Ci::InstanceVariable.new(variable_params) + + if variable.save + present variable, with: Entities::Variable + else + render_validation_error!(variable) + end + end + + desc 'Update an existing instance-variable' do + success Entities::Variable + end + params do + optional :key, + type: String, + desc: 'The key of the variable' + + optional :value, + type: String, + desc: 'The value of the variable' + + optional :protected, + type: String, + desc: 'Whether the variable is protected' + + optional :masked, + type: String, + desc: 'Whether the variable is masked' + + optional :variable_type, + type: String, + values: ::Ci::InstanceVariable.variable_types.keys, + desc: 'The type of variable, must be one of env_var or file' + end + put ':key' do + variable = ::Ci::InstanceVariable.find_by_key(params[:key]) + + break not_found!('InstanceVariable') unless variable + + variable_params = declared_params(include_missing: false).except(:key) + + if variable.update(variable_params) + present variable, with: Entities::Variable + else + render_validation_error!(variable) + end + end + + desc 'Delete an existing instance-level variable' do + success Entities::Variable + end + params do + requires :key, type: String, desc: 'The key of the variable' + end + delete ':key' do + variable = ::Ci::InstanceVariable.find_by_key(params[:key]) + not_found!('InstanceVariable') unless variable + + variable.destroy + + no_content! + end + end + end + end + end + end + end +end |