GithubHelp home page GithubHelp logo

isabella232 / corefile-migration Goto Github PK

View Code? Open in Web Editor NEW

This project forked from coredns/corefile-migration

0.0 0.0 0.0 155 KB

Library and tools for migrating the CoreDNS corefile

License: Apache License 2.0

Go 99.57% Makefile 0.43%

corefile-migration's Introduction

Build Status Coverage status Go Report Card

CoreDNS Corefile Migration Tools

This Go library provides a set of functions to help handle migrations of CoreDNS Corefiles to be compatible with new versions of CoreDNS.

Not all plugins are supported by this tool. With few exceptions, only plugins found in the default Kubernetes deployment of CoreDNS are supported.

Notifications

Several functions in the library return a list of Notices. Each Notice is a warning of a feature deprecation, an unsupported plugin/option, or a new required plugin/option added to the Corefile. A Notice has a ToString() For display to an end user. e.g.

Plugin "foo" is deprecated in <version>. It is replaced by "bar".
Plugin "bar" is removed in <version>. It is replaced by "qux".
Option "foo" in plugin "bar" is added as a default in <version>.
Plugin "baz" is unsupported by this migration tool in <version>.

Functions

func Deprecated

Deprecated(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string) ([]Notice, error)

Deprecated returns a list of deprecation notices affecting the given Corefile. Notices are returned for any deprecated, removed, or ignored plugins/options present in the Corefile. Notices are also returned for any new default plugins that would be added in a migration.

func Migrate

Migrate(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string, deprecations bool) (string, error)

Migrate returns a migrated version of the Corefile, or an error if it cannot. The to version must be >= the from version. It will:

  • replace/convert any plugins/options that have replacements (e.g. proxy -> forward)
  • return an error if replaceable plugins/options cannot be converted (e.g. proxy options not available in forward)
  • remove plugins/options that do not have replacements (e.g. kubernetes upstream)
  • add in any new default plugins where applicable if they are not already present.
  • If deprecations is true, deprecated plugins/options will be migrated as soon as they are deprecated.
  • If deprecations is false, deprecated plugins/options will be migrated only once they become removed or ignored.

func MigrateDown

MigrateDown(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string) (string, error)

MigrateDown returns a downward migrated version of the Corefile, or an error if it cannot. The to version must be <= the from version.

  • It will handle the removal of plugins and options that no longer exist in the destination version when downgrading.
  • It will not restore plugins/options that might have been removed or altered during an upward migration.

func Unsupported

Unsupported(fromCoreDNSVersion, toCoreDNSVersion, corefileStr string) ([]Notice, error)

Unsupported returns a list Notices for plugins/options that are unhandled by this migration tool, but may still be valid in CoreDNS. Currently, only a subset of plugins included by default in CoreDNS are supported by this tool.

func Default

Default(k8sVersion, corefileStr string) bool

Default is a Kubernetes specific function that returns true if the Corefile is the default for a given version of Kubernetes. Or, if k8sVersion is empty, Default returns true if the Corefile is the default for any version of Kubernetes.

func Released

Released(dockerImageSHA string) bool

Released returns true if dockerImageSHA matches any released image of CoreDNS.

func ValidVersions

ValidVersions() []string

ValidVersions returns a list of all versions supported by this tool.

Command Line Converter Example

An example use of this library is provided here.

Example: Kubernetes Cluster Managemnt Tool Usage

This is an example flow of how this library could be used by a Kubernetes cluster management tool to perform a Corefile migration during an upgrade...

  1. Check Released() to verify that the installed version of CoreDNS is an official release.
  2. Check Default(), if the Corefile is a default, simply re-deploy the new default over top the old one. No migration needed. If the Corefile is not a default, continue...
  3. Check Deprecated(), if anything is deprecated, warn user, but continue install.
  4. Check Unsupported(), if anything is unsupported, abort and warn user (allow user to override to pass this).
  5. Call Migrate(), if there is an error, abort and warn user.
  6. If there is no error, pause and ask user if they want to continue with the migration. If the starting Corefile was at defaults, proceed use the migrated Corefile.

corefile-migration's People

Contributors

chrisohaver avatar gab-satchi avatar rajansandeep avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.