Skip to content

Commit

Permalink
New design of api
Browse files Browse the repository at this point in the history
  • Loading branch information
adibrastegarnia committed Apr 27, 2020
1 parent 9ad46d3 commit 1b211d8
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 101 deletions.
8 changes: 4 additions & 4 deletions deploy/examples/raft-storage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ metadata:
app: raft-database
spec:
image: atomix/raft-storage-node:v0.1.0
imagePullPolicy: IfNotPresent
replicas: 1
partitionsPerCluster: 3
volumeClaimTemplates:
- metadata:
name: data
data:
metadata:
name: "test"
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
storage: "1Gi"
---
apiVersion: cloud.atomix.io/v1beta3
kind: Database
Expand Down
162 changes: 79 additions & 83 deletions deploy/raft-storage-controller.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,94 +29,90 @@ spec:
type: string
replicas:
type: integer
min: 1
max: 9
default: 1
partitionsPerCluster:
type: integer
min: 1
max: 1024
default: 1
volumeClaimTemplates:
type: array
"items": {
"type": object,
"required": [
"metadata",
"spec"
],
"properties": {
"metadata": {
"$id": "#/items/properties/metadata",
"type": "object",
"default": {},
"required": [
"name"
],
"properties": {
"name": {
"$id": "#/items/properties/metadata/properties/name",
"type": "string",
"default": "",

}
}
},
"spec": {
"$id": "#/items/properties/spec",
"type": "object",
"default": {},
"required": [
"accessModes",
"storageClassName",
"resources"
],
"properties": {
"accessModes": {
"$id": "#/items/properties/spec/properties/accessModes",
"type": "array",
"default": [],

"items": {
"$id": "#/items/properties/spec/properties/accessModes/items",
"type": "string",
"default": "",

}
},
"storageClassName": {
"$id": "#/items/properties/spec/properties/storageClassName",
"type": "string",
"default": "",

},
"resources": {
"$id": "#/items/properties/spec/properties/resources",
"type": "object",
"default": {},
"required": [
"requests"
],
"properties": {
"requests": {
"$id": "#/items/properties/spec/properties/resources/properties/requests",
"type": "object",
"default": {},
"required": [
"storage"
],
"properties": {
"storage": {
"$id": "#/items/properties/spec/properties/resources/properties/requests/properties/storage",
"type": "string",
"default": "",

}
}
}
}
}
}
}
}
}

"$id": "#/properties/volumeClaimTemplates"
type: object
default: {}
examples:
- data:
spec:
resources:
requests:
storage: 1Gi
storageClassName: standard
accessModes:
- ReadWriteOnce
metadata:
name: test
required:
- data
properties:
data:
"$id": "#/properties/volumeClaimTemplates/properties/data"
type: object
default: {}
required:
- metadata
- spec
properties:
metadata:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/metadata"
type: object
default: {}
required:
- name
properties:
name:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/metadata/properties/name"
type: string
default: ''
spec:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec"
type: object
default: {}
required:
- accessModes
- storageClassName
- resources
properties:
accessModes:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/accessModes"
type: array
default: []
items:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/accessModes/items"
type: string
default: ''
storageClassName:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/storageClassName"
type: string
default: ''
resources:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/resources"
type: object
default: {}
required:
- requests
properties:
requests:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/resources/properties/requests"
type: object
default: {}
required:
- storage
properties:
storage:
"$id": "#/properties/volumeClaimTemplates/properties/data/properties/spec/properties/resources/properties/requests/properties/storage"
type: string
default: ''
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
Expand Down
4 changes: 2 additions & 2 deletions pkg/apis/storage/v1beta1/storageclass.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ type RaftStorageClassSpec struct {
// ImagePullPolicy is the pull policy to apply
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`

// VolumeClaim
VolumeClaimTemplates []corev1.PersistentVolumeClaim `json:"volumeClaimTemplates,omitempty"`
// VolumeClaimTemplates are volume claim templates to define persistent volumes
VolumeClaimTemplates VolumeClaimTemplates `json:"volumeClaimTemplates,omitempty"`
}

// +genclient
Expand Down
24 changes: 24 additions & 0 deletions pkg/apis/storage/v1beta1/volumeclaim.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright 2020-present Open Networking Foundation.
//
// 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 v1beta1

import (
corev1 "k8s.io/api/core/v1"
)

// VolumeClaimTemplates k8s persistent volume claims
type VolumeClaimTemplates struct {
Data corev1.PersistentVolumeClaim `json:"data,omitempty"`
}
41 changes: 29 additions & 12 deletions pkg/controller/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,9 +306,35 @@ func (r *Reconciler) addStatefulSet(database *v1beta3.Database, storage *v1beta1
newConfigVolume(database, storage, cluster),
}

if storage.Spec.VolumeClaimTemplates == nil {
var volumeClaimTemplates []corev1.PersistentVolumeClaim
var volumeMounts []corev1.VolumeMount

configVolumeMount := corev1.VolumeMount{
Name: configVolume,
MountPath: configPath,
}

volumeMounts = append(volumeMounts, configVolumeMount)
if storage.Spec.VolumeClaimTemplates.Data.Name == "" {
dataVolumeMount := corev1.VolumeMount{
Name: dataVolume,
MountPath: dataPath,
}
volumes = append(volumes, newDataVolume(database, storage, cluster))
volumeMounts = append(volumeMounts, dataVolumeMount)
} else {
dataVolumeMount := corev1.VolumeMount{
Name: storage.Spec.VolumeClaimTemplates.Data.Name,
MountPath: dataPath,
}
volumeMounts = append(volumeMounts, dataVolumeMount)
persistentVolumeClaim := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: storage.Spec.VolumeClaimTemplates.Data.Name,
},
Spec: storage.Spec.VolumeClaimTemplates.Data.Spec,
}
volumeClaimTemplates = append(volumeClaimTemplates, persistentVolumeClaim)
}

set := &appsv1.StatefulSet{
Expand All @@ -327,7 +353,7 @@ func (r *Reconciler) addStatefulSet(database *v1beta3.Database, storage *v1beta1
Type: appsv1.RollingUpdateStatefulSetStrategyType,
},
PodManagementPolicy: appsv1.ParallelPodManagement,
VolumeClaimTemplates: storage.Spec.VolumeClaimTemplates,
VolumeClaimTemplates: volumeClaimTemplates,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: newClusterLabels(database, cluster),
Expand Down Expand Up @@ -382,16 +408,7 @@ func (r *Reconciler) addStatefulSet(database *v1beta3.Database, storage *v1beta1
InitialDelaySeconds: 60,
TimeoutSeconds: 10,
},
VolumeMounts: []corev1.VolumeMount{
{
Name: dataVolume,
MountPath: dataPath,
},
{
Name: configVolume,
MountPath: configPath,
},
},
VolumeMounts: volumeMounts,
},
},
Volumes: volumes,
Expand Down

0 comments on commit 1b211d8

Please sign in to comment.