cloud: move takeover to agent/takeover

The takeover package is tightly coupled with the agent, so lets move it
there.

Change-Id: I38ae69d4f4e7a4f6a04b0fefb5f127ebc71f5961
Reviewed-on: https://review.monogon.dev/c/monogon/+/2790
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/cloud/agent/BUILD.bazel b/cloud/agent/BUILD.bazel
index 96e3a38..6f5ce82 100644
--- a/cloud/agent/BUILD.bazel
+++ b/cloud/agent/BUILD.bazel
@@ -1,6 +1,4 @@
 load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
-load("//metropolis/node/build/fwprune:def.bzl", "fsspec_linux_firmware")
-load("//metropolis/node/build:def.bzl", "node_initramfs")
 
 go_library(
     name = "agent_lib",
@@ -57,25 +55,3 @@
         "@com_github_stretchr_testify//assert",
     ],
 )
-
-fsspec_linux_firmware(
-    name = "firmware",
-    firmware_files = ["@linux-firmware//:all_files"],
-    kernel = "//third_party/linux",
-    metadata = "@linux-firmware//:metadata",
-)
-
-node_initramfs(
-    name = "initramfs",
-    files = {
-        ":agent": "/init",
-        "@com_github_coredns_coredns//:coredns": "/kubernetes/bin/coredns",
-        "//metropolis/node/core/network/dns:resolv.conf": "/etc/resolv.conf",
-        "@cacerts//file": "/etc/ssl/cert.pem",
-    },
-    fsspecs = [
-        "//metropolis/node/build:earlydev.fsspec",
-        ":firmware",
-    ],
-    visibility = ["//cloud:__subpackages__"],
-)
diff --git a/cloud/agent/e2e/BUILD.bazel b/cloud/agent/e2e/BUILD.bazel
index 16e9731..d05031b 100644
--- a/cloud/agent/e2e/BUILD.bazel
+++ b/cloud/agent/e2e/BUILD.bazel
@@ -4,7 +4,7 @@
     name = "e2e_test",
     srcs = ["main_test.go"],
     data = [
-        "//cloud/agent:initramfs",
+        "//cloud/agent/takeover:initramfs",
         "//metropolis/installer/test/testos:testos_bundle",
         "//third_party/edk2:firmware",
         "//third_party/linux",
diff --git a/cloud/agent/e2e/main_test.go b/cloud/agent/e2e/main_test.go
index a422d0e..4fd06ec 100644
--- a/cloud/agent/e2e/main_test.go
+++ b/cloud/agent/e2e/main_test.go
@@ -184,7 +184,7 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	initramfsOrigPath, err := runfiles.Rlocation("_main/cloud/agent/initramfs.cpio.zst")
+	initramfsOrigPath, err := runfiles.Rlocation("_main/cloud/agent/takeover/initramfs.cpio.zst")
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/cloud/agent/takeover/BUILD.bazel b/cloud/agent/takeover/BUILD.bazel
new file mode 100644
index 0000000..855621a
--- /dev/null
+++ b/cloud/agent/takeover/BUILD.bazel
@@ -0,0 +1,71 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+load("//metropolis/node/build/mkucode:def.bzl", "cpio_ucode")
+load("//build/static_binary_tarball:def.bzl", "static_binary_tarball")
+load("//metropolis/node/build:def.bzl", "node_initramfs")
+load("//metropolis/node/build/fwprune:def.bzl", "fsspec_linux_firmware")
+
+go_library(
+    name = "takeover_lib",
+    srcs = ["takeover.go"],
+    embedsrcs = [
+        "//third_party/linux",  #keep
+        ":ucode",  #keep
+        ":initramfs",  #keep
+    ],
+    importpath = "source.monogon.dev/cloud/agent/takeover",
+    visibility = ["//visibility:private"],
+    deps = [
+        "//cloud/agent/api",
+        "//metropolis/pkg/bootparam",
+        "//metropolis/pkg/kexec",
+        "//net/dump",
+        "//net/proto",
+        "@com_github_cavaliergopher_cpio//:cpio",
+        "@com_github_klauspost_compress//zstd",
+        "@org_golang_google_protobuf//proto",
+        "@org_golang_x_sys//unix",
+    ],
+)
+
+node_initramfs(
+    name = "initramfs",
+    files = {
+        "//cloud/agent:agent": "/init",
+        "@com_github_coredns_coredns//:coredns": "/kubernetes/bin/coredns",
+        "//metropolis/node/core/network/dns:resolv.conf": "/etc/resolv.conf",
+        "@cacerts//file": "/etc/ssl/cert.pem",
+    },
+    fsspecs = [
+        "//metropolis/node/build:earlydev.fsspec",
+        ":firmware",
+    ],
+    visibility = ["//cloud/agent:__subpackages__"],
+)
+
+go_binary(
+    name = "takeover",
+    embed = [":takeover_lib"],
+    visibility = ["//visibility:public"],
+)
+
+cpio_ucode(
+    name = "ucode",
+    ucode = {
+        "@linux-firmware//:amd_ucode": "AuthenticAMD",
+        "@intel_ucode//:fam6h": "GenuineIntel",
+    },
+)
+
+fsspec_linux_firmware(
+    name = "firmware",
+    firmware_files = ["@linux-firmware//:all_files"],
+    kernel = "//third_party/linux",
+    metadata = "@linux-firmware//:metadata",
+)
+
+# Used by container_images, forces a static build of the test_agent.
+static_binary_tarball(
+    name = "takeover_layer",
+    executable = ":takeover",
+    visibility = ["//visibility:public"],
+)
diff --git a/cloud/takeover/e2e/BUILD.bazel b/cloud/agent/takeover/e2e/BUILD.bazel
similarity index 93%
rename from cloud/takeover/e2e/BUILD.bazel
rename to cloud/agent/takeover/e2e/BUILD.bazel
index b03e4be..1cdd840 100644
--- a/cloud/takeover/e2e/BUILD.bazel
+++ b/cloud/agent/takeover/e2e/BUILD.bazel
@@ -4,7 +4,7 @@
     name = "e2e_test",
     srcs = ["main_test.go"],
     data = [
-        "//cloud/takeover",
+        "//cloud/agent/takeover",
         "//third_party/edk2:firmware",
         "@debian_11_cloudimage//file",
     ],
diff --git a/cloud/takeover/e2e/main_test.go b/cloud/agent/takeover/e2e/main_test.go
similarity index 98%
rename from cloud/takeover/e2e/main_test.go
rename to cloud/agent/takeover/e2e/main_test.go
index 4a74633..6d489eb 100644
--- a/cloud/takeover/e2e/main_test.go
+++ b/cloud/agent/takeover/e2e/main_test.go
@@ -158,7 +158,7 @@
 	if err := takeoverFile.Chmod(0o755); err != nil {
 		t.Fatal(err)
 	}
-	takeoverPath, err := runfiles.Rlocation("_main/cloud/takeover/takeover_/takeover")
+	takeoverPath, err := runfiles.Rlocation("_main/cloud/agent/takeover/takeover_/takeover")
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/cloud/takeover/takeover.go b/cloud/agent/takeover/takeover.go
similarity index 99%
rename from cloud/takeover/takeover.go
rename to cloud/agent/takeover/takeover.go
index e265b30..d313174 100644
--- a/cloud/takeover/takeover.go
+++ b/cloud/agent/takeover/takeover.go
@@ -44,7 +44,7 @@
 //go:embed ucode.cpio
 var ucode []byte
 
-//go:embed cloud/agent/initramfs.cpio.zst
+//go:embed initramfs.cpio.zst
 var initramfs []byte
 
 // newMemfile creates a new file which is not located on a specific filesystem,
diff --git a/cloud/shepherd/mini/BUILD.bazel b/cloud/shepherd/mini/BUILD.bazel
index 5587d1e..63ad885 100644
--- a/cloud/shepherd/mini/BUILD.bazel
+++ b/cloud/shepherd/mini/BUILD.bazel
@@ -43,7 +43,7 @@
     entrypoint = ["/mini"],
     tars = [
         ":mini_layer",
-        "//cloud/takeover:takeover_layer",
+        "//cloud/agent/takeover:takeover_layer",
     ],
     visibility = ["//visibility:public"],
     workdir = "/app",
diff --git a/cloud/shepherd/provider/equinix/BUILD.bazel b/cloud/shepherd/provider/equinix/BUILD.bazel
index 2ea4ee7..727fbcf 100644
--- a/cloud/shepherd/provider/equinix/BUILD.bazel
+++ b/cloud/shepherd/provider/equinix/BUILD.bazel
@@ -72,7 +72,7 @@
     entrypoint = ["/equinix"],
     tars = [
         ":equinix_layer",
-        "//cloud/takeover:takeover_layer",
+        "//cloud/agent/takeover:takeover_layer",
     ],
     visibility = ["//visibility:public"],
     workdir = "/app",
diff --git a/cloud/takeover/BUILD.bazel b/cloud/takeover/BUILD.bazel
deleted file mode 100644
index 103ea2d..0000000
--- a/cloud/takeover/BUILD.bazel
+++ /dev/null
@@ -1,47 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
-load("//metropolis/node/build/mkucode:def.bzl", "cpio_ucode")
-load("//build/static_binary_tarball:def.bzl", "static_binary_tarball")
-
-go_library(
-    name = "takeover_lib",
-    srcs = ["takeover.go"],
-    embedsrcs = [
-        "//third_party/linux",  #keep
-        ":ucode",  #keep
-        "//cloud/agent:initramfs",  #keep
-    ],
-    importpath = "source.monogon.dev/cloud/takeover",
-    visibility = ["//visibility:private"],
-    deps = [
-        "//cloud/agent/api",
-        "//metropolis/pkg/bootparam",
-        "//metropolis/pkg/kexec",
-        "//net/dump",
-        "//net/proto",
-        "@com_github_cavaliergopher_cpio//:cpio",
-        "@com_github_klauspost_compress//zstd",
-        "@org_golang_google_protobuf//proto",
-        "@org_golang_x_sys//unix",
-    ],
-)
-
-go_binary(
-    name = "takeover",
-    embed = [":takeover_lib"],
-    visibility = ["//visibility:public"],
-)
-
-cpio_ucode(
-    name = "ucode",
-    ucode = {
-        "@linux-firmware//:amd_ucode": "AuthenticAMD",
-        "@intel_ucode//:fam6h": "GenuineIntel",
-    },
-)
-
-# Used by container_images, forces a static build of the test_agent.
-static_binary_tarball(
-    name = "takeover_layer",
-    executable = ":takeover",
-    visibility = ["//visibility:public"],
-)