sigs.k8s.io/cluster-api@v1.7.1/docs/proposals/YYYYMMDD-template.md (about)

     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/enhancements` 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](https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/main/docs/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  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
    43  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
    44  
    45  - [Glossary](#glossary)
    46  - [Summary](#summary)
    47  - [Motivation](#motivation)
    48    - [Goals](#goals)
    49    - [Non-Goals/Future Work](#non-goalsfuture-work)
    50  - [Proposal](#proposal)
    51    - [User Stories](#user-stories)
    52      - [Story 1](#story-1)
    53      - [Story 2](#story-2)
    54    - [Requirements (Optional)](#requirements-optional)
    55      - [Functional Requirements](#functional-requirements)
    56        - [FR1](#fr1)
    57        - [FR2](#fr2)
    58      - [Non-Functional Requirements](#non-functional-requirements)
    59        - [NFR1](#nfr1)
    60        - [NFR2](#nfr2)
    61    - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints)
    62    - [Security Model](#security-model)
    63    - [Risks and Mitigations](#risks-and-mitigations)
    64  - [Alternatives](#alternatives)
    65  - [Upgrade Strategy](#upgrade-strategy)
    66  - [Additional Details](#additional-details)
    67    - [Test Plan [optional]](#test-plan-optional)
    68    - [Graduation Criteria [optional]](#graduation-criteria-optional)
    69    - [Version Skew Strategy [optional]](#version-skew-strategy-optional)
    70  - [Implementation History](#implementation-history)
    71  
    72  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
    73  
    74  ## Glossary
    75  
    76  Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html).
    77  
    78  If this proposal adds new terms, or defines some, make the changes to the book's glossary when in PR stage.
    79  
    80  ## Summary
    81  
    82  The `Summary` section is incredibly important for producing high quality user-focused documentation such as release notes or a development roadmap.
    83  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.
    84  
    85  A good summary is probably at least a paragraph in length.
    86  
    87  ## Motivation
    88  
    89  This section is for explicitly listing the motivation, goals and non-goals of this proposal.
    90  
    91  - Describe why the change is important and the benefits to users.
    92  - The motivation section can optionally provide links to [experience reports](https://github.com/golang/go/wiki/ExperienceReports)
    93  to demonstrate the interest in a proposal within the wider Kubernetes community.
    94  
    95  ### Goals
    96  
    97  - List the specific high-level goals of the proposal.
    98  - How will we know that this has succeeded?
    99  
   100  ### Non-Goals/Future Work
   101  
   102  - What high-levels are out of scope for this proposal?
   103  - Listing non-goals helps to focus discussion and make progress.
   104  
   105  ## Proposal
   106  
   107  This is where we get down to the nitty gritty of what the proposal actually is.
   108  
   109  - What is the plan for implementing this feature?
   110  - What data model changes, additions, or removals are required?
   111  - Provide a scenario, or example.
   112  - Use diagrams to communicate concepts, flows of execution, and states.
   113  
   114  [PlantUML](http://plantuml.com) is the preferred tool to generate diagrams,
   115  place your `.plantuml` files under `images/` and run `make diagrams` from the docs folder.
   116  
   117  ### User Stories
   118  
   119  - Detail the things that people will be able to do if this proposal is implemented.
   120  - Include as much detail as possible so that people can understand the "how" of the system.
   121  - The goal here is to make this feel real for users without getting bogged down.
   122  
   123  #### Story 1
   124  
   125  #### Story 2
   126  
   127  ### Requirements (Optional)
   128  
   129  Some authors may wish to use requirements in addition to user stories.
   130  Technical requirements should derived from user stories, and provide a trace from
   131  use case to design, implementation and test case. Requirements can be prioritised
   132  using the MoSCoW (MUST, SHOULD, COULD, WON'T) criteria.
   133  
   134  The FR and NFR notation is intended to be used as cross-references across a CAEP.
   135  
   136  The difference between goals and requirements is that between an executive summary
   137  and the body of a document. Each requirement should be in support of a goal,
   138  but narrowly scoped in a way that is verifiable or ideally - testable.
   139  
   140  #### Functional Requirements
   141  
   142  Functional requirements are the properties that this design should include.
   143  
   144  ##### FR1
   145  
   146  ##### FR2
   147  
   148  #### Non-Functional Requirements
   149  
   150  Non-functional requirements are user expectations of the solution. Include
   151  considerations for performance, reliability and security.
   152  
   153  ##### NFR1
   154  
   155  ##### NFR2
   156  
   157  ### Implementation Details/Notes/Constraints
   158  
   159  - What are some important details that didn't come across above.
   160  - What are the caveats to the implementation?
   161  - Go in to as much detail as necessary here.
   162  - Talk about core concepts and how they relate.
   163  
   164  ### Security Model
   165  
   166  Document the intended security model for the proposal, including implications
   167  on the Kubernetes RBAC model. Questions you may want to answer include:
   168  
   169  * Does this proposal implement security controls or require the need to do so?
   170    * If so, consider describing the different roles and permissions with tables.
   171  * Are their adequate security warnings where appropriate (see https://adam.shostack.org/ReederEtAl_NEATatMicrosoft.pdf for guidance).
   172  * Are regex expressions going to be used, and are their appropriate defenses against DOS.
   173  * Is any sensitive data being stored in a secret, and only exists for as long as necessary?
   174  
   175  ### Risks and Mitigations
   176  
   177  - What are the risks of this proposal and how do we mitigate? Think broadly.
   178  - How will UX be reviewed and by whom?
   179  - How will security be reviewed and by whom?
   180  - Consider including folks that also work outside the SIG or subproject.
   181  
   182  ## Alternatives
   183  
   184  The `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a proposal.
   185  
   186  ## Upgrade Strategy
   187  
   188  If applicable, how will the component be upgraded? Make sure this is in the test plan.
   189  
   190  Consider the following in developing an upgrade strategy for this enhancement:
   191  - What changes (in invocations, configurations, API use, etc.) is an existing cluster required to make on upgrade in order to keep previous behavior?
   192  - 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?
   193  
   194  ## Additional Details
   195  
   196  ### Test Plan [optional]
   197  
   198  **Note:** *Section not required until targeted at a release.*
   199  
   200  Consider the following in developing a test plan for this enhancement:
   201  - Will there be e2e and integration tests, in addition to unit tests?
   202  - How will it be tested in isolation vs with other components?
   203  
   204  No need to outline all of the test cases, just the general strategy.
   205  Anything that would count as tricky in the implementation and anything particularly challenging to test should be called out.
   206  
   207  All code is expected to have adequate tests (eventually with coverage expectations).
   208  Please adhere to the [Kubernetes testing guidelines][testing-guidelines] when drafting this test plan.
   209  
   210  [testing-guidelines]: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md
   211  
   212  ### Graduation Criteria [optional]
   213  
   214  **Note:** *Section not required until targeted at a release.*
   215  
   216  Define graduation milestones.
   217  
   218  These may be defined in terms of API maturity, or as something else. Initial proposal should keep
   219  this high-level with a focus on what signals will be looked at to determine graduation.
   220  
   221  Consider the following in developing the graduation criteria for this enhancement:
   222  - [Maturity levels (`alpha`, `beta`, `stable`)][maturity-levels]
   223  - [Deprecation policy][deprecation-policy]
   224  
   225  Clearly define what graduation means by either linking to the [API doc definition](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning),
   226  or by redefining what graduation means.
   227  
   228  In general, we try to use the same stages (alpha, beta, GA), regardless how the functionality is accessed.
   229  
   230  [maturity-levels]: https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions
   231  [deprecation-policy]: https://kubernetes.io/docs/reference/using-api/deprecation-policy/
   232  
   233  ### Version Skew Strategy [optional]
   234  
   235  If applicable, how will the component handle version skew with other components? What are the guarantees? Make sure
   236  this is in the test plan.
   237  
   238  Consider the following in developing a version skew strategy for this enhancement:
   239  - 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?
   240  - Will any other components on the node change? For example, changes to CSI, CRI or CNI may require updating that component before the kubelet.
   241  
   242  ## Implementation History
   243  
   244  - [ ] MM/DD/YYYY: Proposed idea in an issue or [community meeting]
   245  - [ ] MM/DD/YYYY: Compile a Google Doc following the CAEP template (link here)
   246  - [ ] MM/DD/YYYY: First round of feedback from community
   247  - [ ] MM/DD/YYYY: Present proposal at a [community meeting]
   248  - [ ] MM/DD/YYYY: Open proposal PR
   249  
   250  <!-- Links -->
   251  [community meeting]: https://docs.google.com/document/d/1ushaVqAKYnZ2VN_aa3GyKlS4kEd6bSug13xaXOakAQI/edit#heading=h.pxsq37pzkbdq