/
core_trait_volume_types.go
85 lines (66 loc) · 2.63 KB
/
core_trait_volume_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
Copyright 2020 The Crossplane Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1alpha2
import (
runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/xishengcai/oam/pkg/oam"
)
var _ oam.Trait = &VolumeTrait{}
// A VolumeTraitSpec defines the desired state of a VolumeTrait.
type VolumeTraitSpec struct {
VolumeList []VolumeMountItem `json:"volumeList"`
// WorkloadReference to the workload this trait applies to.
WorkloadReference runtimev1alpha1.TypedReference `json:"workloadRef"`
}
// VolumeMountItem contains path of container
type VolumeMountItem struct {
ContainerIndex int `json:"containerIndex"`
IsInitContainer bool `json:"isInitContainer,omitempty"`
Paths []PathItem `json:"paths"`
}
// PathItem define storageClass, size, path, name
type PathItem struct {
// set volumeMount and volumes link name
Name string `json:"name"`
// Path is the name of directory in container
Path string `json:"path"`
// It's either PVC or HostPath
PersistentVolumeClaim string `json:"persistentVolumeClaim,omitempty"`
HostPath *v1.HostPathVolumeSource `json:"hostPath,omitempty"`
}
// A VolumeTraitStatus represents the observed state of a
// VolumeTrait.
type VolumeTraitStatus struct {
runtimev1alpha1.ConditionedStatus `json:",inline"`
// Resources managed by this containerised workload.
Resources []runtimev1alpha1.TypedReference `json:"resources,omitempty"`
}
// +kubebuilder:object:root=true
// A VolumeTrait determines how many replicas a workload should have.
// +kubebuilder:resource:categories={crossplane,oam}
// +kubebuilder:subresource:status
type VolumeTrait struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec VolumeTraitSpec `json:"spec,omitempty"`
Status VolumeTraitStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// VolumeTraitList contains a list of VolumeTrait.
type VolumeTraitList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []VolumeTrait `json:"items"`
}