-
Notifications
You must be signed in to change notification settings - Fork 98
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add stubbed NginxProxy CRD and watcher (#1216)
Problem: We have two upcoming stories that require the new NginxProxy CRD in order to be worked on. Solution: To prevent one story from being blocked by the other, this work adds the new CRD with a blank spec, a controller that watches for it and triggers an update, and sets the status on the resource.
- Loading branch information
Showing
34 changed files
with
1,085 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package v1alpha1 | ||
|
||
import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|
||
// +kubebuilder:object:root=true | ||
// +kubebuilder:storageversion | ||
// +kubebuilder:subresource:status | ||
|
||
// NginxProxy represents the dynamic configuration for an NGINX Gateway Fabric data plane. | ||
type NginxProxy struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
// NginxProxySpec defines the desired state of the NginxProxy. | ||
Spec NginxProxySpec `json:"spec"` | ||
|
||
// NginxProxyStatus defines the state of the NginxProxy. | ||
Status NginxProxyStatus `json:"status,omitempty"` | ||
} | ||
|
||
// +kubebuilder:object:root=true | ||
|
||
// NginxProxyList contains a list of NginxProxies. | ||
type NginxProxyList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []NginxProxy `json:"items"` | ||
} | ||
|
||
// NginxProxySpec defines the desired state of the NginxProxy. | ||
type NginxProxySpec struct{} | ||
|
||
// NginxProxyStatus defines the state of the NginxProxy. | ||
type NginxProxyStatus struct { | ||
// +optional | ||
// +listType=map | ||
// +listMapKey=type | ||
// +kubebuilder:validation:MaxItems=8 | ||
Conditions []metav1.Condition `json:"conditions,omitempty"` | ||
} | ||
|
||
// NginxProxyConditionType is a type of condition associated with an | ||
// NginxProxy. This type should be used with the NginxProxyStatus.Conditions field. | ||
type NginxProxyConditionType string | ||
|
||
// NginxProxyConditionReason defines the set of reasons that explain why a | ||
// particular NginxProxy condition type has been raised. | ||
type NginxProxyConditionReason string | ||
|
||
const ( | ||
// NginxProxyConditionAccepted is a condition that is true when the NginxProxy | ||
// configuration is syntactically and semantically valid. | ||
NginxProxyConditionAccepted NginxProxyConditionType = "Accepted" | ||
|
||
// NginxProxyReasonAccepted is a reason that is used with the "Accepted" condition when the condition is True. | ||
NginxProxyReasonAccepted NginxProxyConditionReason = "Accepted" | ||
|
||
// NginxProxyConditionProgrammed is a condition that is true when the NginxProxy has resulted in | ||
// successful nginx configuration. | ||
NginxProxyConditionProgrammed NginxProxyConditionType = "Programmed" | ||
|
||
// NginxProxyReasonProgrammed is a reason that is used with the "Programmed" condition when the condition is True. | ||
NginxProxyReasonProgrammed NginxProxyConditionReason = "Programmed" | ||
|
||
// NginxProxyReasonInvalid is a reason that is used with the "Accepted" or "Programmed" condition when | ||
// an error occurs with validation or reloading nginx. | ||
NginxProxyReasonInvalid NginxProxyConditionReason = "Invalid" | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
120 changes: 120 additions & 0 deletions
120
deploy/helm-chart/crds/gateway.nginx.org_nginxproxies.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
--- | ||
apiVersion: apiextensions.k8s.io/v1 | ||
kind: CustomResourceDefinition | ||
metadata: | ||
annotations: | ||
controller-gen.kubebuilder.io/version: v0.13.0 | ||
name: nginxproxies.gateway.nginx.org | ||
spec: | ||
group: gateway.nginx.org | ||
names: | ||
kind: NginxProxy | ||
listKind: NginxProxyList | ||
plural: nginxproxies | ||
singular: nginxproxy | ||
scope: Namespaced | ||
versions: | ||
- name: v1alpha1 | ||
schema: | ||
openAPIV3Schema: | ||
description: NginxProxy represents the dynamic configuration for an NGINX | ||
Gateway Fabric data plane. | ||
properties: | ||
apiVersion: | ||
description: 'APIVersion defines the versioned schema of this representation | ||
of an object. Servers should convert recognized schemas to the latest | ||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' | ||
type: string | ||
kind: | ||
description: 'Kind is a string value representing the REST resource this | ||
object represents. Servers may infer this from the endpoint the client | ||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' | ||
type: string | ||
metadata: | ||
type: object | ||
spec: | ||
description: NginxProxySpec defines the desired state of the NginxProxy. | ||
type: object | ||
status: | ||
description: NginxProxyStatus defines the state of the NginxProxy. | ||
properties: | ||
conditions: | ||
items: | ||
description: "Condition contains details for one aspect of the current | ||
state of this API Resource. --- This struct is intended for direct | ||
use as an array at the field path .status.conditions. For example, | ||
\n type FooStatus struct{ // Represents the observations of a | ||
foo's current state. // Known .status.conditions.type are: \"Available\", | ||
\"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge | ||
// +listType=map // +listMapKey=type Conditions []metav1.Condition | ||
`json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" | ||
protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" | ||
properties: | ||
lastTransitionTime: | ||
description: lastTransitionTime is the last time the condition | ||
transitioned from one status to another. This should be when | ||
the underlying condition changed. If that is not known, then | ||
using the time when the API field changed is acceptable. | ||
format: date-time | ||
type: string | ||
message: | ||
description: message is a human readable message indicating | ||
details about the transition. This may be an empty string. | ||
maxLength: 32768 | ||
type: string | ||
observedGeneration: | ||
description: observedGeneration represents the .metadata.generation | ||
that the condition was set based upon. For instance, if .metadata.generation | ||
is currently 12, but the .status.conditions[x].observedGeneration | ||
is 9, the condition is out of date with respect to the current | ||
state of the instance. | ||
format: int64 | ||
minimum: 0 | ||
type: integer | ||
reason: | ||
description: reason contains a programmatic identifier indicating | ||
the reason for the condition's last transition. Producers | ||
of specific condition types may define expected values and | ||
meanings for this field, and whether the values are considered | ||
a guaranteed API. The value should be a CamelCase string. | ||
This field may not be empty. | ||
maxLength: 1024 | ||
minLength: 1 | ||
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ | ||
type: string | ||
status: | ||
description: status of the condition, one of True, False, Unknown. | ||
enum: | ||
- "True" | ||
- "False" | ||
- Unknown | ||
type: string | ||
type: | ||
description: type of condition in CamelCase or in foo.example.com/CamelCase. | ||
--- Many .condition.type values are consistent across resources | ||
like Available, but because arbitrary conditions can be useful | ||
(see .node.status.conditions), the ability to deconflict is | ||
important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) | ||
maxLength: 316 | ||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ | ||
type: string | ||
required: | ||
- lastTransitionTime | ||
- message | ||
- reason | ||
- status | ||
- type | ||
type: object | ||
maxItems: 8 | ||
type: array | ||
x-kubernetes-list-map-keys: | ||
- type | ||
x-kubernetes-list-type: map | ||
type: object | ||
required: | ||
- spec | ||
type: object | ||
served: true | ||
storage: true | ||
subresources: | ||
status: {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
apiVersion: gateway.nginx.org/v1alpha1 | ||
kind: NginxProxy | ||
metadata: | ||
name: {{ include "nginx-gateway.proxy-config-name" . }} | ||
namespace: {{ .Release.Namespace }} | ||
labels: | ||
{{- include "nginx-gateway.labels" . | nindent 4 }} | ||
spec: | ||
{{- toYaml .Values.nginx.config | nindent 2 }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.