From d09c2a2f79f902dcb5d7d430b26f8815376afa46 Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Wed, 27 May 2020 23:19:19 -0400 Subject: [PATCH 1/6] Split SDK into multiple projects --- .../split-sdk-into-multiple-projects-deps.png | Bin 0 -> 16225 bytes .../split-sdk-into-multiple-projects.md | 187 ++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 enhancements/split-sdk-into-multiple-projects-deps.png create mode 100644 enhancements/split-sdk-into-multiple-projects.md diff --git a/enhancements/split-sdk-into-multiple-projects-deps.png b/enhancements/split-sdk-into-multiple-projects-deps.png new file mode 100644 index 0000000000000000000000000000000000000000..9acf56b927ab179376565b8824353f1025faa779 GIT binary patch literal 16225 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 literal 0 HcmV?d00001 diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md new file mode 100644 index 00000000..c7a0aef8 --- /dev/null +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -0,0 +1,187 @@ +--- +title: split-sdk-into-multiple-projects +authors: + - "@jesusr" +reviewers: + - "@estroz" + - "@hasbro17" + - "@joelanford" + - "@fabianvf" + - "@shawn-hurley" +approvers: + - "@estroz" + - "@hasbro17" + - "@joelanford" + - "@fabianvf" + - "@shawn-hurley" +creation-date: 2020-05-18 +last-updated: 2020-05-27 +status: implementable +see-also: +replaces: +superseded-by: +--- + +# Split SDK into multiple projects + +## Release Signoff Checklist + +- [X] Enhancement is `implementable` +- [X] Design details are appropriately documented from clear requirements +- [X] Test plan is defined +- [X] Graduation criteria for dev preview, tech preview, GA + +## Open Questions [optional] + +1. How will separate repos affect the SDK website and docs in general? + * What if each individual repo maintains their own docs? Then have a + pipeline sort of thing that would regenerate the entire doc if there are + any changes + * Could this be an intern project? + * How do versions work? netlify handles it + * Only other thought is to have a single website docs repo +1. What do we do with other shared tooling, CI, test helpers, etc. (e.g. + changelog generator)? Do we need a separate repo for that? + +## Summary + +This is the overarching enhancement that will plan how to split functionality +out of the current operator-sdk project into separate projects. The initial +thought on component breakdown mirrors the kubebuilder and controller-runtime +projects: + +1. Common libraries and operator building blocks +1. Project scaffolding and the main SDK CLI +1. Helm operator library and scaffolding plugin +1. Ansible operator library and scaffolding plugin + +## Motivation + +The motivation is to avoid a breaking change in one component causing a major +version bump for all other unrelated components. Another motivation is to make +the projects consumable by other projects as libraries. A benefit would be +better testing and easier to contribute to the smaller projects. + +While there are a few complexities with having separate repos, like PR +coordination between repos, or just the working complexity of having to point +at different repos to pick up your dep changes, these are obstacles we can +overcome. They also aren’t that much different from other dependencies we +work with. + +### Goals + +Split the operator-sdk repo into 4 separate repos: + +1. CLI and Go Operator +1. SDK library +1. Helm operator +1. Ansible operator + +This SDK library split would be a requirement for a 1.0 release. The Ansible +and Helm operators could go afterwards if need be. + +### Non-Goals + +* We will not solve the downstream SDK in this enhancement. +* We will not solve all of the items required for a 1.0 release + +## Proposal + +Split the operator-sdk repo into 4 separate repos as outlined in the Goals +section above. + +1. CLI and Go Operator + * contains the Go operator code + * contains the CLI code + * related scaffolding + * lives in operator-framework/operator-sdk + * will have a deprecation policy + * we can deprecate in minor versions; removal becomes a major version bump +1. SDK library + * contains utility code like package status, status condition, annotated + watcher, etc. + * this is something that operator projects (including Helm and Ansible + operators) would import + * depends on controller-runtime + * lives in operator-framework/sdk-lib (or some other name TBD) + * this library should probably *not* be 1.0; it's most likely to change often + * use Go apidiff tool to determine major version bumps +1. Helm operator + * contains Helm operator code + * related scaffolding + * lives in operator-framework/helm-operator +1. Ansible operator + * contains Ansible operator code + * related scaffolding + * lives in operator-framework/ansible-operator + +![Image of project dependencies](split-sdk-into-multiple-projects-deps.png) + +### Tasks + +1. Triage pkg directory to determine what goes to which repo +1. Use git commands to extract directories or files with history into these + new repos. Exact commands will be TBD. +1. Evaluate if making a separate repo for the hack directory is necessary or + if we just copy it to each of the 4 repos. +1. CLI and Go Operator + * keep operator-framework/operator-sdk + * cmd, internal directories remain here + * prior to 1.0 release, review entire CLI; axe all legacy support for + existing project layout + * consider making `generate csv` separate like `controller-gen` to support + OLM's plan for CSVless bundles (could be done later) +1. SDK library + * create new repo operator-framework/sdk-lib + * export the directories / files based on task 1 triage. +1. Helm operator and plugin + * create new repo operator-framework/helm-operator + * export the pkg/helm tree to the new repo at the top level maintaining + history + * Deprecate pkg/helm and replace with [Joe's helm repo](https://github.com/joelanford/helm-operator) +1. Ansible operator and plugin + * create new repo operator-framework/ansible-operator + * export the pkg/ansible tree to the new repo at the top level + maintaining history + +### Implementation Details/Notes/Constraints [optional] + +See above + +### Risks and Mitigations + +The biggest risk is the instability that will occur while the projects are +split apart. Once all the projects are in place things will come back together. + +## Design Details + +### Test Plan + +The ultimate test is that e2e tests and manual testing of the SDK binary will +be used to determine it remains functional. Each repo will contain their own +unit test suites and where appropriate e2e tests. + +### Graduation Criteria + +N/A + +### Upgrade / Downgrade Strategy + +N/A + +### Version Skew Strategy + +N/A + +## Implementation History + +20200527 - This document is created. +20200518 - Initial Google Document created to do initial set of review. + +## Drawbacks + +N/A + +## Alternatives + +N/A From 44a4ea275a48ff6149a98e156b4ef8eeb4be66b3 Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Mon, 1 Jun 2020 22:19:03 -0400 Subject: [PATCH 2/6] Added versioning as a non-goal; Added KB phase 2 note to CLI repo --- enhancements/split-sdk-into-multiple-projects.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md index c7a0aef8..dc6da343 100644 --- a/enhancements/split-sdk-into-multiple-projects.md +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -83,7 +83,8 @@ and Helm operators could go afterwards if need be. ### Non-Goals * We will not solve the downstream SDK in this enhancement. -* We will not solve all of the items required for a 1.0 release +* We will not solve all of the items required for a 1.0 release. +* Defining when version bumps occur in each repo. ## Proposal @@ -97,6 +98,7 @@ section above. * lives in operator-framework/operator-sdk * will have a deprecation policy * we can deprecate in minor versions; removal becomes a major version bump + * this split is dependent on Kubebuilder Phase 2. 1. SDK library * contains utility code like package status, status condition, annotated watcher, etc. @@ -175,6 +177,7 @@ N/A ## Implementation History +20200601 - Added versioning as a non-goal; Added KB phase 2 note to CLI repo. 20200527 - This document is created. 20200518 - Initial Google Document created to do initial set of review. From 1e965bd9fb3017e7389b675126f760603f2e7185 Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Tue, 2 Jun 2020 16:04:32 -0400 Subject: [PATCH 3/6] Answered the docs question. --- .../split-sdk-into-multiple-projects.md | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md index dc6da343..8124307c 100644 --- a/enhancements/split-sdk-into-multiple-projects.md +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -33,15 +33,10 @@ superseded-by: ## Open Questions [optional] -1. How will separate repos affect the SDK website and docs in general? - * What if each individual repo maintains their own docs? Then have a - pipeline sort of thing that would regenerate the entire doc if there are - any changes - * Could this be an intern project? - * How do versions work? netlify handles it - * Only other thought is to have a single website docs repo 1. What do we do with other shared tooling, CI, test helpers, etc. (e.g. changelog generator)? Do we need a separate repo for that? + * Answer: We should visit these on a case by case basis as we see what is needed + during the splitting. ## Summary @@ -146,6 +141,30 @@ section above. * export the pkg/ansible tree to the new repo at the top level maintaining history +### Affect on docs website + +Today the docs are stored in a website directory in the operator-sdk repo. The +following illustrates how the docs can be split to follow the repos: + +1. CLI and Go Operator + * maintains a website directory that contains the SDK docs, hosted at + sdk.operatorframework.io +1. SDK library + * will contain Godocs for the library +1. Helm operator + * will contain Godocs for the library portion + * would contain a website directory that contains the Helm docs, hosted at + helm-operator.operatorframework.io + * having its own domain means we can version the docs with the releases of + the Helm operator +1. Ansible operator + * will contain Godocs for the library portion + * would contain a website directory that contains the Helm docs, hosted at + ansible-operator.operatorframework.io + * having its own domain means we can version the docs with the releases of + the Ansible operator + + ### Implementation Details/Notes/Constraints [optional] See above @@ -177,6 +196,7 @@ N/A ## Implementation History +20200602 - Answered the docs question. 20200601 - Added versioning as a non-goal; Added KB phase 2 note to CLI repo. 20200527 - This document is created. 20200518 - Initial Google Document created to do initial set of review. @@ -187,4 +207,15 @@ N/A ## Alternatives -N/A +### Docs + +An alternative to splitting up the docs would be to build a mechanism to add +docs from Ansible/Helm repos into the main SDK site at build time. This would +keep the top level site as it is now. A drawback would be that the documentation +versioning would be for the entire SDK which negates the individual versioning +we are attempting with splitting the repos. + +There are disussions about whether to version the Operator Framework as a whole, +which could affect docs in a major way. It could also affect the underlying +repos as well. This is not something we can solve in this proposal nor should +we. From 30b4d259d7db8a8940fb031c75c40fd3fdab0c7e Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Tue, 2 Jun 2020 16:15:47 -0400 Subject: [PATCH 4/6] fix helm and ansible operator studder --- enhancements/split-sdk-into-multiple-projects.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md index 8124307c..5851d67d 100644 --- a/enhancements/split-sdk-into-multiple-projects.md +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -154,13 +154,13 @@ following illustrates how the docs can be split to follow the repos: 1. Helm operator * will contain Godocs for the library portion * would contain a website directory that contains the Helm docs, hosted at - helm-operator.operatorframework.io + helm.operatorframework.io * having its own domain means we can version the docs with the releases of the Helm operator 1. Ansible operator * will contain Godocs for the library portion * would contain a website directory that contains the Helm docs, hosted at - ansible-operator.operatorframework.io + ansible.operatorframework.io * having its own domain means we can version the docs with the releases of the Ansible operator From 3c134e3bfd6b3a09375880c4ac3d10a12fe5f27c Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Wed, 3 Jun 2020 12:31:51 -0400 Subject: [PATCH 5/6] Address questions from the review. --- .../split-sdk-into-multiple-projects.md | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md index 5851d67d..9f444d7d 100644 --- a/enhancements/split-sdk-into-multiple-projects.md +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -46,7 +46,7 @@ thought on component breakdown mirrors the kubebuilder and controller-runtime projects: 1. Common libraries and operator building blocks -1. Project scaffolding and the main SDK CLI +1. Go scaffolding plugin and the main SDK CLI 1. Helm operator library and scaffolding plugin 1. Ansible operator library and scaffolding plugin @@ -89,28 +89,29 @@ section above. 1. CLI and Go Operator * contains the Go operator code * contains the CLI code - * related scaffolding + * related plugin and scaffolding * lives in operator-framework/operator-sdk - * will have a deprecation policy - * we can deprecate in minor versions; removal becomes a major version bump - * this split is dependent on Kubebuilder Phase 2. + * the split of the CLI/Go Operator repo is dependent on Kubebuilder Phase 2 + to avoid creating a moving target. 1. SDK library * contains utility code like package status, status condition, annotated watcher, etc. * this is something that operator projects (including Helm and Ansible operators) would import * depends on controller-runtime - * lives in operator-framework/sdk-lib (or some other name TBD) + * lives in operator-framework/operator-lib (or some other name TBD) * this library should probably *not* be 1.0; it's most likely to change often * use Go apidiff tool to determine major version bumps 1. Helm operator * contains Helm operator code - * related scaffolding + * related plugin and scaffolding * lives in operator-framework/helm-operator + * the Helm plugin is dependent on Kubebuilder Phase 1. 1. Ansible operator * contains Ansible operator code - * related scaffolding + * related plugin and scaffolding * lives in operator-framework/ansible-operator + * the Ansible plugin is dependent on Kubebuilder Phase 1. ![Image of project dependencies](split-sdk-into-multiple-projects-deps.png) @@ -129,7 +130,7 @@ section above. * consider making `generate csv` separate like `controller-gen` to support OLM's plan for CSVless bundles (could be done later) 1. SDK library - * create new repo operator-framework/sdk-lib + * create new repo operator-framework/operator-lib * export the directories / files based on task 1 triage. 1. Helm operator and plugin * create new repo operator-framework/helm-operator @@ -196,6 +197,7 @@ N/A ## Implementation History +20200603 - Address questions from the review. 20200602 - Answered the docs question. 20200601 - Added versioning as a non-goal; Added KB phase 2 note to CLI repo. 20200527 - This document is created. From 934df1f9f57a8cba4f8bf09311fe4cb0e55ad651 Mon Sep 17 00:00:00 2001 From: "jesus m. rodriguez" Date: Wed, 3 Jun 2020 12:48:32 -0400 Subject: [PATCH 6/6] Answer the helm-operator question. --- enhancements/split-sdk-into-multiple-projects.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/enhancements/split-sdk-into-multiple-projects.md b/enhancements/split-sdk-into-multiple-projects.md index 9f444d7d..902c04b5 100644 --- a/enhancements/split-sdk-into-multiple-projects.md +++ b/enhancements/split-sdk-into-multiple-projects.md @@ -136,7 +136,10 @@ section above. * create new repo operator-framework/helm-operator * export the pkg/helm tree to the new repo at the top level maintaining history - * Deprecate pkg/helm and replace with [Joe's helm repo](https://github.com/joelanford/helm-operator) + * There is a plan to deprecate pkg/helm and replace with + [Joe's helm repo](https://github.com/joelanford/helm-operator) this + will be covered in a separate proposal to explicitly explain why and + how this will occur. 1. Ansible operator and plugin * create new repo operator-framework/ansible-operator * export the pkg/ansible tree to the new repo at the top level @@ -197,6 +200,7 @@ N/A ## Implementation History +20200603 - Answer the helm-operator question. 20200603 - Address questions from the review. 20200602 - Answered the docs question. 20200601 - Added versioning as a non-goal; Added KB phase 2 note to CLI repo.