|
2 | 2 | menu: |
3 | 3 | learn: |
4 | 4 | parent: Workflow |
5 | | -title: Implementation Requirements |
6 | | -weight: 41 |
| 5 | +title: Implementation requirements |
| 6 | +weight: 42 |
7 | 7 | aliases: /requirements/implementation/ |
8 | 8 | --- |
9 | 9 |
|
10 | 10 | :toc: |
11 | 11 |
|
| 12 | +:_content-type: ASSEMBLY |
| 13 | +include::modules/comm-attributes.adoc[] |
| 14 | + |
12 | 15 | [id="technical-requirements"] |
13 | | -== Technical Requirements |
| 16 | +== Technical requirements |
14 | 17 |
|
15 | | -Additional requirements specific to the implementation for all Community, and Validated patterns |
| 18 | +Consider these requirements specific to the implementation of all {solution-name-upstream} and their tiers. |
16 | 19 |
|
17 | | -[id="must"] |
18 | | -=== Must |
| 20 | +The requirements are categorized as follows: |
19 | 21 |
|
20 | | -. Patterns *MUST* include one or more Git repositories, in a publicly accessible location, containing configuration elements that can be consumed by the OpenShift GitOps operator (ArgoCD) without supplying custom ArgoCD images. |
21 | | -. Patterns *MUST* be useful without all content stored in private git repos |
22 | | -. Patterns *MUST* include a list of names and versions of all the products and projects being consumed by the pattern |
23 | | -. Patterns *MUST* be useful without any sample applications that are private or lack public sources. |
24 | | -+ |
25 | | -Patterns must not become useless due to bit rot or opaque incompatibilities in closed source "`applications`". |
| 22 | +Must:: |
| 23 | +These are nonnegotiable, core requirements that must be implemented. |
| 24 | +Should:: |
| 25 | +These are important but not critical; their implementation enhances the pattern. |
| 26 | +Can:: |
| 27 | +These are optional or desirable features, but their absence does not hinder the implementation of a pattern. |
26 | 28 |
|
27 | | -. Patterns *MUST NOT* store sensitive data elements, including but not limited to passwords, in Git |
28 | | -. Patterns *MUST* be possible to deploy on any IPI-based OpenShift cluster (BYO) |
29 | | -+ |
30 | | -We distinguish between the provisioning and configuration requirements of the initial cluster ("`Patterns`"), and of clusters/machines managed by the initial cluster (see "`Managed clusters`") |
| 29 | +[id="must-implementation-requirements"] |
| 30 | +=== Must |
31 | 31 |
|
32 | | -. Patterns *MUST* use a standardized https://github.com/validatedpatterns/common/tree/main/clustergroup[clustergroup] Helm chart, as the initial OpenShift GitOps application that describes all namespaces, subscriptions, and any other GitOps applications which contain the configuration elements that make up the solution. |
33 | | -. Managed clusters *MUST* operate on the premise of "`eventual consistency`" (automatic retries, and an expectation of idempotence), which is one of the essential benefits of the GitOps model. |
34 | | -. Imperative elements *MUST* be implemented as idempotent code stored in Git |
| 32 | +. Patterns must include one or more Git repositories in a publicly accessible location, containing configuration elements that can be consumed by the {rh-gitops} Operator without supplying custom Argo CD images. |
| 33 | +. Patterns must be useful without all content stored in private Git repositories. |
| 34 | +. Patterns must include a list of names and versions of all the products and projects that the pattern consumes. |
| 35 | +. Patterns must be useful without any sample applications that are private or that lack public sources. |
| 36 | +. Patterns must *not* degrade due to lack of updates or opaque incompatibilities in closed source applications. |
| 37 | +. Patterns must *not* store sensitive data elements including, but not limited to, passwords in Git repositories. |
| 38 | +. Patterns must be possible to deploy on any installer-provisioned infrastructure OpenShift cluster (BYO). |
| 39 | ++ |
| 40 | +{solution-name-upstream} distinguish between the provisioning and configuration requirements of the initial cluster (`Patterns`) and of clusters or machines that are managed by the initial cluster (`Managed clusters`). |
| 41 | +. Patterns must use a standardized https://github.com/validatedpatterns/common/tree/main/clustergroup[clustergroup] Helm chart as the initial {rh-gitops} application that describes all namespaces, subscriptions, and any other GitOps applications which contain the configuration elements that make up the solution. |
| 42 | +. Managed clusters must operate on the premise of `eventual consistency` (automatic retries, and an expectation of idempotence), which is one of the essential benefits of the GitOps model. |
| 43 | +. Imperative elements must be implemented as idempotent code stored in Git repository. |
35 | 44 |
|
36 | | -[id="should"] |
| 45 | +[id="should-implementation-requirements"] |
37 | 46 | === Should |
38 | 47 |
|
39 | | -. Patterns SHOULD include sample application(s) to demonstrate the business problem(s) addressed by the pattern. |
40 | | -. Patterns SHOULD try to indicate which parts are foundational as opposed to being for demonstration purposes. |
41 | | -. Patterns SHOULD use the VP operator to deploy patterns. However anything that creates the OpenShift GitOps subscription and initial clustergroup application could be acceptable. |
42 | | -. Patterns SHOULD embody the "`open hybrid cloud model`" unless there is a compelling reason to limit the availability of functionality to a specific platform or topology. |
43 | | -. Patterns SHOULD use industry standards and Red Hat products for all required tooling |
| 48 | +. Patterns should include sample applications to demonstrate the business problems addressed by the pattern. |
| 49 | +. Patterns should try to indicate which parts are foundational as opposed to being for demonstration purposes. |
| 50 | +. Patterns should use the {validated-patterns-op} to deploy patterns. However, anything that creates the {rh-gitops-short} subscription and initial clustergroup application could be acceptable. |
| 51 | +. Patterns should embody the link:https://www.redhat.com/en/products/open-hybrid-cloud[Open Hybrid Cloud model] unless there is a compelling reason to limit the availability of functionality to a specific platform or topology. |
| 52 | +. Patterns should use industry standards and {redhat} products for all required tooling. |
44 | 53 | + |
45 | | -Patterns prefer current best practices at the time of pattern development. Solutions that do not conform to best practices should expect to justify non-conformance and/or expend engineering effort to conform. |
46 | | - |
47 | | -. Patterns SHOULD NOT make use of upstream/community operators and images except, depending on the market segment, where critical to the overall solution. |
| 54 | +Patterns require current best practices at the time of pattern development. Solutions that do not conform to best practices should expect to justify non-conformance or expend engineering effort to conform. |
| 55 | +. Patterns should *not* make use of upstream or community Operators and images except, depending on the market segment, where it is critical to the overall solution. |
48 | 56 | + |
49 | | -Such operators are forbidden to be deployed into an increasing number of customer environments, which limits reuse. |
50 | | -Alternatives include productizing the operator, and building it in-cluster from trusted sources as part of the pattern. |
51 | | - |
52 | | -. Patterns SHOULD be decomposed into modules that perform a specific function, so that they can be reused in other patterns. |
| 57 | +Such Operators are forbidden to be deployed into an increasing number of customer environments, which limits the pattern reuse. Alternatively, consider to productize the Operator, and build it in-cluster from trusted sources as part of the pattern. |
| 58 | +. Patterns should be decomposed into modules that perform a specific function, so that they can be reused in other patterns. |
53 | 59 | + |
54 | | -For example, Bucket Notification is a capability in the Medical Diagnosis pattern that could be used for other solutions. |
55 | | - |
56 | | -. Patterns SHOULD use Ansible Automation Platform to drive the declarative provisioning and management of managed hosts (e.g. RHEL). See also "`Imperative elements`". |
57 | | -. Patterns SHOULD use RHACM to manage policy and compliance on any managed clusters. |
58 | | -. Patterns SHOULD use RHACM and a https://github.com/validatedpatterns/common/tree/main/acm[standardized acm chart] to deploy and configure OpenShift GitOps to managed clusters. |
59 | | -. Managed clusters SHOULD be loosely coupled to their hub, and use OpenShift GitOps to consume applications and configuration directly from Git as opposed to having hard dependencies on a centralized cluster. |
60 | | -. Managed clusters SHOULD use the "`pull`" deployment model for obtaining their configuration. |
61 | | -. Imperative elements SHOULD be implemented as Ansible playbooks |
62 | | -. Imperative elements SHOULD be driven declaratively -- by which we mean that the playbooks should be triggered by Jobs and/or CronJobs stored in Git and delivered by OpenShift GitOps. |
| 60 | +For example, Bucket Notification is a capability in the {med-pattern} that could be used for other solutions. |
| 61 | +. Patterns should use {rh-ansible} to drive the declarative provisioning and management of managed hosts, for example, {rhel-first}. See also `Imperative elements`. |
| 62 | +. Patterns should use {rh-rhacm-first} to manage policy and compliance on any managed clusters. |
| 63 | +. Patterns should use {rh-rhacm} and a https://github.com/validatedpatterns/common/tree/main/acm[standardized RHACM chart] to deploy and configure {rh-gitops-short} to managed clusters. |
| 64 | +. Managed clusters should be loosely coupled to their hub, and use {rh-gitops-short} to consume applications and configuration directly from Git as opposed to having hard dependencies on a centralized cluster. |
| 65 | +. Managed clusters should use the `pull` deployment model for obtaining their configuration. |
| 66 | +. Imperative elements should be implemented as Ansible playbooks. |
| 67 | +. Imperative elements should be driven declaratively implying that the playbooks should be triggered by Jobs or CronJobs stored in Git and delivered by {rh-gitops-short}. |
63 | 68 |
|
64 | | -[id="can"] |
| 69 | +[id="can-implementation-requirements"] |
65 | 70 | === Can |
66 | 71 |
|
67 | | -. Patterns CAN include additional configuration and/or demo elements located in one or more additional private git repos. |
68 | | -. Patterns CAN include automation that deploys a known set of clusters and/or machines in a specific topology |
69 | | -. Patterns CAN limit functionality/testing claims to specific platforms, topologies, and cluster/node sizes |
70 | | -. Patterns CAN consume operators from established partners (e.g. Hashicorp Vault, and Seldon) |
71 | | -. Patterns CAN include managed clusters |
72 | | -. Patterns CAN include details or automation for provisioning managed clusters, or rely on the admin to pre-provision them out-of-band. |
73 | | -. Patterns CAN also choose to model multi-cluster solutions as an uncoordinated collection of "`initial hub clusters`" |
74 | | -. Imperative elements CAN interact with cluster state and/or external influences |
| 72 | +. Patterns can include additional configuration and/or demo elements located in one or more additional private Git repositories. |
| 73 | +. Patterns can include automation that deploys a known set of clusters and/or machines in a specific topology. |
| 74 | +. Patterns can limit functionality/testing claims to specific platforms, topologies, and cluster/node sizes. |
| 75 | +. Patterns can consume Operators from established partners (for example, Hashicorp Vault, and Seldon) |
| 76 | +. Patterns can include managed clusters. |
| 77 | +. Patterns can include details or automation for provisioning managed clusters, or rely on the admin to pre-provision them out-of-band. |
| 78 | +. Patterns can also choose to model multi-cluster solutions as an uncoordinated collection of initial hub clusters. |
| 79 | +. Imperative elements can interact with cluster state or external influences. |
0 commit comments