| load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") |
| load("@bazel_skylib//rules:common_settings.bzl", "string_flag") |
| load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") |
| load(":defs.bzl", "buildkind") |
| |
| buildkind( |
| name = "buildkind", |
| build_setting_default = "full", |
| ) |
| |
| # True if user requested a lite build via --//metropolis/cli/metroctl:buildkind=lite . |
| config_setting( |
| name = "buildkind_lite", |
| flag_values = { |
| ":buildkind": "lite", |
| }, |
| ) |
| |
| # By default, the architecture for node binaries is inherited from the metroctl |
| # binary, but it can be changed with this flag. |
| # Example: --//metropolis/cli/metroctl:node_arch=x86_64 |
| string_flag( |
| name = "node_arch", |
| build_setting_default = "", |
| values = [ |
| "", |
| "x86_64", |
| "aarch64", |
| ], |
| visibility = ["//visibility:public"], |
| ) |
| |
| config_setting( |
| name = "node_arch_x86_64", |
| flag_values = {":node_arch": "x86_64"}, |
| ) |
| |
| config_setting( |
| name = "node_arch_aarch64", |
| flag_values = {":node_arch": "aarch64"}, |
| ) |
| |
| config_setting( |
| name = "node_arch_inherit_x86_64", |
| constraint_values = ["@platforms//cpu:x86_64"], |
| flag_values = {":node_arch": ""}, |
| ) |
| |
| config_setting( |
| name = "node_arch_inherit_aarch64", |
| constraint_values = ["@platforms//cpu:aarch64"], |
| flag_values = {":node_arch": ""}, |
| ) |
| |
| go_library( |
| name = "metroctl_lib", |
| srcs = [ |
| "cmd_certs.go", |
| "cmd_cluster.go", |
| "cmd_cluster_configure.go", |
| "cmd_cluster_takeownership.go", |
| "cmd_install.go", |
| "cmd_install_ssh.go", |
| "cmd_install_usb.go", |
| "cmd_k8s_configure.go", |
| "cmd_k8scredplugin.go", |
| "cmd_node.go", |
| "cmd_node_approve.go", |
| "cmd_node_logs.go", |
| "cmd_node_metrics.go", |
| "cmd_node_set.go", |
| "main.go", |
| "rpc.go", |
| "table_node.go", |
| ], |
| importpath = "source.monogon.dev/metropolis/cli/metroctl", |
| visibility = ["//visibility:private"], |
| deps = [ |
| "//go/clitable", |
| "//go/logging", |
| "//metropolis/cli/flagdefs", |
| "//metropolis/cli/metroctl/core", |
| "//metropolis/node", |
| "//metropolis/node/core/rpc", |
| "//metropolis/node/core/rpc/resolver", |
| "//metropolis/proto/api", |
| "//metropolis/proto/common", |
| "//osbase/logtree", |
| "//osbase/logtree/proto", |
| "//osbase/net/sshtakeover", |
| "//osbase/oci", |
| "//osbase/oci/registry", |
| "//osbase/structfs", |
| "//version", |
| "@com_github_adrg_xdg//:xdg", |
| "@com_github_schollz_progressbar_v3//:progressbar", |
| "@com_github_spf13_cobra//:cobra", |
| "@io_bazel_rules_go//go/runfiles", |
| "@io_k8s_apimachinery//pkg/apis/meta/v1:meta", |
| "@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication", |
| "@io_k8s_utils//ptr", |
| "@org_golang_google_grpc//:grpc", |
| "@org_golang_google_protobuf//encoding/prototext", |
| "@org_golang_google_protobuf//proto", |
| "@org_golang_google_protobuf//types/known/fieldmaskpb", |
| "@org_golang_x_crypto//ssh", |
| "@org_golang_x_crypto//ssh/agent", |
| "@org_golang_x_net//proxy", |
| "@org_golang_x_sync//semaphore", |
| "@org_golang_x_term//:term", |
| ], |
| ) |
| |
| platform_transition_filegroup( |
| name = "node_arch_deps", |
| srcs = [ |
| "//metropolis/cli/takeover", |
| "//metropolis/installer:kernel", |
| "//metropolis/node:oci_image", |
| ], |
| target_platform = select( |
| { |
| ":node_arch_x86_64": "//build/platforms:linux_x86_64", |
| ":node_arch_aarch64": "//build/platforms:linux_aarch64", |
| ":node_arch_inherit_x86_64": "//build/platforms:linux_x86_64", |
| ":node_arch_inherit_aarch64": "//build/platforms:linux_aarch64", |
| }, |
| no_match_error = """ |
| Metropolis Node does not support this architecture. |
| Specify a supported architecture with the node_arch flag.""", |
| ), |
| visibility = ["//visibility:private"], |
| ) |
| |
| go_binary( |
| name = "metroctl", |
| data = select({ |
| ":buildkind_lite": [], |
| "//conditions:default": [":node_arch_deps"], |
| }), |
| embed = [":metroctl_lib"], |
| visibility = ["//visibility:public"], |
| ) |
| |
| # metroctl_lite is the same binary as normal metroctl, but without any data |
| # dependencies. |
| go_binary( |
| name = "metroctl_lite", |
| data = [], |
| embed = [":metroctl_lib"], |
| visibility = ["//metropolis:__subpackages__"], |
| ) |