add ability to override etcd image and update apimachinery generated files from EtcdClusterSpec changes

This commit is contained in:
Otto Yiu 2018-01-08 15:21:52 -08:00
parent 612f8b1952
commit 2b12b59d75
7 changed files with 22 additions and 3 deletions

View File

@ -218,9 +218,9 @@ type ProtokubeFlags struct {
// ProtokubeFlags is responsible for building the command line flags for protokube
func (t *ProtokubeBuilder) ProtokubeFlags(k8sVersion semver.Version) (*ProtokubeFlags, error) {
// @todo: i think we should allow the user to override the source of the image, but for now
// lets keep that for another PR and allow the version change
imageVersion := t.Cluster.Spec.EtcdClusters[0].Version
// overrides imageVersion if set
etcdContainerImage := t.Cluster.Spec.EtcdClusters[0].Image
var leaderElectionTimeout string
var heartbeatInterval string
@ -244,6 +244,10 @@ func (t *ProtokubeBuilder) ProtokubeFlags(k8sVersion semver.Version) (*Protokube
// TODO this is dupicate code with etcd model
image := fmt.Sprintf("gcr.io/google_containers/etcd:%s", imageVersion)
// override image if set as API value
if etcdContainerImage != "" {
image = etcdContainerImage
}
assets := assets.NewAssetBuilder(t.Cluster.Spec.Assets, "")
remapped, err := assets.RemapImage(image)
if err != nil {

View File

@ -312,6 +312,8 @@ type EtcdClusterSpec struct {
LeaderElectionTimeout *metav1.Duration `json:"leaderElectionTimeout,omitempty"`
// HeartbeatInterval is the time (in milliseconds) for an etcd heartbeat interval
HeartbeatInterval *metav1.Duration `json:"heartbeatInterval,omitempty"`
// Image is the etcd docker image to use. Setting this will ignore the Version specified.
Image string `json:"image,omitempty"`
}
// EtcdMemberSpec is a specification for a etcd member

View File

@ -311,6 +311,8 @@ type EtcdClusterSpec struct {
LeaderElectionTimeout *metav1.Duration `json:"leaderElectionTimeout,omitempty"`
// HeartbeatInterval is the time (in milliseconds) for an etcd heartbeat interval
HeartbeatInterval *metav1.Duration `json:"heartbeatInterval,omitempty"`
// Image is the etcd docker image to use. Setting this will ignore the Version specified.
Image string `json:"image,omitempty"`
}
// EtcdMemberSpec is a specification for a etcd member

View File

@ -1207,6 +1207,7 @@ func autoConvert_v1alpha1_EtcdClusterSpec_To_kops_EtcdClusterSpec(in *EtcdCluste
out.Version = in.Version
out.LeaderElectionTimeout = in.LeaderElectionTimeout
out.HeartbeatInterval = in.HeartbeatInterval
out.Image = in.Image
return nil
}
@ -1233,6 +1234,7 @@ func autoConvert_kops_EtcdClusterSpec_To_v1alpha1_EtcdClusterSpec(in *kops.EtcdC
out.Version = in.Version
out.LeaderElectionTimeout = in.LeaderElectionTimeout
out.HeartbeatInterval = in.HeartbeatInterval
out.Image = in.Image
return nil
}

View File

@ -309,6 +309,8 @@ type EtcdClusterSpec struct {
LeaderElectionTimeout *metav1.Duration `json:"leaderElectionTimeout,omitempty"`
// HeartbeatInterval is the time (in milliseconds) for an etcd heartbeat interval
HeartbeatInterval *metav1.Duration `json:"heartbeatInterval,omitempty"`
// Image is the etcd docker image to use. Setting this will ignore the Version specified.
Image string `json:"image,omitempty"`
}
// EtcdMemberSpec is a specification for a etcd member

View File

@ -1306,6 +1306,7 @@ func autoConvert_v1alpha2_EtcdClusterSpec_To_kops_EtcdClusterSpec(in *EtcdCluste
out.Version = in.Version
out.LeaderElectionTimeout = in.LeaderElectionTimeout
out.HeartbeatInterval = in.HeartbeatInterval
out.Image = in.Image
return nil
}
@ -1332,6 +1333,7 @@ func autoConvert_kops_EtcdClusterSpec_To_v1alpha2_EtcdClusterSpec(in *kops.EtcdC
out.Version = in.Version
out.LeaderElectionTimeout = in.LeaderElectionTimeout
out.HeartbeatInterval = in.HeartbeatInterval
out.Image = in.Image
return nil
}

View File

@ -43,8 +43,13 @@ func (b *EtcdOptionsBuilder) BuildOptions(o interface{}) error {
}
}
// TODO put this into API values. Do that in another PR?
// default to gcr.io
image := fmt.Sprintf("gcr.io/google_containers/etcd:%s", spec.EtcdClusters[0].Version)
// override image if set as API value
if spec.EtcdClusters[0].Image != "" {
image = spec.EtcdClusters[0].Image
}
image, err := b.Context.AssetBuilder.RemapImage(image)
if err != nil {
return fmt.Errorf("unable to remap container %q: %v", image, err)