blob: 00605a0a767fd33d59b7ccc5dcfcb135465a2cc1 [file] [log] [blame]
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you 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 v1alpha1
import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// StorageSpec defines the desired state of Storage
type StorageSpec struct {
// Type of storage.
// +kubebuilder:validation:Required
Type string `json:"type,omitempty"`
// ConnectType is the way to connect storage(e.g. external,internal).
// +kubebuilder:validation:Required
ConnectType string `json:"connectType,omitempty"`
// Address of external storage address.
// +kubebuilder:validation:Optional
ConnectAddress string `json:"address,omitempty"`
// Version of storage.
// +kubebuilder:validation:Required
Version string `json:"version,omitempty"`
// Image is the storage Docker image to deploy.
// +kubebuilder:validation:Optional
Image string `json:"image,omitempty"`
// Instance is the number of storage.
// +kubebuilder:validation:Optional
Instances int32 `json:"instances,omitempty"`
// Security relevant settings
// +kubebuilder:validation:Optional
Security SecuritySpec `json:"security,omitempty"`
// ServiceName relevant settings
ServiceName string `json:"servicename,omitempty"`
// Config holds the Storage configuration.
Config []corev1.EnvVar `json:"config,omitempty"`
//ResourceCnfig relevant settings
ResourceCnfig Resource `json:"resource,omitempty"`
}
// SecuritySpec defines the security setting of Storage
type SecuritySpec struct {
// SSLConfig of storage .
// +kubebuilder:validation:Optional
TLS bool `json:"tls,omitempty"`
// UserConfig of storage .
// +kubebuilder:validation:Optional
User UserSpec `json:"user,omitempty"`
}
// UserSpec defines the user security setting of Storage
type UserSpec struct {
// SecretName of storage user .
// +kubebuilder:validation:Optional
SecretName string `json:"secretName,omitempty"`
}
type Resource struct {
Limit string `json:"limit,omitempty"`
Requests string `json:"requests,omitempty"`
}
// StorageStatus defines the observed state of Storage
type StorageStatus struct {
// Represents the latest available observations of the underlying statefulset's current state.
// +kubebuilder:validation:Optional
Conditions []appsv1.StatefulSetCondition `json:"conditions,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Instances",type="string",JSONPath=".spec.instances",description="The number of expected instance"
// +kubebuilder:printcolumn:name="Type",type="string",JSONPath=".spec.type",description="The type of storage"
// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version",description="The version"
// +kubebuilder:printcolumn:name="ConnectType",type="string",JSONPath=".spec.connectType",description="the way to connect storage"
// Storage is the Schema for the storages API
type Storage struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec StorageSpec `json:"spec,omitempty"`
Status StorageStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// StorageList contains a list of Storage
type StorageList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Storage `json:"items"`
}
func init() {
SchemeBuilder.Register(&Storage{}, &StorageList{})
}