blob: c909854de56be0ad8118984c015bc2f92522e892 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
Serge Bazanskie6030f62020-06-03 17:52:59 +02002// SPDX-License-Identifier: Apache-2.0
Serge Bazanskie6030f62020-06-03 17:52:59 +02003
4package reconciler
5
6import (
7 "context"
8
9 storage "k8s.io/api/storage/v1"
10 meta "k8s.io/apimachinery/pkg/apis/meta/v1"
11 "k8s.io/client-go/kubernetes"
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010012 "k8s.io/utils/ptr"
Serge Bazanskie6030f62020-06-03 17:52:59 +020013)
14
Serge Bazanski216fe7b2021-05-21 18:36:16 +020015// TODO(q3k): this is duplicated with
16// //metropolis/node/kubernetes:provisioner.go; integrate this once
17// provisioner.go gets moved into a subpackage.
18// ONCHANGE(//metropolis/node/kubernetes:provisioner.go): needs to match
19// csiProvisionerName declared.
Serge Bazanski662b5b32020-12-21 13:49:00 +010020const csiProvisionerName = "dev.monogon.metropolis.vfs"
Serge Bazanskie6030f62020-06-03 17:52:59 +020021
22type resourceCSIDrivers struct {
23 kubernetes.Interface
24}
25
Jan Schär7f727482024-03-25 13:03:51 +010026func (r resourceCSIDrivers) List(ctx context.Context) ([]meta.Object, error) {
Serge Bazanskie6030f62020-06-03 17:52:59 +020027 res, err := r.StorageV1().CSIDrivers().List(ctx, listBuiltins)
28 if err != nil {
29 return nil, err
30 }
Jan Schär7f727482024-03-25 13:03:51 +010031 objs := make([]meta.Object, len(res.Items))
32 for i := range res.Items {
33 objs[i] = &res.Items[i]
Serge Bazanskie6030f62020-06-03 17:52:59 +020034 }
35 return objs, nil
36}
37
Jan Schär7f727482024-03-25 13:03:51 +010038func (r resourceCSIDrivers) Create(ctx context.Context, el meta.Object) error {
Serge Bazanskie6030f62020-06-03 17:52:59 +020039 _, err := r.StorageV1().CSIDrivers().Create(ctx, el.(*storage.CSIDriver), meta.CreateOptions{})
40 return err
41}
42
Jan Schär69f5f4e2024-05-15 10:32:07 +020043func (r resourceCSIDrivers) Update(ctx context.Context, el meta.Object) error {
44 _, err := r.StorageV1().CSIDrivers().Update(ctx, el.(*storage.CSIDriver), meta.UpdateOptions{})
45 return err
46}
47
48func (r resourceCSIDrivers) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
49 return r.StorageV1().CSIDrivers().Delete(ctx, name, opts)
Serge Bazanskie6030f62020-06-03 17:52:59 +020050}
51
Jan Schär7f727482024-03-25 13:03:51 +010052func (r resourceCSIDrivers) Expected() []meta.Object {
Jan Schär7f727482024-03-25 13:03:51 +010053 return []meta.Object{
54 &storage.CSIDriver{
Serge Bazanskie6030f62020-06-03 17:52:59 +020055 ObjectMeta: meta.ObjectMeta{
56 Name: csiProvisionerName,
57 Labels: builtinLabels(nil),
58 },
59 Spec: storage.CSIDriverSpec{
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010060 AttachRequired: ptr.To(false),
61 PodInfoOnMount: ptr.To(false),
Serge Bazanskie6030f62020-06-03 17:52:59 +020062 VolumeLifecycleModes: []storage.VolumeLifecycleMode{storage.VolumeLifecyclePersistent},
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010063 StorageCapacity: ptr.To(false),
Jan Schärd1a8b642024-12-03 17:40:41 +010064 FSGroupPolicy: ptr.To(storage.FileFSGroupPolicy),
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010065 RequiresRepublish: ptr.To(false),
66 SELinuxMount: ptr.To(false),
Serge Bazanskie6030f62020-06-03 17:52:59 +020067 },
68 },
69 }
70}