62 lines
1.3 KiB
Ruby
62 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Kubernetes
|
|
class Namespace
|
|
attr_accessor :name, :labels
|
|
|
|
def initialize(name, client, labels: nil)
|
|
@name = name
|
|
@client = client
|
|
@labels = labels
|
|
end
|
|
|
|
def exists?
|
|
@client.get_namespace(name)
|
|
rescue ::Kubeclient::ResourceNotFoundError
|
|
false
|
|
end
|
|
|
|
def create!
|
|
resource = ::Kubeclient::Resource.new(metadata: { name: name, labels: labels })
|
|
|
|
log_event(:begin_create)
|
|
@client.create_namespace(resource)
|
|
end
|
|
|
|
def ensure_exists!
|
|
exists? || create!
|
|
rescue ::Kubeclient::HttpError => error
|
|
log_create_failed(error)
|
|
raise
|
|
end
|
|
|
|
private
|
|
|
|
def log_create_failed(error)
|
|
logger.error({
|
|
exception: {
|
|
class: error.class.name,
|
|
message: error.message
|
|
},
|
|
status_code: error.error_code,
|
|
namespace: name,
|
|
class_name: self.class.name,
|
|
event: :failed_to_create_namespace
|
|
})
|
|
end
|
|
|
|
def log_event(event)
|
|
logger.info(
|
|
namespace: name,
|
|
class_name: self.class.name,
|
|
event: event
|
|
)
|
|
end
|
|
|
|
def logger
|
|
@logger ||= Gitlab::Kubernetes::Logger.build
|
|
end
|
|
end
|
|
end
|
|
end
|