m/n/k/reconciler: refactor resource interface

Replace interface{} with meta.Object, an interface which provides 
accessors for and is implemented by meta.ObjectMeta. List now returns 
the objects themselves instead of their names. This makes the reconciler 
slightly less generic, as it now only supports kubernetes objects.

This is a refactoring in preparation for implementing updates in the 
reconciler. There should be no change in behavior.

Change-Id: I97a4b1c0166a1e6fd0f247ee04e7c44cff570fd7
Reviewed-on: https://review.monogon.dev/c/monogon/+/2891
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
Vouch-Run-CI: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/kubernetes/reconciler/resources_runtimeclass.go b/metropolis/node/kubernetes/reconciler/resources_runtimeclass.go
index c202c0e..11c2fa0 100644
--- a/metropolis/node/kubernetes/reconciler/resources_runtimeclass.go
+++ b/metropolis/node/kubernetes/reconciler/resources_runtimeclass.go
@@ -28,19 +28,19 @@
 	kubernetes.Interface
 }
 
-func (r resourceRuntimeClasses) List(ctx context.Context) ([]string, error) {
+func (r resourceRuntimeClasses) List(ctx context.Context) ([]meta.Object, error) {
 	res, err := r.NodeV1beta1().RuntimeClasses().List(ctx, listBuiltins)
 	if err != nil {
 		return nil, err
 	}
-	objs := make([]string, len(res.Items))
-	for i, el := range res.Items {
-		objs[i] = el.ObjectMeta.Name
+	objs := make([]meta.Object, len(res.Items))
+	for i := range res.Items {
+		objs[i] = &res.Items[i]
 	}
 	return objs, nil
 }
 
-func (r resourceRuntimeClasses) Create(ctx context.Context, el interface{}) error {
+func (r resourceRuntimeClasses) Create(ctx context.Context, el meta.Object) error {
 	_, err := r.NodeV1beta1().RuntimeClasses().Create(ctx, el.(*node.RuntimeClass), meta.CreateOptions{})
 	return err
 }
@@ -49,16 +49,16 @@
 	return r.NodeV1beta1().RuntimeClasses().Delete(ctx, name, meta.DeleteOptions{})
 }
 
-func (r resourceRuntimeClasses) Expected() map[string]interface{} {
-	return map[string]interface{}{
-		"gvisor": &node.RuntimeClass{
+func (r resourceRuntimeClasses) Expected() []meta.Object {
+	return []meta.Object{
+		&node.RuntimeClass{
 			ObjectMeta: meta.ObjectMeta{
 				Name:   "gvisor",
 				Labels: builtinLabels(nil),
 			},
 			Handler: "runsc",
 		},
-		"runc": &node.RuntimeClass{
+		&node.RuntimeClass{
 			ObjectMeta: meta.ObjectMeta{
 				Name:   "runc",
 				Labels: builtinLabels(nil),