60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Kubernetes
 | 
						|
    class Namespace
 | 
						|
      attr_accessor :name
 | 
						|
 | 
						|
      def initialize(name, client)
 | 
						|
        @name = name
 | 
						|
        @client = client
 | 
						|
      end
 | 
						|
 | 
						|
      def exists?
 | 
						|
        @client.get_namespace(name)
 | 
						|
      rescue ::Kubeclient::ResourceNotFoundError
 | 
						|
        false
 | 
						|
      end
 | 
						|
 | 
						|
      def create!
 | 
						|
        resource = ::Kubeclient::Resource.new(metadata: { name: name })
 | 
						|
 | 
						|
        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: error.class.name,
 | 
						|
          status_code: error.error_code,
 | 
						|
          namespace: name,
 | 
						|
          class_name: self.class.name,
 | 
						|
          event: :failed_to_create_namespace,
 | 
						|
          message: error.message
 | 
						|
        })
 | 
						|
      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
 |