38 lines
1.1 KiB
Ruby
38 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module ContainerExpirationPolicies
|
|
class UpdateService < BaseContainerService
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
ALLOWED_ATTRIBUTES = %i[enabled cadence older_than keep_n name_regex name_regex_keep].freeze
|
|
|
|
def execute
|
|
return ServiceResponse.error(message: 'Access Denied', http_status: 403) unless allowed?
|
|
|
|
if container_expiration_policy.update(container_expiration_policy_params)
|
|
ServiceResponse.success(payload: { container_expiration_policy: container_expiration_policy })
|
|
else
|
|
ServiceResponse.error(
|
|
message: container_expiration_policy.errors.full_messages.to_sentence || 'Bad request',
|
|
http_status: 400
|
|
)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def container_expiration_policy
|
|
strong_memoize(:container_expiration_policy) do
|
|
@container.container_expiration_policy || @container.build_container_expiration_policy
|
|
end
|
|
end
|
|
|
|
def allowed?
|
|
Ability.allowed?(current_user, :admin_container_image, @container)
|
|
end
|
|
|
|
def container_expiration_policy_params
|
|
@params.slice(*ALLOWED_ATTRIBUTES)
|
|
end
|
|
end
|
|
end
|