mirror of https://github.com/kubernetes/kops.git
Add support for addons to filter based on kOps/k8s versions
This is hard to add later, for compatibility reasons.
This commit is contained in:
parent
8e34e4d101
commit
9840a27f52
|
|
@ -25,6 +25,7 @@ go_library(
|
|||
importpath = "k8s.io/kops/pkg/apis/kops",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//:go_default_library",
|
||||
"//pkg/apis/kops/util:go_default_library",
|
||||
"//upup/pkg/fi/utils:go_default_library",
|
||||
"//util/pkg/architectures:go_default_library",
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"github.com/blang/semver/v4"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/klog/v2"
|
||||
kopsbase "k8s.io/kops"
|
||||
"k8s.io/kops/pkg/apis/kops/util"
|
||||
"k8s.io/kops/util/pkg/architectures"
|
||||
"k8s.io/kops/util/pkg/vfs"
|
||||
|
|
@ -94,6 +95,12 @@ type PackageVersionSpec struct {
|
|||
|
||||
// Version is the version of the package.
|
||||
Version string `json:"version"`
|
||||
|
||||
// KubernetesVersion specifies that this package only applies to a semver range of kubernetes version
|
||||
KubernetesVersion string `json:"kubernetesVersion,omitempty"`
|
||||
|
||||
// KopsVersion specifies that this package only applies to a semver range of kOps version
|
||||
KopsVersion string `json:"kopsVersion,omitempty"`
|
||||
}
|
||||
|
||||
// ResolveChannel maps a channel to an absolute URL (possibly a VFS URL)
|
||||
|
|
@ -365,7 +372,7 @@ func (c *Channel) HasUpstreamImagePrefix(image string) bool {
|
|||
}
|
||||
|
||||
// GetPackageVersion returns the version for the package, or an error if could not be found.
|
||||
func (c *Channel) GetPackageVersion(name string) (*util.Version, error) {
|
||||
func (c *Channel) GetPackageVersion(name string, kubernetesVersion *semver.Version) (*util.Version, error) {
|
||||
var matches []*PackageVersionSpec
|
||||
|
||||
for i := range c.Spec.Packages {
|
||||
|
|
@ -374,6 +381,37 @@ func (c *Channel) GetPackageVersion(name string) (*util.Version, error) {
|
|||
continue
|
||||
}
|
||||
|
||||
if pkg.KubernetesVersion != "" {
|
||||
versionRange, err := semver.ParseRange(pkg.KubernetesVersion)
|
||||
if err != nil {
|
||||
klog.Warningf("cannot parse KubernetesVersion=%q", pkg.KubernetesVersion)
|
||||
continue
|
||||
}
|
||||
|
||||
if !versionRange(*kubernetesVersion) {
|
||||
klog.V(2).Infof("Kubernetes version %q does not match range: %s", kubernetesVersion, pkg.KubernetesVersion)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if pkg.KopsVersion != "" {
|
||||
kopsVersion, err := util.ParseVersion(kopsbase.KOPS_RELEASE_VERSION)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("parsing kops version %q: %w", kopsbase.KOPS_RELEASE_VERSION, err)
|
||||
}
|
||||
|
||||
versionRange, err := semver.ParseRange(pkg.KopsVersion)
|
||||
if err != nil {
|
||||
klog.Warningf("cannot parse KopsVersion=%q", pkg.KopsVersion)
|
||||
continue
|
||||
}
|
||||
|
||||
if !kopsVersion.IsInRange(versionRange) {
|
||||
klog.V(2).Infof("kOps version %q does not match range: %s", kopsVersion, pkg.KopsVersion)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
matches = append(matches, pkg)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -135,3 +135,8 @@ func ParseVersion(s string) (*Version, error) {
|
|||
func (v *Version) String() string {
|
||||
return v.v.String()
|
||||
}
|
||||
|
||||
// IsInRange checks if we are in the provided semver range
|
||||
func (v *Version) IsInRange(semverRange semver.Range) bool {
|
||||
return semverRange(v.v)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
|||
{
|
||||
operatorKey := "operator.networking.addons.kope.io"
|
||||
|
||||
operatorVersion, err := channel.GetPackageVersion(operatorKey)
|
||||
operatorVersion, err := channel.GetPackageVersion(operatorKey, kubernetesVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -148,7 +148,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
|||
|
||||
{
|
||||
key := "networking.addons.kope.io"
|
||||
version, err := channel.GetPackageVersion(key)
|
||||
version, err := channel.GetPackageVersion(key, kubernetesVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -172,7 +172,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
|||
{
|
||||
operatorKey := "operator.coredns.addons.x-k8s.io"
|
||||
|
||||
operatorVersion, err := channel.GetPackageVersion(operatorKey)
|
||||
operatorVersion, err := channel.GetPackageVersion(operatorKey, kubernetesVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -195,7 +195,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
|||
|
||||
{
|
||||
key := "coredns"
|
||||
version, err := channel.GetPackageVersion(key)
|
||||
version, err := channel.GetPackageVersion(key, kubernetesVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue