blob: 04d52a8e241056c250f424f31df80edcb7912ce5 [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
38func (r resourceCSIDrivers) List(ctx context.Context) ([]string, error) {
39 res, err := r.StorageV1().CSIDrivers().List(ctx, listBuiltins)
40 if err != nil {
41 return nil, err
42 }
43 objs := make([]string, len(res.Items))
44 for i, el := range res.Items {
45 objs[i] = el.ObjectMeta.Name
46 }
47 return objs, nil
48}
49
50func (r resourceCSIDrivers) Create(ctx context.Context, el interface{}) error {
51 _, 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
59func (r resourceCSIDrivers) Expected() map[string]interface{} {
60 return map[string]interface{}{
61 csiProvisionerName: &storage.CSIDriver{
62 ObjectMeta: meta.ObjectMeta{
63 Name: csiProvisionerName,
64 Labels: builtinLabels(nil),
65 },
66 Spec: storage.CSIDriverSpec{
67 AttachRequired: False(),
68 PodInfoOnMount: False(),
69 VolumeLifecycleModes: []storage.VolumeLifecycleMode{storage.VolumeLifecyclePersistent},
70 },
71 },
72 }
73}