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",
|
importpath = "k8s.io/kops/pkg/apis/kops",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//:go_default_library",
|
||||||
"//pkg/apis/kops/util:go_default_library",
|
"//pkg/apis/kops/util:go_default_library",
|
||||||
"//upup/pkg/fi/utils:go_default_library",
|
"//upup/pkg/fi/utils:go_default_library",
|
||||||
"//util/pkg/architectures:go_default_library",
|
"//util/pkg/architectures:go_default_library",
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"github.com/blang/semver/v4"
|
"github.com/blang/semver/v4"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
kopsbase "k8s.io/kops"
|
||||||
"k8s.io/kops/pkg/apis/kops/util"
|
"k8s.io/kops/pkg/apis/kops/util"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
|
|
@ -94,6 +95,12 @@ type PackageVersionSpec struct {
|
||||||
|
|
||||||
// Version is the version of the package.
|
// Version is the version of the package.
|
||||||
Version string `json:"version"`
|
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)
|
// 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.
|
// 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
|
var matches []*PackageVersionSpec
|
||||||
|
|
||||||
for i := range c.Spec.Packages {
|
for i := range c.Spec.Packages {
|
||||||
|
|
@ -374,6 +381,37 @@ func (c *Channel) GetPackageVersion(name string) (*util.Version, error) {
|
||||||
continue
|
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)
|
matches = append(matches, pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,3 +135,8 @@ func ParseVersion(s string) (*Version, error) {
|
||||||
func (v *Version) String() string {
|
func (v *Version) String() string {
|
||||||
return v.v.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"
|
operatorKey := "operator.networking.addons.kope.io"
|
||||||
|
|
||||||
operatorVersion, err := channel.GetPackageVersion(operatorKey)
|
operatorVersion, err := channel.GetPackageVersion(operatorKey, kubernetesVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -148,7 +148,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
||||||
|
|
||||||
{
|
{
|
||||||
key := "networking.addons.kope.io"
|
key := "networking.addons.kope.io"
|
||||||
version, err := channel.GetPackageVersion(key)
|
version, err := channel.GetPackageVersion(key, kubernetesVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +172,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
||||||
{
|
{
|
||||||
operatorKey := "operator.coredns.addons.x-k8s.io"
|
operatorKey := "operator.coredns.addons.x-k8s.io"
|
||||||
|
|
||||||
operatorVersion, err := channel.GetPackageVersion(operatorKey)
|
operatorVersion, err := channel.GetPackageVersion(operatorKey, kubernetesVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -195,7 +195,7 @@ func CreateAddons(channel *kops.Channel, kubernetesVersion *semver.Version, clus
|
||||||
|
|
||||||
{
|
{
|
||||||
key := "coredns"
|
key := "coredns"
|
||||||
version, err := channel.GetPackageVersion(key)
|
version, err := channel.GetPackageVersion(key, kubernetesVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue