blob: 1a1dda14187e011ffbb169601e76e309ae2c1895 [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 core "k8s.io/api/core/v1"
10 storage "k8s.io/api/storage/v1"
11 meta "k8s.io/apimachinery/pkg/apis/meta/v1"
12 "k8s.io/client-go/kubernetes"
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010013 "k8s.io/utils/ptr"
Serge Bazanskie6030f62020-06-03 17:52:59 +020014)
15
Serge Bazanskie6030f62020-06-03 17:52:59 +020016type resourceStorageClasses struct {
17 kubernetes.Interface
18}
19
Jan Schär7f727482024-03-25 13:03:51 +010020func (r resourceStorageClasses) List(ctx context.Context) ([]meta.Object, error) {
Serge Bazanskie6030f62020-06-03 17:52:59 +020021 res, err := r.StorageV1().StorageClasses().List(ctx, listBuiltins)
22 if err != nil {
23 return nil, err
24 }
Jan Schär7f727482024-03-25 13:03:51 +010025 objs := make([]meta.Object, len(res.Items))
26 for i := range res.Items {
27 objs[i] = &res.Items[i]
Serge Bazanskie6030f62020-06-03 17:52:59 +020028 }
29 return objs, nil
30}
31
Jan Schär7f727482024-03-25 13:03:51 +010032func (r resourceStorageClasses) Create(ctx context.Context, el meta.Object) error {
Serge Bazanskie6030f62020-06-03 17:52:59 +020033 _, err := r.StorageV1().StorageClasses().Create(ctx, el.(*storage.StorageClass), meta.CreateOptions{})
34 return err
35}
36
Jan Schär69f5f4e2024-05-15 10:32:07 +020037func (r resourceStorageClasses) Update(ctx context.Context, el meta.Object) error {
38 _, err := r.StorageV1().StorageClasses().Update(ctx, el.(*storage.StorageClass), meta.UpdateOptions{})
39 return err
40}
41
42func (r resourceStorageClasses) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
43 return r.StorageV1().StorageClasses().Delete(ctx, name, opts)
Serge Bazanskie6030f62020-06-03 17:52:59 +020044}
45
Jan Schär7f727482024-03-25 13:03:51 +010046func (r resourceStorageClasses) Expected() []meta.Object {
47 return []meta.Object{
48 &storage.StorageClass{
Serge Bazanskie6030f62020-06-03 17:52:59 +020049 ObjectMeta: meta.ObjectMeta{
50 Name: "local",
51 Labels: builtinLabels(nil),
52 Annotations: map[string]string{
53 "storageclass.kubernetes.io/is-default-class": "true",
Tim Windelschmidta8938da2024-09-13 22:34:01 +020054 "kubernetes.io/description": "local is the default storage class on Metropolis. " +
55 "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 +010056 "It is backed by XFS.",
Serge Bazanskie6030f62020-06-03 17:52:59 +020057 },
58 },
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +010059 AllowVolumeExpansion: ptr.To(true),
Serge Bazanskie6030f62020-06-03 17:52:59 +020060 Provisioner: csiProvisionerName,
Jan Schärd1a8b642024-12-03 17:40:41 +010061 ReclaimPolicy: ptr.To(core.PersistentVolumeReclaimDelete),
62 VolumeBindingMode: ptr.To(storage.VolumeBindingWaitForFirstConsumer),
Tim Windelschmidta8938da2024-09-13 22:34:01 +020063 MountOptions: []string{
64 "exec",
65 "dev",
66 "suid",
67 },
68 },
Serge Bazanskie6030f62020-06-03 17:52:59 +020069 }
70}