blob: c74a4015d391daaa3a080a311e387619c9bb3b87 [file] [log] [blame]
/*
* Licensed to the 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.
* The 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 v1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
// Submarine is the Schema for the submarines API
type Submarine struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec SubmarineSpec `json:"spec,omitempty"`
Status SubmarineStatus `json:"status,omitempty"`
}
// SubmarineSpec defines the desired state of Submarine
type SubmarineSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Version is the submarine docker image version
Version string `json:"version"`
// Server is the spec that defines the submarine server
Server *SubmarineServerSpec `json:"server"`
// Database is the spec that defines the submarine database
Database *SubmarineDatabaseSpec `json:"database"`
// Virtualservice is the spec that defines the submarine virtualservice
Virtualservice *SubmarineVirtualserviceSpec `json:"virtualservice,omitempty"`
// Tensorboard is the spec that defines the submarine tensorboard
Tensorboard *SubmarineTensorboardSpec `json:"tensorboard"`
// Mlflow is the spec that defines the submarine mlflow
Mlflow *SubmarineMlflowSpec `json:"mlflow"`
// Minio is the spec that defines the submarine minio
Minio *SubmarineMinioSpec `json:"minio"`
// Common is the spec that defines some submarine common configurations
Common *SubmarineCommon `json:"common,omitempty"`
// SubmarineAgent is the spec that defines the submarine agent
Agent *SubmarineAgent `json:"agent,omitempty"`
}
// SubmarineServerSpec defines the desired submarine server
type SubmarineServerSpec struct {
// Image is the submarine server's docker image
Image string `json:"image,omitempty"`
// Replicas is the number of submarine server's replica
// +kubebuilder:validation:Minimum=1
Replicas *int32 `json:"replicas"`
// Envs is the extra environments that submarine server requires
Env []corev1.EnvVar `json:"env,omitempty"`
}
// SubmarineDatabaseSpec defines the desired submarine database
type SubmarineDatabaseSpec struct {
// Image is the submarine database's docker image
Image string `json:"image,omitempty"`
// StorageSize is the storage size of the database
StorageSize string `json:"storageSize"`
// MysqlRootPasswordSecret is the mysql root password secret, secret must have key MYSQL_ROOT_PASSWORD as root password
MysqlRootPasswordSecret string `json:"mysqlRootPasswordSecret,omitempty"`
}
// SubmarineVirtualserviceSpec defines the desired submarine virtualservice
type SubmarineVirtualserviceSpec struct {
// Hosts is the submarine virtualservice's destination hosts
Hosts []string `json:"hosts,omitempty"`
// Hosts is the submarine virtualservice's gateways
Gateways []string `json:"gateways,omitempty"`
}
// SubmarineTensorboardSpec defines the desired submarine tensorboard
type SubmarineTensorboardSpec struct {
// Image is the submarine tensorboard's docker image
Image string `json:"image,omitempty"`
// Enabled defines whether to enable tensorboard or not
Enabled *bool `json:"enabled"`
// StorageSize defines the storage size of tensorboard
StorageSize string `json:"storageSize"`
}
// SubmarineMlflowSpec defines the desired submarine mlflow
type SubmarineMlflowSpec struct {
// Image is the submarine mlflow's docker image
Image string `json:"image,omitempty"`
// Enabled defines whether to enable mlflow or not
Enabled *bool `json:"enabled"`
// StorageSize defines the storage size of mlflow
StorageSize string `json:"storageSize"`
}
// SubmarineMinioSpec defines the desired submarine minio
type SubmarineMinioSpec struct {
// Image is the submarine minio's docker image
Image string `json:"image,omitempty"`
// Enabled defines whether to enable minio or not
Enabled *bool `json:"enabled"`
// StorageSize defines the storage size of minio
StorageSize string `json:"storageSize"`
// AccessKey defines the access_key of minio
AccessKey string `json:"accessKey,omitempty"`
// SecretKey defines the secret_key of minio
SecretKey string `json:"secretKey,omitempty"`
}
// SubmarineCommon defines the observed common configuration
type SubmarineCommon struct {
// Image is the basic image used in initcontainer in some submarine resources
Image CommonImage `json:"image"`
}
// CommonImage defines the observed common image info
type CommonImage struct {
// McImage is the image used by the submarine service resource (server...) to check whether the minio is started in the initcontainer
McImage string `json:"mc,omitempty"`
// BusyboxImage is the image used by the submarine service resource (server...) to check whether the minio is started in the initcontainer
BusyboxImage string `json:"busybox,omitempty"`
// PullSecrets is a specified array of imagePullSecrets. This secrets must be manually created in the namespace.
PullSecrets []string `json:"pullSecrets,omitempty"`
}
// SubmarineStatus defines the observed state of Submarine
type SubmarineStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
// AvailableServerReplicas is the current available replicas of submarine server
AvailableServerReplicas int32 `json:"availableServerReplicas"`
// AvailableServerReplicas is the current available replicas of submarine database
AvailableDatabaseReplicas int32 `json:"availableDatabaseReplicas"`
// SubmarineState tells the overall submarine state.
SubmarineState `json:"submarineState,omitempty"`
}
// SubmarineAgent defines the observed submarine agent
type SubmarineAgent struct {
// Image is the submarine agent's docker image
Image string `json:"image,omitempty"`
}
// SubmarineStateType represents the type of the current state of a submarine.
type SubmarineStateType string
// Different states a submarine resource may be
const (
NewState SubmarineStateType = ""
CreatingState SubmarineStateType = "CREATING"
RunningState SubmarineStateType = "RUNNING"
FailedState SubmarineStateType = "FAILED"
)
// SubmarineState tells the current state of the submarine and an error message in case of failures.
type SubmarineState struct {
State SubmarineStateType `json:"state"`
ErrorMessage string `json:"errorMessage,omitempty"`
}
// +kubebuilder:object:root=true
// SubmarineList contains a list of Submarine
type SubmarineList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Submarine `json:"items"`
}
func init() {
SchemeBuilder.Register(&Submarine{}, &SubmarineList{})
}