Skip to content

Commit

Permalink
Merge pull request #352 from abhatt-rh/pr-319
Browse files Browse the repository at this point in the history
New Validated Patterns tiers
  • Loading branch information
abhatt-rh authored Nov 20, 2023
2 parents cf6cdf5 + ebd92a7 commit d88ea3b
Show file tree
Hide file tree
Showing 12 changed files with 1,021 additions and 223 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ Gemfile.lock
.vscode
.idea
.vale
modules/.vale.ini
modules/.vale.ini
.vale.ini
39 changes: 39 additions & 0 deletions content/learn/about-pattern-tiers-types.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
menu:
learn:
parent: Workflow
title: Validated Pattern tiers
weight: 41
---

:toc:

:_content-type: ASSEMBLY
include::modules/comm-attributes.adoc[]

[id="pattern-tiers"]
== {solution-name-upstream} tiers

The different tiers of {solution-name-upstream} are designed to facilitate ongoing maintenance, support, and testing effort for a pattern. To contribute to a pattern that suits your solution or to learn about onboarding your own pattern, understand the following pattern tiers.

|===
|Pattern tier|Description

|link:/requirements/sandbox/[{sandbox-tier-first}]
|A pattern categorized under the {sandbox} tier provides you with an entry point to onboard to {solution-name-upstream}. The minimum requirement to qualify for the {sandbox} tier is to start with the patterns framework and include minimal documentation.

The patterns in this tier might be in a work-in-progress state; and they might have been manually tested on a limited set of platforms.


|link:/requirements/tested/[{tested-tier-first}]
|A pattern categorized under the {tested} tier implies that the pattern might have been recently working on at least one recent version of {rh-ocp}. Qualifying for this tier might require additional work for the pattern’s owner, who might be a partner or a motivated subject matter expert (SME).

The patterns in this tier might have a defined business problem with a demonstration. The patterns might have a manual or automated test plan, which passes at least once for each new {rh-ocp} minor version.

|link:/requirements/maintained/[{maintained-tier-first}]
|A pattern categorized under the {maintained} tier implies that the pattern might have been functional on all currently supported extended update support (EUS) versions of {rh-ocp}. Qualifying for this tier might require additional work for the pattern’s owner who might be a partner or a motivated SME.

The patterns in this tier might have a formal release process with patch releases. They might have continuous integration (CI) automation testing.

|===

43 changes: 0 additions & 43 deletions content/learn/community.adoc

This file was deleted.

105 changes: 55 additions & 50 deletions content/learn/implementation.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,73 +2,78 @@
menu:
learn:
parent: Workflow
title: Implementation Requirements
weight: 41
title: Implementation requirements
weight: 42
aliases: /requirements/implementation/
---

:toc:

:_content-type: ASSEMBLY
include::modules/comm-attributes.adoc[]

[id="technical-requirements"]
== Technical Requirements
== Technical requirements

Additional requirements specific to the implementation for all Community, and Validated patterns
Consider these requirements specific to the implementation of all {solution-name-upstream} and their tiers.

[id="must"]
=== Must
The requirements are categorized as follows:

. 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.
. Patterns *MUST* be useful without all content stored in private git repos
. Patterns *MUST* include a list of names and versions of all the products and projects being consumed by the pattern
. Patterns *MUST* be useful without any sample applications that are private or lack public sources.
+
Patterns must not become useless due to bit rot or opaque incompatibilities in closed source "`applications`".
Must::
These are nonnegotiable, core requirements that must be implemented.
Should::
These are important but not critical; their implementation enhances the pattern.
Can::
These are optional or desirable features, but their absence does not hinder the implementation of a pattern.

