blob: a1ca29f4d7c5ef986978d7f0e4e7bb5e4121518a [file] [log] [blame]
Serge Bazanskie6030f62020-06-03 17:52:59 +02001// Copyright 2020 The Monogon Project Authors.
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17package reconciler
18
19import (
20 "context"
21
22 storage "k8s.io/api/storage/v1"
23 meta "k8s.io/apimachinery/pkg/apis/meta/v1"
24 "k8s.io/client-go/kubernetes"
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010025 "k8s.io/utils/ptr"
Serge Bazanskie6030f62020-06-03 17:52:59 +020026)
27
Serge Bazanski216fe7b2021-05-21 18:36:16 +020028// TODO(q3k): this is duplicated with
29// //metropolis/node/kubernetes:provisioner.go; integrate this once
30// provisioner.go gets moved into a subpackage.
31// ONCHANGE(//metropolis/node/kubernetes:provisioner.go): needs to match
32// csiProvisionerName declared.
Serge Bazanski662b5b32020-12-21 13:49:00 +010033const csiProvisionerName = "dev.monogon.metropolis.vfs"
Serge Bazanskie6030f62020-06-03 17:52:59 +020034
35type resourceCSIDrivers struct {
36 kubernetes.Interface
37}
38
Jan Schär7f727482024-03-25 13:03:51 +010039func (r resourceCSIDrivers) List(ctx context.Context) ([]meta.Object, error) {
Serge Bazanskie6030f62020-06-03 17:52:59 +020040 res, err := r.StorageV1().CSIDrivers().List(ctx, listBuiltins)
41 if err != nil {
42 return nil, err
43 }
Jan Schär7f727482024-03-25 13:03:51 +010044 objs := make([]meta.Object, len(res.Items))
45 for i := range res.Items {
46 objs[i] = &res.Items[i]
Serge Bazanskie6030f62020-06-03 17:52:59 +020047 }
48 return objs, nil
49}
50
Jan Schär7f727482024-03-25 13:03:51 +010051func (r resourceCSIDrivers) Create(ctx context.Context, el meta.Object) error {
Serge Bazanskie6030f62020-06-03 17:52:59 +020052 _, err := r.StorageV1().CSIDrivers().Create(ctx, el.(*storage.CSIDriver), meta.CreateOptions{})
53 return err
54}
55
Jan Schär69f5f4e2024-05-15 10:32:07 +020056func (r resourceCSIDrivers) Update(ctx context.Context, el meta.Object) error {
57 _, err := r.StorageV1().CSIDrivers().Update(ctx, el.(*storage.CSIDriver), meta.UpdateOptions{})
58 return err
59}
60
61func (r resourceCSIDrivers) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
62 return r.StorageV1().CSIDrivers().Delete(ctx, name, opts)
Serge Bazanskie6030f62020-06-03 17:52:59 +020063}
64
Jan Schär7f727482024-03-25 13:03:51 +010065func (r resourceCSIDrivers) Expected() []meta.Object {
Lorenz Brun456961d2024-02-20 13:18:26 +010066 fsGroupPolicy := storage.FileFSGroupPolicy
Jan Schär7f727482024-03-25 13:03:51 +010067 return []meta.Object{
68 &storage.CSIDriver{
Serge Bazanskie6030f62020-06-03 17:52:59 +020069 ObjectMeta: meta.ObjectMeta{
70 Name: csiProvisionerName,
71 Labels: builtinLabels(nil),
72 },
73 Spec: storage.CSIDriverSpec{
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010074 AttachRequired: ptr.To(false),
75 PodInfoOnMount: ptr.To(false),
Serge Bazanskie6030f62020-06-03 17:52:59 +020076 VolumeLifecycleModes: []storage.VolumeLifecycleMode{storage.VolumeLifecyclePersistent},
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010077 StorageCapacity: ptr.To(false),
Jan Schär69f5f4e2024-05-15 10:32:07 +020078 FSGroupPolicy: &fsGroupPolicy,
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010079 RequiresRepublish: ptr.To(false),
80 SELinuxMount: ptr.To(false),
Serge Bazanskie6030f62020-06-03 17:52:59 +020081 },
82 },
83 }
84}