blob: f300f44f916a74a3b9751d9498488e3c012ca860 [file] [log] [blame]
Jan Schär3cebdfd2025-05-12 09:11:33 +00001load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
2load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
Serge Bazanskie0c06172023-09-19 12:28:16 +00003load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
Serge Bazanski394b67e2023-07-19 17:34:34 +02004load(":defs.bzl", "buildkind")
5
6buildkind(
7 name = "buildkind",
8 build_setting_default = "full",
9)
10
11# True if user requested a lite build via --//metropolis/cli/metroctl:buildkind=lite .
12config_setting(
13 name = "buildkind_lite",
14 flag_values = {
15 ":buildkind": "lite",
16 },
17)
Lorenz Brun6adf8842021-10-05 13:39:11 +020018
Jan Schär3cebdfd2025-05-12 09:11:33 +000019# By default, the architecture for node binaries is inherited from the metroctl
20# binary, but it can be changed with this flag.
21# Example: --//metropolis/cli/metroctl:node_arch=x86_64
22string_flag(
23 name = "node_arch",
24 build_setting_default = "",
25 values = [
26 "",
27 "x86_64",
28 "aarch64",
29 ],
30 visibility = ["//visibility:public"],
31)
32
33config_setting(
34 name = "node_arch_x86_64",
35 flag_values = {":node_arch": "x86_64"},
36)
37
38config_setting(
39 name = "node_arch_aarch64",
40 flag_values = {":node_arch": "aarch64"},
41)
42
43config_setting(
44 name = "node_arch_inherit_x86_64",
45 constraint_values = ["@platforms//cpu:x86_64"],
46 flag_values = {":node_arch": ""},
47)
48
49config_setting(
50 name = "node_arch_inherit_aarch64",
51 constraint_values = ["@platforms//cpu:aarch64"],
52 flag_values = {":node_arch": ""},
53)
54
Lorenz Brun6adf8842021-10-05 13:39:11 +020055go_library(
Lorenz Brund13c1c62022-03-30 19:58:58 +020056 name = "metroctl_lib",
Lorenz Brune6573102021-11-02 14:15:37 +010057 srcs = [
Tim Windelschmidtf0ec0f62023-07-17 13:43:38 +020058 "cmd_certs.go",
Serge Bazanskibeec27c2024-10-31 12:27:08 +000059 "cmd_cluster.go",
Serge Bazanskib701df92024-10-31 14:15:33 +000060 "cmd_cluster_configure.go",
Serge Bazanskibeec27c2024-10-31 12:27:08 +000061 "cmd_cluster_takeownership.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010062 "cmd_install.go",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +010063 "cmd_install_ssh.go",
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010064 "cmd_install_usb.go",
Serge Bazanski7d1a0de2023-07-05 01:17:15 +020065 "cmd_k8s_configure.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010066 "cmd_k8scredplugin.go",
67 "cmd_node.go",
68 "cmd_node_approve.go",
Serge Bazanskib91938f2023-03-29 14:31:22 +020069 "cmd_node_logs.go",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +000070 "cmd_node_metrics.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010071 "cmd_node_set.go",
Lorenz Brune6573102021-11-02 14:15:37 +010072 "main.go",
Mateusz Zalegad5f2f7a2022-07-05 18:48:56 +020073 "rpc.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010074 "table_node.go",
Lorenz Brune6573102021-11-02 14:15:37 +010075 ],
Lorenz Brun6adf8842021-10-05 13:39:11 +020076 importpath = "source.monogon.dev/metropolis/cli/metroctl",
77 visibility = ["//visibility:private"],
Lorenz Brune6573102021-11-02 14:15:37 +010078 deps = [
Serge Bazanskie0c06172023-09-19 12:28:16 +000079 "//go/clitable",
Serge Bazanskica8d9512024-09-12 14:20:57 +020080 "//go/logging",
Jan Schära9b060b2024-08-07 10:42:29 +020081 "//metropolis/cli/flagdefs",
Lorenz Brund13c1c62022-03-30 19:58:58 +020082 "//metropolis/cli/metroctl/core",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +000083 "//metropolis/node",
Lorenz Brund13c1c62022-03-30 19:58:58 +020084 "//metropolis/node/core/rpc",
Serge Bazanski925ec3d2024-02-05 14:38:20 +010085 "//metropolis/node/core/rpc/resolver",
Lorenz Brund13c1c62022-03-30 19:58:58 +020086 "//metropolis/proto/api",
Serge Bazanskida114862023-03-29 17:46:42 +020087 "//metropolis/proto/common",
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020088 "//osbase/logtree",
89 "//osbase/logtree/proto",
Jan Schär0175d7a2025-03-26 12:57:23 +000090 "//osbase/net/sshtakeover",
Jan Schär5fdca562025-04-14 11:33:29 +000091 "//osbase/oci",
Jan Schär62cecde2025-04-16 15:24:04 +000092 "//osbase/oci/registry",
Jan Schärc1b6df42025-03-20 08:52:18 +000093 "//osbase/structfs",
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010094 "//version",
Lorenz Brund13c1c62022-03-30 19:58:58 +020095 "@com_github_adrg_xdg//:xdg",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +010096 "@com_github_schollz_progressbar_v3//:progressbar",
Lorenz Brund13c1c62022-03-30 19:58:58 +020097 "@com_github_spf13_cobra//:cobra",
Tim Windelschmidt156248b2025-01-10 00:27:45 +010098 "@io_bazel_rules_go//go/runfiles",
Lorenz Brund13c1c62022-03-30 19:58:58 +020099 "@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
Lorenz Brun20d1dd12022-07-01 12:21:42 +0000100 "@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication",
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +0100101 "@io_k8s_utils//ptr",
Tim Windelschmidt3325b4b2024-07-15 19:19:49 +0200102 "@org_golang_google_grpc//:grpc",
Timon Stampflib9701c32024-12-15 17:50:01 +0100103 "@org_golang_google_protobuf//encoding/prototext",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100104 "@org_golang_google_protobuf//proto",
Serge Bazanskib701df92024-10-31 14:15:33 +0000105 "@org_golang_google_protobuf//types/known/fieldmaskpb",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100106 "@org_golang_x_crypto//ssh",
107 "@org_golang_x_crypto//ssh/agent",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +0000108 "@org_golang_x_net//proxy",
Lorenz Brun9ce40712024-02-13 21:54:46 +0100109 "@org_golang_x_sync//semaphore",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100110 "@org_golang_x_term//:term",
Lorenz Brune6573102021-11-02 14:15:37 +0100111 ],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200112)
113
Jan Schär3cebdfd2025-05-12 09:11:33 +0000114platform_transition_filegroup(
115 name = "node_arch_deps",
116 srcs = [
117 "//metropolis/cli/takeover",
118 "//metropolis/installer:kernel",
119 "//metropolis/node:oci_image",
120 ],
121 target_platform = select(
122 {
123 ":node_arch_x86_64": "//build/platforms:linux_x86_64",
124 ":node_arch_aarch64": "//build/platforms:linux_aarch64",
125 ":node_arch_inherit_x86_64": "//build/platforms:linux_x86_64",
126 ":node_arch_inherit_aarch64": "//build/platforms:linux_aarch64",
127 },
128 no_match_error = """
129 Metropolis Node does not support this architecture.
130 Specify a supported architecture with the node_arch flag.""",
131 ),
132 visibility = ["//visibility:private"],
133)
134
Lorenz Brun6adf8842021-10-05 13:39:11 +0200135go_binary(
136 name = "metroctl",
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200137 data = select({
138 ":buildkind_lite": [],
Jan Schär3cebdfd2025-05-12 09:11:33 +0000139 "//conditions:default": [":node_arch_deps"],
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200140 }),
Lorenz Brund13c1c62022-03-30 19:58:58 +0200141 embed = [":metroctl_lib"],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200142 visibility = ["//visibility:public"],
143)
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200144
145# metroctl_lite is the same binary as normal metroctl, but without any data
146# dependencies.
147go_binary(
148 name = "metroctl_lite",
149 data = [],
150 embed = [":metroctl_lib"],
151 visibility = ["//metropolis:__subpackages__"],
152)