. Patterns *MUST NOT* store sensitive data elements, including but not limited to passwords, in Git
. Patterns *MUST* be possible to deploy on any IPI-based OpenShift cluster (BYO)
+
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`")
[id="must-implementation-requirements"]
=== Must

. 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.
. 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.
. Imperative elements *MUST* be implemented as idempotent code stored in Git
. 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.
. Patterns must be useful without all content stored in private Git repositories.
. Patterns must include a list of names and versions of all the products and projects that the pattern consumes.
. Patterns must be useful without any sample applications that are private or that lack public sources.
. Patterns must *not* degrade due to lack of updates or opaque incompatibilities in closed source applications.
. Patterns must *not* store sensitive data elements including, but not limited to, passwords in Git repositories.
. Patterns must be possible to deploy on any installer-provisioned infrastructure OpenShift cluster (BYO).
+
{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`).
. 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.
. 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.
. Imperative elements must be implemented as idempotent code stored in Git repository.

[id="should"]
[id="should-implementation-requirements"]
=== Should

. Patterns SHOULD include sample application(s) to demonstrate the business problem(s) addressed by the pattern.
. Patterns SHOULD try to indicate which parts are foundational as opposed to being for demonstration purposes.
. Patterns SHOULD use the VP operator to deploy patterns. However anything that creates the OpenShift GitOps subscription and initial clustergroup application could be acceptable.
. 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.
. Patterns SHOULD use industry standards and Red Hat products for all required tooling
. Patterns should include sample applications to demonstrate the business problems addressed by the pattern.
. Patterns should try to indicate which parts are foundational as opposed to being for demonstration purposes.
. 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.
. 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.
. Patterns should use industry standards and {redhat} products for all required tooling.
+
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.

. Patterns SHOULD NOT make use of upstream/community operators and images except, depending on the market segment, where critical to the overall solution.
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.
. 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.
+
Such operators are forbidden to be deployed into an increasing number of customer environments, which limits reuse.
Alternatives include productizing the operator, and building it in-cluster from trusted sources as part of the pattern.

. Patterns SHOULD be decomposed into modules that perform a specific function, so that they can be reused in other patterns.
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.
. Patterns should be decomposed into modules that perform a specific function, so that they can be reused in other patterns.
+
For example, Bucket Notification is a capability in the Medical Diagnosis pattern that could be used for other solutions.

. Patterns SHOULD use Ansible Automation Platform to drive the declarative provisioning and management of managed hosts (e.g. RHEL). See also "`Imperative elements`".
. Patterns SHOULD use RHACM to manage policy and compliance on any managed clusters.
. 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.
. 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.
. Managed clusters SHOULD use the "`pull`" deployment model for obtaining their configuration.
. Imperative elements SHOULD be implemented as Ansible playbooks
. 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.
For example, Bucket Notification is a capability in the {med-pattern} that could be used for other solutions.
. Patterns should use {rh-ansible} to drive the declarative provisioning and management of managed hosts, for example, {rhel-first}. See also `Imperative elements`.
. Patterns should use {rh-rhacm-first} to manage policy and compliance on any managed clusters.
. 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.
. 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.
. Managed clusters should use the `pull` deployment model for obtaining their configuration.
. Imperative elements should be implemented as Ansible playbooks.
. 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}.

[id="can"]
[id="can-implementation-requirements"]
=== Can

. Patterns CAN include additional configuration and/or demo elements located in one or more additional private git repos.
. Patterns CAN include automation that deploys a known set of clusters and/or machines in a specific topology
. Patterns CAN limit functionality/testing claims to specific platforms, topologies, and cluster/node sizes
. Patterns CAN consume operators from established partners (e.g. Hashicorp Vault, and Seldon)
. Patterns CAN include managed clusters
. Patterns CAN include details or automation for provisioning managed clusters, or rely on the admin to pre-provision them out-of-band.
. Patterns CAN also choose to model multi-cluster solutions as an uncoordinated collection of "`initial hub clusters`"
. Imperative elements CAN interact with cluster state and/or external influences
. Patterns can include additional configuration and/or demo elements located in one or more additional private Git repositories.
. Patterns can include automation that deploys a known set of clusters and/or machines in a specific topology.
. Patterns can limit functionality/testing claims to specific platforms, topologies, and cluster/node sizes.
. Patterns can consume Operators from established partners (for example, Hashicorp Vault, and Seldon)
. Patterns can include managed clusters.
. Patterns can include details or automation for provisioning managed clusters, or rely on the admin to pre-provision them out-of-band.
. Patterns can also choose to model multi-cluster solutions as an uncoordinated collection of initial hub clusters.
. Imperative elements can interact with cluster state or external influences.
83 changes: 83 additions & 0 deletions content/learn/maintained.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
menu:
learn:
parent: Workflow
title: Validated Patterns - Maintained tier
weight: 45
aliases: /requirements/maintained/
aliases: /requirements/validated/
---

