From 15d8d13f08cd0f3d0ebc7d1a8a707c7cac8a25a9 Mon Sep 17 00:00:00 2001 From: deads2k Date: Thu, 15 Dec 2016 13:15:18 -0500 Subject: [PATCH] add kubectl factory conventions --- contributors/devel/kubectl-conventions.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/contributors/devel/kubectl-conventions.md b/contributors/devel/kubectl-conventions.md index 1e94b3ba5..2bb5f49d2 100644 --- a/contributors/devel/kubectl-conventions.md +++ b/contributors/devel/kubectl-conventions.md @@ -13,6 +13,7 @@ Updated: 8/27/2015 - [Flag conventions](#flag-conventions) - [Output conventions](#output-conventions) - [Documentation conventions](#documentation-conventions) + - [kubectl Factory conventions](#kubectl-Factory-conventions) - [Command implementation conventions](#command-implementation-conventions) - [Generators](#generators) @@ -245,6 +246,21 @@ rather than "RESOURCE" or "KIND" * Use "NAME" for resource names +## kubectl Factory conventions + +The kubectl `Factory` is a large interface which is used to provide access to clients, +polymorphic inspection, and polymorphic mutation. The `Factory` is layered in +"rings" in which one ring may reference inner rings, but not peers or outer rings. +This is done to allow composition by extenders. + +In order for composers to be able to provide alternative factory implementations +they need to provide low level pieces of *certain* functions so that when the factory +calls back into itself it uses the custom version of the function. Rather than try +to enumerate everything that someone would want to override we split the factory into +rings, where each ring can depend on methods an earlier ring, but cannot depend upon +peer methods in its own ring. + + ## Command implementation conventions For every command there should be a `NewCmd` function that creates