Skip to content

Instantly share code, notes, and snippets.

@pierDipi
Last active December 16, 2020 22:10
Show Gist options
  • Save pierDipi/8d29a06d481cd4aa5bb4f703c73c4508 to your computer and use it in GitHub Desktop.
Save pierDipi/8d29a06d481cd4aa5bb4f703c73c4508 to your computer and use it in GitHub Desktop.

Notes

  • "sleep 900" means wait for jobs to be completed and pods to be running
#!/usr/bin/env bash

echo "Install v0.14.2"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.14.2/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.14.2/eventing-core.yaml

sleep 900

echo "Upgrade to v0.15.4"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-core.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/upgrade-to-v0.15.0.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/storage-version-migration-v0.15.0.yaml

sleep 900

echo "Upgrade to v0.16.2"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/pre-install-to-v0.16.0.yaml

sleep 900

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-core.yaml

sleep 900

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/post-install-to-v0.16.0.yaml

sleep 900

echo "Upgrade to v0.17.9"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-core.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-post-install-jobs.yaml

sleep 900

echo "Upgrade to v0.18.6"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-pre-install-jobs.yaml

sleep 900

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-core.yaml

sleep 900

echo "Upgrade to v0.19.3"
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.19.3/eventing-core.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.19.3/eventing-crds.yaml

kubectl apply -f  https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-controller.yaml
kubectl apply -f https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-broker.yaml
kubectl apply -f https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-sink.yaml
@LeonardAukea
Copy link

I'm deleting knative-sources now as well just in case as it has the Kafka controller manager

@pierDipi
Copy link
Author

tl;dr

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml --force # <--
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-core.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-post-install-jobs.yaml

This is what I did:

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.14.2/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.14.2/eventing-core.yaml

kubectl get knative -A # Everything is working
NAMESPACE   NAME                                   READY   REASON   URL   AGE
default     broker.eventing.knative.dev/mybroker                          24s

NAMESPACE   NAME                                              READY   REASON     SINK   AGE
default     pingsource.sources.knative.dev/test-ping-source   False   NotFound          23s

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-core.yaml

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-core.yaml

kubectl get knative -A # Everything is NOT working
NAMESPACE   NAME                                              READY   REASON     SINK   AGE
default     pingsource.sources.knative.dev/test-ping-source   False   NotFound          3m33s
Error from server: conversion webhook for eventing.knative.dev/v1alpha1, Kind=Broker failed: conversion not supported for type [kind=Broker group=eventing.knative.dev version=v1]

# Downgrade

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-core.yaml

# Error 
The CustomResourceDefinition "subscriptions.messaging.knative.dev" is invalid: 
* spec.conversion.webhookClientConfig: Forbidden: should not be set when strategy is not set to Webhook
* spec.conversion.conversionReviewVersions: Forbidden: should not be set when strategy is not set to Webhook

# Force downgrade
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-crds.yaml --force # <--
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/eventing-core.yaml

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.15.4/storage-version-migration-v0.15.0.yaml

# Wait for the completion

kubectl delete jobs.batch -n knative-eventing storage-version-migration

kubectl get knative
NAME                                   READY   REASON   URL   AGE
broker.eventing.knative.dev/mybroker                          9m17s

NAME                                              READY   REASON     SINK   AGE
pingsource.sources.knative.dev/test-ping-source   False   NotFound          9m16s

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/pre-install-to-v0.16.0.yaml

# Wait for the completion

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/eventing-core.yaml

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.16.2/post-install-to-v0.16.0.yaml

kubectl delete -n knative-eventing jobs.batch v0.16.0-broker-cleanup

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml 