:toc:

:_content-type: ASSEMBLY
include::modules/comm-attributes.adoc[]

[id="about-maintained-tier"]
= About the {maintained-tier-first}

A pattern categorized under the {maintained} tier implies that the pattern was known to be functional on all currently supported extended update support (EUS) versions of {rh-ocp}. Qualifying for this tier might require additional work for the pattern’s owner who might be a partner or a sufficiently motivated subject matter expert (SME).

[id="nominating-a-pattern-for-maintained-tier"]
== Nominating a pattern for the {maintained} tier

If your pattern qualifies or meets the criteria for {maintained} tier, submit your nomination to mailto:[email protected][[email protected]].

[NOTE]
====
Each {maintained} pattern represents an ongoing maintenance, support, and testing effort. Finite team capacity means that it is not possible for the team to take on this responsibility for all {solution-name-upstream}.
====

For this reason we have designed the tiers and our processes to facilitate this to occur outside of the team by any sufficiently motivated party, including other parts of Red Hat, partners, and even customers.

In limited cases, the {solution-name-upstream} team may consider taking on that work, however, it is recommended that you contact the team at least 4 weeks prior to the end of a given quarter for the necessary work to be considered as part of the following quarter's planning process.


[id="requirements-maintained-tier"]
== Requirements for the {maintained} tier

The {maintained} patterns have deliverable and requirements in addition to those
specified for the link:/requirements/tested/[Tested tier].

The requirements are categorized as follows:

Must::
These are nonnegotiable, core requirements that must be implemented.
Should::
These are important but not critical; their implementation enhances the pattern.
Can::
These are optional or desirable features, but their absence does not hinder the implementation of a pattern.

[id="must-maintained-tier"]
=== Must

A {maintained} pattern must continue to meet the following criteria to remain in {maintained} tier:

* A {maintained} pattern must conform to the common technical link:/requirements/implementation/[implementation requirements].
* A {maintained} pattern must only make use of components that are either supported, or easily substituted for supportable equivalents, for example, HashiCorp vault which has community and enterprise variants.
* A {maintained} pattern must *not* rely on functionality in tech-preview, or hidden behind feature gates.
* A {maintained} pattern must have their architectures reviewed by the Product Manager (PM), Technical Product Manager (TPM), or Technical Marketing Manager (TMM) of each {redhat} product they consume to ensure consistency with the product teams` intentions and roadmaps.
* A {maintained} pattern must include a presentation slides oriented around the business problem being solved and intended for use by the field to sell and promote the solution.
* A {maintained} pattern must include test plan automation that runs on every change to the pattern, or a schedule no less frequently than once per week.
* A {maintained} pattern must be tested on all currently supported {rh-ocp} extended update support (EUS) releases.
* A {maintained} pattern must fix breakage in timely manner.
* A {maintained} pattern must document their support policy.
+

The individual products used in a {solution-name-upstream} are backed by the full {redhat} support experience conditional on the customer's subscription to those products, and the individual products`s support policy.
+
Additional components in a {solution-name-upstream} that are not supported by {redhat}; for example, Hashicorp Vault, and Seldon Core, require a customer to obtain support from that vendor directly.

The {solution-name-upstream} team is will try to address any problems in the {validated-patterns-op}, and in the common Helm charts, but cannot not offer any SLAs at this time.

//TODO: Create an aDoc version of our support statement slide

[NOTE]
====
The {maintained} patterns *do not* imply an obligation of support for partner or community Operators by {redhat}.
====

[id="can-maintained-tier"]
=== Can

* If you are creating {solution-name-upstream}, you can provide your own SLA.
Loading

0 comments on commit d88ea3b

Please sign in to comment.