Skip to content

Commit

Permalink
Filling in the design philosophy section of the Dash proposal
Browse files Browse the repository at this point in the history
  • Loading branch information
etsauer committed Sep 24, 2019
1 parent 37a9f28 commit ec376e8
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion NEXTGEN_DESIGN_PROPOSAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,23 @@ The working name for the project is "Dash" (because when you remove the words `o

## Design Philosophy

TODO
Dash has a goal of becoming THE automation framework for Kubernetes. In order to acheive this, we feel that we must adhere to a set of principles for how Kubernetes automation should be done.

- One should represent all Kubernetes resource definitions in files, or templates and parameters that produce files.
- These definition files should be version controlled in Git.
- Once resource definitions are defined as files in a repository, they should be reconciled to the Kubernetes API using repeatable raw verbs. This means:
- `kubectl apply` should be the default, and used for all files that are wholly managed.
- `kubectl patch` should be used for files where we only manage certain fields.
- `kubectl create` or `kubectl replace` should be used sparingly, being used only where there are immutable fields to contend with that `apply` would not work on.
- If using `create` the automation should gracefully handle `Already Exists` errors, taking no action and allowing the automation to continue.
- `kubectl delete` may be used to remove resources that are provisioned in the cluster by default, but not desired.
- If using `delete` the automation should gracefully handle `Does Not Exist` errors, taking no action and allowing the automation to continue.
- Every entity that has a set of resources to manage, be it a person, team, or robot, should manage its own repository of resource files.

## Desired Feature List

The following is a list of features we would like to see in Dash. This is not intended to represent a _Minimum Viable Product_, but a long term list of desired features. From here we will define a subset that defines our MVP.

- Dash should be written in Golang to align with other projects in the Kubernetes ecosystem.
- Dash should take the form of a CLI tool, and an API library that could be directly consumed by other projects
- Dash should not be “object aware” and hence not process any kubernetes/openshift objects itself (just as the current openshift-applier works)
Expand Down

0 comments on commit ec376e8

Please sign in to comment.