blob: 72476ecd6dc4a4c3e3ab7e2fb4afc49f736c3259 [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"
26)
27
28var reclaimPolicyDelete = core.PersistentVolumeReclaimDelete
29var waitForConsumerBinding = storage.VolumeBindingWaitForFirstConsumer
30
31type resourceStorageClasses struct {
32 kubernetes.Interface
33}
34
35func (r resourceStorageClasses) List(ctx context.Context) ([]string, error) {
36 res, err := r.StorageV1().StorageClasses().List(ctx, listBuiltins)
37 if err != nil {
38 return nil, err
39 }
40 objs := make([]string, len(res.Items))
41 for i, el := range res.Items {
42 objs[i] = el.ObjectMeta.Name
43 }
44 return objs, nil
45}
46
47func (r resourceStorageClasses) Create(ctx context.Context, el interface{}) error {
48 _, err := r.StorageV1().StorageClasses().Create(ctx, el.(*storage.StorageClass), meta.CreateOptions{})
49 return err
50}
51
52func (r resourceStorageClasses) Delete(ctx context.Context, name string) error {
53 return r.StorageV1().StorageClasses().Delete(ctx, name, meta.DeleteOptions{})
54}
55
56func (r resourceStorageClasses) Expected() map[string]interface{} {
57 return map[string]interface{}{
58 "local": &storage.StorageClass{
59 ObjectMeta: meta.ObjectMeta{
60 Name: "local",
61 Labels: builtinLabels(nil),
62 Annotations: map[string]string{
63 "storageclass.kubernetes.io/is-default-class": "true",
64 },
65 },
66 AllowVolumeExpansion: True(),
67 Provisioner: csiProvisionerName,
68 ReclaimPolicy: &reclaimPolicyDelete,
69 VolumeBindingMode: &waitForConsumerBinding,
70 },
71 }
72}