57 lines
1.4 KiB
Ruby
57 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Ci
|
||
|
class Config
|
||
|
module Entry
|
||
|
##
|
||
|
# Represents Imageable concern shared by Image and Service.
|
||
|
module Imageable
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
include ::Gitlab::Config::Entry::Attributable
|
||
|
include ::Gitlab::Config::Entry::Configurable
|
||
|
|
||
|
IMAGEABLE_ALLOWED_KEYS = %i[name entrypoint ports pull_policy].freeze
|
||
|
|
||
|
included do
|
||
|
include ::Gitlab::Config::Entry::Validatable
|
||
|
|
||
|
validations do
|
||
|
validates :config, hash_or_string: true
|
||
|
validates :config, disallowed_keys: %i[ports], unless: :with_image_ports?
|
||
|
|
||
|
validates :name, type: String, presence: true
|
||
|
validates :entrypoint, array_of_strings: true, allow_nil: true
|
||
|
end
|
||
|
|
||
|
attributes :ports, :pull_policy
|
||
|
|
||
|
entry :ports, Entry::Ports,
|
||
|
description: 'Ports used to expose the image/service'
|
||
|
|
||
|
entry :pull_policy, Entry::PullPolicy,
|
||
|
description: 'Pull policy for the image/service'
|
||
|
end
|
||
|
|
||
|
def name
|
||
|
value[:name]
|
||
|
end
|
||
|
|
||
|
def entrypoint
|
||
|
value[:entrypoint]
|
||
|
end
|
||
|
|
||
|
def with_image_ports?
|
||
|
opt(:with_image_ports)
|
||
|
end
|
||
|
|
||
|
def skip_config_hash_validation?
|
||
|
true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|