Files
ubicloud/helpers/kubernetes_cluster.rb
mohi-kalantari 4d3a427f7c Set defaults for CP node count and worker count in kubernetes APIs
Prior to this commit, The cli could set nil values in params for
cluster creation but now these params have the same default value
shown on the UI for consistency.
2025-07-02 10:34:03 +02:00

64 lines
2.3 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"])
node_count = typecast_params.pos_int("worker_nodes", 1)
cp_node_count = typecast_params.pos_int("cp_nodes", 1)
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")
if api?
Serializers::KubernetesCluster.serialize(kc, {detailed: true})
else
flash["notice"] = "'#{name}' will be ready in a few minutes"
request.redirect "#{@project.path}#{kc.path}"
end
end
end
def kubernetes_cluster_list
dataset = dataset_authorize(@project.kubernetes_clusters_dataset, "KubernetesCluster:view")
if api?
paginated_result(dataset, Serializers::KubernetesCluster)
else
@kcs = dataset.all
view "kubernetes-cluster/index"
end
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