summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeads2k <deads@redhat.com>2016-12-15 13:15:18 -0500
committerdeads2k <deads@redhat.com>2016-12-19 11:56:56 -0500
commit15d8d13f08cd0f3d0ebc7d1a8a707c7cac8a25a9 (patch)
treef21985560c778aba5c3f102ecb89ff65cb74a505
parent52e237a093d40100b4fa53ac28ebddd21e8f98a8 (diff)
add kubectl factory conventions
-rw-r--r--contributors/devel/kubectl-conventions.md16
1 files changed, 16 insertions, 0 deletions
diff --git a/contributors/devel/kubectl-conventions.md b/contributors/devel/kubectl-conventions.md
index 1e94b3ba..2bb5f49d 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<CommandName>` function that creates