blob: cec00fdb2bbe9ccb2f3dc98a67f375d4bdd64a9f [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
55func (r resourceCSIDrivers) Delete(ctx context.Context, name string) error {
56 return r.StorageV1().CSIDrivers().Delete(ctx, name, meta.DeleteOptions{})
57}
58
Jan Schär7f727482024-03-25 13:03:51 +010059func (r resourceCSIDrivers) Expected() []meta.Object {
Lorenz Brun456961d2024-02-20 13:18:26 +010060 fsGroupPolicy := storage.FileFSGroupPolicy
Jan Schär7f727482024-03-25 13:03:51 +010061 return []meta.Object{
62 &storage.CSIDriver{
Serge Bazanskie6030f62020-06-03 17:52:59 +020063 ObjectMeta: meta.ObjectMeta{
64 Name: csiProvisionerName,
65 Labels: builtinLabels(nil),
66 },
67 Spec: storage.CSIDriverSpec{
68 AttachRequired: False(),
69 PodInfoOnMount: False(),
70 VolumeLifecycleModes: []storage.VolumeLifecycleMode{storage.VolumeLifecyclePersistent},
Lorenz Brun456961d2024-02-20 13:18:26 +010071 // TODO(#288): Make sure this gets applied to existing clusters
72 FSGroupPolicy: &fsGroupPolicy,
Serge Bazanskie6030f62020-06-03 17:52:59 +020073 },
74 },
75 }
76}