kubeadm: Remove the never-used .Etcd.SelfHosted field
This commit is contained in:
		@@ -64,12 +64,6 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			|||||||
				Writable:  false,
 | 
									Writable:  false,
 | 
				
			||||||
			}}
 | 
								}}
 | 
				
			||||||
			obj.Etcd.ExtraArgs = map[string]string{"foo": "foo"}
 | 
								obj.Etcd.ExtraArgs = map[string]string{"foo": "foo"}
 | 
				
			||||||
			obj.Etcd.SelfHosted = &kubeadm.SelfHostedEtcd{
 | 
					 | 
				
			||||||
				CertificatesDir:    "/etc/kubernetes/pki/etcd",
 | 
					 | 
				
			||||||
				ClusterServiceName: "etcd-cluster",
 | 
					 | 
				
			||||||
				EtcdVersion:        "v0.1.0",
 | 
					 | 
				
			||||||
				OperatorVersion:    "v0.1.0",
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			obj.KubeletConfiguration = kubeadm.KubeletConfiguration{
 | 
								obj.KubeletConfiguration = kubeadm.KubeletConfiguration{
 | 
				
			||||||
				BaseConfig: &kubeletconfigv1beta1.KubeletConfiguration{
 | 
									BaseConfig: &kubeletconfigv1beta1.KubeletConfiguration{
 | 
				
			||||||
					StaticPodPath: "foo",
 | 
										StaticPodPath: "foo",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -186,8 +186,6 @@ type Etcd struct {
 | 
				
			|||||||
	// If empty, automatically populated by kubeadm using the image
 | 
						// If empty, automatically populated by kubeadm using the image
 | 
				
			||||||
	// repository and default etcd version.
 | 
						// repository and default etcd version.
 | 
				
			||||||
	Image string
 | 
						Image string
 | 
				
			||||||
	// SelfHosted holds configuration for self-hosting etcd.
 | 
					 | 
				
			||||||
	SelfHosted *SelfHostedEtcd
 | 
					 | 
				
			||||||
	// ServerCertSANs sets extra Subject Alternative Names for the etcd server
 | 
						// ServerCertSANs sets extra Subject Alternative Names for the etcd server
 | 
				
			||||||
	// signing cert. This is currently used for the etcd static-pod.
 | 
						// signing cert. This is currently used for the etcd static-pod.
 | 
				
			||||||
	ServerCertSANs []string
 | 
						ServerCertSANs []string
 | 
				
			||||||
@@ -196,19 +194,6 @@ type Etcd struct {
 | 
				
			|||||||
	PeerCertSANs []string
 | 
						PeerCertSANs []string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SelfHostedEtcd describes options required to configure self-hosted etcd.
 | 
					 | 
				
			||||||
type SelfHostedEtcd struct {
 | 
					 | 
				
			||||||
	// CertificatesDir represents the directory where all etcd TLS assets are stored.
 | 
					 | 
				
			||||||
	// Defaults to "/etc/kubernetes/pki/etcd".
 | 
					 | 
				
			||||||
	CertificatesDir string
 | 
					 | 
				
			||||||
	// ClusterServiceName is the name of the service that load balances the etcd cluster.
 | 
					 | 
				
			||||||
	ClusterServiceName string
 | 
					 | 
				
			||||||
	// EtcdVersion is the version of etcd running in the cluster.
 | 
					 | 
				
			||||||
	EtcdVersion string
 | 
					 | 
				
			||||||
	// OperatorVersion is the version of the etcd-operator to use.
 | 
					 | 
				
			||||||
	OperatorVersion string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
					// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NodeConfiguration contains elements describing a particular node.
 | 
					// NodeConfiguration contains elements describing a particular node.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
				
			|||||||
	// Add non-generated conversion functions
 | 
						// Add non-generated conversion functions
 | 
				
			||||||
	err := scheme.AddConversionFuncs(
 | 
						err := scheme.AddConversionFuncs(
 | 
				
			||||||
		Convert_v1alpha1_MasterConfiguration_To_kubeadm_MasterConfiguration,
 | 
							Convert_v1alpha1_MasterConfiguration_To_kubeadm_MasterConfiguration,
 | 
				
			||||||
 | 
							Convert_v1alpha1_Etcd_To_kubeadm_Etcd,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -45,6 +46,15 @@ func Convert_v1alpha1_MasterConfiguration_To_kubeadm_MasterConfiguration(in *Mas
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_v1alpha1_Etcd_To_kubeadm_Etcd(in *Etcd, out *kubeadm.Etcd, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if err := autoConvert_v1alpha1_Etcd_To_kubeadm_Etcd(in, out, s); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// No need to transfer information about .Etcd.Selfhosted to v1alpha2
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UpgradeCloudProvider handles the removal of .CloudProvider as smoothly as possible
 | 
					// UpgradeCloudProvider handles the removal of .CloudProvider as smoothly as possible
 | 
				
			||||||
func UpgradeCloudProvider(in *MasterConfiguration, out *kubeadm.MasterConfiguration) {
 | 
					func UpgradeCloudProvider(in *MasterConfiguration, out *kubeadm.MasterConfiguration) {
 | 
				
			||||||
	if len(in.CloudProvider) != 0 {
 | 
						if len(in.CloudProvider) != 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,14 +57,6 @@ const (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// DefaultEtcdDataDir defines default location of etcd where static pods will save data to
 | 
						// DefaultEtcdDataDir defines default location of etcd where static pods will save data to
 | 
				
			||||||
	DefaultEtcdDataDir = "/var/lib/etcd"
 | 
						DefaultEtcdDataDir = "/var/lib/etcd"
 | 
				
			||||||
	// DefaultEtcdClusterSize defines the default cluster size when using the etcd-operator
 | 
					 | 
				
			||||||
	DefaultEtcdClusterSize = 3
 | 
					 | 
				
			||||||
	// DefaultEtcdOperatorVersion defines the default version of the etcd-operator to use
 | 
					 | 
				
			||||||
	DefaultEtcdOperatorVersion = "v0.6.0"
 | 
					 | 
				
			||||||
	// DefaultEtcdCertDir represents the directory where PKI assets are stored for self-hosted etcd
 | 
					 | 
				
			||||||
	DefaultEtcdCertDir = "/etc/kubernetes/pki/etcd"
 | 
					 | 
				
			||||||
	// DefaultEtcdClusterServiceName is the default name of the service backing the etcd cluster
 | 
					 | 
				
			||||||
	DefaultEtcdClusterServiceName = "etcd-cluster"
 | 
					 | 
				
			||||||
	// DefaultProxyBindAddressv4 is the default bind address when the advertise address is v4
 | 
						// DefaultProxyBindAddressv4 is the default bind address when the advertise address is v4
 | 
				
			||||||
	DefaultProxyBindAddressv4 = "0.0.0.0"
 | 
						DefaultProxyBindAddressv4 = "0.0.0.0"
 | 
				
			||||||
	// DefaultProxyBindAddressv6 is the default bind address when the advertise address is v6
 | 
						// DefaultProxyBindAddressv6 is the default bind address when the advertise address is v6
 | 
				
			||||||
@@ -142,7 +134,6 @@ func SetDefaults_MasterConfiguration(obj *MasterConfiguration) {
 | 
				
			|||||||
		obj.ClusterName = DefaultClusterName
 | 
							obj.ClusterName = DefaultClusterName
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SetDefaultsEtcdSelfHosted(obj)
 | 
					 | 
				
			||||||
	if features.Enabled(obj.FeatureGates, features.DynamicKubeletConfig) {
 | 
						if features.Enabled(obj.FeatureGates, features.DynamicKubeletConfig) {
 | 
				
			||||||
		SetDefaults_KubeletConfiguration(obj)
 | 
							SetDefaults_KubeletConfiguration(obj)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -197,27 +188,6 @@ func SetDefaults_NodeConfiguration(obj *NodeConfiguration) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SetDefaultsEtcdSelfHosted sets defaults for self-hosted etcd if used
 | 
					 | 
				
			||||||
func SetDefaultsEtcdSelfHosted(obj *MasterConfiguration) {
 | 
					 | 
				
			||||||
	if obj.Etcd.SelfHosted != nil {
 | 
					 | 
				
			||||||
		if obj.Etcd.SelfHosted.ClusterServiceName == "" {
 | 
					 | 
				
			||||||
			obj.Etcd.SelfHosted.ClusterServiceName = DefaultEtcdClusterServiceName
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if obj.Etcd.SelfHosted.EtcdVersion == "" {
 | 
					 | 
				
			||||||
			obj.Etcd.SelfHosted.EtcdVersion = constants.DefaultEtcdVersion
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if obj.Etcd.SelfHosted.OperatorVersion == "" {
 | 
					 | 
				
			||||||
			obj.Etcd.SelfHosted.OperatorVersion = DefaultEtcdOperatorVersion
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if obj.Etcd.SelfHosted.CertificatesDir == "" {
 | 
					 | 
				
			||||||
			obj.Etcd.SelfHosted.CertificatesDir = DefaultEtcdCertDir
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SetDefaults_KubeletConfiguration assigns default values to kubelet
 | 
					// SetDefaults_KubeletConfiguration assigns default values to kubelet
 | 
				
			||||||
func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) {
 | 
					func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) {
 | 
				
			||||||
	if obj.KubeletConfiguration.BaseConfig == nil {
 | 
						if obj.KubeletConfiguration.BaseConfig == nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -178,27 +178,12 @@ type Etcd struct {
 | 
				
			|||||||
	// If empty, automatically populated by kubeadm using the image
 | 
						// If empty, automatically populated by kubeadm using the image
 | 
				
			||||||
	// repository and default etcd version.
 | 
						// repository and default etcd version.
 | 
				
			||||||
	Image string `json:"image"`
 | 
						Image string `json:"image"`
 | 
				
			||||||
	// SelfHosted holds configuration for self-hosting etcd.
 | 
					 | 
				
			||||||
	SelfHosted *SelfHostedEtcd `json:"selfHosted,omitempty"`
 | 
					 | 
				
			||||||
	// ServerCertSANs sets extra Subject Alternative Names for the etcd server signing cert.
 | 
						// ServerCertSANs sets extra Subject Alternative Names for the etcd server signing cert.
 | 
				
			||||||
	ServerCertSANs []string `json:"serverCertSANs,omitempty"`
 | 
						ServerCertSANs []string `json:"serverCertSANs,omitempty"`
 | 
				
			||||||
	// PeerCertSANs sets extra Subject Alternative Names for the etcd peer signing cert.
 | 
						// PeerCertSANs sets extra Subject Alternative Names for the etcd peer signing cert.
 | 
				
			||||||
	PeerCertSANs []string `json:"peerCertSANs,omitempty"`
 | 
						PeerCertSANs []string `json:"peerCertSANs,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SelfHostedEtcd describes options required to configure self-hosted etcd.
 | 
					 | 
				
			||||||
type SelfHostedEtcd struct {
 | 
					 | 
				
			||||||
	// CertificatesDir represents the directory where all etcd TLS assets are stored.
 | 
					 | 
				
			||||||
	// Defaults to "/etc/kubernetes/pki/etcd".
 | 
					 | 
				
			||||||
	CertificatesDir string `json:"certificatesDir"`
 | 
					 | 
				
			||||||
	// ClusterServiceName is the name of the service that load balances the etcd cluster.
 | 
					 | 
				
			||||||
	ClusterServiceName string `json:"clusterServiceName"`
 | 
					 | 
				
			||||||
	// EtcdVersion is the version of etcd running in the cluster.
 | 
					 | 
				
			||||||
	EtcdVersion string `json:"etcdVersion"`
 | 
					 | 
				
			||||||
	// OperatorVersion is the version of the etcd-operator to use.
 | 
					 | 
				
			||||||
	OperatorVersion string `json:"operatorVersion"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
					// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NodeConfiguration contains elements describing a particular node.
 | 
					// NodeConfiguration contains elements describing a particular node.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,54 +104,6 @@ func TestPrintConfiguration(t *testing.T) {
 | 
				
			|||||||
	nodeName: ""
 | 
						nodeName: ""
 | 
				
			||||||
	token: ""
 | 
						token: ""
 | 
				
			||||||
	unifiedControlPlaneImage: ""
 | 
						unifiedControlPlaneImage: ""
 | 
				
			||||||
`),
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			cfg: &kubeadmapi.MasterConfiguration{
 | 
					 | 
				
			||||||
				KubernetesVersion: "v1.7.1",
 | 
					 | 
				
			||||||
				Etcd: kubeadmapi.Etcd{
 | 
					 | 
				
			||||||
					SelfHosted: &kubeadmapi.SelfHostedEtcd{
 | 
					 | 
				
			||||||
						CertificatesDir:    "/var/foo",
 | 
					 | 
				
			||||||
						ClusterServiceName: "foo",
 | 
					 | 
				
			||||||
						EtcdVersion:        "v0.1.0",
 | 
					 | 
				
			||||||
						OperatorVersion:    "v0.1.0",
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			expectedBytes: []byte(`[upgrade/config] Configuration used:
 | 
					 | 
				
			||||||
	api:
 | 
					 | 
				
			||||||
	  advertiseAddress: ""
 | 
					 | 
				
			||||||
	  bindPort: 0
 | 
					 | 
				
			||||||
	  controlPlaneEndpoint: ""
 | 
					 | 
				
			||||||
	apiVersion: kubeadm.k8s.io/v1alpha2
 | 
					 | 
				
			||||||
	auditPolicy:
 | 
					 | 
				
			||||||
	  logDir: ""
 | 
					 | 
				
			||||||
	  path: ""
 | 
					 | 
				
			||||||
	certificatesDir: ""
 | 
					 | 
				
			||||||
	etcd:
 | 
					 | 
				
			||||||
	  caFile: ""
 | 
					 | 
				
			||||||
	  certFile: ""
 | 
					 | 
				
			||||||
	  dataDir: ""
 | 
					 | 
				
			||||||
	  endpoints: null
 | 
					 | 
				
			||||||
	  image: ""
 | 
					 | 
				
			||||||
	  keyFile: ""
 | 
					 | 
				
			||||||
	  selfHosted:
 | 
					 | 
				
			||||||
	    certificatesDir: /var/foo
 | 
					 | 
				
			||||||
	    clusterServiceName: foo
 | 
					 | 
				
			||||||
	    etcdVersion: v0.1.0
 | 
					 | 
				
			||||||
	    operatorVersion: v0.1.0
 | 
					 | 
				
			||||||
	imageRepository: ""
 | 
					 | 
				
			||||||
	kind: MasterConfiguration
 | 
					 | 
				
			||||||
	kubeProxy: {}
 | 
					 | 
				
			||||||
	kubeletConfiguration: {}
 | 
					 | 
				
			||||||
	kubernetesVersion: v1.7.1
 | 
					 | 
				
			||||||
	networking:
 | 
					 | 
				
			||||||
	  dnsDomain: ""
 | 
					 | 
				
			||||||
	  podSubnet: ""
 | 
					 | 
				
			||||||
	  serviceSubnet: ""
 | 
					 | 
				
			||||||
	nodeName: ""
 | 
					 | 
				
			||||||
	token: ""
 | 
					 | 
				
			||||||
	unifiedControlPlaneImage: ""
 | 
					 | 
				
			||||||
`),
 | 
					`),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
Copyright 2017 The Kubernetes 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.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen=package
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package spec
 | 
					 | 
				
			||||||
@@ -1,205 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
Copyright 2017 The Kubernetes 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.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// This file was collated from types used in:
 | 
					 | 
				
			||||||
// https://github.com/coreos/etcd-operator/tree/e7f18696bbdc127fa028a99ca8166a8519749328/pkg/apis/etcd/v1beta2.
 | 
					 | 
				
			||||||
// When kubeadm moves to its own repo and controls its own dependencies,
 | 
					 | 
				
			||||||
// this file will be no longer be needed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package spec
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	// CRDResourceKind is the CRD resource kind
 | 
					 | 
				
			||||||
	CRDResourceKind = "EtcdCluster"
 | 
					 | 
				
			||||||
	// CRDResourcePlural is the CRD resource plural
 | 
					 | 
				
			||||||
	CRDResourcePlural = "etcdclusters"
 | 
					 | 
				
			||||||
	groupName         = "etcd.database.coreos.com"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var (
 | 
					 | 
				
			||||||
	// SchemeBuilder is a scheme builder
 | 
					 | 
				
			||||||
	SchemeBuilder = runtime.NewSchemeBuilder(AddKnownTypes)
 | 
					 | 
				
			||||||
	// AddToScheme adds to the scheme
 | 
					 | 
				
			||||||
	AddToScheme = SchemeBuilder.AddToScheme
 | 
					 | 
				
			||||||
	// SchemeGroupVersion is the scheme version
 | 
					 | 
				
			||||||
	SchemeGroupVersion = schema.GroupVersion{Group: groupName, Version: "v1beta2"}
 | 
					 | 
				
			||||||
	// CRDName is the name of the CRD
 | 
					 | 
				
			||||||
	CRDName = CRDResourcePlural + "." + groupName
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Resource gets an EtcdCluster GroupResource for a specified resource
 | 
					 | 
				
			||||||
func Resource(resource string) schema.GroupResource {
 | 
					 | 
				
			||||||
	return SchemeGroupVersion.WithResource(resource).GroupResource()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// AddKnownTypes adds the set of types defined in this package to the supplied scheme.
 | 
					 | 
				
			||||||
func AddKnownTypes(s *runtime.Scheme) error {
 | 
					 | 
				
			||||||
	s.AddKnownTypes(SchemeGroupVersion,
 | 
					 | 
				
			||||||
		&EtcdCluster{},
 | 
					 | 
				
			||||||
		&EtcdClusterList{},
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	metav1.AddToGroupVersion(s, SchemeGroupVersion)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EtcdClusterList is a list of etcd clusters.
 | 
					 | 
				
			||||||
type EtcdClusterList struct {
 | 
					 | 
				
			||||||
	metav1.TypeMeta `json:",inline"`
 | 
					 | 
				
			||||||
	// Standard list metadata
 | 
					 | 
				
			||||||
	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
 | 
					 | 
				
			||||||
	metav1.ListMeta `json:"metadata,omitempty"`
 | 
					 | 
				
			||||||
	Items           []EtcdCluster `json:"items"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +genclient
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EtcdCluster represents an etcd cluster
 | 
					 | 
				
			||||||
type EtcdCluster struct {
 | 
					 | 
				
			||||||
	metav1.TypeMeta   `json:",inline"`
 | 
					 | 
				
			||||||
	metav1.ObjectMeta `json:"metadata,omitempty"`
 | 
					 | 
				
			||||||
	Spec              ClusterSpec `json:"spec"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ClusterSpec represents a cluster spec
 | 
					 | 
				
			||||||
type ClusterSpec struct {
 | 
					 | 
				
			||||||
	// Size is the expected size of the etcd cluster.
 | 
					 | 
				
			||||||
	// The etcd-operator will eventually make the size of the running
 | 
					 | 
				
			||||||
	// cluster equal to the expected size.
 | 
					 | 
				
			||||||
	// The vaild range of the size is from 1 to 7.
 | 
					 | 
				
			||||||
	Size int `json:"size"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// BaseImage is the base etcd image name that will be used to launch
 | 
					 | 
				
			||||||
	// etcd clusters. This is useful for private registries, etc.
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	// If image is not set, default is quay.io/coreos/etcd
 | 
					 | 
				
			||||||
	BaseImage string `json:"baseImage"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Version is the expected version of the etcd cluster.
 | 
					 | 
				
			||||||
	// The etcd-operator will eventually make the etcd cluster version
 | 
					 | 
				
			||||||
	// equal to the expected version.
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	// The version must follow the [semver]( http://semver.org) format, for example "3.1.8".
 | 
					 | 
				
			||||||
	// Only etcd released versions are supported: https://github.com/coreos/etcd/releases
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	// If version is not set, default is "3.1.8".
 | 
					 | 
				
			||||||
	Version string `json:"version,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Paused is to pause the control of the operator for the etcd cluster.
 | 
					 | 
				
			||||||
	Paused bool `json:"paused,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Pod defines the policy to create pod for the etcd pod.
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	// Updating Pod does not take effect on any existing etcd pods.
 | 
					 | 
				
			||||||
	Pod *PodPolicy `json:"pod,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// SelfHosted determines if the etcd cluster is used for a self-hosted
 | 
					 | 
				
			||||||
	// Kubernetes cluster.
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	// SelfHosted is a cluster initialization configuration. It cannot be updated.
 | 
					 | 
				
			||||||
	SelfHosted *SelfHostedPolicy `json:"selfHosted,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// etcd cluster TLS configuration
 | 
					 | 
				
			||||||
	TLS *TLSPolicy `json:"TLS,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// PodPolicy defines the policy to create pod for the etcd container.
 | 
					 | 
				
			||||||
type PodPolicy struct {
 | 
					 | 
				
			||||||
	// Labels specifies the labels to attach to pods the operator creates for the
 | 
					 | 
				
			||||||
	// etcd cluster.
 | 
					 | 
				
			||||||
	// "app" and "etcd_*" labels are reserved for the internal use of the etcd operator.
 | 
					 | 
				
			||||||
	// Do not overwrite them.
 | 
					 | 
				
			||||||
	Labels map[string]string `json:"labels,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// NodeSelector specifies a map of key-value pairs. For the pod to be eligible
 | 
					 | 
				
			||||||
	// to run on a node, the node must have each of the indicated key-value pairs as
 | 
					 | 
				
			||||||
	// labels.
 | 
					 | 
				
			||||||
	NodeSelector map[string]string `json:"nodeSelector,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// AntiAffinity determines if the etcd-operator tries to avoid putting
 | 
					 | 
				
			||||||
	// the etcd members in the same cluster onto the same node.
 | 
					 | 
				
			||||||
	AntiAffinity bool `json:"antiAffinity,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Resources is the resource requirements for the etcd container.
 | 
					 | 
				
			||||||
	// This field cannot be updated once the cluster is created.
 | 
					 | 
				
			||||||
	Resources v1.ResourceRequirements `json:"resources,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Tolerations specifies the pod's tolerations.
 | 
					 | 
				
			||||||
	Tolerations []v1.Toleration `json:"tolerations,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// List of environment variables to set in the etcd container.
 | 
					 | 
				
			||||||
	// This is used to configure etcd process. etcd cluster cannot be created, when
 | 
					 | 
				
			||||||
	// bad environement variables are provided. Do not overwrite any flags used to
 | 
					 | 
				
			||||||
	// bootstrap the cluster (for example `--initial-cluster` flag).
 | 
					 | 
				
			||||||
	// This field cannot be updated.
 | 
					 | 
				
			||||||
	EtcdEnv []v1.EnvVar `json:"etcdEnv,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// By default, kubernetes will mount a service account token into the etcd pods.
 | 
					 | 
				
			||||||
	// AutomountServiceAccountToken indicates whether pods running with the service account should have an API token automatically mounted.
 | 
					 | 
				
			||||||
	AutomountServiceAccountToken *bool `json:"automountServiceAccountToken,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TLSPolicy defines the TLS policy of an etcd cluster
 | 
					 | 
				
			||||||
type TLSPolicy struct {
 | 
					 | 
				
			||||||
	// StaticTLS enables user to generate static x509 certificates and keys,
 | 
					 | 
				
			||||||
	// put them into Kubernetes secrets, and specify them into here.
 | 
					 | 
				
			||||||
	Static *StaticTLS `json:"static,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// StaticTLS represents static TLS
 | 
					 | 
				
			||||||
type StaticTLS struct {
 | 
					 | 
				
			||||||
	// Member contains secrets containing TLS certs used by each etcd member pod.
 | 
					 | 
				
			||||||
	Member *MemberSecret `json:"member,omitempty"`
 | 
					 | 
				
			||||||
	// OperatorSecret is the secret containing TLS certs used by operator to
 | 
					 | 
				
			||||||
	// talk securely to this cluster.
 | 
					 | 
				
			||||||
	OperatorSecret string `json:"operatorSecret,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// MemberSecret represents a member secret
 | 
					 | 
				
			||||||
type MemberSecret struct {
 | 
					 | 
				
			||||||
	// PeerSecret is the secret containing TLS certs used by each etcd member pod
 | 
					 | 
				
			||||||
	// for the communication between etcd peers.
 | 
					 | 
				
			||||||
	PeerSecret string `json:"peerSecret,omitempty"`
 | 
					 | 
				
			||||||
	// ServerSecret is the secret containing TLS certs used by each etcd member pod
 | 
					 | 
				
			||||||
	// for the communication between etcd server and its clients.
 | 
					 | 
				
			||||||
	ServerSecret string `json:"serverSecret,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SelfHostedPolicy represents a self-hosted policy
 | 
					 | 
				
			||||||
type SelfHostedPolicy struct {
 | 
					 | 
				
			||||||
	// BootMemberClientEndpoint specifies a bootstrap member for the cluster.
 | 
					 | 
				
			||||||
	// If there is no bootstrap member, a completely new cluster will be created.
 | 
					 | 
				
			||||||
	// The boot member will be removed from the cluster once the self-hosted cluster
 | 
					 | 
				
			||||||
	// setup successfully.
 | 
					 | 
				
			||||||
	BootMemberClientEndpoint string `json:"bootMemberClientEndpoint,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// SkipBootMemberRemoval specifies whether the removal of the bootstrap member
 | 
					 | 
				
			||||||
	// should be skipped. By default the operator will automatically remove the
 | 
					 | 
				
			||||||
	// bootstrap member from the new cluster - this happens during the pivot
 | 
					 | 
				
			||||||
	// procedure and is the first step of decommissioning the bootstrap member.
 | 
					 | 
				
			||||||
	// If unspecified, the default is `false`. If set to `true`, you are
 | 
					 | 
				
			||||||
	// expected to remove the boot member yourself from the etcd cluster.
 | 
					 | 
				
			||||||
	SkipBootMemberRemoval bool `json:"skipBootMemberRemoval,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user