blob: 06eb3ac00c4f351de7ee7d9dc05dcaefe4282054 [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"
25)
26
Serge Bazanski216fe7b2021-05-21 18:36:16 +020027// TODO(q3k): this is duplicated with
28// //metropolis/node/kubernetes:provisioner.go; integrate this once
29// provisioner.go gets moved into a subpackage.
30// ONCHANGE(//metropolis/node/kubernetes:provisioner.go): needs to match
31// csiProvisionerName declared.
Serge Bazanski662b5b32020-12-21 13:49:00 +010032const csiProvisionerName = "dev.monogon.metropolis.vfs"
Serge Bazanskie6030f62020-06-03 17:52:59 +020033
34type resourceCSIDrivers struct {
35 kubernetes.Interface
36}
37
Jan Schär7f727482024-03-25 13:03:51 +010038func (r resourceCSIDrivers) List(ctx context.Context) ([]meta.Object, error) {
Serge Bazanskie6030f62020-06-03 17:52:59 +020039 res, err := r.StorageV1().CSIDrivers().List(ctx, listBuiltins)
40 if err != nil {
41 return nil, err
42 }
Jan Schär7f727482024-03-25 13:03:51 +010043 objs := make([]meta.Object, len(res.Items))
44 for i := range res.Items {
45 objs[i] = &res.Items[i]
Serge Bazanskie6030f62020-06-03 17:52:59 +020046 }
47 return objs, nil
48}
49
Jan Schär7f727482024-03-25 13:03:51 +010050func (r resourceCSIDrivers) Create(ctx context.Context, el meta.Object) error {
Serge Bazanskie6030f62020-06-03 17:52:59 +020051 _, err := r.StorageV1().CSIDrivers().Create(ctx, el.(*storage.CSIDriver), meta.CreateOptions{})
52 return err
53}
54
Jan Schär69f5f4e2024-05-15 10:32:07 +020055func (r resourceCSIDrivers) Update(ctx context.Context, el meta.Object) error {
56 _, err := r.StorageV1().CSIDrivers().Update(ctx, el.(*storage.CSIDriver), meta.UpdateOptions{})
57 return err
58}
59
60func (r resourceCSIDrivers) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
61 return r.StorageV1().CSIDrivers().Delete(ctx, name, opts)
Serge Bazanskie6030f62020-06-03 17:52:59 +020062}
63
Jan Schär7f727482024-03-25 13:03:51 +010064func (r resourceCSIDrivers) Expected() []meta.Object {
Lorenz Brun456961d2024-02-20 13:18:26 +010065 fsGroupPolicy := storage.FileFSGroupPolicy
Jan Schär7f727482024-03-25 13:03:51 +010066 return []meta.Object{
67 &storage.CSIDriver{
Serge Bazanskie6030f62020-06-03 17:52:59 +020068 ObjectMeta: meta.ObjectMeta{
69 Name: csiProvisionerName,
70 Labels: builtinLabels(nil),
71 },
72 Spec: storage.CSIDriverSpec{
73 AttachRequired: False(),
74 PodInfoOnMount: False(),
75 VolumeLifecycleModes: []storage.VolumeLifecycleMode{storage.VolumeLifecyclePersistent},
Jan Schär69f5f4e2024-05-15 10:32:07 +020076 StorageCapacity: False(),
77 FSGroupPolicy: &fsGroupPolicy,
78 RequiresRepublish: False(),
79 SELinuxMount: False(),
Serge Bazanskie6030f62020-06-03 17:52:59 +020080 },
81 },
82 }
83}