Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

Commit 9211516

Browse files
adds proposals directory so we document our design (#2)
Signed-off-by: Chris Hein <[email protected]>
1 parent 7d97f20 commit 9211516

File tree

1 file changed

+252
-0
lines changed

1 file changed

+252
-0
lines changed

proposals/YYYYMMDD-template.md

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
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

Comments
 (0)