49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
|
module DeploymentPlatform
|
||
|
def deployment_platform
|
||
|
@deployment_platform ||=
|
||
|
find_cluster_platform_kubernetes ||
|
||
|
find_kubernetes_service_integration ||
|
||
|
build_cluster_and_deployment_platform
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def find_cluster_platform_kubernetes
|
||
|
clusters.find_by(enabled: true)&.platform_kubernetes
|
||
|
end
|
||
|
|
||
|
def find_kubernetes_service_integration
|
||
|
services.deployment.reorder(nil).find_by(active: true)
|
||
|
end
|
||
|
|
||
|
def build_cluster_and_deployment_platform
|
||
|
return unless kubernetes_service_template
|
||
|
|
||
|
cluster = ::Clusters::Cluster.create(cluster_attributes_from_service_template)
|
||
|
cluster.platform_kubernetes if cluster.persisted?
|
||
|
end
|
||
|
|
||
|
def kubernetes_service_template
|
||
|
@kubernetes_service_template ||= KubernetesService.active.find_by_template
|
||
|
end
|
||
|
|
||
|
def cluster_attributes_from_service_template
|
||
|
{
|
||
|
name: 'kubernetes-template',
|
||
|
projects: [self],
|
||
|
provider_type: :user,
|
||
|
platform_type: :kubernetes,
|
||
|
platform_kubernetes_attributes: platform_kubernetes_attributes_from_service_template
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def platform_kubernetes_attributes_from_service_template
|
||
|
{
|
||
|
api_url: kubernetes_service_template.api_url,
|
||
|
ca_pem: kubernetes_service_template.ca_pem,
|
||
|
token: kubernetes_service_template.token,
|
||
|
namespace: kubernetes_service_template.namespace
|
||
|
}
|
||
|
end
|
||
|
end
|