blob: 6b4ec73196c4e4c5d7f7a662f1b8fe76d109310b [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 core "k8s.io/api/core/v1"
23 storage "k8s.io/api/storage/v1"
24 meta "k8s.io/apimachinery/pkg/apis/meta/v1"
25 "k8s.io/client-go/kubernetes"
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010026 "k8s.io/utils/ptr"
Serge Bazanskie6030f62020-06-03 17:52:59 +020027)
28
Serge Bazanskie6030f62020-06-03 17:52:59 +020029type resourceStorageClasses struct {
30 kubernetes.Interface
31}
32
Jan Schär7f727482024-03-25 13:03:51 +010033func (r resourceStorageClasses) List(ctx context.Context) ([]meta.Object, error) {
Serge Bazanskie6030f62020-06-03 17:52:59 +020034 res, err := r.StorageV1().StorageClasses().List(ctx, listBuiltins)
35 if err != nil {
36 return nil, err
37 }
Jan Schär7f727482024-03-25 13:03:51 +010038 objs := make([]meta.Object, len(res.Items))
39 for i := range res.Items {
40 objs[i] = &res.Items[i]
Serge Bazanskie6030f62020-06-03 17:52:59 +020041 }
42 return objs, nil
43}
44
Jan Schär7f727482024-03-25 13:03:51 +010045func (r resourceStorageClasses) Create(ctx context.Context, el meta.Object) error {
Serge Bazanskie6030f62020-06-03 17:52:59 +020046 _, err := r.StorageV1().StorageClasses().Create(ctx, el.(*storage.StorageClass), meta.CreateOptions{})
47 return err
48}
49
Jan Schär69f5f4e2024-05-15 10:32:07 +020050func (r resourceStorageClasses) Update(ctx context.Context, el meta.Object) error {
51 _, err := r.StorageV1().StorageClasses().Update(ctx, el.(*storage.StorageClass), meta.UpdateOptions{})
52 return err
53}
54
55func (r resourceStorageClasses) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
56 return r.StorageV1().StorageClasses().Delete(ctx, name, opts)
Serge Bazanskie6030f62020-06-03 17:52:59 +020057}
58
Jan Schär7f727482024-03-25 13:03:51 +010059func (r resourceStorageClasses) Expected() []meta.Object {
60 return []meta.Object{
61 &storage.StorageClass{
Serge Bazanskie6030f62020-06-03 17:52:59 +020062 ObjectMeta: meta.ObjectMeta{
63 Name: "local",
64 Labels: builtinLabels(nil),
65 Annotations: map[string]string{
66 "storageclass.kubernetes.io/is-default-class": "true",
Tim Windelschmidta8938da2024-09-13 22:34:01 +020067 "kubernetes.io/description": "local is the default storage class on Metropolis. " +
68 "It stores data on the node root disk and supports space limits, resizing and oversubscription but no snapshots. " +
Jan Schär73beb692024-11-27 17:47:09 +010069 "It is backed by XFS.",
Serge Bazanskie6030f62020-06-03 17:52:59 +020070 },
71 },
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010072 AllowVolumeExpansion: ptr.To(true),
Serge Bazanskie6030f62020-06-03 17:52:59 +020073 Provisioner: csiProvisionerName,
Jan Schärd1a8b642024-12-03 17:40:41 +010074 ReclaimPolicy: ptr.To(core.PersistentVolumeReclaimDelete),
75 VolumeBindingMode: ptr.To(storage.VolumeBindingWaitForFirstConsumer),
Tim Windelschmidta8938da2024-09-13 22:34:01 +020076 MountOptions: []string{
77 "exec",
78 "dev",
79 "suid",
80 },
81 },
Serge Bazanskie6030f62020-06-03 17:52:59 +020082 }
83}