Files
ubicloud/helpers/kubernetes_cluster.rb
2025-05-20 05:49:38 +09:00

55 lines
2.0 KiB
Ruby

# frozen_string_literal: true
class Clover
def kubernetes_cluster_post(name)
authorize("KubernetesCluster:create", @project.id)
fail Validation::ValidationFailed.new({billing_info: "Project doesn't have valid billing information"}) unless @project.has_valid_payment_method?
version, target_node_size = typecast_params.nonempty_str!(["version", "worker_size"])
cp_node_count, node_count = typecast_params.pos_int!(["cp_nodes", "worker_nodes"])
DB.transaction do
kc = Prog::Kubernetes::KubernetesClusterNexus.assemble(
name:,
project_id: @project.id,
location_id: @location.id,
cp_node_count:,
version:
).subject
Prog::Kubernetes::KubernetesNodepoolNexus.assemble(
name: name + "-np",
node_count:,
kubernetes_cluster_id: kc.id,
target_node_size:
)
audit_log(kc, "create")
flash["notice"] = "'#{name}' will be ready in a few minutes"
request.redirect "#{@project.path}#{kc.path}"
end
end
def kubernetes_cluster_list
@kcs = dataset_authorize(@project.kubernetes_clusters_dataset, "KubernetesCluster:view").all
view "kubernetes-cluster/index"
end
def generate_kubernetes_cluster_options
options = OptionTreeGenerator.new
options.add_option(name: "name")
options.add_option(name: "location", values: Option.kubernetes_locations)
options.add_option(name: "version", values: Option.kubernetes_versions)
options.add_option(name: "cp_nodes", values: Option::KubernetesCPOptions.map(&:cp_node_count), parent: "location")
options.add_option(name: "worker_size", values: Option::VmSizes.select { it.visible && it.vcpus <= 16 }.map { it.display_name }, parent: "location") do |location, size|
vm_size = Option::VmSizes.find { it.display_name == size && it.arch == "x64" }
vm_size.family == "standard"
end
options.add_option(name: "worker_nodes", values: (1..10).map { {value: it, display_name: "#{it} Node#{(it == 1) ? "" : "s"}"} }, parent: "worker_size")
options.serialize
end
end