diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..01d4cf6c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +scripts/bin diff --git a/docs/crd/application.giantswarm.io_app.yaml b/docs/crd/application.giantswarm.io_app.yaml deleted file mode 100644 index 4b84e4b3a..000000000 --- a/docs/crd/application.giantswarm.io_app.yaml +++ /dev/null @@ -1,167 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: apps.application.giantswarm.io -spec: - group: application.giantswarm.io - names: - kind: App - plural: apps - singular: app - scope: Namespaced - subresources: - status: {} - validation: - openAPIV3Schema: - description: | - Defines an App resource, which represents an application to be running in a Kubernetes cluster. - Reconciled by app-operator running on the Control Plane cluster. - properties: - spec: - properties: - catalog: - description: | - Name of the AppCatalog resource to install this app from. The AppCatalog resource must - exist upfront in the cluster. - type: string - config: - description: "Cluster configuration details for the application injected - by cluster-operator with basic\ninformation of the cluster where the - App is deployed. \n" - properties: - configMap: - description: "Defines a reference to a ConfigMap where is saved - the cluster configuration values \nthat will be applied to the - application when it is deployed in the cluster. \n" - properties: - name: - description: | - Name of the ConfigMap resource. - type: string - namespace: - description: | - Namespace holding the ConfigMap resource. - type: string - required: - - name - - namespace - type: object - secret: - description: | - Defines the reference of a Secret where is saved the sensitive configuration - that will be applied to the application when it is deployed in the cluster. - properties: - name: - description: | - Name of the Secret resource. - type: string - namespace: - description: | - Namespace holding the Secret resource. - type: string - required: - - name - - namespace - type: object - type: object - kubeConfig: - description: | - The kubeconfig to use to connect to the cluster when deploying the app. - properties: - context: - description: | - Kubeconfig context part to use when not using inCluster credentials. - properties: - name: - description: | - Context name. - type: string - type: object - inCluster: - description: "Defines whether to use inCluster credentials. If true, - it uses the service account to \nauthenticate against the Kubernetes - API in the same cluster where the app-operator\nis running. In - that case, the context and secret properties must not be set. - If false,\nsecret and context is used by the app-operator to access - the external cluster API.\n" - type: boolean - secret: - description: | - Defines the reference to a Secret where is saved the kubeconfig configuration - that will be applied when accessing the cluster to manage the application. - properties: - name: - description: | - Name of the Secret resource. - type: string - namespace: - description: | - Namespace holding the Secret resource. - type: string - required: - - name - - namespace - type: object - type: object - name: - description: | - Name of this App. - type: string - namespace: - description: "Kubernetes namespace in which to install the workloads - defined by this App in the \ngiven cluster.\n" - type: string - userConfig: - description: | - User configuration for the App. This configuration will be merged with the catalog and - cluster configuration to generate a single values ConfigMap in the target cluster. - properties: - configMap: - description: "Defines the reference of a ConfigMap where is saved - the user configuration values \nthat will be applied to the application - when it is deployed in the cluster. \n" - properties: - name: - description: | - Name of the ConfigMap resource. - type: string - namespace: - description: | - Namespace holding the ConfigMap resource. - type: string - required: - - name - - namespace - type: object - secret: - description: "Defines the reference of a Secret where is saved the - user sensitive configuration \nthat will be applied to the application - when it is deployed in the cluster. \n" - properties: - name: - description: | - Name of the Secret resource. - type: string - namespace: - description: | - Namespace holding the Secret resource. - type: string - required: - - name - - namespace - type: object - type: object - version: - description: | - Version of the app to be deployed. It must exist within the list of App packages - stored in the App Catalog. - type: string - required: - - catalog - - name - - namespace - - version - type: object - type: object - version: v1alpha1 diff --git a/docs/crd/application.giantswarm.io_appcatalog.yaml b/docs/crd/application.giantswarm.io_appcatalog.yaml deleted file mode 100644 index 697ee9372..000000000 --- a/docs/crd/application.giantswarm.io_appcatalog.yaml +++ /dev/null @@ -1,99 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: appcatalogs.application.giantswarm.io -spec: - group: application.giantswarm.io - names: - kind: AppCatalog - plural: appcatalogs - singular: appcatalog - scope: Cluster - subresources: - status: {} - validation: - openAPIV3Schema: - description: | - Defines a location where packaged applications are stored and shared, - ready to be installed in a Kubernetes cluster. - properties: - spec: - properties: - config: - description: "Defines the reference of a ConfigMap where is saved the - default values that \nwill be applied to all applications contained - in the catalog.\n" - properties: - configMap: - description: | - References a ConfigMap containing catalog values that should be applied to - apps installed from this catalog. - properties: - name: - description: | - Name of the ConfigMap resource. - type: string - namespace: - description: | - Namespace holding the ConfigMap resource. - type: string - required: - - name - - namespace - type: object - secret: - description: | - Defines the reference of a Secret where is saved the default sensitive configuration - that will be applied to all applications contained in the catalog. - properties: - name: - description: | - Name of the Secret resource. - type: string - namespace: - description: | - Namespace holding the Secret resource. - type: string - required: - - name - - namespace - type: object - type: object - description: - description: | - Additional information regarding the purpose and other details of the catalog. - type: string - logoURL: - description: | - The logo URL pointing to the image file to be used when displaying this catalog. - type: string - storage: - description: | - Defines the type of storage supported by the catalog. - properties: - URL: - description: | - URL to the app repository. - format: uri - type: string - type: - description: | - Determines the type of storage. Currently only 'helm' is available. - - Helm type storage use the known Helm Chart Repository format to store the chart - packages and expose some metadata in the file 'index.yaml' to manage the catalog. - type: string - required: - - type - - URL - type: object - title: - description: "User-friendly name of the catalog. \n" - type: string - required: - - title - - description - - storage - type: object - type: object - version: v1alpha1 diff --git a/docs/crd/application.giantswarm.io_appcatalogs.yaml b/docs/crd/application.giantswarm.io_appcatalogs.yaml new file mode 100644 index 000000000..a7e9c2b2f --- /dev/null +++ b/docs/crd/application.giantswarm.io_appcatalogs.yaml @@ -0,0 +1,122 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: appcatalogs.application.giantswarm.io +spec: + group: application.giantswarm.io + names: + kind: AppCatalog + listKind: AppCatalogList + plural: appcatalogs + singular: appcatalog + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + config: + description: Config is the config to be applied when apps belonging + to this catalog are deployed. + properties: + configMap: + description: ConfigMap references a config map containing catalog + values that should be applied to apps in this catalog. + properties: + name: + description: Name is the name of the config map containing catalog + values to apply, e.g. app-catalog-values. + type: string + namespace: + description: Namespace is the namespace of the catalog values + config map, e.g. giantswarm. + type: string + required: + - name + - namespace + type: object + secret: + description: Secret references a secret containing catalog values + that should be applied to apps in this catalog. + properties: + name: + description: Name is the name of the secret containing catalog + values to apply, e.g. app-catalog-secret. + type: string + namespace: + description: Namespace is the namespace of the secret, e.g. + giantswarm. + type: string + required: + - name + - namespace + type: object + required: + - configMap + - secret + type: object + description: + type: string + logoURL: + description: LogoURL contains the links for logo image file for this + app catalog + type: string + storage: + description: Storage references a map containing values that should + be applied to the appcatalog. + properties: + URL: + description: URL is the link to where this AppCatalog's repository + is located e.g. https://giantswarm.github.com/app-catalog/. + type: string + type: + description: Type indicates which repository type would be used + for this AppCatalog. e.g. helm + type: string + required: + - URL + - type + type: object + title: + description: Title is the name of the app catalog for this CR e.g. Catalog + of Apps by Giant Swarm + type: string + required: + - config + - description + - logoURL + - storage + - title + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/application.giantswarm.io_apps.yaml b/docs/crd/application.giantswarm.io_apps.yaml new file mode 100644 index 000000000..0b60dfb72 --- /dev/null +++ b/docs/crd/application.giantswarm.io_apps.yaml @@ -0,0 +1,227 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: apps.application.giantswarm.io +spec: + group: application.giantswarm.io + names: + kind: App + listKind: AppList + plural: apps + singular: app + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + catalog: + description: Catalog is the name of the app catalog this app belongs + to. e.g. giantswarm + type: string + config: + description: Config is the config to be applied when the app is deployed. + properties: + configMap: + description: ConfigMap references a config map containing values + that should be applied to the app. + properties: + name: + description: Name is the name of the config map containing app + values to apply, e.g. prometheus-values. + type: string + namespace: + description: Namespace is the namespace of the values config + map, e.g. monitoring. + type: string + required: + - name + - namespace + type: object + secret: + description: Secret references a secret containing secret values + that should be applied to the app. + properties: + name: + description: Name is the name of the secret containing app values + to apply, e.g. prometheus-secret. + type: string + namespace: + description: Namespace is the namespace of the secret, e.g. + kube-system. + type: string + required: + - name + - namespace + type: object + required: + - configMap + - secret + type: object + kubeConfig: + description: KubeConfig is the kubeconfig to connect to the cluster + when deploying the app. + properties: + context: + description: Context is the kubeconfig context. + properties: + name: + description: Name is the name of the kubeconfig context. e.g. + giantswarm-12345. + type: string + required: + - name + type: object + inCluster: + description: InCluster is a flag for whether to use InCluster credentials. + When true the context name and secret should not be set. + type: boolean + secret: + description: Secret references a secret containing the kubconfig. + properties: + name: + description: Name is the name of the secret containing the kubeconfig, + e.g. app-operator-kubeconfig. + type: string + namespace: + description: Namespace is the namespace of the secret containing + the kubeconfig, e.g. giantswarm. + type: string + required: + - name + - namespace + type: object + required: + - context + - inCluster + - secret + type: object + name: + description: Name is the name of the app to be deployed. e.g. kubernetes-prometheus + type: string + namespace: + description: Namespace is the namespace where the app should be deployed. + e.g. monitoring + type: string + userConfig: + description: UserConfig is the user config to be applied when the app + is deployed. + properties: + configMap: + description: ConfigMap references a config map containing user values + that should be applied to the app. + properties: + name: + description: Name is the name of the config map containing user + values to apply, e.g. prometheus-user-values. + type: string + namespace: + description: Namespace is the namespace of the user values config + map on the control plane, e.g. 123ab. + type: string + required: + - name + - namespace + type: object + secret: + description: Secret references a secret containing user secret values + that should be applied to the app. + properties: + name: + description: Name is the name of the secret containing user + values to apply, e.g. prometheus-user-secret. + type: string + namespace: + description: Namespace is the namespace of the secret, e.g. + kube-system. + type: string + required: + - name + - namespace + type: object + required: + - configMap + - secret + type: object + version: + description: Version is the version of the app that should be deployed. + e.g. 1.0.0 + type: string + required: + - catalog + - config + - kubeConfig + - name + - namespace + - userConfig + - version + type: object + status: + properties: + appVersion: + description: AppVersion is the value of the AppVersion field in the + Chart.yaml of the deployed app. This is an optional field with the + version of the component being deployed. e.g. 0.21.0. https://docs.helm.sh/developing_charts/#the-chart-yaml-file + type: string + release: + description: Release is the status of the Helm release for the deployed + app. + properties: + lastDeployed: + description: LastDeployed is the time when the app was last deployed. + format: date-time + type: string + reason: + description: Reason is the description of the last status of helm + release when the app is not installed successfully, e.g. deploy + resource already exists. + type: string + status: + description: Status is the status of the deployed app, e.g. DEPLOYED. + type: string + required: + - lastDeployed + - status + type: object + version: + description: Version is the value of the Version field in the Chart.yaml + of the deployed app. e.g. 1.0.0. + type: string + required: + - appVersion + - release + - version + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/application.giantswarm.io_charts.yaml b/docs/crd/application.giantswarm.io_charts.yaml new file mode 100644 index 000000000..afa3619c6 --- /dev/null +++ b/docs/crd/application.giantswarm.io_charts.yaml @@ -0,0 +1,165 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: charts.application.giantswarm.io +spec: + group: application.giantswarm.io + names: + kind: Chart + listKind: ChartList + plural: charts + singular: chart + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + config: + description: Config is the config to be applied when the chart is deployed. + properties: + configMap: + description: ConfigMap references a config map containing values + that should be applied to the chart. + properties: + name: + description: Name is the name of the config map containing chart + values to apply, e.g. prometheus-chart-values. + type: string + namespace: + description: Namespace is the namespace of the values config + map, e.g. monitoring. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the configmap. Used to detect if the configmap has changed, + e.g. 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + secret: + description: Secret references a secret containing secret values + that should be applied to the chart. + properties: + name: + description: Name is the name of the secret containing chart + values to apply, e.g. prometheus-chart-secret. + type: string + namespace: + description: Namespace is the namespace of the secret, e.g. + kube-system. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the secret. Used to detect if the secret has changed, e.g. + 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + required: + - configMap + - secret + type: object + name: + description: Name is the name of the Helm chart to be deployed. e.g. + kubernetes-prometheus + type: string + namespace: + description: Namespace is the namespace where the chart should be deployed. + e.g. monitoring + type: string + tarballURL: + description: TarballURL is the URL for the Helm chart tarball to be + deployed. e.g. https://path/to/prom-1-0-0.tgz" + type: string + version: + description: Version is the version of the chart that should be deployed. + e.g. 1.0.0 + type: string + required: + - config + - name + - namespace + - tarballURL + - version + type: object + status: + properties: + appVersion: + description: AppVersion is the value of the AppVersion field in the + Chart.yaml of the deployed chart. This is an optional field with the + version of the component being deployed. e.g. 0.21.0. https://docs.helm.sh/developing_charts/#the-chart-yaml-file + type: string + reason: + description: Reason is the description of the last status of helm release + when the chart is not installed successfully, e.g. deploy resource + already exists. + type: string + release: + description: Release is the status of the Helm release for the deployed + chart. + properties: + lastDeployed: + description: LastDeployed is the time when the deployed chart was + last deployed. + format: date-time + type: string + revision: + description: Revision is the revision number for this deployed chart. + type: integer + status: + description: Status is the status of the deployed chart, e.g. DEPLOYED. + type: string + required: + - lastDeployed + - revision + - status + type: object + version: + description: Version is the value of the Version field in the Chart.yaml + of the deployed chart. e.g. 1.0.0. + type: string + required: + - appVersion + - release + - version + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/backup.giantswarm.io_etcdbackups.yaml b/docs/crd/backup.giantswarm.io_etcdbackups.yaml new file mode 100644 index 000000000..8eb0c88d1 --- /dev/null +++ b/docs/crd/backup.giantswarm.io_etcdbackups.yaml @@ -0,0 +1,163 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: etcdbackups.backup.giantswarm.io +spec: + group: backup.giantswarm.io + names: + kind: ETCDBackup + listKind: ETCDBackupList + plural: etcdbackups + singular: etcdbackup + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guestBackup: + description: GuestBackup is a boolean indicating if the tenant clusters + have to be backupped + type: boolean + required: + - guestBackup + type: object + status: + properties: + finishedTimestamp: + description: Timestamp when the last (final) attempt was made (when + the Phase became either 'Completed' or 'Failed' + format: date-time + type: string + instances: + additionalProperties: + properties: + name: + description: Name of the tenant cluster or 'Control Plane' + type: string + v2: + description: Status of the V2 backup for this instance + properties: + backupFileSize: + description: Size of the backup file + format: int64 + type: integer + creationTime: + description: Time took by the backup creation process + format: int64 + type: integer + encryptionTime: + description: Time took by the backup encryption process + format: int64 + type: integer + finishedTimestamp: + description: Timestamp when the last (final) attempt was made + (when the Phase became either 'Completed' or 'Failed' + format: date-time + type: string + latestError: + description: Latest backup error message + type: string + startedTimestamp: + description: Timestamp when the first attempt was made + format: date-time + type: string + status: + description: Status of this isntance's backup job (can be + 'Pending', 'Running'. 'Completed', 'Failed') + type: string + uploadTime: + description: Time took by the backup upload process + format: int64 + type: integer + required: + - status + type: object + v3: + description: Status of the V3 backup for this instance + properties: + backupFileSize: + description: Size of the backup file + format: int64 + type: integer + creationTime: + description: Time took by the backup creation process + format: int64 + type: integer + encryptionTime: + description: Time took by the backup encryption process + format: int64 + type: integer + finishedTimestamp: + description: Timestamp when the last (final) attempt was made + (when the Phase became either 'Completed' or 'Failed' + format: date-time + type: string + latestError: + description: Latest backup error message + type: string + startedTimestamp: + description: Timestamp when the first attempt was made + format: date-time + type: string + status: + description: Status of this isntance's backup job (can be + 'Pending', 'Running'. 'Completed', 'Failed') + type: string + uploadTime: + description: Time took by the backup upload process + format: int64 + type: integer + required: + - status + type: object + required: + - name + - v2 + - v3 + type: object + description: map containing the state of the backup for all instances + type: object + startedTimestamp: + description: Timestamp when the first attempt was made + format: date-time + type: string + status: + description: Status of the whole backup job (can be 'Pending', 'Running'. + 'Completed', 'Failed') + type: string + required: + - status + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_awsclusterconfigs.yaml b/docs/crd/core.giantswarm.io_awsclusterconfigs.yaml new file mode 100644 index 000000000..ac788ab34 --- /dev/null +++ b/docs/crd/core.giantswarm.io_awsclusterconfigs.yaml @@ -0,0 +1,135 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: awsclusterconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: AWSClusterConfig + listKind: AWSClusterConfigList + plural: awsclusterconfigs + singular: awsclusterconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guest: + properties: + availabilityZones: + type: integer + credentialSecret: + description: AWSClusterConfigSpecGuestCredentialSecret points to + the K8s Secret containing credentials for an AWS account in which + the guest cluster should be created. + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + dnsZone: + description: DNSZone for guest cluster is supplemented with host + prefixes for specific services such as Kubernetes API or Etcd. + In general this DNS Zone should start with `k8s` like for example + `k8s.cluster.example.com.`. + type: string + id: + type: string + masters: + items: + properties: + id: + type: string + instanceType: + type: string + required: + - id + type: object + type: array + name: + type: string + owner: + type: string + releaseVersion: + type: string + versionBundles: + items: + properties: + name: + type: string + version: + type: string + required: + - name + - version + type: object + type: array + workers: + items: + properties: + id: + type: string + instanceType: + type: string + labels: + additionalProperties: + type: string + type: object + required: + - id + - labels + type: object + type: array + required: + - credentialSecret + - dnsZone + - id + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - guest + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_azureclusterconfigs.yaml b/docs/crd/core.giantswarm.io_azureclusterconfigs.yaml new file mode 100644 index 000000000..e220aa770 --- /dev/null +++ b/docs/crd/core.giantswarm.io_azureclusterconfigs.yaml @@ -0,0 +1,135 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: azureclusterconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: AzureClusterConfig + listKind: AzureClusterConfigList + plural: azureclusterconfigs + singular: azureclusterconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guest: + properties: + availabilityZones: + type: integer + credentialSecret: + description: AzureClusterConfigSpecGuestCredentialSecret points + to the K8s Secret containing credentials for an Azure subscription + in which the tenant cluster should be created. + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + dnsZone: + description: DNSZone for guest cluster is supplemented with host + prefixes for specific services such as Kubernetes API or Etcd. + In general this DNS Zone should start with `k8s` like for example + `k8s.cluster.example.com.`. + type: string + id: + type: string + masters: + items: + properties: + id: + type: string + vmSize: + type: string + required: + - id + type: object + type: array + name: + type: string + owner: + type: string + releaseVersion: + type: string + versionBundles: + items: + properties: + name: + type: string + version: + type: string + required: + - name + - version + type: object + type: array + workers: + items: + properties: + id: + type: string + labels: + additionalProperties: + type: string + type: object + vmSize: + type: string + required: + - id + - labels + type: object + type: array + required: + - credentialSecret + - dnsZone + - id + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - guest + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_certconfig.yaml b/docs/crd/core.giantswarm.io_certconfig.yaml deleted file mode 100644 index a3ccde5c2..000000000 --- a/docs/crd/core.giantswarm.io_certconfig.yaml +++ /dev/null @@ -1,86 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: certconfigs.core.giantswarm.io -spec: - conversion: - strategy: None - group: core.giantswarm.io - names: - kind: CertConfig - listKind: CertConfigList - plural: certconfigs - singular: certconfig - preserveUnknownFields: true - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: | - The CertConfig resource is used in a Giant Swarm installation to ensure TLS communication between - a component (e. g. prometheus) and the tenant cluster nodes. It is reconciled by cert-operator. - For each CertConfig resource, cert-operator ensures the existence of an X.509 certificate as - defined in RFC 5280. - properties: - spec: - properties: - cert: - description: | - Defines an X.509 certificate to be ensured by cert-operator. - properties: - allowBareDomains: - description: | - Specifies if clients can request certificates matching the value of the actual - domains themselves. - type: bool - altNames: - description: | - Specifies host names to set in the certificate as Subject Alternative Names. - items: - type: string - type: array - clusterComponent: - description: | - Name of the component this certificate is for. - type: string - clusterID: - description: | - Unique identifier of the tenant cluster this certificate is for. - type: string - commonName: - description: | - The value of the Common Name (CN) attribute of the certificate. - disableRegeneration: - description: | - Disable automatic certificate rotation before expiry. - type: bool - ipSans: - description: | - Specifies requested IP Subject Alternative Names to be set in the - certificate. - items: - type: string - type: array - organizations: - description: | - Organizations to set in the Organizations (O) attribute of the - certificate. - items: - type: string - type: array - ttl: - description: | - Expiry duration after creation. The value must consist of a number - combined with a unit, without blanks, to be parsed by the Go - [time.ParseDuration](https://golang.org/pkg/time/#ParseDuration) function. - type: string - type: object - versionBundle: - description: | - No longer used - type: object - type: object - served: true - storage: true diff --git a/docs/crd/core.giantswarm.io_certconfigs.yaml b/docs/crd/core.giantswarm.io_certconfigs.yaml new file mode 100644 index 000000000..7bd51714d --- /dev/null +++ b/docs/crd/core.giantswarm.io_certconfigs.yaml @@ -0,0 +1,97 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: certconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: CertConfig + listKind: CertConfigList + plural: certconfigs + singular: certconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + cert: + properties: + allowBareDomains: + type: boolean + altNames: + items: + type: string + type: array + clusterComponent: + type: string + clusterID: + type: string + commonName: + type: string + disableRegeneration: + type: boolean + ipSans: + items: + type: string + type: array + organizations: + items: + type: string + type: array + ttl: + type: string + required: + - allowBareDomains + - altNames + - clusterComponent + - clusterID + - commonName + - disableRegeneration + - ipSans + - organizations + - ttl + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - cert + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_chartconfigs.yaml b/docs/crd/core.giantswarm.io_chartconfigs.yaml new file mode 100644 index 000000000..b8121716e --- /dev/null +++ b/docs/crd/core.giantswarm.io_chartconfigs.yaml @@ -0,0 +1,169 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: chartconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: ChartConfig + listKind: ChartConfigList + plural: chartconfigs + singular: chartconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + chart: + properties: + channel: + description: Channel is the name of the Appr channel to reconcile + against, e.g. 1-0-stable. + type: string + configMap: + description: ConfigMap references a config map containing values + that should be applied to the chart. + properties: + name: + description: Name is the name of the config map containing chart + values to apply, e.g. node-exporter-chart-values. + type: string + namespace: + description: Namespace is the namespace of the values config + map, e.g. kube-system. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the configmap. Used to detect if the configmap has changed, + e.g. 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + name: + description: Name is the name of the Helm chart to deploy, e.g. + kubernetes-node-exporter. + type: string + namespace: + description: Namespace is the namespace where the Helm chart is + to be deployed, e.g. giantswarm. + type: string + release: + description: Release is the name of the Helm release when the chart + is deployed, e.g. node-exporter. + type: string + secret: + description: Secret references a secret containing secret values + that should be applied to the chart. + properties: + name: + description: Name is the name of the secret containing chart + values to apply, e.g. node-exporter-chart-secret. + type: string + namespace: + description: Namespace is the namespace of the secret, e.g. + kube-system. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the secret. Used to detect if the secret has changed, e.g. + 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + userConfigMap: + description: UserConfigMap references a config map containing custom + values. These custom values are specified by the user to override + default values. + properties: + name: + description: Name is the name of the config map containing chart + values to apply, e.g. node-exporter-chart-values. + type: string + namespace: + description: Namespace is the namespace of the values config + map, e.g. kube-system. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the configmap. Used to detect if the configmap has changed, + e.g. 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + required: + - channel + - configMap + - name + - namespace + - release + - secret + - userConfigMap + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - chart + - versionBundle + type: object + status: + properties: + reason: + description: Reason is the description of the last status of helm release + when the chart is not installed successfully, e.g. deploy resource + already exists. + type: string + releaseStatus: + description: ReleaseStatus is the status of the Helm release when the + chart is installed, e.g. DEPLOYED. + type: string + required: + - releaseStatus + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_clusters.yaml b/docs/crd/core.giantswarm.io_clusters.yaml new file mode 100644 index 000000000..5a2430a85 --- /dev/null +++ b/docs/crd/core.giantswarm.io_clusters.yaml @@ -0,0 +1,135 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: clusters.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: Cluster + listKind: ClusterList + plural: clusters + singular: cluster + scope: Namespaced + validation: + openAPIV3Schema: + 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: ClusterSpec is the part of the interface available to users + in order to request a tenant cluster creation by providing necessary configurations. + Fields here are either mandatory or optional. Optional fields left blank + will be filled with appropriate default values which are then propagated + into the CR status. + properties: + description: + description: Description is the optional cluster description users can + provide. If left blank a cluster description will be generated. The + cluster description is propagated into the CR status. + type: string + organization: + description: Organization is the mandatory cluster organization in which + a tenant cluster will be scoped into. + type: string + version: + description: Version is the optional release version users can provide. + If left blank the current default release version will be used. The + release version is propagated into the CR status. + type: string + required: + - description + - organization + - version + type: object + status: + description: ClusterStatus is the part of the interface available to users + in order to fetch a tenant cluster's status information after creation + was requested. Fields here are automatically filled and can only ever + be read. For instance the tenant cluster description will be generated + if left blank upon cluster creation and made available here. + properties: + cluster: + description: Cluster holds cluster specific status information. + properties: + description: + description: Description is the propagated cluster description users + can provide or the system generates automatically if left blank. + type: string + id: + description: ID is the internal cluster ID automatically generated + upon cluster creation. + type: string + version: + description: Version is the propagated release version users can + provide or the system sets to the current default release version. + type: string + required: + - description + - id + - version + type: object + conditions: + description: Conditions is a list of status conditions. + items: + description: ClusterStatusCondition holds a specific status condition + describing certain aspects of the current state of the tenant cluster. + properties: + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be Creating, Created, Updating, Updated, + or Deleting. + type: string + required: + - status + - type + type: object + type: array + lastHeartbeatTime: + description: LastHeartbeatTime is the last time we got an update on + a given condition. + format: date-time + type: string + lastTransitionTime: + description: LastTransitionTime is the last time the condition transitioned + from one status to another. + format: date-time + type: string + required: + - cluster + - conditions + - lastHeartbeatTime + - lastTransitionTime + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_drainerconfigs.yaml b/docs/crd/core.giantswarm.io_drainerconfigs.yaml new file mode 100644 index 000000000..4d713d6eb --- /dev/null +++ b/docs/crd/core.giantswarm.io_drainerconfigs.yaml @@ -0,0 +1,130 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: drainerconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: DrainerConfig + listKind: DrainerConfigList + plural: drainerconfigs + singular: drainerconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guest: + properties: + cluster: + properties: + api: + properties: + endpoint: + description: Endpoint is the guest cluster API endpoint. + type: string + required: + - endpoint + type: object + id: + description: ID is the guest cluster ID of which a node should + be drained. + type: string + required: + - api + - id + type: object + node: + properties: + name: + description: "Name is the identifier of the guest cluster's + master and worker nodes. In Kubernetes/Kubectl they are represented + as node names. The names are manage in an abstracted way because + of provider specific differences. \n AWS: EC2 instance + DNS. Azure: VM name. KVM: host cluster pod name." + type: string + required: + - name + type: object + required: + - cluster + - node + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - guest + - versionBundle + type: object + status: + properties: + conditions: + items: + description: DrainerConfigStatusCondition expresses a condition in + which a node may is. + properties: + lastHeartbeatTime: + description: LastHeartbeatTime is the last time we got an update + on a given condition. + format: date-time + type: string + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be Pending, Ready, Draining, Drained. + type: string + required: + - lastHeartbeatTime + - lastTransitionTime + - status + - type + type: object + type: array + required: + - conditions + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_draughtsmanconfigs.yaml b/docs/crd/core.giantswarm.io_draughtsmanconfigs.yaml new file mode 100644 index 000000000..552f03f47 --- /dev/null +++ b/docs/crd/core.giantswarm.io_draughtsmanconfigs.yaml @@ -0,0 +1,67 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: draughtsmanconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: DraughtsmanConfig + listKind: DraughtsmanConfigList + plural: draughtsmanconfigs + singular: draughtsmanconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + projects: + items: + properties: + id: + type: string + name: + type: string + ref: + type: string + required: + - id + - name + - ref + type: object + type: array + required: + - projects + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_flannelconfigs.yaml b/docs/crd/core.giantswarm.io_flannelconfigs.yaml new file mode 100644 index 000000000..a0dae8e56 --- /dev/null +++ b/docs/crd/core.giantswarm.io_flannelconfigs.yaml @@ -0,0 +1,152 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: flannelconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: FlannelConfig + listKind: FlannelConfigList + plural: flannelconfigs + singular: flannelconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + bridge: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + spec: + properties: + dns: + properties: + servers: + items: + type: string + type: array + required: + - servers + type: object + interface: + type: string + ntp: + properties: + servers: + items: + type: string + type: array + required: + - servers + type: object + privateNetwork: + type: string + required: + - dns + - interface + - ntp + - privateNetwork + type: object + required: + - docker + - spec + type: object + cluster: + properties: + customer: + type: string + id: + type: string + namespace: + type: string + required: + - customer + - id + - namespace + type: object + flannel: + properties: + spec: + properties: + network: + type: string + runDir: + type: string + subnetLen: + type: integer + vni: + type: integer + required: + - network + - runDir + - subnetLen + - vni + type: object + required: + - spec + type: object + health: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + required: + - docker + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - bridge + - cluster + - flannel + - health + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_ignition.yaml b/docs/crd/core.giantswarm.io_ignition.yaml deleted file mode 100644 index 220a3d52d..000000000 --- a/docs/crd/core.giantswarm.io_ignition.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: ignitions.core.giantswarm.io -spec: - additionalPrinterColumns: - - JSONPath: .status.ready - description: Indicates that the ignition secret has been successfully rendered - and is ready to be used - name: ready - type: boolean - group: core.giantswarm.io - names: - kind: Ignition - plural: ignitions - shortNames: - - ign - singular: ignition - scope: Namespaced - subresources: - status: {} - validation: - openAPIV3Schema: - properties: - spec: - properties: - apiServerEncryptionKey: - type: string - type: object - type: object - versions: - - name: v1alpha1 - served: true - storage: true diff --git a/docs/crd/core.giantswarm.io_ignitions.yaml b/docs/crd/core.giantswarm.io_ignitions.yaml new file mode 100644 index 000000000..56b2e9166 --- /dev/null +++ b/docs/crd/core.giantswarm.io_ignitions.yaml @@ -0,0 +1,485 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: ignitions.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: Ignition + listKind: IgnitionList + plural: ignitions + singular: ignition + scope: Namespaced + validation: + openAPIV3Schema: + description: "Ignition is a Kubernetes resource (CR) which is based on the Ignition + CRD defined above. \n An example Ignition resource can be viewed here https://github.com/giantswarm/apiextensions/blob/master/docs/cr/core.giantswarm.io_v1alpha1_ignition.yaml" + 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: IgnitionSpec is the interface which defines the input parameters + for a newly rendered g8s ignition template. + properties: + apiServerEncryptionKey: + description: APIServerEncryptionKey is used in EncryptionConfiguration + to encrypt Kubernetes secrets at rest. + type: string + baseDomain: + description: BaseDomain is the base domain for all cluster services. + For test installations, this may be in the form .k8s....gigantic.io. + type: string + calico: + description: Calico provides configuration for all calico-related services. + properties: + cidr: + description: CIDR is the CIDR-component of the IPv4 overlay subnetwork. + Combined with Subnet below. + type: string + disable: + description: Disable can be set to true to disable Calico setup. + type: boolean + mtu: + description: MTU is the maximum size of packets sent over Calico + in bytes. + type: string + subnet: + description: Subnet is the IP-component of the IPv4 overlay subnetwork. + Combined with CIDR above. + type: string + required: + - cidr + - disable + - mtu + - subnet + type: object + clusterID: + description: ClusterID is the name of the tenant cluster to be created. + type: string + disableEncryptionAtRest: + description: DisableEncryptionAtRest will disable secret encryption + at rest when set to true. + type: boolean + docker: + description: Docker provides configuration for all calico-related services. + properties: + daemon: + description: Daemon provides information about the Docker daemon + running on TC nodes. + properties: + cidr: + description: CIDR is the fully specified subnet used for DOCKER_OPT_BIP. + type: string + required: + - cidr + type: object + networkSetup: + description: NetworkSetup provides the Docker image to be used for + network environment setup. + properties: + image: + description: Image provides the Docker image to be used for + network environment setup. + type: string + required: + - image + type: object + required: + - daemon + - networkSetup + type: object + etcd: + description: Etcd provides configuration for all etcd-related services. + properties: + domain: + description: Domain is the domain of the etcd service. + type: string + port: + description: Port is the port of the etcd service, usually 2379. + type: integer + prefix: + description: Prefix is the prefix to add to all etcd keys created + by Kubernetes. + type: string + required: + - domain + - port + - prefix + type: object + extension: + description: Extension can be used to extend an ignition with extra + configuration provided by the provider operator. + properties: + files: + description: Files is an optional array of files which will be rendered + and added to the final node ignition. + items: + properties: + content: + description: Content is the string containing a file with + optional go-template-style replacements. + type: string + metadata: + description: Metadata is the filesystem metadata of the given + file. + properties: + compression: + description: Compression allows a file to be passed in + as a base64-encoded compressed string. + type: boolean + owner: + description: Owner is the owner of the file. + properties: + group: + description: Group is the group which owns the file. + properties: + id: + description: ID is the GID of the group. + type: string + name: + description: Name is the name of the group. + type: string + required: + - id + - name + type: object + user: + description: User is the user which owns the file. + properties: + id: + description: ID is the UID of the user. + type: string + name: + description: Name is the name of the user. + type: string + required: + - id + - name + type: object + required: + - group + - user + type: object + path: + description: Path is the path of the file. + type: string + permissions: + description: Permissions is the numeric permissions applied + to the file. + type: integer + required: + - compression + - owner + - path + - permissions + type: object + required: + - content + - metadata + type: object + type: array + units: + description: Files is an optional array of systemd units which will + be rendered and added to the final node ignition. + items: + properties: + content: + description: Content is the string containing a systemd unit + with optional go-template-style replacements. + type: string + metadata: + description: Metadata is the filesystem metadata of the given + file. + properties: + enabled: + description: Enabled indicates that the unit should be + enabled by default. + type: boolean + name: + description: Name is the name of the unit on the filesystem + and used in systemctl commands. + type: string + required: + - enabled + - name + type: object + required: + - content + - metadata + type: object + type: array + users: + description: Files is an optional array of users which will be added + to the final node ignition. + items: + properties: + name: + description: Name is the name of the user to be added to the + node via ignition. + type: string + publicKey: + description: PublicKey is the public key of the user to be + added to the node via ignition. + type: string + required: + - name + - publicKey + type: object + type: array + type: object + ingress: + description: Ingress provides configuration for all ingress-related + services. + properties: + disable: + description: Disable will disable the ingress controller in the + TC when true. + type: boolean + required: + - disable + type: object + isMaster: + description: IsMaster determines if the rendered ignition should contain + master-specific configuration. + type: boolean + kubernetes: + description: Kubernetes provides configuration for all Kubernetes-related + services. + properties: + api: + description: API holds information about the desired TC Kubernetes + API. + properties: + domain: + description: Domain is the domain of the API server. + type: string + securePort: + description: Secure port is the port on which the API will listen. + type: integer + required: + - domain + - securePort + type: object + cloudProvider: + description: CloudProvider is the provider upon which the cluster + is running. It is passed to API server as a flag. + type: string + dns: + description: DNS hold information about the in-cluster DNS service. + properties: + ip: + description: IP is the IP of the in-cluster DNS service. Usually + this is the same as the API server IP with the final component + replaced with .10. + type: string + required: + - ip + type: object + domain: + description: Domain is the domain used for services running in the + cluster. Usually this is "cluster.local". + type: string + ipRange: + description: IPRange is the range of IPs used for pod networking. + type: string + kubelet: + description: Kubelet holds information about the kubelet running + on nodes. + properties: + domain: + description: Domain is the domain of the network. + type: string + required: + - domain + type: object + oidc: + description: OIDC hold configuration which will be applied to the + apiserver OIDC flags. + properties: + clientID: + description: The client ID for the OpenID Connect client, must + be set if IssuerURL is set. + type: string + enabled: + description: Enabled indicates that the OIDC settings should + be applied when true. + type: boolean + groupsClaim: + description: If provided, the name of a custom OpenID Connect + claim for specifying user groups. The claim value is expected + to be a string or JSON encoded array of strings. + type: string + groupsPrefix: + description: If provided, all groups will be prefixed with this + value to prevent conflicts with other authentication strategies. + type: string + issuerUrl: + description: The URL of the OpenID issuer, only HTTPS scheme + will be accepted. If set, it will be used to verify the OIDC + JSON Web Token (JWT). + type: string + usernameClaim: + description: The OpenID claim to use as the user name. Note + that claims other than the default ('sub') is not guaranteed + to be unique and immutable. + type: string + usernamePrefix: + description: If provided, all usernames will be prefixed with + this value. If not provided, username claims other than 'email' + are prefixed by the issuer URL to avoid clashes. To skip any + prefixing, provide the value '-'. + type: string + required: + - clientID + - enabled + - groupsClaim + - groupsPrefix + - issuerUrl + - usernameClaim + - usernamePrefix + type: object + required: + - api + - cloudProvider + - dns + - domain + - ipRange + - kubelet + - oidc + type: object + provider: + description: Defines the provider which should be rendered. + type: string + registry: + description: Registry provides configuration for the docker registry + used for core component images. + properties: + domain: + description: Domain is the domain of the registry to be used for + pulling core component images. + type: string + pullProgressDeadline: + description: Pull progress deadline is a string representing a duration + to be used as a deadline for pulling images. + type: string + required: + - domain + - pullProgressDeadline + type: object + sso: + description: SSO provides configuration for all SSO-related services. + properties: + publicKey: + description: PublicKey is the public key of the SSO service. + type: string + required: + - publicKey + type: object + required: + - apiServerEncryptionKey + - baseDomain + - calico + - clusterID + - disableEncryptionAtRest + - docker + - etcd + - extension + - ingress + - isMaster + - kubernetes + - provider + - registry + - sso + type: object + status: + description: IgnitionStatus holds the rendering result. + properties: + dataSecretName: + description: DataSecret is a reference to the secret containing the + rendered ignition once created. + properties: + name: + description: Name is the name of the secret containing the rendered + ignition. + type: string + namespace: + description: Namespace is the namespace of the secret containing + the rendered ignition. + type: string + resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the secret. Used to detect if the secret has changed, e.g. + 12345. + type: string + required: + - name + - namespace + - resourceVersion + type: object + failureMessage: + description: FailureMessage is a longer message indicating the reason + rendering failed (if it did). + type: string + failureReason: + description: FailureReason is a short string indicating the reason rendering + failed (if it did). + type: string + ready: + description: Ready will be true when the referenced secret contains + the rendered ignition and can be used for creating nodes. + type: boolean + verification: + description: Verification is a hash of the rendered ignition to ensure + that it has not been changed when loaded as a remote file by the bootstrap + ignition. See https://coreos.com/ignition/docs/latest/configuration-v2_2.html + properties: + algorithm: + description: The algorithm used for hashing. Must be sha512 for + now. + type: string + hash: + description: The content of the full rendered ignition hashed by + the corresponding algorithm. + type: string + required: + - algorithm + - hash + type: object + required: + - dataSecretName + - failureMessage + - failureReason + - ready + - verification + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_ingressconfigs.yaml b/docs/crd/core.giantswarm.io_ingressconfigs.yaml new file mode 100644 index 000000000..65074cdf4 --- /dev/null +++ b/docs/crd/core.giantswarm.io_ingressconfigs.yaml @@ -0,0 +1,108 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: ingressconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: IngressConfig + listKind: IngressConfigList + plural: ingressconfigs + singular: ingressconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guestCluster: + properties: + id: + type: string + namespace: + type: string + service: + type: string + required: + - id + - namespace + - service + type: object + hostCluster: + properties: + ingressController: + properties: + configMap: + type: string + namespace: + type: string + service: + type: string + required: + - configMap + - namespace + - service + type: object + required: + - ingressController + type: object + protocolPorts: + items: + properties: + ingressPort: + type: integer + lbPort: + type: integer + protocol: + type: string + required: + - ingressPort + - lbPort + - protocol + type: object + type: array + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - guestCluster + - hostCluster + - protocolPorts + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_kvmclusterconfigs.yaml b/docs/crd/core.giantswarm.io_kvmclusterconfigs.yaml new file mode 100644 index 000000000..e942cbf30 --- /dev/null +++ b/docs/crd/core.giantswarm.io_kvmclusterconfigs.yaml @@ -0,0 +1,129 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: kvmclusterconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: KVMClusterConfig + listKind: KVMClusterConfigList + plural: kvmclusterconfigs + singular: kvmclusterconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + guest: + properties: + availabilityZones: + type: integer + dnsZone: + description: DNSZone for guest cluster is supplemented with host + prefixes for specific services such as Kubernetes API or Etcd. + In general this DNS Zone should start with `k8s` like for example + `k8s.cluster.example.com.`. + type: string + id: + type: string + masters: + items: + properties: + cpuCores: + type: integer + id: + type: string + memorySizeGB: + type: number + storageSizeGB: + type: number + required: + - id + type: object + type: array + name: + type: string + owner: + type: string + releaseVersion: + type: string + versionBundles: + items: + properties: + name: + type: string + version: + type: string + required: + - name + - version + type: object + type: array + workers: + items: + properties: + cpuCores: + type: integer + id: + type: string + labels: + additionalProperties: + type: string + type: object + memorySizeGB: + type: number + storageSizeGB: + type: number + required: + - id + - labels + type: object + type: array + required: + - dnsZone + - id + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - guest + - versionBundle + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_nodeconfigs.yaml b/docs/crd/core.giantswarm.io_nodeconfigs.yaml new file mode 100644 index 000000000..06e5e878e --- /dev/null +++ b/docs/crd/core.giantswarm.io_nodeconfigs.yaml @@ -0,0 +1,52 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: nodeconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: NodeConfig + listKind: NodeConfigList + plural: nodeconfigs + singular: nodeconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + type: object + status: + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/core.giantswarm.io_storageconfigs.yaml b/docs/crd/core.giantswarm.io_storageconfigs.yaml new file mode 100644 index 000000000..1c5f62d48 --- /dev/null +++ b/docs/crd/core.giantswarm.io_storageconfigs.yaml @@ -0,0 +1,61 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: storageconfigs.core.giantswarm.io +spec: + group: core.giantswarm.io + names: + kind: StorageConfig + listKind: StorageConfigList + plural: storageconfigs + singular: storageconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + storage: + properties: + data: + additionalProperties: + type: string + type: object + required: + - data + type: object + required: + - storage + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/example.giantswarm.io_memcachedconfigs.yaml b/docs/crd/example.giantswarm.io_memcachedconfigs.yaml new file mode 100644 index 000000000..2506a4a5b --- /dev/null +++ b/docs/crd/example.giantswarm.io_memcachedconfigs.yaml @@ -0,0 +1,60 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: memcachedconfigs.example.giantswarm.io +spec: + group: example.giantswarm.io + names: + kind: MemcachedConfig + listKind: MemcachedConfigList + plural: memcachedconfigs + singular: memcachedconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + memory: + description: e.g. 3 Memory is how much RAM to use for item storage. + e.g. 4G + type: string + replicas: + description: Replicas is the number of instances of Memcache. + type: integer + required: + - memory + - replicas + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/infrastructure.giantswarm.io_awscluster.yaml b/docs/crd/infrastructure.giantswarm.io_awscluster.yaml deleted file mode 100644 index cb73d8785..000000000 --- a/docs/crd/infrastructure.giantswarm.io_awscluster.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: awsclusters.infrastructure.giantswarm.io -spec: - conversion: - strategy: None - group: infrastructure.giantswarm.io - names: - kind: AWSCluster - listKind: AWSClusterList - plural: awsclusters - singular: awscluster - preserveUnknownFields: true - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - type: object - served: false - storage: false - - name: v1alpha2 - schema: - openAPIV3Schema: - description: | - Defines a tenant cluster in a Giant Swarm AWS installation. - Introduced with release v10.x.x, reconciled by aws-operator. - properties: - spec: - properties: - cluster: - description: | - Provides cluster specification details. - properties: - description: - description: | - User-friendly description that should explain the purpose of the - cluster. - maxLength: 100 - type: string - dns: - description: | - DNS configuration details. - properties: - domain: - description: | - Base domain for several endpoints of this cluster. - type: string - type: object - oidc: - description: | - Configuration for OpenID Connect (OIDC) authentication. - type: object - type: object - provider: - description: | - AWS-specific configuration details. - properties: - master: - description: | - Master node configuration details. - properties: - availabilityZone: - description: | - Name of the AWS Availability Zone to place the master node in. - type: string - instanceType: - description: | - EC2 instance type to use for the master node. - type: string - type: object - region: - description: | - AWS region the cluster is to be running in. - type: string - type: object - type: object - type: object - served: true - storage: true - subresources: - status: {} diff --git a/docs/crd/infrastructure.giantswarm.io_awsclusters.yaml b/docs/crd/infrastructure.giantswarm.io_awsclusters.yaml new file mode 100644 index 000000000..d27eb3c2d --- /dev/null +++ b/docs/crd/infrastructure.giantswarm.io_awsclusters.yaml @@ -0,0 +1,209 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: awsclusters.infrastructure.giantswarm.io +spec: + group: infrastructure.giantswarm.io + names: + kind: AWSCluster + listKind: AWSClusterList + plural: awsclusters + singular: awscluster + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: AWSCluster is the infrastructure provider referenced in upstream + CAPI Cluster CRs. + 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: + description: metav1.ObjectMeta is standard Kubernetes resource metadata. + type: object + spec: + description: AWSClusterSpec is the spec part for the AWSCluster resource. + properties: + cluster: + description: Cluster provides cluster specification details. + properties: + description: + description: Description is a user-friendly description that should + explain the purpose of the cluster to humans. + type: string + dns: + description: DNS holds DNS configuration details. + properties: + domain: + type: string + required: + - domain + type: object + oidc: + description: OIDC holds configuration for OpenID Connect (OIDC) + authentication. + properties: + claims: + description: AWSClusterSpecClusterOIDCClaims defines OIDC + claims. + properties: + groups: + type: string + username: + type: string + type: object + clientID: + type: string + issuerURL: + type: string + type: object + required: + - description + - dns + type: object + provider: + description: Provider holds provider-specific configuration details. + properties: + credentialSecret: + description: CredentialSecret specifies the location of the secret + providing the ARN of AWS IAM identity to use with this cluster. + properties: + name: + description: Name is the name of the provider credential resoure. + type: string + namespace: + description: Namespace is the kubernetes namespace that holds + the provider credential. + type: string + required: + - name + - namespace + type: object + master: + description: Master holds master node configuration details. + properties: + availabilityZone: + description: AvailabilityZone is the AWS availability zone + to place the master node in. + type: string + instanceType: + description: InstanceType specifies the AWS EC2 instance type + to use for the master node. + type: string + required: + - availabilityZone + - instanceType + type: object + region: + description: Region is the AWS region the cluster is to be running + in. + type: string + required: + - credentialSecret + - master + - region + type: object + required: + - cluster + - provider + type: object + status: + description: AWSClusterStatus holds status information about the cluster, + populated once the cluster is in creation or created. + properties: + cluster: + description: Cluster provides cluster-specific status details, including + conditions and versions. + properties: + conditions: + description: One or several conditions that are currently applicable + to the cluster. + items: + description: CommonClusterStatusCondition explains the current + condition(s) of the cluster. + properties: + condition: + description: Condition string, e. g. `Creating`, `Created`, + `Upgraded` + type: string + lastTransitionTime: + description: Time the condition occurred. + format: date-time + type: string + required: + - condition + - lastTransitionTime + type: object + type: array + id: + description: Identifier of the cluster. + type: string + versions: + description: Release versions the cluster used so far. + items: + description: CommonClusterStatusVersion informs which aws-operator + version was/responsible for this cluster. + properties: + lastTransitionTime: + description: Time the cluster assumed the given version. + format: date-time + type: string + version: + description: The aws-operator version responsible for handling + the cluster. + type: string + required: + - lastTransitionTime + - version + type: object + type: array + required: + - id + type: object + provider: + description: Provider provides provider-specific status details. + properties: + network: + description: Network provides network-specific configuration details + properties: + cidr: + description: IPv4 address block used by the tenant cluster, + in CIDR notation. + type: string + vpcID: + description: VPCID contains the ID of the tenant cluster, + e.g. vpc-1234567890abcdef0. + type: string + required: + - cidr + - vpcID + type: object + required: + - network + type: object + type: object + required: + - spec + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/infrastructure.giantswarm.io_awscontrolplane.yaml b/docs/crd/infrastructure.giantswarm.io_awscontrolplane.yaml deleted file mode 100644 index 198df6c46..000000000 --- a/docs/crd/infrastructure.giantswarm.io_awscontrolplane.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: awscontrolplanes.infrastructure.giantswarm.io -spec: - conversion: - strategy: None - group: infrastructure.giantswarm.io - names: - kind: AWSControlPlane - plural: awscontrolplanes - singular: awscontrolplane - scope: Namespaced - subresources: - status: {} - versions: - - name: v1alpha1 - served: false - storage: false - - name: v1alpha2 - schema: - openAPIV3Schema: - description: | - Configuration for the master nodes (also called Control Plane) of a - tenant cluster on AWS. - properties: - spec: - properties: - availabilityZones: - description: | - Configures which AWS availability zones to use by master nodes. - We support either 1 or 3 availability zones. - items: - description: | - Identifier of an availability zone to use. - type: string - type: array - instanceType: - description: | - EC2 instance type to use for all master nodes. - type: string - type: object - type: object - served: true - storage: true diff --git a/docs/crd/infrastructure.giantswarm.io_awscontrolplanes.yaml b/docs/crd/infrastructure.giantswarm.io_awscontrolplanes.yaml new file mode 100644 index 000000000..1c6ebd0c9 --- /dev/null +++ b/docs/crd/infrastructure.giantswarm.io_awscontrolplanes.yaml @@ -0,0 +1,65 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: awscontrolplanes.infrastructure.giantswarm.io +spec: + group: infrastructure.giantswarm.io + names: + kind: AWSControlPlane + listKind: AWSControlPlaneList + plural: awscontrolplanes + singular: awscontrolplane + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: AWSControlPlane is the infrastructure provider referenced in + ControlPlane CRs. + 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: + properties: + availabilityZones: + items: + type: string + type: array + instanceType: + type: string + required: + - availabilityZones + - instanceType + type: object + status: + description: TODO + properties: + status: + type: string + type: object + required: + - spec + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/infrastructure.giantswarm.io_awsmachinedeployment.yaml b/docs/crd/infrastructure.giantswarm.io_awsmachinedeployment.yaml deleted file mode 100644 index 5fbd67e1a..000000000 --- a/docs/crd/infrastructure.giantswarm.io_awsmachinedeployment.yaml +++ /dev/null @@ -1,146 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: awsmachinedeployments.infrastructure.giantswarm.io -spec: - conversion: - strategy: None - group: infrastructure.giantswarm.io - names: - kind: AWSMachineDeployment - plural: awsmachinedeployments - singular: awsmachinedeployment - scope: Namespaced - subresources: - status: {} - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - type: object - served: false - storage: false - - name: v1alpha2 - schema: - openAPIV3Schema: - properties: - spec: - properties: - nodePool: - description: | - General node pool configuration. - properties: - description: - description: | - User-friendly description of the node pool, e. g. to inform about the purpose. - maxLength: 100 - type: string - machine: - properties: - dockerVolumeSizeGB: - description: | - Size of the volume reserved for Docker images and overlay file systems - of Docker containers. Unit: 1 GB = 1,000,000,000 Bytes. - format: int32 - type: integer - kubeletVolumeSizeGB: - description: | - Size of the volume reserved for the kubelet, which can be used by Pods - via volumes of type EmptyDir. Unit: 1 GB = 1,000,000,000 Bytes. - format: int32 - type: integer - type: object - scaling: - description: | - Configures the size of the node pool, in terms of the number of worker - nodes it can have, as a range. The actual number of worker nodes will - be determined by cluster-autoscaler within the configured range. - Setting the minimum and maximum to the same number effectively disables - autoscaling. - properties: - max: - description: | - Maximum number of worker nodes in this node pool. - format: int32 - type: integer - min: - description: | - Minimum number of worker nodes in this node pool. - format: int32 - type: integer - type: object - type: object - provider: - description: | - Configuration specific to AWS. - properties: - availabilityZones: - description: | - Name(s) of the availability zone(s) to use for worker nodes. Using multiple - availability zones results in higher resilience but can also result in - higher cost due to network traffic between availability zones. - items: - type: string - type: array - instanceDistribution: - description: | - Attributes defining the instance distribution in a node pool. - properties: - onDemandBaseCapacity: - default: 0 - description: | - Base capacity of on-demand instances to use for worker nodes. - format: int32 - minimum: 0 - type: integer - onDemandPercentageAboveBaseCapacity: - default: 100 - description: | - Percentage of on-demand instances to use for worker nodes, for instances exceeding onDemandBaseCapacity. - format: int32 - maximum: 100 - minimum: 0 - type: integer - type: object - worker: - description: | - Specification of worker nodes. - properties: - instanceType: - description: | - AWS EC2 instance type name to use for the worker nodes in this node pool. - type: string - useAlikeInstanceTypes: - description: | - If true, certain instance types with specs similar to instanceType will be used. - type: boolean - type: object - type: object - type: object - status: - properties: - provider: - description: | - Status specific to AWS. - properties: - worker: - description: | - Status of worker nodes. - properties: - instanceTypes: - description: | - AWS EC2 instance types used for the worker nodes in this node pool. - items: - type: string - type: array - spotInstances: - description: | - Number of spot instances used in this node pool. - type: integer - type: object - type: object - type: object - type: object - served: true - storage: true diff --git a/docs/crd/infrastructure.giantswarm.io_awsmachinedeployments.yaml b/docs/crd/infrastructure.giantswarm.io_awsmachinedeployments.yaml new file mode 100644 index 000000000..5824273a6 --- /dev/null +++ b/docs/crd/infrastructure.giantswarm.io_awsmachinedeployments.yaml @@ -0,0 +1,141 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: awsmachinedeployments.infrastructure.giantswarm.io +spec: + group: infrastructure.giantswarm.io + names: + kind: AWSMachineDeployment + listKind: AWSMachineDeploymentList + plural: awsmachinedeployments + singular: awsmachinedeployment + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: AWSMachineDeployment is the infrastructure provider referenced + in upstream CAPI MachineDeployment CRs. + 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: + properties: + nodePool: + properties: + description: + type: string + machine: + properties: + dockerVolumeSizeGB: + type: integer + kubeletVolumeSizeGB: + type: integer + required: + - dockerVolumeSizeGB + - kubeletVolumeSizeGB + type: object + scaling: + properties: + max: + type: integer + min: + type: integer + required: + - max + - min + type: object + required: + - description + - machine + - scaling + type: object + provider: + properties: + availabilityZones: + items: + type: string + type: array + instanceDistribution: + properties: + onDemandBaseCapacity: + default: 0 + minimum: 0 + type: integer + onDemandPercentageAboveBaseCapacity: + default: 100 + maximum: 100 + minimum: 0 + type: integer + required: + - onDemandBaseCapacity + - onDemandPercentageAboveBaseCapacity + type: object + worker: + properties: + instanceType: + type: string + useAlikeInstanceTypes: + type: boolean + required: + - instanceType + - useAlikeInstanceTypes + type: object + required: + - availabilityZones + - instanceDistribution + - worker + type: object + required: + - nodePool + - provider + type: object + status: + properties: + provider: + properties: + worker: + properties: + instanceTypes: + items: + type: string + type: array + spotInstances: + type: integer + required: + - instanceTypes + - spotInstances + type: object + required: + - worker + type: object + required: + - provider + type: object + required: + - spec + - status + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/infrastructure.giantswarm.io_g8scontrolplanes.yaml b/docs/crd/infrastructure.giantswarm.io_g8scontrolplanes.yaml new file mode 100644 index 000000000..79d273cb1 --- /dev/null +++ b/docs/crd/infrastructure.giantswarm.io_g8scontrolplanes.yaml @@ -0,0 +1,108 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: g8scontrolplanes.infrastructure.giantswarm.io +spec: + group: infrastructure.giantswarm.io + names: + kind: G8sControlPlane + listKind: G8sControlPlaneList + plural: g8scontrolplanes + singular: g8scontrolplane + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: G8sControlPlane defines the Control Plane Nodes (Kubernetes Master + Nodes) of a Giant Swarm Tenant Cluster. + 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: + properties: + infrastructureRef: + description: InfrastructureRef is a required reference to provider-specific + Infrastructure. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + 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/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + replicas: + description: Replicas is the number replicas of the master node. + type: integer + required: + - infrastructureRef + - replicas + type: object + status: + description: G8sControlPlaneStatus defines the observed state of G8sControlPlane. + properties: + readyReplicas: + description: Total number of fully running and ready control plane + machines. + format: int32 + type: integer + replicas: + description: Total number of non-terminated machines targeted by this + control plane (their labels match the selector). + format: int32 + type: integer + type: object + required: + - spec + - status + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/provider.giantswarm.io_awsconfig.yaml b/docs/crd/provider.giantswarm.io_awsconfig.yaml deleted file mode 100644 index 3c453f131..000000000 --- a/docs/crd/provider.giantswarm.io_awsconfig.yaml +++ /dev/null @@ -1,481 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: awsconfigs.provider.giantswarm.io -spec: - conversion: - strategy: None - group: provider.giantswarm.io - names: - kind: AWSConfig - listKind: AWSConfigList - plural: awsconfigs - singular: awsconfig - preserveUnknownFields: true - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: | - Together with AWSClusterConfig, defines a tenant cluster in a - Giant Swarm installation in releases before v10.0.1. - Reconciled by aws-operator. - properties: - spec: - properties: - aws: - description: AWS-specific configuration. - properties: - api: - description: | - Configures the tenant cluster Kubernetes API. - Deprecated since aws-operator v12. - properties: - elb: - description: | - Configures the Elastic Load Balancer for the - tenant cluster Kubernetes API. - properties: - idleTimeoutSeconds: - description: | - Seconds to keep an idle connection open. - type: int - type: object - hostedZones: - description: TODO - type: string - type: object - availabilityZones: - description: | - Number of availability zones to use for the tenant cluster's worker nodes. - There are limitations on availability zone settings due to binary IP range - splitting and provider specific region capabilities. When for instance choosing - 3 availability zones, the configured IP range will be split into 4 ranges and - thus one of it will not be able to be utilized. Such limitations have to be considered - when designing the network topology and configuring tenant cluster HA via availability - zones. - - The selection and usage of the actual availability zones for the created - tenant cluster is randomized. In case there are 4 availability zones - provided in the used region and the user selects 2 availability zones, the - actually used availability zones in which tenant cluster workload is put - into will tend to be different across tenant cluster creations. This is - done in order to provide more HA during single availability zone failures. - In case a specific availability zone fails, not all tenant clusters will be - affected due to the described selection process. - type: int - az: - description: | - Deprecated way to define the availability zone to use - by the tenant cluster. - type: string - credentialSecret: - description: | - Defines which Secret resource to use in orde to obtain the IAM role to assume - for managing resources for this tenant cluster on AWS. This allows to - run different tenant clusters of the same installation in different - AWS accounts. - properties: - name: - description: Name of the Secret resource. - type: string - namespace: - description: Namespace of the Secret resource. - type: string - type: object - etcd: - description: | - Configures the Etcd cluster storing the tenant cluster's data. - Deprecated since aws-operator v12. - properties: - elb: - description: | - Elastic Load Balancer configuration. - properties: - idleTimeoutSeconds: - description: | - Seconds to keep an idle connection open. - type: int - type: object - type: object - hostedZones: - description: | - HostedZones is AWS hosted zones names in the host cluster account. - For each zone there will be "CLUSTER_ID.k8s" NS record created in - the host cluster account. Then for each created NS record there will - be a zone created in the guest account. After that component-specific - records under those zones: - - - api.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.API.Name }} - - etcd.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Etcd.Name }} - - ingress.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Ingress.Name }} - - *.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Ingress.Name }} - properties: - api: - description: | - DNS zone configuration for the Kubernetes API. - properties: - name: - description: Zone name. - type: string - type: object - etcd: - description: | - DNS zone configuration for Etcd. - properties: - name: - description: Zone name. - type: string - type: object - ingress: - description: | - DNS zone configuration for Ingress. - properties: - name: - description: Zone name. - type: string - type: object - type: object - ingress: - description: | - Ingress configuration. - Deprecated since aws-operator v12. - properties: - elb: - description: | - Configuration of the Elastic Load Balancer for Ingress. - properties: - idleTimeoutSeconds: - description: | - Seconds to keep an idle connection open. - type: int - type: object - type: object - masters: - description: | - Configuration of the master nodes. - items: - description: | - Configuration for each individual master node. - properties: - imageID: - description: | - Amazon Machine Image (AMI) identifier to use as a base for - the EC2 instance of this master node. - type: string - instanceType: - description: | - Name of the AWS EC2 instance type to use for this master node. - type: string - type: object - type: array - region: - description: | - Name of the AWS region the tenant cluster is running in. - type: string - vpc: - description: | - Configuration of the Virtual Private Cloud (VPC) to use for - the tenant cluster. - properties: - cidr: - description: TODO - type: string - peerId: - description: TODO - type: string - privateSubnetCidr: - description: TODO - type: string - publicSubnetCidr: - description: TODO - type: string - routeTableNames: - description: TODO - items: - type: string - type: array - type: object - workers: - description: | - Configuration of worker nodes. - items: - description: | - Configuration of an individual worker node. Each worker node - is represented by one item. - properties: - dockerVolumeSizeGB: - description: | - Size of the worker docker volume in gigabytes. - type: int - imageID: - description: | - Amazon Machine Image (AMI) identifier to use as a base for - the EC2 instance of this master node. - type: string - instanceType: - description: | - Name of the AWS EC2 instance type to use for this master node. - type: string - type: object - type: array - type: object - cluster: - description: | - Cluster configuration parts that are not meant to be specific to AWS - and thus might look similar or identical on other providers. - properties: - calico: - description: | - Configuration for the Project Calico Container Network Interface - (CNI). - properties: - cidr: - description: | - Subnet size, expresses as the count of leading 1 bits in the subnet - mask of this subnet. In other words, in CIDR notation, the integer - behind the slash. - type: int - mtu: - description: | - Size of the maximum transition unit (MTU) in bytes. - type: int - subnet: - description: | - Subnet IPv4 address. In other words, in CIDR notation, the - part before the slash. - type: string - type: object - customer: - description: | - Information on the Giant Swarm customer owning the - tenant cluster. - properties: - id: - description: | - Unique customer identifier. - type: string - type: object - docker: - description: | - Configuration for Docker. - properties: - daemon: - description: | - Configuration for the Docker daemon. - properties: - cidr: - description: | - CIDR notation for the subnet to use for Docker - networking. - type: string - type: object - type: object - etcd: - description: | - Configuration for Etcd. - properties: - altNames: - description: TODO - type: string - domain: - description: | - Domain name to use for Etcd. - type: string - port: - description: | - Port number Etcd is listening on. - type: int - prefix: - description: | - Prefix to prepend to all Etcd keys. - type: string - type: object - id: - description: | - Cluster identifier, unique within the installation. - The identifier is expected to be exactly 5 characters - long, with characters from the range a-z and 0-9. - type: string - kubernetes: - description: | - Various Kubernetes configuration items. - properties: - api: - description: | - Configuration for the Kubernetes api-server. - properties: - clusterIPRange: - description: | - IP range to use for ClusterIP, in CIDR notation. - type: string - domain: - description: | - Fully qualified host name of the API server. - type: string - securePort: - description: | - Port number for HTTPS access to the API. - type: int - type: object - cloudProvider: - description: Name of the cloud provider. Must be 'aws'. - type: string - dns: - description: DNS configuration. - properties: - ip: - description: TODO - type: string - type: object - domain: - description: Domain name to use internally within the cluster. - type: string - ingressController: - description: | - Configuration of the Ingress Controller. - properties: - docker: - description: Ingress Controller Docker configuration. - properties: - image: - description: Docker image for the Ingress Controller. - type: string - type: object - domain: - description: | - Fully qualified host name the Ingress load balancer is listening on. - type: string - insecurePort: - description: TODO - type: int - securePort: - description: TODO - type: int - wildcardDomain: - description: TODO - type: string - type: object - kubelet: - description: TODO - properties: - altNames: - description: | - Alternative internal DNS names to access the API server. - type: string - domain: - description: | - DNS suffix to use for worker nodes. - type: string - labels: - description: TODO - type: string - port: - description: TODO - type: int - type: object - networkSetup: - description: TODO - properties: - docker: - description: TODO - properties: - image: - description: | - Docker image for setting up the network environment. - type: string - type: object - kubeProxy: - description: | - kubeProxy configuration. - properties: - conntrackMaxPerCore: - description: TODO - type: int - type: object - type: object - ssh: - description: | - SSH access configuration applied to master and worker nodes - of the tenant cluster. - properties: - userList: - description: | - List of SSH users with access to the nodes. - items: - description: | - An individual SSH user with access. - properties: - name: - description: | - Posix username to assign to the user logging in with - the given SSH public key. - type: string - publicKey: - description: | - SSH public key in Base64 encoding. - type: string - type: object - type: array - type: object - type: object - masters: - description: | - Configuration of master nodes. - items: - description: TODO - properties: - id: - description: TODO - type: string - type: object - type: array - scaling: - description: | - Configuration of worker node scaling. The cluster-autoscaler - sets the actual number of worker nodes in the cluster based - on the 'min' and 'max' value. - properties: - max: - description: | - Maximum amount of worker nodes. Upper limit of the - autoscaling range. - type: int - min: - description: | - Minimum amount of worker nodes. Lower limit of the - autoscaling range. - type: int - type: object - version: - description: TODO - type: string - workers: - description: | - List of worker nodes with configuration. - items: - description: | - Configuration of an individual worker node. - properties: - id: - description: | - Unique identifier of the worker node. - type: string - type: object - type: array - type: object - versionBundle: - description: TODO - properties: - version: - description: TODO - type: string - type: object - type: object - type: object - served: true - storage: true - subresources: - status: {} diff --git a/docs/crd/provider.giantswarm.io_awsconfigs.yaml b/docs/crd/provider.giantswarm.io_awsconfigs.yaml new file mode 100644 index 000000000..0bc39fee1 --- /dev/null +++ b/docs/crd/provider.giantswarm.io_awsconfigs.yaml @@ -0,0 +1,687 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: awsconfigs.provider.giantswarm.io +spec: + group: provider.giantswarm.io + names: + kind: AWSConfig + listKind: AWSConfigList + plural: awsconfigs + singular: awsconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + aws: + properties: + api: + description: AWSConfigSpecAWSAPI deprecated since aws-operator v12 + resources. + properties: + elb: + description: AWSConfigSpecAWSAPIELB deprecated since aws-operator + v12 resources. + properties: + idleTimeoutSeconds: + type: integer + required: + - idleTimeoutSeconds + type: object + hostedZones: + type: string + required: + - elb + - hostedZones + type: object + availabilityZones: + description: "AvailabilityZones is the number of AWS availability + zones used to spread the tenant cluster's worker nodes across. + There are limitations on availability zone settings due to binary + IP range splitting and provider specific region capabilities. + When for instance choosing 3 availability zones, the configured + IP range will be split into 4 ranges and thus one of it will not + be able to be utilized. Such limitations have to be considered + when designing the network topology and configuring tenant cluster + HA via AvailabilityZones. \n The selection and usage of the actual + availability zones for the created tenant cluster is randomized. + In case there are 4 availability zones provided in the used region + and the user selects 2 availability zones, the actually used availability + zones in which tenant cluster workload is put into will tend to + be different across tenant cluster creations. This is done in + order to provide more HA during single availability zone failures. + In case a specific availability zone fails, not all tenant clusters + will be affected due to the described selection process." + type: integer + az: + description: "TODO remove the deprecated AZ field due to AvailabilityZones. + \n https://github.com/giantswarm/giantswarm/issues/4507" + type: string + credentialSecret: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + etcd: + description: AWSConfigSpecAWSEtcd deprecated since aws-operator + v12 resources. + properties: + elb: + description: AWSConfigSpecAWSEtcdELB deprecated since aws-operator + v12 resources. + properties: + idleTimeoutSeconds: + type: integer + required: + - idleTimeoutSeconds + type: object + hostedZones: + type: string + required: + - elb + - hostedZones + type: object + hostedZones: + description: "HostedZones is AWS hosted zones names in the host + cluster account. For each zone there will be \"CLUSTER_ID.k8s\" + NS record created in the host cluster account. Then for each created + NS record there will be a zone created in the guest account. After + that component specific records under those zones: \t- api.CLUSTER_ID.k8s.{{ + .Spec.AWS.HostedZones.API.Name }} \t- etcd.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Etcd.Name + }} \t- ingress.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Ingress.Name + }} \t- *.CLUSTER_ID.k8s.{{ .Spec.AWS.HostedZones.Ingress.Name + }}" + properties: + api: + properties: + name: + type: string + required: + - name + type: object + etcd: + properties: + name: + type: string + required: + - name + type: object + ingress: + properties: + name: + type: string + required: + - name + type: object + required: + - api + - etcd + - ingress + type: object + ingress: + description: AWSConfigSpecAWSIngress deprecated since aws-operator + v12 resources. + properties: + elb: + description: AWSConfigSpecAWSIngressELB deprecated since aws-operator + v12 resources. + properties: + idleTimeoutSeconds: + type: integer + required: + - idleTimeoutSeconds + type: object + hostedZones: + type: string + required: + - elb + - hostedZones + type: object + masters: + items: + properties: + dockerVolumeSizeGB: + type: integer + imageID: + type: string + instanceType: + type: string + required: + - dockerVolumeSizeGB + - imageID + - instanceType + type: object + type: array + region: + type: string + vpc: + properties: + cidr: + type: string + peerId: + type: string + privateSubnetCidr: + type: string + publicSubnetCidr: + type: string + routeTableNames: + items: + type: string + type: array + required: + - cidr + - peerId + - privateSubnetCidr + - publicSubnetCidr + - routeTableNames + type: object + workers: + items: + properties: + dockerVolumeSizeGB: + type: integer + imageID: + type: string + instanceType: + type: string + required: + - dockerVolumeSizeGB + - imageID + - instanceType + type: object + type: array + required: + - api + - availabilityZones + - az + - credentialSecret + - etcd + - hostedZones + - ingress + - masters + - region + - vpc + - workers + type: object + cluster: + properties: + calico: + properties: + cidr: + type: integer + mtu: + type: integer + subnet: + type: string + required: + - cidr + - mtu + - subnet + type: object + customer: + properties: + id: + type: string + required: + - id + type: object + docker: + properties: + daemon: + properties: + cidr: + type: string + required: + - cidr + type: object + required: + - daemon + type: object + etcd: + properties: + altNames: + type: string + domain: + type: string + port: + type: integer + prefix: + type: string + required: + - altNames + - domain + - port + - prefix + type: object + id: + type: string + kubernetes: + properties: + api: + properties: + clusterIPRange: + type: string + domain: + type: string + securePort: + type: integer + required: + - clusterIPRange + - domain + - securePort + type: object + cloudProvider: + type: string + dns: + properties: + ip: + description: "An IP is a single IP address, a slice of bytes. + Functions in this package accept either 4-byte (IPv4) + or 16-byte (IPv6) slices as input. \n Note that in this + documentation, referring to an IP address as an IPv4 address + or an IPv6 address is a semantic property of the address, + not just the length of the byte slice: a 16-byte slice + can still be an IPv4 address." + format: byte + type: string + required: + - ip + type: object + domain: + type: string + ingressController: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + domain: + type: string + insecurePort: + type: integer + securePort: + type: integer + wildcardDomain: + type: string + required: + - docker + - domain + - insecurePort + - securePort + - wildcardDomain + type: object + kubelet: + properties: + altNames: + type: string + domain: + type: string + labels: + type: string + port: + type: integer + required: + - altNames + - domain + - labels + - port + type: object + networkSetup: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + kubeProxy: + description: ClusterKubernetesNetworkSetupKubeProxy describes + values passed to the kube-proxy running in a tenant cluster. + properties: + conntrackMaxPerCore: + description: Maximum number of NAT connections to track + per CPU core (0 to leave the limit as-is and ignore + conntrack-min). Passed to kube-proxy as --conntrack-max-per-core. + type: integer + required: + - conntrackMaxPerCore + type: object + required: + - docker + - kubeProxy + type: object + ssh: + properties: + userList: + items: + properties: + name: + type: string + publicKey: + type: string + required: + - name + - publicKey + type: object + type: array + required: + - userList + type: object + required: + - api + - cloudProvider + - dns + - domain + - ingressController + - kubelet + - networkSetup + - ssh + type: object + masters: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + scaling: + properties: + max: + description: Max defines maximum number of worker nodes guest + cluster is allowed to have. + type: integer + min: + description: Min defines minimum number of worker nodes required + to be present in guest cluster. + type: integer + required: + - max + - min + type: object + version: + description: Version is DEPRECATED and should just be dropped. + type: string + workers: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + required: + - calico + - customer + - docker + - etcd + - id + - kubernetes + - masters + - scaling + - version + - workers + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - aws + - cluster + - versionBundle + type: object + status: + properties: + aws: + properties: + autoScalingGroup: + properties: + name: + type: string + required: + - name + type: object + availabilityZones: + items: + properties: + name: + type: string + subnet: + properties: + private: + properties: + cidr: + type: string + required: + - cidr + type: object + public: + properties: + cidr: + type: string + required: + - cidr + type: object + required: + - private + - public + type: object + required: + - name + - subnet + type: object + type: array + required: + - autoScalingGroup + - availabilityZones + type: object + cluster: + properties: + conditions: + description: Conditions is a list of status information expressing + the current conditional state of a guest cluster. This may reflect + the status of the guest cluster being updating or being up to + date. + items: + description: StatusClusterCondition expresses the conditions in + which a guest cluster may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be Creating, Created, Scaling, Scaled, + Draining, Drained, Updating, Updated, Deleting, Deleted. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + network: + description: StatusClusterNetwork expresses the network segment + that is allocated for a guest cluster. + properties: + cidr: + type: string + required: + - cidr + type: object + nodes: + description: Nodes is a list of guest cluster node information reflecting + the current state of the guest cluster nodes. + items: + description: StatusClusterNode holds information about a guest + cluster node. + properties: + labels: + additionalProperties: + type: string + description: Labels contains the kubernetes labels for corresponding + node. + type: object + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + name: + description: Name referrs to a tenant cluster node name. + type: string + version: + description: Version referrs to the version used by the node + as mandated by the provider operator. + type: string + required: + - lastTransitionTime + - name + - version + type: object + type: array + resources: + description: Resources is a list of arbitrary conditions of operatorkit + resource implementations. + items: + description: Resource is structure holding arbitrary conditions + of operatorkit resource implementations. Imagine an operator + implements an instance resource. This resource may operates + sequentially but has to operate based on a certain system state + it manages. So it tracks the status as needed here specific + to its own implementation and means in order to fulfil its premise. + properties: + conditions: + items: + description: StatusClusterResourceCondition expresses the + conditions in which an operatorkit resource may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the + condition transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be anything an operatorkit resource + may define. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + name: + type: string + required: + - conditions + - name + type: object + type: array + scaling: + description: StatusClusterScaling expresses the current status of + desired number of worker nodes in guest cluster. + properties: + desiredCapacity: + type: integer + required: + - desiredCapacity + type: object + versions: + description: Versions is a list that acts like a historical track + record of versions a guest cluster went through. A version is + only added to the list as soon as the guest cluster successfully + migrated to the version added here. + items: + description: StatusClusterVersion expresses the versions in which + a guest cluster was and may still be. + properties: + date: + description: "TODO date is deprecated due to LastTransitionTime + This can be removed ones the new properties are properly + used in all tenant clusters. \n https://github.com/giantswarm/giantswarm/issues/3988" + format: date-time + type: string + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + semver: + description: Semver is some semver version, e.g. 1.0.0. + type: string + required: + - date + - lastTransitionTime + - semver + type: object + type: array + required: + - conditions + - network + - nodes + - resources + - scaling + - versions + type: object + required: + - aws + - cluster + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/provider.giantswarm.io_azureconfigs.yaml b/docs/crd/provider.giantswarm.io_azureconfigs.yaml new file mode 100644 index 000000000..03632f0a9 --- /dev/null +++ b/docs/crd/provider.giantswarm.io_azureconfigs.yaml @@ -0,0 +1,610 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: azureconfigs.provider.giantswarm.io +spec: + group: provider.giantswarm.io + names: + kind: AzureConfig + listKind: AzureConfigList + plural: azureconfigs + singular: azureconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + azure: + properties: + availabilityZones: + items: + type: integer + type: array + credentialSecret: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + dnsZones: + description: AzureConfigSpecAzureDNSZones contains the DNS Zones + of the cluster. + properties: + api: + description: API is the DNS Zone for the Kubernetes API. + properties: + name: + description: Name is the name of the zone. + type: string + resourceGroup: + description: ResourceGroup is the resource group of the + zone. + type: string + required: + - name + - resourceGroup + type: object + etcd: + description: Etcd is the DNS Zone for the etcd cluster. + properties: + name: + description: Name is the name of the zone. + type: string + resourceGroup: + description: ResourceGroup is the resource group of the + zone. + type: string + required: + - name + - resourceGroup + type: object + ingress: + description: Ingress is the DNS Zone for the Ingress resource, + used for customer traffic. + properties: + name: + description: Name is the name of the zone. + type: string + resourceGroup: + description: ResourceGroup is the resource group of the + zone. + type: string + required: + - name + - resourceGroup + type: object + required: + - api + - etcd + - ingress + type: object + masters: + items: + properties: + dockerVolumeSizeGB: + description: DockerVolumeSizeGB is the size of a volume mounted + to /var/lib/docker. + type: integer + kubeletVolumeSizeGB: + description: KubeletVolumeSizeGB is the size of a volume mounted + to /var/lib/kubelet. + type: integer + vmSize: + description: VMSize is the master vm size (e.g. Standard_A1) + type: string + required: + - dockerVolumeSizeGB + - kubeletVolumeSizeGB + - vmSize + type: object + type: array + virtualNetwork: + properties: + calicoSubnetCIDR: + description: CalicoSubnetCIDR is the CIDR for the calico subnet. + It has to be also a worker subnet (Azure limitation). + type: string + cidr: + description: CIDR is the CIDR for the Virtual Network. + type: string + masterSubnetCIDR: + description: "TODO: remove Master, Worker and Calico subnet + cidr after azure-operator v2 is deleted. MasterSubnetCIDR + is the CIDR for the master subnet. \n https://github.com/giantswarm/giantswarm/issues/4358" + type: string + workerSubnetCIDR: + description: WorkerSubnetCIDR is the CIDR for the worker subnet. + type: string + required: + - calicoSubnetCIDR + - cidr + - masterSubnetCIDR + - workerSubnetCIDR + type: object + workers: + items: + properties: + dockerVolumeSizeGB: + description: DockerVolumeSizeGB is the size of a volume mounted + to /var/lib/docker. + type: integer + kubeletVolumeSizeGB: + description: KubeletVolumeSizeGB is the size of a volume mounted + to /var/lib/kubelet. + type: integer + vmSize: + description: VMSize is the master vm size (e.g. Standard_A1) + type: string + required: + - dockerVolumeSizeGB + - kubeletVolumeSizeGB + - vmSize + type: object + type: array + required: + - availabilityZones + - credentialSecret + - dnsZones + - masters + - virtualNetwork + - workers + type: object + cluster: + properties: + calico: + properties: + cidr: + type: integer + mtu: + type: integer + subnet: + type: string + required: + - cidr + - mtu + - subnet + type: object + customer: + properties: + id: + type: string + required: + - id + type: object + docker: + properties: + daemon: + properties: + cidr: + type: string + required: + - cidr + type: object + required: + - daemon + type: object + etcd: + properties: + altNames: + type: string + domain: + type: string + port: + type: integer + prefix: + type: string + required: + - altNames + - domain + - port + - prefix + type: object + id: + type: string + kubernetes: + properties: + api: + properties: + clusterIPRange: + type: string + domain: + type: string + securePort: + type: integer + required: + - clusterIPRange + - domain + - securePort + type: object + cloudProvider: + type: string + dns: + properties: + ip: + description: "An IP is a single IP address, a slice of bytes. + Functions in this package accept either 4-byte (IPv4) + or 16-byte (IPv6) slices as input. \n Note that in this + documentation, referring to an IP address as an IPv4 address + or an IPv6 address is a semantic property of the address, + not just the length of the byte slice: a 16-byte slice + can still be an IPv4 address." + format: byte + type: string + required: + - ip + type: object + domain: + type: string + ingressController: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + domain: + type: string + insecurePort: + type: integer + securePort: + type: integer + wildcardDomain: + type: string + required: + - docker + - domain + - insecurePort + - securePort + - wildcardDomain + type: object + kubelet: + properties: + altNames: + type: string + domain: + type: string + labels: + type: string + port: + type: integer + required: + - altNames + - domain + - labels + - port + type: object + networkSetup: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + kubeProxy: + description: ClusterKubernetesNetworkSetupKubeProxy describes + values passed to the kube-proxy running in a tenant cluster. + properties: + conntrackMaxPerCore: + description: Maximum number of NAT connections to track + per CPU core (0 to leave the limit as-is and ignore + conntrack-min). Passed to kube-proxy as --conntrack-max-per-core. + type: integer + required: + - conntrackMaxPerCore + type: object + required: + - docker + - kubeProxy + type: object + ssh: + properties: + userList: + items: + properties: + name: + type: string + publicKey: + type: string + required: + - name + - publicKey + type: object + type: array + required: + - userList + type: object + required: + - api + - cloudProvider + - dns + - domain + - ingressController + - kubelet + - networkSetup + - ssh + type: object + masters: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + scaling: + properties: + max: + description: Max defines maximum number of worker nodes guest + cluster is allowed to have. + type: integer + min: + description: Min defines minimum number of worker nodes required + to be present in guest cluster. + type: integer + required: + - max + - min + type: object + version: + description: Version is DEPRECATED and should just be dropped. + type: string + workers: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + required: + - calico + - customer + - docker + - etcd + - id + - kubernetes + - masters + - scaling + - version + - workers + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - azure + - cluster + - versionBundle + type: object + status: + properties: + cluster: + properties: + conditions: + description: Conditions is a list of status information expressing + the current conditional state of a guest cluster. This may reflect + the status of the guest cluster being updating or being up to + date. + items: + description: StatusClusterCondition expresses the conditions in + which a guest cluster may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be Creating, Created, Scaling, Scaled, + Draining, Drained, Updating, Updated, Deleting, Deleted. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + network: + description: StatusClusterNetwork expresses the network segment + that is allocated for a guest cluster. + properties: + cidr: + type: string + required: + - cidr + type: object + nodes: + description: Nodes is a list of guest cluster node information reflecting + the current state of the guest cluster nodes. + items: + description: StatusClusterNode holds information about a guest + cluster node. + properties: + labels: + additionalProperties: + type: string + description: Labels contains the kubernetes labels for corresponding + node. + type: object + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + name: + description: Name referrs to a tenant cluster node name. + type: string + version: + description: Version referrs to the version used by the node + as mandated by the provider operator. + type: string + required: + - lastTransitionTime + - name + - version + type: object + type: array + resources: + description: Resources is a list of arbitrary conditions of operatorkit + resource implementations. + items: + description: Resource is structure holding arbitrary conditions + of operatorkit resource implementations. Imagine an operator + implements an instance resource. This resource may operates + sequentially but has to operate based on a certain system state + it manages. So it tracks the status as needed here specific + to its own implementation and means in order to fulfil its premise. + properties: + conditions: + items: + description: StatusClusterResourceCondition expresses the + conditions in which an operatorkit resource may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the + condition transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be anything an operatorkit resource + may define. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + name: + type: string + required: + - conditions + - name + type: object + type: array + scaling: + description: StatusClusterScaling expresses the current status of + desired number of worker nodes in guest cluster. + properties: + desiredCapacity: + type: integer + required: + - desiredCapacity + type: object + versions: + description: Versions is a list that acts like a historical track + record of versions a guest cluster went through. A version is + only added to the list as soon as the guest cluster successfully + migrated to the version added here. + items: + description: StatusClusterVersion expresses the versions in which + a guest cluster was and may still be. + properties: + date: + description: "TODO date is deprecated due to LastTransitionTime + This can be removed ones the new properties are properly + used in all tenant clusters. \n https://github.com/giantswarm/giantswarm/issues/3988" + format: date-time + type: string + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + semver: + description: Semver is some semver version, e.g. 1.0.0. + type: string + required: + - date + - lastTransitionTime + - semver + type: object + type: array + required: + - conditions + - network + - nodes + - resources + - scaling + - versions + type: object + provider: + properties: + availabilityZones: + items: + type: integer + type: array + ingress: + properties: + loadBalancer: + properties: + publicIPName: + type: string + required: + - publicIPName + type: object + required: + - loadBalancer + type: object + required: + - availabilityZones + - ingress + type: object + required: + - cluster + - provider + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/provider.giantswarm.io_kvmconfigs.yaml b/docs/crd/provider.giantswarm.io_kvmconfigs.yaml new file mode 100644 index 000000000..c19e41313 --- /dev/null +++ b/docs/crd/provider.giantswarm.io_kvmconfigs.yaml @@ -0,0 +1,575 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: kvmconfigs.provider.giantswarm.io +spec: + group: provider.giantswarm.io + names: + kind: KVMConfig + listKind: KVMConfigList + plural: kvmconfigs + singular: kvmconfig + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + cluster: + properties: + calico: + properties: + cidr: + type: integer + mtu: + type: integer + subnet: + type: string + required: + - cidr + - mtu + - subnet + type: object + customer: + properties: + id: + type: string + required: + - id + type: object + docker: + properties: + daemon: + properties: + cidr: + type: string + required: + - cidr + type: object + required: + - daemon + type: object + etcd: + properties: + altNames: + type: string + domain: + type: string + port: + type: integer + prefix: + type: string + required: + - altNames + - domain + - port + - prefix + type: object + id: + type: string + kubernetes: + properties: + api: + properties: + clusterIPRange: + type: string + domain: + type: string + securePort: + type: integer + required: + - clusterIPRange + - domain + - securePort + type: object + cloudProvider: + type: string + dns: + properties: + ip: + description: "An IP is a single IP address, a slice of bytes. + Functions in this package accept either 4-byte (IPv4) + or 16-byte (IPv6) slices as input. \n Note that in this + documentation, referring to an IP address as an IPv4 address + or an IPv6 address is a semantic property of the address, + not just the length of the byte slice: a 16-byte slice + can still be an IPv4 address." + format: byte + type: string + required: + - ip + type: object + domain: + type: string + ingressController: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + domain: + type: string + insecurePort: + type: integer + securePort: + type: integer + wildcardDomain: + type: string + required: + - docker + - domain + - insecurePort + - securePort + - wildcardDomain + type: object + kubelet: + properties: + altNames: + type: string + domain: + type: string + labels: + type: string + port: + type: integer + required: + - altNames + - domain + - labels + - port + type: object + networkSetup: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + kubeProxy: + description: ClusterKubernetesNetworkSetupKubeProxy describes + values passed to the kube-proxy running in a tenant cluster. + properties: + conntrackMaxPerCore: + description: Maximum number of NAT connections to track + per CPU core (0 to leave the limit as-is and ignore + conntrack-min). Passed to kube-proxy as --conntrack-max-per-core. + type: integer + required: + - conntrackMaxPerCore + type: object + required: + - docker + - kubeProxy + type: object + ssh: + properties: + userList: + items: + properties: + name: + type: string + publicKey: + type: string + required: + - name + - publicKey + type: object + type: array + required: + - userList + type: object + required: + - api + - cloudProvider + - dns + - domain + - ingressController + - kubelet + - networkSetup + - ssh + type: object + masters: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + scaling: + properties: + max: + description: Max defines maximum number of worker nodes guest + cluster is allowed to have. + type: integer + min: + description: Min defines minimum number of worker nodes required + to be present in guest cluster. + type: integer + required: + - max + - min + type: object + version: + description: Version is DEPRECATED and should just be dropped. + type: string + workers: + items: + properties: + id: + type: string + required: + - id + type: object + type: array + required: + - calico + - customer + - docker + - etcd + - id + - kubernetes + - masters + - scaling + - version + - workers + type: object + kvm: + properties: + endpointUpdater: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + required: + - docker + type: object + k8sKVM: + properties: + docker: + properties: + image: + type: string + required: + - image + type: object + storageType: + type: string + required: + - docker + - storageType + type: object + masters: + items: + properties: + cpus: + type: integer + disk: + type: number + dockerVolumeSizeGB: + type: integer + memory: + type: string + required: + - cpus + - disk + - dockerVolumeSizeGB + - memory + type: object + type: array + network: + properties: + flannel: + properties: + vni: + type: integer + required: + - vni + type: object + required: + - flannel + type: object + nodeController: + description: NOTE THIS IS DEPRECATED + properties: + docker: + description: NOTE THIS IS DEPRECATED + properties: + image: + type: string + required: + - image + type: object + required: + - docker + type: object + portMappings: + items: + properties: + name: + type: string + nodePort: + type: integer + targetPort: + type: integer + required: + - name + - nodePort + - targetPort + type: object + type: array + workers: + items: + properties: + cpus: + type: integer + disk: + type: number + dockerVolumeSizeGB: + type: integer + memory: + type: string + required: + - cpus + - disk + - dockerVolumeSizeGB + - memory + type: object + type: array + required: + - endpointUpdater + - k8sKVM + - masters + - network + - nodeController + - portMappings + - workers + type: object + versionBundle: + properties: + version: + type: string + required: + - version + type: object + required: + - cluster + - kvm + - versionBundle + type: object + status: + properties: + cluster: + properties: + conditions: + description: Conditions is a list of status information expressing + the current conditional state of a guest cluster. This may reflect + the status of the guest cluster being updating or being up to + date. + items: + description: StatusClusterCondition expresses the conditions in + which a guest cluster may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be Creating, Created, Scaling, Scaled, + Draining, Drained, Updating, Updated, Deleting, Deleted. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + network: + description: StatusClusterNetwork expresses the network segment + that is allocated for a guest cluster. + properties: + cidr: + type: string + required: + - cidr + type: object + nodes: + description: Nodes is a list of guest cluster node information reflecting + the current state of the guest cluster nodes. + items: + description: StatusClusterNode holds information about a guest + cluster node. + properties: + labels: + additionalProperties: + type: string + description: Labels contains the kubernetes labels for corresponding + node. + type: object + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + name: + description: Name referrs to a tenant cluster node name. + type: string + version: + description: Version referrs to the version used by the node + as mandated by the provider operator. + type: string + required: + - lastTransitionTime + - name + - version + type: object + type: array + resources: + description: Resources is a list of arbitrary conditions of operatorkit + resource implementations. + items: + description: Resource is structure holding arbitrary conditions + of operatorkit resource implementations. Imagine an operator + implements an instance resource. This resource may operates + sequentially but has to operate based on a certain system state + it manages. So it tracks the status as needed here specific + to its own implementation and means in order to fulfil its premise. + properties: + conditions: + items: + description: StatusClusterResourceCondition expresses the + conditions in which an operatorkit resource may is. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the + condition transitioned from one status to another. + format: date-time + type: string + status: + description: Status may be True, False or Unknown. + type: string + type: + description: Type may be anything an operatorkit resource + may define. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + name: + type: string + required: + - conditions + - name + type: object + type: array + scaling: + description: StatusClusterScaling expresses the current status of + desired number of worker nodes in guest cluster. + properties: + desiredCapacity: + type: integer + required: + - desiredCapacity + type: object + versions: + description: Versions is a list that acts like a historical track + record of versions a guest cluster went through. A version is + only added to the list as soon as the guest cluster successfully + migrated to the version added here. + items: + description: StatusClusterVersion expresses the versions in which + a guest cluster was and may still be. + properties: + date: + description: "TODO date is deprecated due to LastTransitionTime + This can be removed ones the new properties are properly + used in all tenant clusters. \n https://github.com/giantswarm/giantswarm/issues/3988" + format: date-time + type: string + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. + format: date-time + type: string + semver: + description: Semver is some semver version, e.g. 1.0.0. + type: string + required: + - date + - lastTransitionTime + - semver + type: object + type: array + required: + - conditions + - network + - nodes + - resources + - scaling + - versions + type: object + kvm: + properties: + nodeIndexes: + additionalProperties: + type: integer + description: NodeIndexes is a map from nodeID -> nodeIndex. This + is used to create deterministic iSCSI initiator names. + type: object + required: + - nodeIndexes + type: object + required: + - cluster + - kvm + type: object + required: + - metadata + - spec + - status + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/release.giantswarm.io_release.yaml b/docs/crd/release.giantswarm.io_release.yaml deleted file mode 100644 index afc44e80a..000000000 --- a/docs/crd/release.giantswarm.io_release.yaml +++ /dev/null @@ -1,120 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: releases.release.giantswarm.io -spec: - additionalPrinterColumns: - - JSONPath: .spec.components[?(@.name=="kubernetes")].version - description: Version of the kubernetes component in this release - name: Kubernetes version - type: string - - JSONPath: .spec.state - description: State of the release - name: State - type: string - - JSONPath: .spec.date - description: Time since release creation - name: Age - type: date - group: release.giantswarm.io - names: - kind: Release - plural: releases - shortNames: - - rel - singular: release - preserveUnknownFields: false - scope: Cluster - validation: - openAPIV3Schema: - description: | - A Release holds information about a particular version of the Giant Swarm platform which - can be used as a target for creation or upgrade of a cluster. It is a tested package - comprising a particular Kubernetes version along with compatible Giant Swarm operators, - monitoring, and default apps. - properties: - metadata: - properties: - name: - pattern: ^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$ - type: string - type: object - spec: - description: | - Spec holds the data defining the desired state of a release. - properties: - apps: - description: | - Apps is a list of Giant Swarm-managed apps which will be installed by default - on clusters created with this release version. - items: - properties: - componentVersion: - description: | - Component version is the upstream version of this app. It may be empty if this - is a Giant Swarm developed app. - pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ - type: string - name: - description: | - Name is the name of the app. - minLength: 1 - type: string - version: - description: | - Version is the internal version of the app managed by Giant Swarm. Because apps - may be released without upstream changes, this will generally differ from the - component version. - pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ - type: string - required: - - name - - version - type: object - type: array - components: - description: | - Components is a list of internal and upstream components making up the core of the cluster. - items: - properties: - name: - description: | - Name is the name of the component. - minLength: 1 - type: string - version: - description: | - Version is the semantic version of the component. - pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ - type: string - required: - - name - - version - type: object - minItems: 1 - type: array - date: - format: date-time - type: string - state: - description: | - State indicates how this release should be used. "wip" means the release is a work - in progress. "deprecated" means old clusters using this version will continue to function - but new clusters should use a more recent release. "active" means this is a current - supported release. - pattern: ^(active|deprecated|wip)$ - type: string - required: - - components - - apps - - state - - date - type: object - required: - - metadata - type: object - versions: - - name: v1alpha1 - served: true - storage: true diff --git a/docs/crd/release.giantswarm.io_releasecycles.yaml b/docs/crd/release.giantswarm.io_releasecycles.yaml new file mode 100644 index 000000000..bdfd852cc --- /dev/null +++ b/docs/crd/release.giantswarm.io_releasecycles.yaml @@ -0,0 +1,68 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: releasecycles.release.giantswarm.io +spec: + group: release.giantswarm.io + names: + kind: ReleaseCycle + listKind: ReleaseCycleList + plural: releasecycles + singular: releasecycle + scope: Namespaced + validation: + openAPIV3Schema: + 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: + properties: + disabledDate: + description: DisabledDate is the date of the cycle phase being changed + to "disabled". + format: date-time + type: string + enabledDate: + description: EnabledDate is the date of the cycle phase being changed + to "enabled". + format: date-time + type: string + phase: + description: 'Phase is the release phase. It can be one of: "upcoming", + "enabled", "disabled", "eol".' + type: string + required: + - phase + type: object + status: + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/docs/crd/release.giantswarm.io_releases.yaml b/docs/crd/release.giantswarm.io_releases.yaml new file mode 100644 index 000000000..55b405356 --- /dev/null +++ b/docs/crd/release.giantswarm.io_releases.yaml @@ -0,0 +1,98 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 + creationTimestamp: null + name: releases.release.giantswarm.io +spec: + group: release.giantswarm.io + names: + kind: Release + listKind: ReleaseList + plural: releases + singular: release + scope: Namespaced + validation: + openAPIV3Schema: + description: "Release is a Kubernetes resource (CR) which is based on the Release + CRD defined above. \n An example Release resource can be viewed here https://github.com/giantswarm/apiextensions/blob/master/docs/cr/release.giantswarm.io_v1alpha1_release.yaml" + 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: + properties: + apps: + description: Apps describes apps used in this release. + items: + properties: + componentVersion: + description: Version of the upstream component used in the app. + type: string + name: + description: Name of the app. + type: string + version: + description: Version of the app. + type: string + required: + - name + - version + type: object + type: array + components: + description: Components describes components used in this release. + items: + properties: + name: + description: Name of the component. + type: string + version: + description: Version of the component. + type: string + required: + - name + - version + type: object + type: array + date: + description: Date that the release became active. + format: date-time + type: string + state: + description: 'State indicates the availability of the release: deprecated, + active, or wip.' + type: string + required: + - apps + - components + - date + - state + type: object + required: + - metadata + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/go.mod b/go.mod index b3af85865..68cd625f9 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,16 @@ module github.com/giantswarm/apiextensions -go 1.13 +go 1.14 require ( github.com/go-openapi/errors v0.19.4 github.com/google/go-cmp v0.4.0 - golang.org/x/tools v0.0.0-20200415034506-5d8e1897c761 // indirect + golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect + golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect k8s.io/api v0.16.6 k8s.io/apiextensions-apiserver v0.16.6 k8s.io/apimachinery v0.16.6 k8s.io/client-go v0.16.6 - k8s.io/code-generator v0.16.6 sigs.k8s.io/cluster-api v0.2.10 sigs.k8s.io/yaml v1.2.0 ) - -replace golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 diff --git a/go.sum b/go.sum index 45113fdde..c2ffa527c 100644 --- a/go.sum +++ b/go.sum @@ -321,6 +321,8 @@ golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= @@ -348,6 +350,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -384,8 +388,20 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= -golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -450,7 +466,6 @@ k8s.io/client-go v0.0.0-20190918200256-06eb1244587a/go.mod h1:3YAcTbI2ArBRmhHns5 k8s.io/client-go v0.16.6 h1:OR6ZaSlIn9dUdpiN4r5mAvMv5aCupUJUiDJZdrrvmhw= k8s.io/client-go v0.16.6/go.mod h1:xIQ44uaAH4SD1EHMtCHsB9By7D0qblbv1ADeGyXpZUQ= k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b/go.mod h1:G8bQwmHm2eafm5bgtX67XDZQ8CWKSGu9DekI+yN4Y5I= -k8s.io/code-generator v0.16.6 h1:wykZVkEDQd/BcOZxcQMEW6uFgoM4ZmvjIhxkbmEJ3WA= k8s.io/code-generator v0.16.6/go.mod h1:2aiDuxDU7RQK2PVypXAXHo6+YwOlF33iezHQbSmKSA4= k8s.io/component-base v0.0.0-20190918200425-ed2f0867c778/go.mod h1:DFWQCXgXVLiWtzFaS17KxHdlUeUymP7FLxZSkmL9/jU= k8s.io/component-base v0.16.6/go.mod h1:8+4lrSEgLQ9wqOzHVYx4GLSCU6sus8wqg8bfaTdXTwg= diff --git a/pkg/apis/application/v1alpha1/app_catalog_types.go b/pkg/apis/application/v1alpha1/app_catalog_types.go index 86727b125..c0cf7a84d 100644 --- a/pkg/apis/application/v1alpha1/app_catalog_types.go +++ b/pkg/apis/application/v1alpha1/app_catalog_types.go @@ -115,21 +115,6 @@ func init() { } // NewAppCatalogCRD returns a new custom resource definition for AppCatalog. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: appcatalog.application.giantswarm.io -// spec: -// group: application.giantswarm.io -// scope: Cluster -// version: v1alpha1 -// names: -// kind: AppCatalog -// plural: appcatalogs -// singular: appcatalog -// func NewAppCatalogCRD() *apiextensionsv1beta1.CustomResourceDefinition { return appCatalogCRD.DeepCopy() } @@ -157,30 +142,6 @@ func NewAppCatalogCR() *AppCatalog { // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// AppCatalog CRs might look something like the following. -// -// apiVersion: application.giantswarm.io/v1alpha1 -// kind: AppCatalog -// metadata: -// name: "giantswarm" -// labels: -// app-operator.giantswarm.io/version: "1.0.0" -// -// spec: -// title: "Giant Swarm" -// description: "Catalog of Apps by Giant Swarm" -// config: -// configMap: -// name: "app-catalog-values" -// namespace: "giantswarm" -// secret: -// name: "app-catalog-secrets" -// namespace: "giantswarm" -// logoURL: "/images/repo_icons/incubator.png" -// storage: -// type: "helm" -// URL: "https://giantswarm.github.com/app-catalog/" -// type AppCatalog struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata"` diff --git a/pkg/apis/application/v1alpha1/app_catalog_types_test.go b/pkg/apis/application/v1alpha1/app_catalog_types_test.go index 2712fa6e9..61512b645 100644 --- a/pkg/apis/application/v1alpha1/app_catalog_types_test.go +++ b/pkg/apis/application/v1alpha1/app_catalog_types_test.go @@ -40,11 +40,6 @@ func Test_GenerateAppCatalogYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_appcatalog.yaml", group), - resource: NewAppCatalogCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_appcatalog.yaml", group, version), diff --git a/pkg/apis/application/v1alpha1/app_types.go b/pkg/apis/application/v1alpha1/app_types.go index 39099f62f..4e053de95 100644 --- a/pkg/apis/application/v1alpha1/app_types.go +++ b/pkg/apis/application/v1alpha1/app_types.go @@ -176,21 +176,6 @@ func init() { } // NewAppCRD returns a new custom resource definition for App. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: apps.application.giantswarm.io -// spec: -// group: application.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: App -// plural: apps -// singular: app -// func NewAppCRD() *apiextensionsv1beta1.CustomResourceDefinition { return appCRD.DeepCopy() } @@ -217,46 +202,6 @@ func NewAppCR() *App { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// App CRs might look something like the following. -// -// apiVersion: application.giantswarm.io/v1alpha1 -// kind: App -// metadata: -// name: "prometheus" -// labels: -// app-operator.giantswarm.io/version: "1.0.0" -// -// spec: -// catalog: "giantswarm" -// name: "prometheus" -// namespace: "monitoring" -// version: "1.0.0" -// config: -// configMap: -// name: "prometheus-values" -// namespace: "monitoring" -// secret: -// name: "prometheus-secrets" -// namespace: "monitoring" -// kubeConfig: -// inCluster: false -// context: -// name: "giantswarm-12345" -// secret: -// name: "giantswarm-12345" -// namespace: "giantswarm" -// userConfig: -// configMap: -// name: "prometheus-user-values" -// namespace: "monitoring" -// -// status: -// appVersion: "2.4.3" # Optional value from Chart.yaml with the version of the deployed app. -// release: -// lastDeployed: "2018-11-30T21:06:20Z" -// status: "DEPLOYED" -// version: "1.1.0" # Required value from Chart.yaml with the version of the chart. -// type App struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata"` diff --git a/pkg/apis/application/v1alpha1/app_types_test.go b/pkg/apis/application/v1alpha1/app_types_test.go index 3e327dc43..c4bbe79f5 100644 --- a/pkg/apis/application/v1alpha1/app_types_test.go +++ b/pkg/apis/application/v1alpha1/app_types_test.go @@ -29,11 +29,6 @@ func Test_GenerateAppYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_app.yaml", group), - resource: NewAppCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_app.yaml", group, version), diff --git a/pkg/apis/application/v1alpha1/chart_types.go b/pkg/apis/application/v1alpha1/chart_types.go index 5eb907c32..e25a2865e 100644 --- a/pkg/apis/application/v1alpha1/chart_types.go +++ b/pkg/apis/application/v1alpha1/chart_types.go @@ -111,21 +111,6 @@ func init() { } // NewChartCRD returns a new custom resource definition for Chart. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: charts.application.giantswarm.io -// spec: -// group: application.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: Chart -// plural: charts -// singular: chart -// func NewChartCRD() *apiextensionsv1beta1.CustomResourceDefinition { return chartCRD.DeepCopy() } @@ -152,37 +137,6 @@ func NewChartCR() *Chart { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// Chart CRs might look something like the following. -// -// apiVersion: application.giantswarm.io/v1alpha1 -// kind: Chart -// metadata: -// name: "prometheus" -// labels: -// chart-operator.giantswarm.io/version: "1.0.0" -// -// spec: -// name: "prometheus" -// namespace: "monitoring" -// config: -// configMap: -// name: "prometheus-values" -// namespace: "monitoring" -// resourceVersion: "" -// secret: -// name: "prometheus-secrets" -// namespace: "monitoring" -// resourceVersion: "" -// tarballURL: "https://giantswarm.github.com/app-catalog/prometheus-1-0-0.tgz" -// version: "1.0.0" -// -// status: -// appVersion: "2.4.3" # Optional value from Chart.yaml with the version of the deployed app. -// release: -// lastDeployed: "2018-11-30T21:06:20Z" -// status: "DEPLOYED" -// version: "1.1.0" # Required value from Chart.yaml with the version of the chart. -// type Chart struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata"` diff --git a/pkg/apis/core/v1alpha1/aws_cluster_types.go b/pkg/apis/core/v1alpha1/aws_cluster_types.go index 77265ff39..82d57ecc3 100644 --- a/pkg/apis/core/v1alpha1/aws_cluster_types.go +++ b/pkg/apis/core/v1alpha1/aws_cluster_types.go @@ -6,21 +6,7 @@ import ( ) // NewAWSClusterConfigCRD returns a new custom resource definition for -// AWSClusterConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: awsclusterconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: AWSClusterConfig -// plural: awsclusterconfigs -// singular: awsclusterconfig -// +// AWSClusterConfig. func NewAWSClusterConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/azure_cluster_types.go b/pkg/apis/core/v1alpha1/azure_cluster_types.go index 15cfae77f..124af2144 100644 --- a/pkg/apis/core/v1alpha1/azure_cluster_types.go +++ b/pkg/apis/core/v1alpha1/azure_cluster_types.go @@ -6,21 +6,7 @@ import ( ) // NewAzureClusterConfigCRD returns a new custom resource definition for -// AzureClusterConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: azureclusterconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: AzureClusterConfig -// plural: azureclusterconfigs -// singular: azureclusterconfig -// +// AzureClusterConfig. func NewAzureClusterConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/cert_types_test.go b/pkg/apis/core/v1alpha1/cert_types_test.go index 6f813c85b..15aeac9c5 100644 --- a/pkg/apis/core/v1alpha1/cert_types_test.go +++ b/pkg/apis/core/v1alpha1/cert_types_test.go @@ -29,11 +29,6 @@ func Test_GenerateCertConfigYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_certconfig.yaml", group), - resource: NewCertConfigCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_certconfig.yaml", group, version), diff --git a/pkg/apis/core/v1alpha1/chart_types.go b/pkg/apis/core/v1alpha1/chart_types.go index 9f9630b4f..dd4979bbf 100644 --- a/pkg/apis/core/v1alpha1/chart_types.go +++ b/pkg/apis/core/v1alpha1/chart_types.go @@ -6,23 +6,6 @@ import ( ) // NewChartConfigCRD returns a new custom resource definition for ChartConfig. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: chartconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: ChartConfig -// plural: chartconfigs -// singular: chartconfig -// subresources: -// status: {} -// func NewChartConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/cluster_types.go b/pkg/apis/core/v1alpha1/cluster_types.go index 18d591a29..fcf963065 100644 --- a/pkg/apis/core/v1alpha1/cluster_types.go +++ b/pkg/apis/core/v1alpha1/cluster_types.go @@ -11,24 +11,7 @@ const ( kindCluster = "Cluster" ) -// NewClusterCRD returns a new custom resource definition for Cluster. This -// might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: clusters.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: Cluster -// plural: clusters -// singular: cluster -// subresources: -// status: {} -// +// NewClusterCRD returns a new custom resource definition for Cluster. func NewClusterCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/drainer_types.go b/pkg/apis/core/v1alpha1/drainer_types.go index 2df2ccaea..7850041cf 100644 --- a/pkg/apis/core/v1alpha1/drainer_types.go +++ b/pkg/apis/core/v1alpha1/drainer_types.go @@ -22,23 +22,7 @@ const ( ) // NewDrainerConfigCRD returns a new custom resource definition for -// DrainerConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: drainerconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: DrainerConfig -// plural: drainerconfigs -// singular: drainerconfig -// subresources: -// status: {} -// +// DrainerConfig. func NewDrainerConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/draughtsman_types.go b/pkg/apis/core/v1alpha1/draughtsman_types.go index 612bbf052..818500278 100644 --- a/pkg/apis/core/v1alpha1/draughtsman_types.go +++ b/pkg/apis/core/v1alpha1/draughtsman_types.go @@ -6,21 +6,7 @@ import ( ) // NewDraughtsmanConfigCRD returns a new custom resource definition for -// DraughtsmanConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: draughtsmanconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: DraughtsmanConfig -// plural: draughtsmanconfigs -// singular: draughtsmanconfig -// +// DraughtsmanConfig. func NewDraughtsmanConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/flannel_types.go b/pkg/apis/core/v1alpha1/flannel_types.go index e807065c7..490bdfda2 100644 --- a/pkg/apis/core/v1alpha1/flannel_types.go +++ b/pkg/apis/core/v1alpha1/flannel_types.go @@ -6,21 +6,7 @@ import ( ) // NewFlannelConfigCRD returns a new custom resource definition for -// FlannelConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: flannelconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: FlannelConfig -// plural: flannelconfigs -// singular: flannelconfig -// +// FlannelConfig. func NewFlannelConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/ignition_types_test.go b/pkg/apis/core/v1alpha1/ignition_types_test.go index 86348f128..de9051171 100644 --- a/pkg/apis/core/v1alpha1/ignition_types_test.go +++ b/pkg/apis/core/v1alpha1/ignition_types_test.go @@ -29,12 +29,6 @@ func Test_GenerateIgnitionYAML(t *testing.T) { filename string resource runtime.Object }{ - { - name: fmt.Sprintf("case 0: %s_ignition.yaml is generated successfully", group), - category: "crd", - filename: fmt.Sprintf("%s_ignition.yaml", group), - resource: NewIgnitionCRD(), - }, { name: fmt.Sprintf("case 1: %s_%s_ignition.yaml is generated successfully", group, version), category: "cr", diff --git a/pkg/apis/core/v1alpha1/ingress_types.go b/pkg/apis/core/v1alpha1/ingress_types.go index a326617fa..0cf792805 100644 --- a/pkg/apis/core/v1alpha1/ingress_types.go +++ b/pkg/apis/core/v1alpha1/ingress_types.go @@ -6,21 +6,7 @@ import ( ) // NewIngressConfigCRD returns a new custom resource definition for -// IngressConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: ingressconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: IngressConfig -// plural: ingressconfigs -// singular: ingressconfig -// +// IngressConfig. func NewIngressConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/kvm_cluster_types.go b/pkg/apis/core/v1alpha1/kvm_cluster_types.go index fd8deae05..819d1e2c3 100644 --- a/pkg/apis/core/v1alpha1/kvm_cluster_types.go +++ b/pkg/apis/core/v1alpha1/kvm_cluster_types.go @@ -6,21 +6,7 @@ import ( ) // NewKVMClusterConfigCRD returns a new custom resource definition for -// KVMClusterConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: kvmclusterconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: KVMClusterConfig -// plural: kvmclusterconfigs -// singular: kvmclusterconfig -// +// KVMClusterConfig. func NewKVMClusterConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ @@ -73,11 +59,14 @@ type KVMClusterConfigSpecGuestWorker struct { Labels map[string]string `json:"labels" yaml:"labels"` } +// TODO: change MemorySizeGB and StorageSizeGB to resource.Quantity type KVMClusterConfigSpecGuestNode struct { - ID string `json:"id" yaml:"id"` - CPUCores int `json:"cpuCores,omitempty" yaml:"cpuCores,omitempty"` - MemorySizeGB float64 `json:"memorySizeGB,omitempty" yaml:"memorySizeGB,omitempty"` - StorageSizeGB float64 `json:"storageSizeGB,omitempty" yaml:"storageSizeGB,omitempty"` + ID string `json:"id" yaml:"id"` + CPUCores int `json:"cpuCores,omitempty" yaml:"cpuCores,omitempty"` + // +kubebuilder:validation:Type=number + MemorySizeGB string `json:"memorySizeGB,omitempty" yaml:"memorySizeGB,omitempty"` + // +kubebuilder:validation:Type=number + StorageSizeGB string `json:"storageSizeGB,omitempty" yaml:"storageSizeGB,omitempty"` } type KVMClusterConfigSpecVersionBundle struct { diff --git a/pkg/apis/core/v1alpha1/node_types.go b/pkg/apis/core/v1alpha1/node_types.go index 9fa676c62..0f1a5e713 100644 --- a/pkg/apis/core/v1alpha1/node_types.go +++ b/pkg/apis/core/v1alpha1/node_types.go @@ -10,23 +10,6 @@ const ( ) // NewNodeConfigCRD returns a new custom resource definition for NodeConfig. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: nodeconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: NodeConfig -// plural: nodeconfigs -// singular: nodeconfig -// subresources: -// status: {} -// func NewNodeConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/core/v1alpha1/storage_types.go b/pkg/apis/core/v1alpha1/storage_types.go index 4969b4246..41eeec6d9 100644 --- a/pkg/apis/core/v1alpha1/storage_types.go +++ b/pkg/apis/core/v1alpha1/storage_types.go @@ -6,21 +6,6 @@ import ( ) // NewStorageConfigCRD returns a new custom resource definition for StorageConfig. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: storageconfigs.core.giantswarm.io -// spec: -// group: core.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: StorageConfig -// plural: storageconfigs -// singular: storageconfig -// func NewStorageConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/example/v1alpha1/memcached_types.go b/pkg/apis/example/v1alpha1/memcached_types.go index 7be2339c2..6759f1e85 100644 --- a/pkg/apis/example/v1alpha1/memcached_types.go +++ b/pkg/apis/example/v1alpha1/memcached_types.go @@ -6,21 +6,7 @@ import ( ) // NewMemcachedConfigCRD returns a new custom resource definition for -// MemcachedConfig. This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: memcachedconfigs.provider.giantswarm.io -// spec: -// group: example.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: MemcachedConfig -// plural: memcachedconfigs -// singular: memcachedconfig -// +// MemcachedConfig. func NewMemcachedConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go index 5ad21f6f6..830f728f6 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go @@ -136,50 +136,6 @@ func NewAWSClusterCR() *AWSCluster { // AWSCluster is the infrastructure provider referenced in upstream CAPI Cluster // CRs. -// -// apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: AWSCluster -// metadata: -// labels: -// aws-operator.giantswarm.io/version: 6.2.0 -// cluster-operator.giantswarm.io/version: 0.17.0 -// giantswarm.io/cluster: "8y5kc" -// giantswarm.io/organization: "giantswarm" -// release.giantswarm.io/version: 7.3.1 -// name: 8y5kc -// spec: -// cluster: -// description: my fancy cluster -// dns: -// domain: gauss.eu-central-1.aws.gigantic.io -// oidc: -// claims: -// username: email -// groups: groups -// clientID: foobar-dex-client -// issuerURL: https://dex.gatekeeper.eu-central-1.aws.example.com -// provider: -// credentialSecret: -// name: credential-default -// namespace: giantswarm -// master: -// availabilityZone: eu-central-1a -// instanceType: m4.large -// region: eu-central-1 -// status: -// cluster: -// conditions: -// - lastTransitionTime: "2019-03-25T17:10:09.333633991Z" -// type: Created -// id: 8y5kc -// versions: -// - lastTransitionTime: "2019-03-25T17:10:09.995948706Z" -// version: 4.9.0 -// provider: -// network: -// cidr: 10.1.6.0/24 -// vpcID: vpc-1234567890abcdef0 -// type AWSCluster struct { metav1.TypeMeta `json:",inline"` // metav1.ObjectMeta is standard Kubernetes resource metadata. diff --git a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go index d7c7c2546..da6cafa4e 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go @@ -43,11 +43,6 @@ func Test_GenerateAWSClusterYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_awscluster.yaml", group), - resource: NewAWSClusterCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_awscluster.yaml", group, version), diff --git a/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types.go b/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types.go index f1d3a9ff8..c87ce2a81 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types.go @@ -102,29 +102,6 @@ func NewAWSControlPlaneCR() *AWSControlPlane { // AWSControlPlane is the infrastructure provider referenced in ControlPlane // CRs. -// -// apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: AWSControlPlane -// metadata: -// annotations: -// giantswarm.io/docs: https://docs.giantswarm.io/reference/awscontrolplanes.infrastructure.giantswarm.io/v1alpha2/ -// labels: -// aws-operator.giantswarm.io/version: "6.2.0" -// giantswarm.io/cluster: 8y5kc -// giantswarm.io/organization: giantswarm -// release.giantswarm.io/version: "7.3.1" -// name: 8y5kc -// ownerReferences: -// - apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: G8sControlPlane -// name: 8y5kc -// spec: -// availabilityZones: -// - eu-central-1a -// - eu-central-1b -// - eu-central-1c -// instanceType: m4.large -// type AWSControlPlane struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types_test.go b/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types_test.go index d14ce5f35..b3382477c 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types_test.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_control_plane_types_test.go @@ -29,11 +29,6 @@ func Test_GenerateAWSControlPlaneYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_awscontrolplane.yaml", group), - resource: NewAWSControlPlaneCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_awscontrolplane.yaml", group, version), diff --git a/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types.go b/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types.go index 39b49b476..8c23d94d1 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types.go @@ -196,44 +196,6 @@ func NewAWSMachineDeploymentCR() *AWSMachineDeployment { // AWSMachineDeployment is the infrastructure provider referenced in upstream // CAPI MachineDeployment CRs. -// -// apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: AWSMachineDeployment -// metadata: -// labels: -// aws-operator.giantswarm.io/version: 6.2.0 -// cluster-operator.giantswarm.io/version: 0.17.0 -// giantswarm.io/cluster: 8y5kc -// giantswarm.io/organization: "giantswarm" -// giantswarm.io/machine-deployment: al9qy -// release.giantswarm.io/version: 7.3.1 -// name: al9qy -// spec: -// nodePool: -// description: my fancy node pool -// machine: -// dockerVolumeSizeGB: 100 -// kubeletVolumeSizeGB: 100 -// scaling: -// max: 3 -// min: 3 -// provider: -// availabilityZones: -// - eu-central-1a -// instanceDistribution: -// onDemandBaseCapacity: 0 -// onDemandPercentageAboveBaseCapacity: 0 -// worker: -// instanceType: m4.xlarge -// useAlikeInstanceTypes: true -// status: -// provider: -// worker: -// instanceTypes: -// - "m4.xlarge" -// - "m5.xlarge" -// spotInstances: 39 -// type AWSMachineDeployment struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -269,7 +231,12 @@ type AWSMachineDeploymentSpecProvider struct { } type AWSMachineDeploymentSpecInstanceDistribution struct { - OnDemandBaseCapacity int `json:"onDemandBaseCapacity" yaml:"onDemandBaseCapacity"` + // +kubebuilder:default=0 + // +kubebuilder:validation:Minimum=0 + OnDemandBaseCapacity int `json:"onDemandBaseCapacity" yaml:"onDemandBaseCapacity"` + // +kubebuilder:default=100 + // +kubebuilder:validation:Maximum=100 + // +kubebuilder:validation:Minimum=0 OnDemandPercentageAboveBaseCapacity int `json:"onDemandPercentageAboveBaseCapacity" yaml:"onDemandPercentageAboveBaseCapacity"` } diff --git a/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types_test.go b/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types_test.go index 8c181a953..b3278e6e1 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types_test.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_machine_deployment_types_test.go @@ -29,11 +29,6 @@ func Test_GenerateAWSMachineDeploymentYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_awsmachinedeployment.yaml", group), - resource: NewAWSMachineDeploymentCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_awsmachinedeployment.yaml", group, version), diff --git a/pkg/apis/infrastructure/v1alpha2/cluster_api_crds.go b/pkg/apis/infrastructure/v1alpha2/cluster_api_crds.go index 31bfce1bc..ad7b737c7 100644 --- a/pkg/apis/infrastructure/v1alpha2/cluster_api_crds.go +++ b/pkg/apis/infrastructure/v1alpha2/cluster_api_crds.go @@ -88,23 +88,7 @@ func init() { } // NewClusterCRD returns a new custom resource definition for Cluster (from -// Cluster API). This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: clusters.cluster.x-k8s.io -// spec: -// group: cluster.x-k8s.io -// scope: Namespaced -// version: v1alpha2 -// names: -// kind: Cluster -// plural: clusters -// singular: cluster -// subresources: -// status: {} -// +// Cluster API). func NewClusterCRD() *apiextensionsv1beta1.CustomResourceDefinition { return clusterCRD.DeepCopy() } @@ -129,24 +113,7 @@ func NewClusterCR() *apiv1alpha2.Cluster { } // NewMachineDeploymentCRD returns a new custom resource definition for -// MachineDeployment (from Cluster API). This might look something like the -// following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: machinedeployments.cluster.x-k8s.io -// spec: -// group: cluster.x-k8s.io -// scope: Namespaced -// version: v1alpha2 -// names: -// kind: MachineDeployment -// plural: machinedeployments -// singular: machinedeployment -// subresources: -// status: {} -// +// MachineDeployment (from Cluster API). func NewMachineDeploymentCRD() *apiextensionsv1beta1.CustomResourceDefinition { return machineDeploymentCRD.DeepCopy() } diff --git a/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go b/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go index c2c762d11..160315be3 100644 --- a/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go +++ b/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go @@ -105,31 +105,7 @@ func NewG8sControlPlaneCR() *G8sControlPlane { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // G8sControlPlane defines the Control Plane Nodes (Kubernetes Master Nodes) of -// a Giant Swarm Tenant Cluster -// -// apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: G8sControlPlane -// metadata: -// annotations: -// giantswarm.io/docs: https://docs.giantswarm.io/reference/g8scontrolplanes.infrastructure.giantswarm.io/v1alpha2/ -// labels: -// aws-operator.giantswarm.io/version: "6.2.0" -// cluster-operator.giantswarm.io/version: "0.17.0" -// giantswarm.io/cluster: 8y5kc -// giantswarm.io/organization: giantswarm -// release.giantswarm.io/version: "7.3.1" -// name: 8y5kc -// spec: -// infrastructureRef: -// apiVersion: infrastructure.giantswarm.io/v1alpha2 -// kind: AWSControlPlane -// name: 5f3kb -// namespace: default -// replicas: 3 -// status: -// readyReplicas: 3 -// replicas: 3 -// +// a Giant Swarm Tenant Cluster. type G8sControlPlane struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/pkg/apis/provider/v1alpha1/aws_types.go b/pkg/apis/provider/v1alpha1/aws_types.go index 0c7eaf865..310c7a177 100644 --- a/pkg/apis/provider/v1alpha1/aws_types.go +++ b/pkg/apis/provider/v1alpha1/aws_types.go @@ -506,24 +506,7 @@ func init() { } } -// NewAWSConfigCRD returns a new custom resource definition for AWSConfig. This -// might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: awsconfigs.provider.giantswarm.io -// spec: -// group: provider.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: AWSConfig -// plural: awsconfigs -// singular: awsconfig -// subresources: -// status: {} -// +// NewAWSConfigCRD returns a new custom resource definition for AWSConfig. func NewAWSConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return awsConfigCRD.DeepCopy() } diff --git a/pkg/apis/provider/v1alpha1/aws_types_test.go b/pkg/apis/provider/v1alpha1/aws_types_test.go index 9c2fd2672..ecf74dcbf 100644 --- a/pkg/apis/provider/v1alpha1/aws_types_test.go +++ b/pkg/apis/provider/v1alpha1/aws_types_test.go @@ -44,11 +44,6 @@ func Test_GenerateAWSConfigYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_awsconfig.yaml", group), - resource: NewAWSConfigCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_awsconfig.yaml", group, version), diff --git a/pkg/apis/provider/v1alpha1/azure_types.go b/pkg/apis/provider/v1alpha1/azure_types.go index eb3c0a7c5..bff671ba8 100644 --- a/pkg/apis/provider/v1alpha1/azure_types.go +++ b/pkg/apis/provider/v1alpha1/azure_types.go @@ -6,23 +6,6 @@ import ( ) // NewAzureConfigCRD returns a new custom resource definition for AzureConfig. -// This might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: azureconfigs.provider.giantswarm.io -// spec: -// group: provider.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: AzureConfig -// plural: azureconfigs -// singular: azureconfig -// subresources: -// status: {} -// func NewAzureConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/apis/provider/v1alpha1/kvm_types.go b/pkg/apis/provider/v1alpha1/kvm_types.go index 323b0177d..6b41e2b74 100644 --- a/pkg/apis/provider/v1alpha1/kvm_types.go +++ b/pkg/apis/provider/v1alpha1/kvm_types.go @@ -5,24 +5,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// NewKVMConfigCRD returns a new custom resource definition for KVMConfig. This -// might look something like the following. -// -// apiVersion: apiextensions.k8s.io/v1beta1 -// kind: CustomResourceDefinition -// metadata: -// name: kvmconfigs.provider.giantswarm.io -// spec: -// group: provider.giantswarm.io -// scope: Namespaced -// version: v1alpha1 -// names: -// kind: KVMConfig -// plural: kvmconfigs -// singular: kvmconfig -// subresources: -// status: {} -// +// NewKVMConfigCRD returns a new custom resource definition for KVMConfig. func NewKVMConfigCRD() *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ TypeMeta: metav1.TypeMeta{ @@ -93,10 +76,11 @@ type KVMConfigSpecKVMK8sKVMDocker struct { } type KVMConfigSpecKVMNode struct { - CPUs int `json:"cpus" yaml:"cpus"` - Disk float64 `json:"disk" yaml:"disk"` - Memory string `json:"memory" yaml:"memory"` - DockerVolumeSizeGB int `json:"dockerVolumeSizeGB" yaml:"dockerVolumeSizeGB"` + CPUs int `json:"cpus" yaml:"cpus"` + // +kubebuilder:validation:Type=number + Disk string `json:"disk" yaml:"disk"` + Memory string `json:"memory" yaml:"memory"` + DockerVolumeSizeGB int `json:"dockerVolumeSizeGB" yaml:"dockerVolumeSizeGB"` } type KVMConfigSpecKVMNetwork struct { diff --git a/pkg/apis/release/v1alpha1/deep_copy.go b/pkg/apis/release/v1alpha1/deep_copy.go index 409ddd093..00ef43ef1 100644 --- a/pkg/apis/release/v1alpha1/deep_copy.go +++ b/pkg/apis/release/v1alpha1/deep_copy.go @@ -6,6 +6,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +// +kubebuilder:validation:Type=string // DeepCopyDate is a date type designed to be validated with json-schema date // type. type DeepCopyDate struct { diff --git a/pkg/apis/release/v1alpha1/release_cycle_types.go b/pkg/apis/release/v1alpha1/release_cycle_types.go index 11af12b4c..e6c1d4be2 100644 --- a/pkg/apis/release/v1alpha1/release_cycle_types.go +++ b/pkg/apis/release/v1alpha1/release_cycle_types.go @@ -84,20 +84,6 @@ func NewReleaseCycleTypeMeta() metav1.TypeMeta { // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ReleaseCycle CRs might look something like the following. -// -// apiVersion: "release.giantswarm.io/v1alpha1" -// kind: "ReleaseCycle" -// metadata: -// name: "aws.v6.1.0" -// labels: -// giantswarm.io/managed-by: "opsctl" -// giantswarm.io/provider: "aws" -// spec: -// disabledDate: 2019-01-12 -// enabledDate: 2019-01-08 -// phase: "enabled" -// type ReleaseCycle struct { metav1.TypeMeta `json:",inline" yaml:",inline"` metav1.ObjectMeta `json:"metadata" yaml:"metadata"` diff --git a/pkg/apis/release/v1alpha1/release_types_test.go b/pkg/apis/release/v1alpha1/release_types_test.go index 95047150d..e78929c46 100644 --- a/pkg/apis/release/v1alpha1/release_types_test.go +++ b/pkg/apis/release/v1alpha1/release_types_test.go @@ -443,11 +443,6 @@ func Test_GenerateReleaseYAML(t *testing.T) { name string resource runtime.Object }{ - { - category: "crd", - name: fmt.Sprintf("%s_release.yaml", group), - resource: NewReleaseCRD(), - }, { category: "cr", name: fmt.Sprintf("%s_%s_release.yaml", group, version), diff --git a/scripts/gen.go b/scripts/gen.go index 5a36b279e..a1abb22ac 100644 --- a/scripts/gen.go +++ b/scripts/gen.go @@ -6,4 +6,5 @@ package scripts import ( _ "k8s.io/code-generator/cmd/client-gen" _ "k8s.io/code-generator/cmd/deepcopy-gen" + _ "sigs.k8s.io/controller-tools/cmd/controller-gen" ) diff --git a/scripts/gen.sh b/scripts/gen.sh index 5975bba22..ab8cee6bb 100755 --- a/scripts/gen.sh +++ b/scripts/gen.sh @@ -1,30 +1,65 @@ -#!/usr/bin/env bash +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -export GOPATH=$(go env GOPATH) # ensure that GOPATH is defined for generate-groups.sh -go mod tidy # ensure that code-generator is cached in $GOPATH/pkg/mod for generate-groups.sh - -bash "$(go list -m -f '{{.Dir}}' k8s.io/code-generator)/generate-groups.sh" \ - "deepcopy,client" \ - github.com/giantswarm/apiextensions/pkg \ - github.com/giantswarm/apiextensions/pkg/apis \ - "application:v1alpha1 core:v1alpha1 example:v1alpha1 provider:v1alpha1 release:v1alpha1 infrastructure:v1alpha2 backup:v1alpha1" \ - --output-base "$dir" \ - --go-header-file "${dir}/boilerplate.go.txt" - -cp -R "$dir/github.com/giantswarm/apiextensions/pkg"/* "$dir/../pkg" +export GOPATH=$(go env GOPATH) +export GOROOT=$(go env GOROOT) + +tools="sigs.k8s.io/controller-tools/cmd/controller-gen +k8s.io/code-generator/cmd/deepcopy-gen +k8s.io/code-generator/cmd/client-gen +golang.org/x/tools/cmd/goimports" + +mkdir -p "$dir/bin" +cd "$dir" +for tool in $tools; do + go build -o "$dir/bin/$(basename "$tool")" "$tool" +done +cd .. + +module="github.com/giantswarm/apiextensions" +input_dirs=$(find ./pkg/apis -maxdepth 2 -mindepth 2 | tr '\r\n' ',') +input_dirs=${input_dirs%?} +groups=${input_dirs//.\/pkg\/apis\//} +header="${dir}/boilerplate.go.txt" + +echo "Generating deepcopy funcs" +"$dir/bin/deepcopy-gen" \ + --input-dirs "$input_dirs" \ + --output-file-base zz_generated.deepcopy \ + --output-base "$dir/.." \ + --go-header-file "${dir}/boilerplate.go.txt" + +echo "Generating clientset" +"$dir/bin/client-gen" \ + --clientset-name versioned \ + --input "$groups" \ + --input-base "$module/pkg/apis" \ + --output-package "$module/pkg/clientset" \ + --output-base "$dir" \ + --go-header-file "$header" + +cp -R "$dir/$module/pkg"/* "$dir/../pkg" rm -rf "$dir/github.com" # code-generator doesn't group local imports separately from third-party # imports, so run goimports after generating new code. cd "$dir/.." || exit -if [ ! -x "$(command -v goimports)" ]; then - echo "goimports not found, downloading to $GOPATH/bin using 'go get'" - go get golang.org/x/tools/cmd/goimports - export PATH=$PATH:$GOPATH/bin -fi echo "Fixing imports in-place with goimports" -goimports -local github.com/giantswarm/apiextensions -w ./pkg +"$dir/bin/goimports" -local $module -w ./pkg + +"$dir/bin/controller-gen" \ + crd \ + paths=./pkg/apis/... \ + output:dir=docs/crd \ + crd:crdVersions=v1beta1 + +"$dir/bin/controller-gen" \ + crd \ + paths=./pkg/apis/infrastructure/v1alpha2 \ + output:dir=docs/crd \ + crd:crdVersions=v1 echo "Applying linter patch to generated files" git apply "$dir/generated.patch" diff --git a/scripts/go.mod b/scripts/go.mod new file mode 100644 index 000000000..0512efe7a --- /dev/null +++ b/scripts/go.mod @@ -0,0 +1,8 @@ +module github.com/giantswarm/apiextensions/scripts + +go 1.14 + +require ( + k8s.io/code-generator v0.16.6 + sigs.k8s.io/controller-tools v0.2.4 +) diff --git a/scripts/go.sum b/scripts/go.sum new file mode 100644 index 000000000..4d2de66a2 --- /dev/null +++ b/scripts/go.sum @@ -0,0 +1,357 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/gobuffalo/flect v0.1.5 h1:xpKq9ap8MbYfhuPCF0dBH854Gp9CxZjr/IocxELFflo= +github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 h1:bw9doJza/SFBEweII/rHQh338oozWyiFsBRHtrflcws= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 h1:B0J02caTR6tpSJozBJyiAzT6CtBzjclw4pgm9gg8Ys0= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.0.0-20190918155943-95b840bb6a1f h1:8FRUST8oUkEI45WYKyD8ed7Ad0Kg5v11zHyPkEVb2xo= +k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= +k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783 h1:V6ndwCPoao1yZ52agqOKaUAl7DYWVGiXjV7ePA2i610= +k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= +k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655 h1:CS1tBQz3HOXiseWZu6ZicKX361CZLT97UFnnPx0aqBw= +k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= +k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= +k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= +k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= +k8s.io/code-generator v0.16.6 h1:wykZVkEDQd/BcOZxcQMEW6uFgoM4ZmvjIhxkbmEJ3WA= +k8s.io/code-generator v0.16.6/go.mod h1:2aiDuxDU7RQK2PVypXAXHo6+YwOlF33iezHQbSmKSA4= +k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +sigs.k8s.io/controller-tools v0.2.4 h1:la1h46EzElvWefWLqfsXrnsO3lZjpkI0asTpX6h8PLA= +sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=