mirror of
https://github.com/notherealmarco/coredns-deployment.git
synced 2025-05-05 12:32:34 +02:00
parent
626e32c427
commit
5fe683c057
2 changed files with 66 additions and 2 deletions
|
@ -1,10 +1,12 @@
|
||||||
package migration
|
package migration
|
||||||
|
|
||||||
// This package provides a set of functions to help handle migrations of CoreDNS Corefiles to be compatible with new
|
// This package provides a set of functions to help handle migrations of CoreDNS Corefiles to be compatible with new
|
||||||
// versions of CoreDNS. The task of upgrading CoreDNS is the responsibility of a variety of Kubernetes management tools
|
// versions of CoreDNS. The task of upgrading CoreDNS is the responsibility of a variety of Kubernetes management tools
|
||||||
// (e.g. kubeadm and others), and the precise behavior may be different for each one. This library abstracts some basic
|
// (e.g. kubeadm and others), and the precise behavior may be different for each one. This library abstracts some basic
|
||||||
// helper functions that make this easier to implement.
|
// helper functions that make this easier to implement.
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/coredns/deployment/kubernetes/migration/corefile"
|
"github.com/coredns/deployment/kubernetes/migration/corefile"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,6 +31,10 @@ func Unsupported(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string) ([]No
|
||||||
|
|
||||||
func getStatus(fromCoreDNSVersion, toCoreDNSVersion, corefileStr, status string) ([]Notice, error) {
|
func getStatus(fromCoreDNSVersion, toCoreDNSVersion, corefileStr, status string) ([]Notice, error) {
|
||||||
notices := []Notice{}
|
notices := []Notice{}
|
||||||
|
err := validateVersions(fromCoreDNSVersion, toCoreDNSVersion)
|
||||||
|
if err != nil {
|
||||||
|
return notices, err
|
||||||
|
}
|
||||||
cf, err := corefile.New(corefileStr)
|
cf, err := corefile.New(corefileStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return notices, err
|
return notices, err
|
||||||
|
@ -94,6 +100,10 @@ func getStatus(fromCoreDNSVersion, toCoreDNSVersion, corefileStr, status string)
|
||||||
|
|
||||||
// Migrate returns version of the Corefile migrated to toCoreDNSVersion, or an error if it cannot.
|
// Migrate returns version of the Corefile migrated to toCoreDNSVersion, or an error if it cannot.
|
||||||
func Migrate(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string, deprecations bool) (string, error) {
|
func Migrate(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string, deprecations bool) (string, error) {
|
||||||
|
err := validateVersions(fromCoreDNSVersion, toCoreDNSVersion)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
cf, err := corefile.New(corefileStr)
|
cf, err := corefile.New(corefileStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -178,7 +188,7 @@ func Default(k8sVersion, corefileStr string) bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
NextVersion:
|
NextVersion:
|
||||||
for _, v := range Versions {
|
for _, v := range Versions {
|
||||||
if k8sVersion != "" && k8sVersion != v.k8sRelease {
|
if k8sVersion != "" && k8sVersion != v.k8sRelease {
|
||||||
continue
|
continue
|
||||||
|
@ -229,3 +239,33 @@ func Released(dockerImageID string) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValidVersions returns a list of all versions defined
|
||||||
|
func ValidVersions() []string {
|
||||||
|
var vStrs []string
|
||||||
|
for vStr, _ := range Versions {
|
||||||
|
vStrs = append(vStrs, vStr)
|
||||||
|
}
|
||||||
|
return vStrs
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateVersion(fromCoreDNSVersion string) error {
|
||||||
|
if _, ok := Versions[fromCoreDNSVersion]; !ok {
|
||||||
|
return fmt.Errorf("start version '%v' not supported", fromCoreDNSVersion)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateVersions(fromCoreDNSVersion, toCoreDNSVersion string) error {
|
||||||
|
err := validateVersion(fromCoreDNSVersion)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for next := Versions[fromCoreDNSVersion].nextVersion; next != ""; next = Versions[next].nextVersion {
|
||||||
|
if next != toCoreDNSVersion {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return fmt.Errorf("cannot migrate to '%v' from '%v'", toCoreDNSVersion, fromCoreDNSVersion)
|
||||||
|
}
|
|
@ -241,7 +241,6 @@ stubzone.org:53 {
|
||||||
}
|
}
|
||||||
`}
|
`}
|
||||||
|
|
||||||
|
|
||||||
for _, d := range defaultCorefiles {
|
for _, d := range defaultCorefiles {
|
||||||
if !Default("", d) {
|
if !Default("", d) {
|
||||||
t.Errorf("expected config to be identified as a default: %v", d)
|
t.Errorf("expected config to be identified as a default: %v", d)
|
||||||
|
@ -253,3 +252,28 @@ stubzone.org:53 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateVersions(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
from string
|
||||||
|
to string
|
||||||
|
shouldErr bool
|
||||||
|
}{
|
||||||
|
{"1.3.1", "1.5.0", false},
|
||||||
|
{"1.5.0", "1.3.1", true},
|
||||||
|
{"banana", "1.5.0", true},
|
||||||
|
{"1.3.1", "apple", true},
|
||||||
|
{"banana", "apple", true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
err := validateVersions(tc.from, tc.to)
|
||||||
|
|
||||||
|
if !tc.shouldErr && err != nil {
|
||||||
|
t.Errorf("expected '%v' to '%v' to be valid versions.", tc.from, tc.to)
|
||||||
|
}
|
||||||
|
if tc.shouldErr && err == nil {
|
||||||
|
t.Errorf("expected '%v' to '%v' to be invalid versions.", tc.from, tc.to)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue