Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,27 @@ declaring that, while 4.1.18 and 4.1.20 are in `candidate-4.2`, they should not
### Block Edges

Create/edit an appropriate file in `blocked_edges/`.
- `to` is the release which has the existing incoming edges.
- `from` is a regex for the previous release versions.

* `to` (required, [string][json-string]) is the release which has the existing incoming edges.
* `from` (required, [string][json-string]) is a regex for the previous release versions.
If you want to require `from` to match the full version string (and not just a substring), you must include explicit `^` and `$` anchors.
Release version strings will receive [the architecture-suffix](#release-names) before being compared to this regular expression.
* `url` (optional, [string][json-string]), with a URI documenting the blocking reason.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO justification link should not be optional

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should, and there's a section in the in-flight enhancement explaining my motivation, but let's hash this out in the relevant enhancements thread.

For example, this could link to a bug's impact statement or knowledge-base article.
* `name` (optional, [string][json-string]), with a CamelCase reason suitable for [a `ClusterOperatorStatusCondition` `reason` property][api-reason].

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to come up with a name when its tied to a bug is (almost) all cases?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This slug eventually feeds the Recommended condition's reason property. I think we want that, although see the Metadata to include when blocking a conditional request section in the enhancement for discussion.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we maintain the list of name i.e. ClusterOperatorStatusCondition reason it might be useful to create some kind of glossary

* `message` (optional, [string][json-string]), with a human-oriented message describing the blocking reason, suitable for [a `ClusterOperatorStatusCondition` `message` property][api-message].
* `matchingRules` (optional, [array][json-array]), defining conditions for deciding which clusters have the update recommended and which do not.
The array is ordered by decreasing precedence.
Consumers should walk the array in order.
For a given entry, if a condition type is unrecognized, or fails to evaluate, consumers should proceed to the next entry.
If a condition successfully evaluates (either as a match or as an explicit does-not-match), that result is used, and no further entries should be attempted.
If no condition can be successfully evaluated, the update should not be recommended.
Each entry must be an [object][json-object] with at least the following property:

* `type` (required, [string][json-string]), defining the type in [the condition type registry][cluster-condition-type-registry].
For example, `type: promql` identifies the condition as [the `promql` type][cluster-condition-type-registry-promql].

Additional properties for each entry are defined in [the cluster-condition type registry][cluster-condition-type-registry].

For example: to block all incoming edges to a release create a file such as `blocked-edges/4.2.11.yaml` containing:

Expand All @@ -118,10 +136,17 @@ from: ^4\.1\.(18|20)[+].*$

The `[+].*` portion absorbs [the architecture-suffix](#release-names) from the release name that consumers will use for comparisons.

[api-message]: https://github.com/openshift/api/blob/67c28690af52a69e0b8fa565916fe1b9b7f52f10/config/v1/types_cluster_operator.go#L135-L139
[api-reason]: https://github.com/openshift/api/blob/67c28690af52a69e0b8fa565916fe1b9b7f52f10/config/v1/types_cluster_operator.go#L131-L133
[channel-semantics]: https://docs.openshift.com/container-platform/4.3/updating/updating-cluster-between-minor.html#understanding-upgrade-channels_updating-cluster-between-minor
[Cincinnati]: https://github.com/openshift/cincinnati/
[cluster-condition-type-registry]: https://github.com/openshift/enhancements/pull/821#FIXME
[cluster-condition-type-registry-promql]: https://github.com/openshift/enhancements/pull/821#FIXME
[image-arch]: https://github.com/opencontainers/image-spec/blame/v1.0.1/config.md#L103
[iso-8601-durations]: https://en.wikipedia.org/wiki/ISO_8601#Durations
[json-array]: https://datatracker.ietf.org/doc/html/rfc8259#section-5
[json-object]: https://datatracker.ietf.org/doc/html/rfc8259#section-4
[json-string]: https://datatracker.ietf.org/doc/html/rfc8259#section-7
[rfc-3339-p13]: https://tools.ietf.org/html/rfc3339#page-13
[semver]: https://semver.org/spec/v2.0.0.html
[semver-build]: https://semver.org/spec/v2.0.0.html#spec-item-10
9 changes: 9 additions & 0 deletions blocked-edges/4.7.4-auth-connection-leak.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
to: 4.7.4
from: 4\.6\..*
url: https://bugzilla.redhat.com/show_bug.cgi?id=1941840#c33
name: AuthOAuthProxyLeakedConnections
message: On clusters with a Proxy configured, the authentication operator may keep many oauth-server connections open, resulting in high memory consumption by the authentication operator and router pods.
matchingRules:
- type: promql
promql:
promql: max(cluster_proxy_enabled{type=~"https?"})
12 changes: 12 additions & 0 deletions blocked-edges/4.7.4-vsphere-hw-17-cross-node-networking.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
to: 4.7.4
from: 4\.6\..*
url: https://access.redhat.com/solutions/5896081
name: VSphereHW14CrossNodeNetworkingError
message: Clusters on vSphere Virtual Hardware Version 14 and later may experience cross-node networking issues.
matchingRules:
- type: promql
promql:
promql: |
cluster_infrastructure_provider{type=~"VSphere|None"}
or
0 * cluster_infrastructure_provider
12 changes: 12 additions & 0 deletions blocked-edges/4.7.4-zz-vsphere-hostnames-changing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
to: 4.7.4
from: .*
url: https://bugzilla.redhat.com/show_bug.cgi?id=1942207#c3
name: VSphereNodeNameChanges
message: vSphere clusters leveraging the vSphere cloud provider may lose node names which can have serious impacts on the stability of the control plane and workloads.
matchingRules:
- type: promql
promql:
promql: |
cluster_infrastructure_provider{type=~"VSphere|None"}
or
0 * cluster_infrastructure_provider
5 changes: 0 additions & 5 deletions blocked-edges/4.7.4.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0
1.1.0