2019-12-04 20:38:33 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Clusters
|
|
|
|
module Kubernetes
|
|
|
|
class CreateOrUpdateNamespaceService
|
|
|
|
def initialize(cluster:, kubernetes_namespace:)
|
|
|
|
@cluster = cluster
|
|
|
|
@kubernetes_namespace = kubernetes_namespace
|
|
|
|
@platform = cluster.platform
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute
|
|
|
|
create_project_service_account
|
|
|
|
configure_kubernetes_token
|
|
|
|
|
|
|
|
kubernetes_namespace.save!
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
attr_reader :cluster, :kubernetes_namespace, :platform
|
|
|
|
|
|
|
|
def create_project_service_account
|
2020-03-13 15:44:24 +05:30
|
|
|
environment_slug = kubernetes_namespace.environment&.slug
|
|
|
|
namespace_labels = { 'app.gitlab.com/app' => kubernetes_namespace.project.full_path_slug }
|
|
|
|
namespace_labels['app.gitlab.com/env'] = environment_slug if environment_slug
|
|
|
|
|
2019-12-04 20:38:33 +05:30
|
|
|
Clusters::Kubernetes::CreateOrUpdateServiceAccountService.namespace_creator(
|
|
|
|
platform.kubeclient,
|
|
|
|
service_account_name: kubernetes_namespace.service_account_name,
|
|
|
|
service_account_namespace: kubernetes_namespace.namespace,
|
2020-03-13 15:44:24 +05:30
|
|
|
service_account_namespace_labels: namespace_labels,
|
2019-12-04 20:38:33 +05:30
|
|
|
rbac: platform.rbac?
|
|
|
|
).execute
|
|
|
|
end
|
|
|
|
|
|
|
|
def configure_kubernetes_token
|
|
|
|
kubernetes_namespace.service_account_token = fetch_service_account_token
|
|
|
|
end
|
|
|
|
|
|
|
|
def fetch_service_account_token
|
|
|
|
Clusters::Kubernetes::FetchKubernetesTokenService.new(
|
|
|
|
platform.kubeclient,
|
|
|
|
kubernetes_namespace.token_name,
|
|
|
|
kubernetes_namespace.namespace
|
|
|
|
).execute
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|