|
| 1 | +--- |
| 2 | +title: Proposal Template |
| 3 | +authors: |
| 4 | + - "@janedoe" |
| 5 | +reviewers: |
| 6 | + - "@janedoe" |
| 7 | +creation-date: yyyy-mm-dd |
| 8 | +last-updated: yyyy-mm-dd |
| 9 | +status: provisional|experimental|implementable|implemented|deferred|rejected|withdrawn|replaced |
| 10 | +see-also: |
| 11 | + - "/docs/proposals/20190101-we-heard-you-like-proposals.md" |
| 12 | + - "/docs/proposals/20190102-everyone-gets-a-proposal.md" |
| 13 | +replaces: |
| 14 | + - "/docs/proposals/20181231-replaced-proposal.md" |
| 15 | +superseded-by: |
| 16 | + - "/docs/proposals/20190104-superceding-proposal.md" |
| 17 | +--- |
| 18 | + |
| 19 | +# Title |
| 20 | +- Keep it simple and descriptive. |
| 21 | +- A good title can help communicate what the proposal is and should be considered as part of any review. |
| 22 | + |
| 23 | +<!-- BEGIN Remove before PR --> |
| 24 | +To get started with this template: |
| 25 | +1. **Make a copy of this template.** |
| 26 | + Copy this template into `docs/enhacements` and name it `YYYYMMDD-my-title.md`, where `YYYYMMDD` is the date the proposal was first drafted. |
| 27 | +1. **Fill out the required sections.** |
| 28 | +1. **Create a PR.** |
| 29 | + Aim for single topic PRs to keep discussions focused. |
| 30 | + If you disagree with what is already in a document, open a new PR with suggested changes. |
| 31 | + |
| 32 | +The canonical place for the latest set of instructions (and the likely source of this file) is [here](/proposals/YYYYMMDD-template.md). |
| 33 | + |
| 34 | +The `Metadata` section above is intended to support the creation of tooling around the proposal process. |
| 35 | +This will be a YAML section that is fenced as a code block. |
| 36 | +See the proposal process for details on each of these items. |
| 37 | + |
| 38 | +<!-- END Remove before PR --> |
| 39 | + |
| 40 | +## Table of Contents |
| 41 | + |
| 42 | +A table of contents is helpful for quickly jumping to sections of a proposal and for highlighting |
| 43 | +any additional information provided beyond the standard proposal template. |
| 44 | +[Tools for generating](https://github.com/ekalinin/github-markdown-toc) a table of contents from markdown are available. |
| 45 | + |
| 46 | +- [Title](#title) |
| 47 | + - [Table of Contents](#table-of-contents) |
| 48 | + - [Glossary](#glossary) |
| 49 | + - [Summary](#summary) |
| 50 | + - [Motivation](#motivation) |
| 51 | + - [Goals](#goals) |
| 52 | + - [Non-Goals/Future Work](#non-goalsfuture-work) |
| 53 | + - [Proposal](#proposal) |
| 54 | + - [User Stories](#user-stories) |
| 55 | + - [Story 1](#story-1) |
| 56 | + - [Story 2](#story-2) |
| 57 | + - [Requirements (Optional)](#requirements-optional) |
| 58 | + - [Functional Requirements](#functional-requirements) |
| 59 | + - [FR1](#fr1) |
| 60 | + - [FR2](#fr2) |
| 61 | + - [Non-Functional Requirements](#non-functional-requirements) |
| 62 | + - [NFR1](#nfr1) |
| 63 | + - [NFR2](#nfr2) |
| 64 | + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) |
| 65 | + - [Security Model](#security-model) |
| 66 | + - [Risks and Mitigations](#risks-and-mitigations) |
| 67 | + - [Alternatives](#alternatives) |
| 68 | + - [Upgrade Strategy](#upgrade-strategy) |
| 69 | + - [Additional Details](#additional-details) |
| 70 | + - [Test Plan [optional]](#test-plan-optional) |
| 71 | + - [Graduation Criteria [optional]](#graduation-criteria-optional) |
| 72 | + - [Version Skew Strategy [optional]](#version-skew-strategy-optional) |
| 73 | + - [Implementation History](#implementation-history) |
| 74 | + |
| 75 | +## Glossary |
| 76 | + |
| 77 | +Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). |
| 78 | + |
| 79 | +If this proposal adds new terms, or defines some, make the changes to the book's glossary when in PR stage. |
| 80 | + |
| 81 | +## Summary |
| 82 | + |
| 83 | +The `Summary` section is incredibly important for producing high quality user-focused documentation such as release notes or a development roadmap. |
| 84 | +It should be possible to collect this information before implementation begins in order to avoid requiring implementors to split their attention between writing release notes and implementing the feature itself. |
| 85 | + |
| 86 | +A good summary is probably at least a paragraph in length. |
| 87 | + |
| 88 | +## Motivation |
| 89 | + |
| 90 | +This section is for explicitly listing the motivation, goals and non-goals of this proposal. |
| 91 | + |
| 92 | +- Describe why the change is important and the benefits to users. |
| 93 | +- The motivation section can optionally provide links to [experience reports](https://github.com/golang/go/wiki/ExperienceReports) |
| 94 | +to demonstrate the interest in a proposal within the wider Kubernetes community. |
| 95 | + |
| 96 | +### Goals |
| 97 | + |
| 98 | +- List the specific high-level goals of the proposal. |
| 99 | +- How will we know that this has succeeded? |
| 100 | + |
| 101 | +### Non-Goals/Future Work |
| 102 | + |
| 103 | +- What high-levels are out of scope for this proposal? |
| 104 | +- Listing non-goals helps to focus discussion and make progress. |
| 105 | + |
| 106 | +## Proposal |
| 107 | + |
| 108 | +This is where we get down to the nitty gritty of what the proposal actually is. |
| 109 | + |
| 110 | +- What is the plan for implementing this feature? |
| 111 | +- What data model changes, additions, or removals are required? |
| 112 | +- Provide a scenario, or example. |
| 113 | +- Use diagrams to communicate concepts, flows of execution, and states. |
| 114 | + |
| 115 | +[PlantUML](http://plantuml.com) is the preferred tool to generate diagrams, |
| 116 | +place your `.plantuml` files under `images/` and run `make diagrams` from the docs folder. |
| 117 | + |
| 118 | +### User Stories |
| 119 | + |
| 120 | +- Detail the things that people will be able to do if this proposal is implemented. |
| 121 | +- Include as much detail as possible so that people can understand the "how" of the system. |
| 122 | +- The goal here is to make this feel real for users without getting bogged down. |
| 123 | + |
| 124 | +#### Story 1 |
| 125 | + |
| 126 | +#### Story 2 |
| 127 | + |
| 128 | +### Requirements (Optional) |
| 129 | + |
| 130 | +Some authors may wish to use requirements in addition to user stories. |
| 131 | +Technical requirements should derived from user stories, and provide a trace from |
| 132 | +use case to design, implementation and test case. Requirements can be prioritised |
| 133 | +using the MoSCoW (MUST, SHOULD, COULD, WON'T) criteria. |
| 134 | + |
| 135 | +The FR and NFR notation is intended to be used as cross-references across a CAEP. |
| 136 | + |
| 137 | +The difference between goals and requirements is that between an executive summary |
| 138 | +and the body of a document. Each requirement should be in support of a goal, |
| 139 | +but narrowly scoped in a way that is verifiable or ideally - testable. |
| 140 | + |
| 141 | +#### Functional Requirements |
| 142 | + |
| 143 | +Functional requirements are the properties that this design should include. |
| 144 | + |
| 145 | +##### FR1 |
| 146 | + |
| 147 | +##### FR2 |
| 148 | + |
| 149 | +#### Non-Functional Requirements |
| 150 | + |
| 151 | +Non-functional requirements are user expectations of the solution. Include |
| 152 | +considerations for performance, reliability and security. |
| 153 | + |
| 154 | +##### NFR1 |
| 155 | + |
| 156 | +##### NFR2 |
| 157 | + |
| 158 | +### Implementation Details/Notes/Constraints |
| 159 | + |
| 160 | +- What are some important details that didn't come across above. |
| 161 | +- What are the caveats to the implementation? |
| 162 | +- Go in to as much detail as necessary here. |
| 163 | +- Talk about core concepts and how they releate. |
| 164 | + |
| 165 | +### Security Model |
| 166 | + |
| 167 | +Document the intended security model for the proposal, including implications |
| 168 | +on the Kubernetes RBAC model. Questions you may want to answer include: |
| 169 | + |
| 170 | +* Does this proposal implement security controls or require the need to do so? |
| 171 | + * If so, consider describing the different roles and permissions with tables. |
| 172 | +* Are their adequate security warnings where appropriate (see https://adam.shostack.org/ReederEtAl_NEATatMicrosoft.pdf for guidance). |
| 173 | +* Are regex expressions going to be used, and are their appropriate defenses against DOS. |
| 174 | +* Is any sensitive data being stored in a secret, and only exists for as long as necessary? |
| 175 | + |
| 176 | +### Risks and Mitigations |
| 177 | + |
| 178 | +- What are the risks of this proposal and how do we mitigate? Think broadly. |
| 179 | +- How will UX be reviewed and by whom? |
| 180 | +- How will security be reviewed and by whom? |
| 181 | +- Consider including folks that also work outside the SIG or subproject. |
| 182 | + |
| 183 | +## Alternatives |
| 184 | + |
| 185 | +The `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a proposal. |
| 186 | + |
| 187 | +## Upgrade Strategy |
| 188 | + |
| 189 | +If applicable, how will the component be upgraded? Make sure this is in the test plan. |
| 190 | + |
| 191 | +Consider the following in developing an upgrade strategy for this enhancement: |
| 192 | +- What changes (in invocations, configurations, API use, etc.) is an existing cluster required to make on upgrade in order to keep previous behavior? |
| 193 | +- What changes (in invocations, configurations, API use, etc.) is an existing cluster required to make on upgrade in order to make use of the enhancement? |
| 194 | + |
| 195 | +## Additional Details |
| 196 | + |
| 197 | +### Test Plan [optional] |
| 198 | + |
| 199 | +**Note:** *Section not required until targeted at a release.* |
| 200 | + |
| 201 | +Consider the following in developing a test plan for this enhancement: |
| 202 | +- Will there be e2e and integration tests, in addition to unit tests? |
| 203 | +- How will it be tested in isolation vs with other components? |
| 204 | + |
| 205 | +No need to outline all of the test cases, just the general strategy. |
| 206 | +Anything that would count as tricky in the implementation and anything particularly challenging to test should be called out. |
| 207 | + |
| 208 | +All code is expected to have adequate tests (eventually with coverage expectations). |
| 209 | +Please adhere to the [Kubernetes testing guidelines][testing-guidelines] when drafting this test plan. |
| 210 | + |
| 211 | +[testing-guidelines]: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md |
| 212 | + |
| 213 | +### Graduation Criteria [optional] |
| 214 | + |
| 215 | +**Note:** *Section not required until targeted at a release.* |
| 216 | + |
| 217 | +Define graduation milestones. |
| 218 | + |
| 219 | +These may be defined in terms of API maturity, or as something else. Initial proposal should keep |
| 220 | +this high-level with a focus on what signals will be looked at to determine graduation. |
| 221 | + |
| 222 | +Consider the following in developing the graduation criteria for this enhancement: |
| 223 | +- [Maturity levels (`alpha`, `beta`, `stable`)][maturity-levels] |
| 224 | +- [Deprecation policy][deprecation-policy] |
| 225 | + |
| 226 | +Clearly define what graduation means by either linking to the [API doc definition](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning), |
| 227 | +or by redefining what graduation means. |
| 228 | + |
| 229 | +In general, we try to use the same stages (alpha, beta, GA), regardless how the functionality is accessed. |
| 230 | + |
| 231 | +[maturity-levels]: https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions |
| 232 | +[deprecation-policy]: https://kubernetes.io/docs/reference/using-api/deprecation-policy/ |
| 233 | + |
| 234 | +### Version Skew Strategy [optional] |
| 235 | + |
| 236 | +If applicable, how will the component handle version skew with other components? What are the guarantees? Make sure |
| 237 | +this is in the test plan. |
| 238 | + |
| 239 | +Consider the following in developing a version skew strategy for this enhancement: |
| 240 | +- Does this enhancement involve coordinating behavior in the control plane and in the kubelet? How does an n-2 kubelet without this feature available behave when this feature is used? |
| 241 | +- Will any other components on the node change? For example, changes to CSI, CRI or CNI may require updating that component before the kubelet. |
| 242 | + |
| 243 | +## Implementation History |
| 244 | + |
| 245 | +- [ ] MM/DD/YYYY: Proposed idea in an issue or [community meeting] |
| 246 | +- [ ] MM/DD/YYYY: Compile a Google Doc following the CAEP template (link here) |
| 247 | +- [ ] MM/DD/YYYY: First round of feedback from community |
| 248 | +- [ ] MM/DD/YYYY: Present proposal at a [community meeting] |
| 249 | +- [ ] MM/DD/YYYY: Open proposal PR |
| 250 | + |
| 251 | +<!-- Links --> |
| 252 | +[community meeting]: https://docs.google.com/document/d/1Ys-DOR5UsgbMEeciuG0HOgDQc8kZsaWIWJeKJ1-UfbY |
0 commit comments