# Output
customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/containersources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/parallels.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sequences.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sinkbindings.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev unchanged
Error from server (Invalid): error when applying patch:
{"metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apiextensions.k8s.io/v1\",\"kind\":\"CustomResourceDefinition\",\"metadata\":{\"annotations\":{},\"labels\":{\"duck.knative.dev/addressable\":\"true\",\"eventing.knative.dev/release\":\"v0.17.9\",\"knative.dev/crd-install\":\"true\"},\"name\":\"brokers.eventing.knative.dev\"},\"spec\":{\"conversion\":{\"strategy\":\"Webhook\",\"webhook\":{\"clientConfig\":{\"service\":{\"name\":\"eventing-webhook\",\"namespace\":\"knative-eventing\"}},\"conversionReviewVersions\":[\"v1\",\"v1beta1\"]}},\"group\":\"eventing.knative.dev\",\"names\":{\"categories\":[\"all\",\"knative\",\"eventing\"],\"kind\":\"Broker\",\"plural\":\"brokers\",\"singular\":\"broker\"},\"scope\":\"Namespaced\",\"versions\":[{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.address.url\",\"name\":\"URL\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1beta1\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"Broker collects a pool of events that are consumable using Triggers. Brokers provide a well-known endpoint for event delivery that senders can use with minimal knowledge of the event routing strategy. Subscribers use Triggers to request delivery of events from a Broker's pool to a specific URL or Addressable endpoint.\",\"properties\":{\"spec\":{\"description\":\"Spec defines the desired state of the Broker.\",\"properties\":{\"config\":{\"description\":\"Config is a KReference to the configuration that specifies configuration options for this Broker. For example, this could be a pointer to a ConfigMap.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"delivery\":{\"description\":\"Delivery is the delivery specification for Events within the Broker mesh. This includes things like retries, DLQ, etc.\",\"properties\":{\"backoffDelay\":{\"description\":\"BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is the time interval between retries. For exponential policy , backoff delay is backoffDelay*2^\\u003cnumberOfRetries\\u003e.\",\"type\":\"string\"},\"backoffPolicy\":{\"description\":\" BackoffPolicy is the retry backoff policy (linear, exponential).\",\"type\":\"string\"},\"deadLetterSink\":{\"description\":\"DeadLetterSink is the sink receiving event that could not be sent to a destination.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"},\"retry\":{\"description\":\"Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.\",\"format\":\"int32\",\"type\":\"integer\"}},\"type\":\"object\"}},\"type\":\"object\"},\"status\":{\"description\":\"Status represents the current state of the Broker. This data may be out of date.\",\"properties\":{\"address\":{\"description\":\"Broker is Addressable. It exposes the endpoint as an URI to get events delivered into the Broker mesh.\",\"properties\":{\"url\":{\"type\":\"string\"}},\"type\":\"object\"},\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":true,\"subresources\":{\"status\":{}}},{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.address.url\",\"name\":\"URL\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"Broker collects a pool of events that are consumable using Triggers. Brokers provide a well-known endpoint for event delivery that senders can use with minimal knowledge of the event routing strategy. Subscribers use Triggers to request delivery of events from a Broker's pool to a specific URL or Addressable endpoint.\",\"properties\":{\"spec\":{\"description\":\"Spec defines the desired state of the Broker.\",\"properties\":{\"config\":{\"description\":\"Config is a KReference to the configuration that specifies configuration options for this Broker. For example, this could be a pointer to a ConfigMap.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"delivery\":{\"description\":\"Delivery is the delivery specification for Events within the Broker mesh. This includes things like retries, DLQ, etc.\",\"properties\":{\"backoffDelay\":{\"description\":\"BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is the time interval between retries. For exponential policy , backoff delay is backoffDelay*2^\\u003cnumberOfRetries\\u003e.\",\"type\":\"string\"},\"backoffPolicy\":{\"description\":\" BackoffPolicy is the retry backoff policy (linear, exponential).\",\"type\":\"string\"},\"deadLetterSink\":{\"description\":\"DeadLetterSink is the sink receiving event that could not be sent to a destination.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"},\"retry\":{\"description\":\"Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.\",\"format\":\"int32\",\"type\":\"integer\"}},\"type\":\"object\"}},\"type\":\"object\"},\"status\":{\"description\":\"Status represents the current state of the Broker. This data may be out of date.\",\"properties\":{\"address\":{\"description\":\"Broker is Addressable. It exposes the endpoint as an URI to get events delivered into the Broker mesh.\",\"properties\":{\"url\":{\"type\":\"string\"}},\"type\":\"object\"},\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":false,\"subresources\":{\"status\":{}}}]}}\n"},"labels":{"eventing.knative.dev/release":"v0.17.9"}},"spec":{"versions":[{"additionalPrinterColumns":[{"jsonPath":".status.address.url","name":"URL","type":"string"},{"jsonPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"jsonPath":".status.conditions[?(@.type==\"Ready\")].status","name":"Ready","type":"string"},{"jsonPath":".status.conditions[?(@.type==\"Ready\")].reason","name":"Reason","type":"string"}],"name":"v1beta1","schema":{"openAPIV3Schema":{"description":"Broker collects a pool of events that are consumable using Triggers. Brokers provide a well-known endpoint for event delivery that senders can use with minimal knowledge of the event routing strategy. Subscribers use Triggers to request delivery of events from a Broker's pool to a specific URL or Addressable endpoint.","properties":{"spec":{"description":"Spec defines the desired state of the Broker.","properties":{"config":{"description":"Config is a KReference to the configuration that specifies configuration options for this Broker. For example, this could be a pointer to a ConfigMap.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"delivery":{"description":"Delivery is the delivery specification for Events within the Broker mesh. This includes things like retries, DLQ, etc.","properties":{"backoffDelay":{"description":"BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is the time interval between retries. For exponential policy , backoff delay is backoffDelay*2^\u003cnumberOfRetries\u003e.","type":"string"},"backoffPolicy":{"description":" BackoffPolicy is the retry backoff policy (linear, exponential).","type":"string"},"deadLetterSink":{"description":"DeadLetterSink is the sink receiving event that could not be sent to a destination.","properties":{"ref":{"description":"Ref points to an Addressable.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"uri":{"description":"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.","type":"string"}},"type":"object"},"retry":{"description":"Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.","format":"int32","type":"integer"}},"type":"object"}},"type":"object"},"status":{"description":"Status represents the current state of the Broker. This data may be out of date.","properties":{"address":{"description":"Broker is Addressable. It exposes the endpoint as an URI to get events delivered into the Broker mesh.","properties":{"url":{"type":"string"}},"type":"object"},"annotations":{"description":"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.","type":"object","x-kubernetes-preserve-unknown-fields":true},"conditions":{"description":"Conditions the latest available observations of a resource's current state.","items":{"properties":{"lastTransitionTime":{"description":"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).","type":"string"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"severity":{"description":"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of condition.","type":"string"}},"required":["type","status"],"type":"object"},"type":"array"},"observedGeneration":{"description":"ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}},"served":true,"storage":true,"subresources":{"status":{}}},{"additionalPrinterColumns":[{"jsonPath":".status.address.url","name":"URL","type":"string"},{"jsonPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"jsonPath":".status.conditions[?(@.type==\"Ready\")].status","name":"Ready","type":"string"},{"jsonPath":".status.conditions[?(@.type==\"Ready\")].reason","name":"Reason","type":"string"}],"name":"v1","schema":{"openAPIV3Schema":{"description":"Broker collects a pool of events that are consumable using Triggers. Brokers provide a well-known endpoint for event delivery that senders can use with minimal knowledge of the event routing strategy. Subscribers use Triggers to request delivery of events from a Broker's pool to a specific URL or Addressable endpoint.","properties":{"spec":{"description":"Spec defines the desired state of the Broker.","properties":{"config":{"description":"Config is a KReference to the configuration that specifies configuration options for this Broker. For example, this could be a pointer to a ConfigMap.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"delivery":{"description":"Delivery is the delivery specification for Events within the Broker mesh. This includes things like retries, DLQ, etc.","properties":{"backoffDelay":{"description":"BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is the time interval between retries. For exponential policy , backoff delay is backoffDelay*2^\u003cnumberOfRetries\u003e.","type":"string"},"backoffPolicy":{"description":" BackoffPolicy is the retry backoff policy (linear, exponential).","type":"string"},"deadLetterSink":{"description":"DeadLetterSink is the sink receiving event that could not be sent to a destination.","properties":{"ref":{"description":"Ref points to an Addressable.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"uri":{"description":"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.","type":"string"}},"type":"object"},"retry":{"description":"Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.","format":"int32","type":"integer"}},"type":"object"}},"type":"object"},"status":{"description":"Status represents the current state of the Broker. This data may be out of date.","properties":{"address":{"description":"Broker is Addressable. It exposes the endpoint as an URI to get events delivered into the Broker mesh.","properties":{"url":{"type":"string"}},"type":"object"},"annotations":{"description":"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.","type":"object","x-kubernetes-preserve-unknown-fields":true},"conditions":{"description":"Conditions the latest available observations of a resource's current state.","items":{"properties":{"lastTransitionTime":{"description":"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).","type":"string"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"severity":{"description":"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of condition.","type":"string"}},"required":["type","status"],"type":"object"},"type":"array"},"observedGeneration":{"description":"ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}},"served":true,"storage":false,"subresources":{"status":{}}}]}}
to:
Resource: "apiextensions.k8s.io/v1, Resource=customresourcedefinitions", GroupVersionKind: "apiextensions.k8s.io/v1, Kind=CustomResourceDefinition"
Name: "brokers.eventing.knative.dev", Namespace: ""
for: "https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml": CustomResourceDefinition.apiextensions.k8s.io "brokers.eventing.knative.dev" is invalid: status.storedVersions[1]: Invalid value: "v1alpha1": must appear in spec.versions
Error from server (Invalid): error when applying patch:
{"metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apiextensions.k8s.io/v1\",\"kind\":\"CustomResourceDefinition\",\"metadata\":{\"annotations\":{\"registry.knative.dev/eventTypes\":\"[\\n  { \\\"type\\\": \\\"dev.knative.sources.ping\\\" }\\n]\\n\"},\"labels\":{\"duck.knative.dev/source\":\"true\",\"eventing.knative.dev/release\":\"v0.17.9\",\"eventing.knative.dev/source\":\"true\",\"knative.dev/crd-install\":\"true\"},\"name\":\"pingsources.sources.knative.dev\"},\"spec\":{\"conversion\":{\"strategy\":\"Webhook\",\"webhook\":{\"clientConfig\":{\"service\":{\"name\":\"eventing-webhook\",\"namespace\":\"knative-eventing\"}},\"conversionReviewVersions\":[\"v1\",\"v1beta1\"]}},\"group\":\"sources.knative.dev\",\"names\":{\"categories\":[\"all\",\"knative\",\"sources\"],\"kind\":\"PingSource\",\"plural\":\"pingsources\"},\"scope\":\"Namespaced\",\"versions\":[{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1alpha2\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"PingSource describes an event source with a fixed payload produced on a specified cron schedule.\",\"properties\":{\"spec\":{\"description\":\"PingSourceSpec defines the desired state of the PingSource (from the client).\",\"properties\":{\"ceOverrides\":{\"description\":\"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.\",\"properties\":{\"extensions\":{\"additionalProperties\":{\"type\":\"string\"},\"description\":\"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"type\":\"object\"},\"jsonData\":{\"description\":\"JsonData is json encoded data used as the body of the event posted to the sink. Default is empty. If set, datacontenttype will also be set to \\\"application/json\\\".\",\"type\":\"string\"},\"schedule\":{\"description\":\"Schedule is the cronjob schedule. Defaults to `* * * * *`.\",\"type\":\"string\"},\"sink\":{\"description\":\"Sink is a reference to an object that will resolve to a uri to use as the sink.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"},\"status\":{\"description\":\"PingSourceStatus defines the observed state of PingSource (from the controller).\",\"properties\":{\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"ceAttributes\":{\"description\":\"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.\",\"items\":{\"properties\":{\"source\":{\"description\":\"Source is the CloudEvents source attribute.\",\"type\":\"string\"},\"type\":{\"description\":\"Type refers to the CloudEvent type attribute.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the \\\"Generation\\\" of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"},\"sinkUri\":{\"description\":\"SinkURI is the current active sink URI that has been configured for the Source.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":true,\"subresources\":{\"status\":{}}},{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1beta1\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"PingSource describes an event source with a fixed payload produced on a specified cron schedule.\",\"properties\":{\"spec\":{\"description\":\"PingSourceSpec defines the desired state of the PingSource (from the client).\",\"properties\":{\"ceOverrides\":{\"description\":\"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.\",\"properties\":{\"extensions\":{\"additionalProperties\":{\"type\":\"string\"},\"description\":\"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"type\":\"object\"},\"jsonData\":{\"description\":\"JsonData is json encoded data used as the body of the event posted to the sink. Default is empty. If set, datacontenttype will also be set to \\\"application/json\\\".\",\"type\":\"string\"},\"schedule\":{\"description\":\"Schedule is the cronjob schedule. Defaults to `* * * * *`.\",\"type\":\"string\"},\"sink\":{\"description\":\"Sink is a reference to an object that will resolve to a uri to use as the sink.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"},\"timezone\":{\"description\":\"Timezone modifies the actual time relative to the specified timezone. Defaults to the system time zone. More general information about time zones: https://www.iana.org/time-zones List of valid timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\",\"type\":\"string\"}},\"type\":\"object\"},\"status\":{\"description\":\"PingSourceStatus defines the observed state of PingSource (from the controller).\",\"properties\":{\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"ceAttributes\":{\"description\":\"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.\",\"items\":{\"properties\":{\"source\":{\"description\":\"Source is the CloudEvents source attribute.\",\"type\":\"string\"},\"type\":{\"description\":\"Type refers to the CloudEvent type attribute.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the \\\"Generation\\\" of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"},\"sinkUri\":{\"description\":\"SinkURI is the current active sink URI that has been configured for the Source.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":false,\"subresources\":{\"status\":{}}}]}}\n"},"labels":{"eventing.knative.dev/release":"v0.17.9"}},"spec":{"names":{"categories":["all","knative","sources"]},"versions":[{"additionalPrinterColumns":[{"jsonPath":".status.sinkUri","name":"Sink","type":"string"},{"jsonPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"jsonPath":".status.conditions[?(@.type=='Ready')].status","name":"Ready","type":"string"},{"jsonPath":".status.conditions[?(@.type=='Ready')].reason","name":"Reason","type":"string"}],"name":"v1alpha2","schema":{"openAPIV3Schema":{"description":"PingSource describes an event source with a fixed payload produced on a specified cron schedule.","properties":{"spec":{"description":"PingSourceSpec defines the desired state of the PingSource (from the client).","properties":{"ceOverrides":{"description":"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.","properties":{"extensions":{"additionalProperties":{"type":"string"},"description":"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.","type":"object","x-kubernetes-preserve-unknown-fields":true}},"type":"object"},"jsonData":{"description":"JsonData is json encoded data used as the body of the event posted to the sink. Default is empty. If set, datacontenttype will also be set to \"application/json\".","type":"string"},"schedule":{"description":"Schedule is the cronjob schedule. Defaults to `* * * * *`.","type":"string"},"sink":{"description":"Sink is a reference to an object that will resolve to a uri to use as the sink.","properties":{"ref":{"description":"Ref points to an Addressable.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"uri":{"description":"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.","type":"string"}},"type":"object"}},"type":"object"},"status":{"description":"PingSourceStatus defines the observed state of PingSource (from the controller).","properties":{"annotations":{"description":"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.","type":"object","x-kubernetes-preserve-unknown-fields":true},"ceAttributes":{"description":"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.","items":{"properties":{"source":{"description":"Source is the CloudEvents source attribute.","type":"string"},"type":{"description":"Type refers to the CloudEvent type attribute.","type":"string"}},"type":"object"},"type":"array"},"conditions":{"description":"Conditions the latest available observations of a resource's current state.","items":{"properties":{"lastTransitionTime":{"description":"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).","type":"string"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"severity":{"description":"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of condition.","type":"string"}},"required":["type","status"],"type":"object"},"type":"array"},"observedGeneration":{"description":"ObservedGeneration is the \"Generation\" of the Service that was last processed by the controller.","format":"int64","type":"integer"},"sinkUri":{"description":"SinkURI is the current active sink URI that has been configured for the Source.","type":"string"}},"type":"object"}},"type":"object"}},"served":true,"storage":true,"subresources":{"status":{}}},{"additionalPrinterColumns":[{"jsonPath":".status.sinkUri","name":"Sink","type":"string"},{"jsonPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"jsonPath":".status.conditions[?(@.type=='Ready')].status","name":"Ready","type":"string"},{"jsonPath":".status.conditions[?(@.type=='Ready')].reason","name":"Reason","type":"string"}],"name":"v1beta1","schema":{"openAPIV3Schema":{"description":"PingSource describes an event source with a fixed payload produced on a specified cron schedule.","properties":{"spec":{"description":"PingSourceSpec defines the desired state of the PingSource (from the client).","properties":{"ceOverrides":{"description":"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.","properties":{"extensions":{"additionalProperties":{"type":"string"},"description":"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.","type":"object","x-kubernetes-preserve-unknown-fields":true}},"type":"object"},"jsonData":{"description":"JsonData is json encoded data used as the body of the event posted to the sink. Default is empty. If set, datacontenttype will also be set to \"application/json\".","type":"string"},"schedule":{"description":"Schedule is the cronjob schedule. Defaults to `* * * * *`.","type":"string"},"sink":{"description":"Sink is a reference to an object that will resolve to a uri to use as the sink.","properties":{"ref":{"description":"Ref points to an Addressable.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.","type":"string"}},"type":"object"},"uri":{"description":"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.","type":"string"}},"type":"object"},"timezone":{"description":"Timezone modifies the actual time relative to the specified timezone. Defaults to the system time zone. More general information about time zones: https://www.iana.org/time-zones List of valid timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones","type":"string"}},"type":"object"},"status":{"description":"PingSourceStatus defines the observed state of PingSource (from the controller).","properties":{"annotations":{"description":"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.","type":"object","x-kubernetes-preserve-unknown-fields":true},"ceAttributes":{"description":"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.","items":{"properties":{"source":{"description":"Source is the CloudEvents source attribute.","type":"string"},"type":{"description":"Type refers to the CloudEvent type attribute.","type":"string"}},"type":"object"},"type":"array"},"conditions":{"description":"Conditions the latest available observations of a resource's current state.","items":{"properties":{"lastTransitionTime":{"description":"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).","type":"string"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"severity":{"description":"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of condition.","type":"string"}},"required":["type","status"],"type":"object"},"type":"array"},"observedGeneration":{"description":"ObservedGeneration is the \"Generation\" of the Service that was last processed by the controller.","format":"int64","type":"integer"},"sinkUri":{"description":"SinkURI is the current active sink URI that has been configured for the Source.","type":"string"}},"type":"object"}},"type":"object"}},"served":true,"storage":false,"subresources":{"status":{}}}]}}
to:
Resource: "apiextensions.k8s.io/v1, Resource=customresourcedefinitions", GroupVersionKind: "apiextensions.k8s.io/v1, Kind=CustomResourceDefinition"
Name: "pingsources.sources.knative.dev", Namespace: ""
for: "https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml": CustomResourceDefinition.apiextensions.k8s.io "pingsources.sources.knative.dev" is invalid: status.storedVersions[1]: Invalid value: "v1alpha1": must appear in spec.versions

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-crds.yaml --force # <--
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-core.yaml 
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.17.9/eventing-post-install-jobs.yaml

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-pre-install-jobs.yaml

# Wait for the completion

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.18.6/eventing-core.yaml

kubectl apply -f https://github.com/knative/eventing/releases/download/v0.19.3/eventing-core.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v0.19.3/eventing-crds.yaml

kubectl apply -f  https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-controller.yaml
kubectl apply -f https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-broker.yaml
kubectl apply -f https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v0.19.0/eventing-kafka-sink.yaml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment