Files
ubicloud/views/kubernetes-cluster/show.erb
Jeremy Evans d1f11345e7 Avoid appending to request.path in kubernetes cluser and private subnet show templates
This can cause a problem if the show template is rendered when
handling a validation error, because request.path will be the
path the form was submitted to, and not the path the form was
originally displayed on.

Construct a correct path that will be valid in both cases.
2025-08-08 01:52:14 +09:00

91 lines
3.2 KiB
Plaintext

<% @page_title = @kc.name %>
<% if @kc.display_state != "running" %>
<div class="auto-refresh hidden" data-interval="10"></div>
<% end %>
<%== part(
"components/page_header",
breadcrumbs: [
%w[Projects /project],
[@project_data[:name], @project_data[:path]],
["Kubernetes Clusters", "#{@project_data[:path]}/kubernetes-cluster"],
[@kc.name, "#"]
],
left_items: [part("components/kubernetes_state_label", state: @kc.display_state, extra_class: "text-md")]
) %>
<div class="grid gap-6">
<!-- Detail Card -->
<% data = [
["ID", @kc.ubid],
["Name", @kc.name],
["Location", @kc.display_location],
["Kubernetes Version", @kc.version],
["Control Plane Nodes", @kc.cp_node_count],
["Worker Nodes", @kc.nodepools.sum { it.node_count }]
]
if @kc.display_state == "running"
data.push(["Service URL", @kc.services_lb.hostname, { copyable: true }]) # TODO: Assign LB to a column properly
data.push(["Kubeconfig", part("components/download_button", link: "#{@project_data[:path]}#{@kc.path}/kubeconfig"), { escape: false }])
else
data.push(["Kubeconfig", "Waiting for cluster to be ready..."])
end %>
<%== part("components/kv_data_card", data: data) %>
<!-- Nodes Card -->
<% @nodes = []
@nodes +=
@kc.cp_vms.map do |vm|
{ name: vm.name, role: "Control Plane", state: vm.display_state, hostname: vm.ephemeral_net4.to_s }
end
@nodes +=
@kc
.nodepools_dataset
.eager(:vms)
.flat_map do |np|
np.vms.map { |vm| { name: vm.name, role: "Worker", state: vm.display_state, hostname: vm.ephemeral_net4.to_s } }
end %>
<%== part(
"components/table_card",
title: "Nodes",
headers: %w[Name Role State Hostname],
empty_state: "This cluster doesn't have any nodes yet",
rows:
@nodes.map { |n| [[n[:name], n[:role], n[:state], [n[:hostname], { copyable: true }]], { id: "node-#{n[:name]}" }] }
) %>
<!-- Danger Zone -->
<% if has_permission?("KubernetesCluster:delete", @kc.ubid) %>
<div>
<div class="md:flex md:items-center md:justify-between pb-2 lg:pb-4">
<div class="min-w-0 flex-1">
<h3 class="text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-2xl sm:tracking-tight">
Danger Zone
</h3>
</div>
</div>
<div class="overflow-hidden rounded-lg shadow ring-1 ring-black ring-opacity-5 bg-white divide-y divide-gray-200">
<!-- Delete Card -->
<div class="px-4 py-5 sm:p-6">
<div class="sm:flex sm:items-center sm:justify-between">
<div>
<h3 class="text-base font-semibold leading-6 text-gray-900">Delete Kubernetes Cluster</h3>
<div class="mt-2 text-sm text-gray-500">
<p>This action will permanently delete this cluster. Deleted data cannot be recovered. Use it
carefully.</p>
</div>
</div>
<div id="kc-delete-<%=@kc.ubid%>" class="mt-5 sm:ml-6 sm:mt-0 sm:flex sm:flex-shrink-0 sm:items-center">
<%== part("components/delete_button", confirmation: @kc.name, redirect: "#{@project_data[:path]}/kubernetes-cluster") %>
</div>
</div>
</div>
</div>
</div>
<% end %>
</div>