Skip to content

Commit 18b0821

Browse files
etsaueroybed
authored andcommitted
Add initial design proposal for nextgen applier, Dash (#136)
* Add initial design proposal for nextgen applier, Dash * Update with intent to expose library * Add golang as desired implementation
1 parent 85c94d4 commit 18b0821

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

NEXTGEN_DESIGN_PROPOSAL.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Design Proposal for Project "Dash"
2+
3+
The openshift-applier has done well in its current shape as an ansible playbook paired with an inventory, driving what content to seed an openshift-cluster with. However, it also has some flaws that now can be better addressed with newer technologies and approaches that are becoming mainstream. This document captures the proposed design of the next iteration of this project, with new branding and a new contract.
4+
5+
The working name for the project is "Dash" (because when you remove the words `openshift` and `applier`, you're left with `-`).
6+
7+
## Design Philosophy
8+
9+
TODO
10+
11+
## Desired Feature List
12+
13+
- Dash should be written in Golang to align with other projects in the Kubernetes ecosystem.
14+
- Dash should take the form of a CLI tool, and an API library that could be directly consumed by other projects
15+
- Dash should not be “object aware” and hence not process any kubernetes/openshift objects itself (just as the current openshift-applier works)
16+
- This avoids the ties to a specific version of kubernetes / OpenShift objects
17+
- Dash should re-use the same “inventory” format as the previous openshift-applier, making it easier for existing users to adapt Dash
18+
- Newer versions are ok, but it should handle existing inventories for backwards compatibility
19+
- Dash should support filter capabilities to only apply a portion of the inventories
20+
- Dash should support dynamically combining multiple “inventory” definitions to compose a bigger collection of objects
21+
- Making it possible to re-use the same definitions more easily to avoid duplicates
22+
- Dash should support source its inventory content URLs and local files + input parameters from the supplied inventory (mimic the current openshift-applier)
23+
- Dash should be capable of handling “deltas” and only process changes on consecutive runs if desired (controlled by flags)
24+
- Could be based on commit id or other ways of capturing “the diff”
25+
- Dash should support multiple template processing mechanisms in a pluggable format including:
26+
- Helm
27+
- Kustomize
28+
- OpenShift Templates
29+
- some freeform templating system, like Jinja2
30+
- Dash should support pre/post hooks to for example “post-process” aspects like service/application configuration and “pre-process” waiting for resources to be available
31+
- Consider capturing metrics around Dash usage and show in cluster dashboards (i.e.: use prometheus to capture data to show in a grafana dashboard).
32+
- Dash should be able to process content that is behind a private endpoint (URL,repo,etc.)
33+
- Dash should support all basic kubernetes API verbs, including:
34+
- Apply
35+
- Create
36+
- Replace
37+
- Delete
38+
- Exec
39+
- Get
40+
- Patch
41+
- Dash should support runs across Multiple Kubernetes clusters
42+
- Dash should support variable hierarchy, such that variables can be set at multiple levels, overriding as they get more specific.
43+
44+
# Working Inventory Contract
45+
46+
The Dash _inventory_ will be the file where users define what contents exist and how they should be handled.
47+
48+
```
49+
# .dash.yml
50+
51+
version: <2.0|3.0> # This is how we will maintain backwards compatibility. A value of '2.0' will run the current `openshift-applier`
52+
53+
namespace: global-default
54+
resource_groups: # This will replace `object` in openshift-applier, and serve as a logical grouping of content. This will be the level at which we pre-process all template content before putting to the api. Resource_groups should be able to be parent/child of other resource groups.
55+
- name: Group 1 # name fields are not required, just used for logging/debugging
56+
namespace: group1-stuff
57+
resources:
58+
- name: A Deployment
59+
namespace: this-deployment
60+
type: <manifest|helm|openshift|kustomize>
61+
path:
62+
params:
63+
```

0 commit comments

Comments
 (0)