mirror of
https://github.com/rancher/types.git
synced 2025-06-29 15:06:48 +00:00
235 lines
8.1 KiB
Go
235 lines
8.1 KiB
Go
package v1
|
||
|
||
import (
|
||
"k8s.io/api/core/v1"
|
||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
"k8s.io/apimachinery/pkg/runtime"
|
||
)
|
||
|
||
var SchemeBuilder = runtime.NewSchemeBuilder()
|
||
|
||
type ClusterConditionType string
|
||
|
||
const (
|
||
// ClusterConditionReady Cluster ready to serve API (healthy when true, unehalthy when false)
|
||
ClusterConditionReady = "Ready"
|
||
// ClusterConditionProvisioned Cluster is provisioned
|
||
ClusterConditionProvisioned = "Provisioned"
|
||
// ClusterConditionUpdating Cluster is being updating (upgrading, scaling up)
|
||
ClusterConditionUpdating = "Updating"
|
||
// ClusterConditionSufficientDisk true when all cluster nodes have sufficient disk
|
||
ClusterConditionSufficientDisk = "SufficientDisk"
|
||
// ClusterConditionSufficientMemory true when all cluster nodes have sufficient memory
|
||
ClusterConditionSufficientMemory = "SufficientMemory"
|
||
// ClusterConditionNoDiskPressure true when all cluster nodes have no disk pressure
|
||
ClusterConditionNoDiskPressure = "NoDiskPressure"
|
||
// More conditions can be added if unredlying controllers request it
|
||
)
|
||
|
||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
||
type Cluster struct {
|
||
metav1.TypeMeta `json:",inline"`
|
||
// Standard object’s metadata. More info:
|
||
// https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata
|
||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||
// Specification of the desired behavior of the the cluster. More info:
|
||
// https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status
|
||
Spec ClusterSpec `json:"spec"`
|
||
// Most recent observed status of the cluster. More info:
|
||
// https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status
|
||
Status *ClusterStatus `json:"status"`
|
||
}
|
||
|
||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
||
type ClusterList struct {
|
||
metav1.TypeMeta `json:",inline"`
|
||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||
Items []Cluster
|
||
}
|
||
|
||
type ClusterSpec struct {
|
||
GKEConfig *GKEConfig `json:"gkeConfig,omitempty"`
|
||
AKSConfig *AKSConfig `json:"aksConfig,omitempty"`
|
||
RKEConfig *RKEConfig `json:"rkeConfig,omitempty"`
|
||
}
|
||
|
||
type ClusterStatus struct {
|
||
//Conditions represent the latest available observations of an object's current state:
|
||
//More info: https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#typical-status-properties
|
||
Conditions []ClusterCondition `json:"conditions,omitempty"`
|
||
//Component statuses will represent cluster's components (etcd/controller/scheduler) health
|
||
// https://kubernetes.io/docs/api-reference/v1.8/#componentstatus-v1-core
|
||
ComponentStatuses []ClusterComponentStatus
|
||
APIEndpoint string `json:"apiEndpoint,omitempty"`
|
||
ServiceAccountToken string `json:"serviceAccountToken,omitempty"`
|
||
CACert string `json:"caCert,omitempty"`
|
||
Capacity v1.ResourceList `json:"capacity,omitempty"`
|
||
Allocatable v1.ResourceList `json:"allocatable,omitempty"`
|
||
}
|
||
|
||
type ClusterComponentStatus struct {
|
||
Name string
|
||
Conditions []v1.ComponentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"`
|
||
}
|
||
|
||
type ClusterCondition struct {
|
||
// Type of cluster condition.
|
||
Type ClusterConditionType `json:"type"`
|
||
// Status of the condition, one of True, False, Unknown.
|
||
Status v1.ConditionStatus `json:"status"`
|
||
// The last time this condition was updated.
|
||
LastUpdateTime string `json:"lastUpdateTime,omitempty"`
|
||
// Last time the condition transitioned from one status to another.
|
||
LastTransitionTime string `json:"lastTransitionTime,omitempty"`
|
||
// The reason for the condition's last transition.
|
||
Reason string `json:"reason,omitempty"`
|
||
}
|
||
|
||
type GKEConfig struct {
|
||
// ProjectID is the ID of your project to use when creating a cluster
|
||
ProjectID string `json:"projectId,omitempty"`
|
||
// The zone to launch the cluster
|
||
Zone string `json:"zone,omitempty"`
|
||
// The IP address range of the container pods
|
||
ClusterIpv4Cidr string `json:"clusterIpv4Cidr,omitempty"`
|
||
// An optional description of this cluster
|
||
Description string `json:"description,omitempty"`
|
||
// The number of nodes to create in this cluster
|
||
InitialNodeCount int64 `json:"initialNodeCount,omitempty"`
|
||
// Size of the disk attached to each node
|
||
DiskSizeGb int64 `json:"diskSizeGb,omitempty"`
|
||
// The name of a Google Compute Engine
|
||
MachineType string `json:"machineType,omitempty"`
|
||
// the initial kubernetes version
|
||
InitialClusterVersion string `json:"initialClusterVersion,omitempty"`
|
||
// The map of Kubernetes labels (key/value pairs) to be applied
|
||
// to each node.
|
||
Labels map[string]string `json:"labels,omitempty"`
|
||
// The path to the credential file(key.json)
|
||
CredentialPath string `json:"credentialPath,omitempty"`
|
||
// Enable alpha feature
|
||
EnableAlphaFeature bool `json:"enableAlphaFeature,omitempty"`
|
||
// NodePool id
|
||
NodePoolID string `json:"nodePoolId,omitempty"`
|
||
|
||
// Update Config
|
||
UpdateConfig gkeUpdateConfig `json:"updateConfig,omitempty"`
|
||
}
|
||
|
||
type gkeUpdateConfig struct {
|
||
// the number of node
|
||
NodeCount int64 `json:"nodeCount,omitempty"`
|
||
// Master kubernetes version
|
||
MasterVersion string `json:"masterVersion,omitempty"`
|
||
// Node kubernetes version
|
||
NodeVersion string `json:"nodeVersion,omitempty"`
|
||
}
|
||
|
||
type AKSConfig struct {
|
||
//TBD
|
||
}
|
||
|
||
type RKEConfig struct {
|
||
// Kubernetes nodes
|
||
Hosts []RKEConfigHost `yaml:"hosts"`
|
||
// Kubernetes components
|
||
Services RKEConfigServices `yaml:"services"`
|
||
// Network plugin used in the kubernetes cluster (flannel, calico)
|
||
NetworkPlugin string `yaml:"network_plugin"`
|
||
// Authentication type used in the cluster (default: x509)
|
||
AuthType string `yaml:"auth_type"`
|
||
}
|
||
|
||
type RKEConfigHost struct {
|
||
// SSH IP address of the host
|
||
IP string `yaml:"ip"`
|
||
// Advertised address that will be used for components communication
|
||
AdvertiseAddress string `yaml:"advertise_address"`
|
||
// Host role in kubernetes cluster (controlplane, worker, or etcd)
|
||
Role []string `yaml:"role"`
|
||
// Hostname of the host
|
||
Hostname string `yaml:"hostname"`
|
||
// SSH usesr that will be used by RKE
|
||
User string `yaml:"user"`
|
||
// Docker socket on the host that will be used in tunneling
|
||
DockerSocket string `yaml:"docker_socket"`
|
||
}
|
||
|
||
type RKEConfigServices struct {
|
||
// Etcd Service
|
||
Etcd ETCDService `yaml:"etcd"`
|
||
// KubeAPI Service
|
||
KubeAPI KubeAPIService `yaml:"kube-api"`
|
||
// KubeController Service
|
||
KubeController KubeControllerService `yaml:"kube-controller"`
|
||
// Scheduler Service
|
||
Scheduler SchedulerService `yaml:"scheduler"`
|
||
// Kubelet Service
|
||
Kubelet KubeletService `yaml:"kubelet"`
|
||
// KubeProxy Service
|
||
Kubeproxy KubeproxyService `yaml:"kubeproxy"`
|
||
}
|
||
|
||
type ETCDService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
}
|
||
|
||
type KubeAPIService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
// Virtual IP range that will be used by Kubernetes services
|
||
ServiceClusterIPRange string `yaml:"service_cluster_ip_range"`
|
||
}
|
||
|
||
type KubeControllerService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
// CIDR Range for Pods in cluster
|
||
ClusterCIDR string `yaml:"cluster_cidr"`
|
||
// Virtual IP range that will be used by Kubernetes services
|
||
ServiceClusterIPRange string `yaml:"service_cluster_ip_range"`
|
||
}
|
||
|
||
type KubeletService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
// Domain of the cluster (default: "cluster.local")
|
||
ClusterDomain string `yaml:"cluster_domain"`
|
||
// The image whose network/ipc namespaces containers in each pod will use
|
||
InfraContainerImage string `yaml:"infra_container_image"`
|
||
// Cluster DNS service ip
|
||
ClusterDNSServer string `yaml:"cluster_dns_server"`
|
||
}
|
||
|
||
type KubeproxyService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
}
|
||
|
||
type SchedulerService struct {
|
||
// Base service properties
|
||
baseService `yaml:",inline"`
|
||
}
|
||
|
||
type baseService struct {
|
||
// Docker image of the service
|
||
Image string `yaml:"image"`
|
||
}
|
||
|
||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
||
type ClusterNode struct {
|
||
v1.Node
|
||
}
|
||
|
||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
||
type ClusterNodeList struct {
|
||
metav1.TypeMeta `json:",inline"`
|
||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||
Items []ClusterNode
|
||
}
|