diff --git a/gen/KubernetesWatchGenerator/IKubernetes.Watch.cs.template b/gen/KubernetesWatchGenerator/IKubernetes.Watch.cs.template index b27d4f6..06fe199 100644 --- a/gen/KubernetesWatchGenerator/IKubernetes.Watch.cs.template +++ b/gen/KubernetesWatchGenerator/IKubernetes.Watch.cs.template @@ -41,7 +41,7 @@ namespace k8s /// /// A which represents the asynchronous operation, and returns a new watcher. /// - Task> {{MethodName operation}}( + Task> {{GetMethodName operation}}( {{#operation.actualParameters}} {{#isRequired}} {{GetDotNetType type name isRequired}} {{GetDotNetName name}}, @@ -53,7 +53,7 @@ namespace k8s {{/isRequired}} {{/operation.actualParameters}} Dictionary> customHeaders = null, - Action onEvent = null, + Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken)); diff --git a/gen/KubernetesWatchGenerator/Kubernetes.Watch.cs.template b/gen/KubernetesWatchGenerator/Kubernetes.Watch.cs.template index 35e644a..37620e2 100644 --- a/gen/KubernetesWatchGenerator/Kubernetes.Watch.cs.template +++ b/gen/KubernetesWatchGenerator/Kubernetes.Watch.cs.template @@ -10,7 +10,7 @@ namespace k8s { {{#.}} /// - public Task> {{MethodName operation}}( + public Task> {{GetMethodName operation}}( {{#operation.actualParameters}} {{#isRequired}} {{GetDotNetType type name isRequired}} {{GetDotNetName name}}, @@ -22,12 +22,12 @@ namespace k8s {{/isRequired}} {{/operation.actualParameters}} Dictionary> customHeaders = null, - Action onEvent = null, + Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken)) { string path = $"{{GetPathExpression .}}"; - return WatchObjectAsync<{{ClassName operation}}>(path: path, @continue: @continue, fieldSelector: fieldSelector, includeUninitialized: includeUninitialized, labelSelector: labelSelector, limit: limit, pretty: pretty, timeoutSeconds: timeoutSeconds, resourceVersion: resourceVersion, customHeaders: customHeaders, onEvent: onEvent, onError: onError, cancellationToken: cancellationToken); + return WatchObjectAsync<{{GetClassName operation}}>(path: path, @continue: @continue, fieldSelector: fieldSelector, includeUninitialized: includeUninitialized, labelSelector: labelSelector, limit: limit, pretty: pretty, timeoutSeconds: timeoutSeconds, resourceVersion: resourceVersion, customHeaders: customHeaders, onEvent: onEvent, onError: onError, cancellationToken: cancellationToken); } {{/.}} diff --git a/gen/KubernetesWatchGenerator/KubernetesWatchGenerator.csproj b/gen/KubernetesWatchGenerator/KubernetesWatchGenerator.csproj index 18b8d75..70d70f7 100644 --- a/gen/KubernetesWatchGenerator/KubernetesWatchGenerator.csproj +++ b/gen/KubernetesWatchGenerator/KubernetesWatchGenerator.csproj @@ -3,9 +3,6 @@ Exe netcoreapp2.0 - - - latest @@ -16,10 +13,9 @@ - - - - + + PreserveNewest + PreserveNewest diff --git a/gen/KubernetesWatchGenerator/ModelExtensions.cs.template b/gen/KubernetesWatchGenerator/ModelExtensions.cs.template new file mode 100644 index 0000000..e0c2749 --- /dev/null +++ b/gen/KubernetesWatchGenerator/ModelExtensions.cs.template @@ -0,0 +1,12 @@ +namespace k8s.Models +{ +{{#.}} + public partial class {{GetClassName . }} : IKubernetesObject + { + public const string KubeApiVersion = "{{GetApiVersion . }}"; + public const string KubeKind = "{{GetKind . }}"; + public const string KubeGroup = "{{GetGroup . }}"; + } + +{{/.}} +} diff --git a/gen/KubernetesWatchGenerator/Program.cs b/gen/KubernetesWatchGenerator/Program.cs index 660cd8b..3badadb 100644 --- a/gen/KubernetesWatchGenerator/Program.cs +++ b/gen/KubernetesWatchGenerator/Program.cs @@ -45,6 +45,19 @@ namespace KubernetesWatchGenerator // Read the spec var swagger = await SwaggerDocument.FromFileAsync(specPath); + + // Register helpers used in the templating. + Helpers.Register(nameof(ToXmlDoc), ToXmlDoc); + Helpers.Register(nameof(GetClassName), GetClassName); + Helpers.Register(nameof(GetMethodName), GetMethodName); + Helpers.Register(nameof(GetDotNetName), GetDotNetName); + Helpers.Register(nameof(GetDotNetType), GetDotNetType); + Helpers.Register(nameof(GetPathExpression), GetPathExpression); + Helpers.Register(nameof(GetGroup), GetGroup); + Helpers.Register(nameof(GetApiVersion), GetApiVersion); + Helpers.Register(nameof(GetKind), GetKind); + + // Generate the Watcher operations // We skip operations where the name of the class in the C# client could not be determined correctly. // That's usually because there are different version of the same object (e.g. for deployments). Collection blacklistedOperations = new Collection() @@ -62,17 +75,31 @@ namespace KubernetesWatchGenerator && o.Operation.ActualParameters.Any(p => p.Name == "name") && !blacklistedOperations.Contains(o.Operation.OperationId)).ToArray(); - // Register helpers used in the templating. - Helpers.Register(nameof(ToXmlDoc), ToXmlDoc); - Helpers.Register(nameof(ClassName), ClassName); - Helpers.Register(nameof(MethodName), MethodName); - Helpers.Register(nameof(GetDotNetName), GetDotNetName); - Helpers.Register(nameof(GetDotNetType), GetDotNetType); - Helpers.Register(nameof(GetPathExpression), GetPathExpression); - // Render. Render.FileToFile("IKubernetes.Watch.cs.template", watchOperations, $"{outputDirectory}IKubernetes.Watch.cs"); Render.FileToFile("Kubernetes.Watch.cs.template", watchOperations, $"{outputDirectory}Kubernetes.Watch.cs"); + + // Generate the interface declarations + var skippedTypes = new Collection() + { + "V1beta1Deployment", + "V1beta1DeploymentList", + "V1beta1DeploymentRollback", + "V1beta1DeploymentRollback", + "V1beta1Scale", + "V1beta1PodSecurityPolicy", + "V1beta1PodSecurityPolicyList", + "V1WatchEvent", + }; + + var definitions = swagger.Definitions.Values + .Where( + d => d.ExtensionData != null + && d.ExtensionData.ContainsKey("x-kubernetes-group-version-kind") + && !skippedTypes.Contains(GetClassName(d))); + + // Render. + Render.FileToFile("ModelExtensions.cs.template", definitions, $"{outputDirectory}ModelExtensions.cs"); } static void ToXmlDoc(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) @@ -101,15 +128,82 @@ namespace KubernetesWatchGenerator } } - static void MethodName(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) + static void GetClassName(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) { if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is SwaggerOperation) { - context.Write(MethodName(arguments[0] as SwaggerOperation)); + context.Write(GetClassName(arguments[0] as SwaggerOperation)); + } + else if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is JsonSchema4) + { + context.Write(GetClassName(arguments[0] as JsonSchema4)); } } - static string MethodName(SwaggerOperation watchOperation) + static string GetClassName(SwaggerOperation watchOperation) + { + var groupVersionKind = (Dictionary)watchOperation.ExtensionData["x-kubernetes-group-version-kind"]; + var group = (string)groupVersionKind["group"]; + var kind = (string)groupVersionKind["kind"]; + var version = (string)groupVersionKind["version"]; + + var className = $"{ToPascalCase(version)}{kind}"; + return className; + } + + private static string GetClassName(JsonSchema4 definition) + { + var groupVersionKindElements = (object[])definition.ExtensionData["x-kubernetes-group-version-kind"]; + var groupVersionKind = (Dictionary)groupVersionKindElements[0]; + + var group = groupVersionKind["group"] as string; + var version = groupVersionKind["version"] as string; + var kind = groupVersionKind["kind"] as string; + + return $"{ToPascalCase(version)}{ToPascalCase(kind)}"; + } + + static void GetKind(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) + { + if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is JsonSchema4) + { + context.Write(GetKind(arguments[0] as JsonSchema4)); + } + } + + private static string GetKind(JsonSchema4 definition) + { + var groupVersionKindElements = (object[])definition.ExtensionData["x-kubernetes-group-version-kind"]; + var groupVersionKind = (Dictionary)groupVersionKindElements[0]; + + return groupVersionKind["kind"] as string; + } + + static void GetGroup(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) + { + if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is JsonSchema4) + { + context.Write(GetGroup(arguments[0] as JsonSchema4)); + } + } + + private static string GetGroup(JsonSchema4 definition) + { + var groupVersionKindElements = (object[])definition.ExtensionData["x-kubernetes-group-version-kind"]; + var groupVersionKind = (Dictionary)groupVersionKindElements[0]; + + return groupVersionKind["group"] as string; + } + + static void GetMethodName(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) + { + if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is SwaggerOperation) + { + context.Write(GetMethodName(arguments[0] as SwaggerOperation)); + } + } + + static string GetMethodName(SwaggerOperation watchOperation) { var tag = watchOperation.Tags[0]; tag = tag.Replace("_", string.Empty); @@ -122,25 +216,6 @@ namespace KubernetesWatchGenerator return methodName; } - static void ClassName(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) - { - if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is SwaggerOperation) - { - context.Write(ClassName(arguments[0] as SwaggerOperation)); - } - } - - static string ClassName(SwaggerOperation watchOperation) - { - var groupVersionKind = (Dictionary)watchOperation.ExtensionData["x-kubernetes-group-version-kind"]; - var group = (string)groupVersionKind["group"]; - var kind = (string)groupVersionKind["kind"]; - var version = (string)groupVersionKind["version"]; - - var className = $"{ToPascalCase(version)}{kind}"; - return className; - } - static void GetDotNetType(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) { if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is SwaggerParameter) @@ -148,11 +223,11 @@ namespace KubernetesWatchGenerator var parameter = arguments[0] as SwaggerParameter; context.Write(GetDotNetType(parameter.Type, parameter.Name, parameter.IsRequired)); } - else if(arguments != null && arguments.Count > 2 && arguments[0] != null && arguments[1] != null && arguments[2] != null && arguments[0] is JsonObjectType && arguments[1] is string && arguments[2] is bool) + else if (arguments != null && arguments.Count > 2 && arguments[0] != null && arguments[1] != null && arguments[2] != null && arguments[0] is JsonObjectType && arguments[1] is string && arguments[2] is bool) { context.Write(GetDotNetType((JsonObjectType)arguments[0], (string)arguments[1], (bool)arguments[2])); } - else if(arguments != null && arguments.Count > 0 && arguments[0] != null) + else if (arguments != null && arguments.Count > 0 && arguments[0] != null) { context.Write($"ERROR: Expected SwaggerParameter but got {arguments[0].GetType().FullName}"); } @@ -243,8 +318,29 @@ namespace KubernetesWatchGenerator return pathExpression; } + static void GetApiVersion(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) + { + if (arguments != null && arguments.Count > 0 && arguments[0] != null && arguments[0] is JsonSchema4) + { + context.Write(GetApiVersion(arguments[0] as JsonSchema4)); + } + } + + private static string GetApiVersion(JsonSchema4 definition) + { + var groupVersionKindElements = (object[])definition.ExtensionData["x-kubernetes-group-version-kind"]; + var groupVersionKind = (Dictionary)groupVersionKindElements[0]; + + return groupVersionKind["version"] as string; + } + private static string ToPascalCase(string name) { + if (string.IsNullOrWhiteSpace(name)) + { + return name; + } + return char.ToUpper(name[0]) + name.Substring(1); } } diff --git a/src/KubernetesClient/IKubernetesObject.cs b/src/KubernetesClient/IKubernetesObject.cs new file mode 100644 index 0000000..43bf1cb --- /dev/null +++ b/src/KubernetesClient/IKubernetesObject.cs @@ -0,0 +1,36 @@ +using Newtonsoft.Json; + +namespace k8s +{ + /// + /// Represents a generic Kubernetes object. + /// + /// + /// You can use the if you receive JSON from a Kubernetes API server but + /// are unsure which object the API server is about to return. You can parse the JSON as a + /// and use the and properties to get basic metadata about any Kubernetes object. + /// You can then + /// + public interface IKubernetesObject + { + /// + /// Gets or sets 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/api-conventions.md#resources + /// + [JsonProperty(PropertyName = "apiVersion")] + string ApiVersion { get; set; } + + /// + /// Gets or sets 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/api-conventions.md#types-kinds + /// + [JsonProperty(PropertyName = "kind")] + string Kind { get; set; } + } +} diff --git a/src/KubernetesClient/KubernetesObject.cs b/src/KubernetesClient/KubernetesObject.cs index 8052c10..8feb1fb 100644 --- a/src/KubernetesClient/KubernetesObject.cs +++ b/src/KubernetesClient/KubernetesObject.cs @@ -11,7 +11,7 @@ namespace k8s /// and use the and properties to get basic metadata about any Kubernetes object. /// You can then /// - public class KubernetesObject + public class KubernetesObject : IKubernetesObject { /// /// Gets or sets aPIVersion defines the versioned schema of this diff --git a/src/KubernetesClient/generated/ModelExtensions.cs b/src/KubernetesClient/generated/ModelExtensions.cs new file mode 100644 index 0000000..becaaf5 --- /dev/null +++ b/src/KubernetesClient/generated/ModelExtensions.cs @@ -0,0 +1,1018 @@ +namespace k8s.Models +{ + public partial class V1alpha1InitializerConfiguration : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "InitializerConfiguration"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1alpha1InitializerConfigurationList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "InitializerConfigurationList"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1beta1MutatingWebhookConfiguration : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "MutatingWebhookConfiguration"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1beta1MutatingWebhookConfigurationList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "MutatingWebhookConfigurationList"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1beta1ValidatingWebhookConfiguration : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ValidatingWebhookConfiguration"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1beta1ValidatingWebhookConfigurationList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ValidatingWebhookConfigurationList"; + public const string KubeGroup = "admissionregistration.k8s.io"; + } + + public partial class V1ControllerRevision : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ControllerRevision"; + public const string KubeGroup = "apps"; + } + + public partial class V1ControllerRevisionList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ControllerRevisionList"; + public const string KubeGroup = "apps"; + } + + public partial class V1DaemonSet : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "DaemonSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1DaemonSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "DaemonSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1Deployment : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Deployment"; + public const string KubeGroup = "apps"; + } + + public partial class V1DeploymentList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "DeploymentList"; + public const string KubeGroup = "apps"; + } + + public partial class V1ReplicaSet : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ReplicaSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1ReplicaSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ReplicaSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1StatefulSet : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "StatefulSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1StatefulSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "StatefulSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta1ControllerRevision : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ControllerRevision"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta1ControllerRevisionList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ControllerRevisionList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta1StatefulSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "StatefulSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta1StatefulSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "StatefulSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2ControllerRevision : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "ControllerRevision"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2ControllerRevisionList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "ControllerRevisionList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2DaemonSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "DaemonSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2DaemonSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "DaemonSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2Deployment : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "Deployment"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2DeploymentList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "DeploymentList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2ReplicaSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "ReplicaSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2ReplicaSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "ReplicaSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2Scale : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "Scale"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2StatefulSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "StatefulSet"; + public const string KubeGroup = "apps"; + } + + public partial class V1beta2StatefulSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta2"; + public const string KubeKind = "StatefulSetList"; + public const string KubeGroup = "apps"; + } + + public partial class V1TokenReview : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "TokenReview"; + public const string KubeGroup = "authentication.k8s.io"; + } + + public partial class V1beta1TokenReview : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "TokenReview"; + public const string KubeGroup = "authentication.k8s.io"; + } + + public partial class V1LocalSubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "LocalSubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1SelfSubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "SelfSubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1SelfSubjectRulesReview : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "SelfSubjectRulesReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1SubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "SubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1beta1LocalSubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "LocalSubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1beta1SelfSubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "SelfSubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1beta1SelfSubjectRulesReview : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "SelfSubjectRulesReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1beta1SubjectAccessReview : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "SubjectAccessReview"; + public const string KubeGroup = "authorization.k8s.io"; + } + + public partial class V1HorizontalPodAutoscaler : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "HorizontalPodAutoscaler"; + public const string KubeGroup = "autoscaling"; + } + + public partial class V1HorizontalPodAutoscalerList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "HorizontalPodAutoscalerList"; + public const string KubeGroup = "autoscaling"; + } + + public partial class V1Scale : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Scale"; + public const string KubeGroup = "autoscaling"; + } + + public partial class V2beta1HorizontalPodAutoscaler : IKubernetesObject + { + public const string KubeApiVersion = "v2beta1"; + public const string KubeKind = "HorizontalPodAutoscaler"; + public const string KubeGroup = "autoscaling"; + } + + public partial class V2beta1HorizontalPodAutoscalerList : IKubernetesObject + { + public const string KubeApiVersion = "v2beta1"; + public const string KubeKind = "HorizontalPodAutoscalerList"; + public const string KubeGroup = "autoscaling"; + } + + public partial class V1Job : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Job"; + public const string KubeGroup = "batch"; + } + + public partial class V1JobList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "JobList"; + public const string KubeGroup = "batch"; + } + + public partial class V1beta1CronJob : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "CronJob"; + public const string KubeGroup = "batch"; + } + + public partial class V1beta1CronJobList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "CronJobList"; + public const string KubeGroup = "batch"; + } + + public partial class V2alpha1CronJob : IKubernetesObject + { + public const string KubeApiVersion = "v2alpha1"; + public const string KubeKind = "CronJob"; + public const string KubeGroup = "batch"; + } + + public partial class V2alpha1CronJobList : IKubernetesObject + { + public const string KubeApiVersion = "v2alpha1"; + public const string KubeKind = "CronJobList"; + public const string KubeGroup = "batch"; + } + + public partial class V1beta1CertificateSigningRequest : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "CertificateSigningRequest"; + public const string KubeGroup = "certificates.k8s.io"; + } + + public partial class V1beta1CertificateSigningRequestList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "CertificateSigningRequestList"; + public const string KubeGroup = "certificates.k8s.io"; + } + + public partial class V1Binding : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Binding"; + public const string KubeGroup = ""; + } + + public partial class V1ComponentStatus : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ComponentStatus"; + public const string KubeGroup = ""; + } + + public partial class V1ComponentStatusList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ComponentStatusList"; + public const string KubeGroup = ""; + } + + public partial class V1ConfigMap : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ConfigMap"; + public const string KubeGroup = ""; + } + + public partial class V1ConfigMapList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ConfigMapList"; + public const string KubeGroup = ""; + } + + public partial class V1Endpoints : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Endpoints"; + public const string KubeGroup = ""; + } + + public partial class V1EndpointsList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "EndpointsList"; + public const string KubeGroup = ""; + } + + public partial class V1Event : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Event"; + public const string KubeGroup = ""; + } + + public partial class V1EventList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "EventList"; + public const string KubeGroup = ""; + } + + public partial class V1LimitRange : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "LimitRange"; + public const string KubeGroup = ""; + } + + public partial class V1LimitRangeList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "LimitRangeList"; + public const string KubeGroup = ""; + } + + public partial class V1Namespace : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Namespace"; + public const string KubeGroup = ""; + } + + public partial class V1NamespaceList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "NamespaceList"; + public const string KubeGroup = ""; + } + + public partial class V1Node : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Node"; + public const string KubeGroup = ""; + } + + public partial class V1NodeConfigSource : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "NodeConfigSource"; + public const string KubeGroup = ""; + } + + public partial class V1NodeList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "NodeList"; + public const string KubeGroup = ""; + } + + public partial class V1PersistentVolume : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PersistentVolume"; + public const string KubeGroup = ""; + } + + public partial class V1PersistentVolumeClaim : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PersistentVolumeClaim"; + public const string KubeGroup = ""; + } + + public partial class V1PersistentVolumeClaimList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PersistentVolumeClaimList"; + public const string KubeGroup = ""; + } + + public partial class V1PersistentVolumeList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PersistentVolumeList"; + public const string KubeGroup = ""; + } + + public partial class V1Pod : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Pod"; + public const string KubeGroup = ""; + } + + public partial class V1PodList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PodList"; + public const string KubeGroup = ""; + } + + public partial class V1PodTemplate : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PodTemplate"; + public const string KubeGroup = ""; + } + + public partial class V1PodTemplateList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "PodTemplateList"; + public const string KubeGroup = ""; + } + + public partial class V1ReplicationController : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ReplicationController"; + public const string KubeGroup = ""; + } + + public partial class V1ReplicationControllerList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ReplicationControllerList"; + public const string KubeGroup = ""; + } + + public partial class V1ResourceQuota : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ResourceQuota"; + public const string KubeGroup = ""; + } + + public partial class V1ResourceQuotaList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ResourceQuotaList"; + public const string KubeGroup = ""; + } + + public partial class V1Secret : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Secret"; + public const string KubeGroup = ""; + } + + public partial class V1SecretList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "SecretList"; + public const string KubeGroup = ""; + } + + public partial class V1Service : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Service"; + public const string KubeGroup = ""; + } + + public partial class V1ServiceAccount : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ServiceAccount"; + public const string KubeGroup = ""; + } + + public partial class V1ServiceAccountList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ServiceAccountList"; + public const string KubeGroup = ""; + } + + public partial class V1ServiceList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ServiceList"; + public const string KubeGroup = ""; + } + + public partial class V1beta1Event : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "Event"; + public const string KubeGroup = "events.k8s.io"; + } + + public partial class V1beta1EventList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "EventList"; + public const string KubeGroup = "events.k8s.io"; + } + + public partial class V1beta1DaemonSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "DaemonSet"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1DaemonSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "DaemonSetList"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1Ingress : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "Ingress"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1IngressList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "IngressList"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1NetworkPolicy : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "NetworkPolicy"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1NetworkPolicyList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "NetworkPolicyList"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1ReplicaSet : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ReplicaSet"; + public const string KubeGroup = "extensions"; + } + + public partial class V1beta1ReplicaSetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ReplicaSetList"; + public const string KubeGroup = "extensions"; + } + + public partial class V1NetworkPolicy : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "NetworkPolicy"; + public const string KubeGroup = "networking.k8s.io"; + } + + public partial class V1NetworkPolicyList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "NetworkPolicyList"; + public const string KubeGroup = "networking.k8s.io"; + } + + public partial class V1beta1Eviction : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "Eviction"; + public const string KubeGroup = "policy"; + } + + public partial class V1beta1PodDisruptionBudget : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "PodDisruptionBudget"; + public const string KubeGroup = "policy"; + } + + public partial class V1beta1PodDisruptionBudgetList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "PodDisruptionBudgetList"; + public const string KubeGroup = "policy"; + } + + public partial class V1ClusterRole : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ClusterRole"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1ClusterRoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ClusterRoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1ClusterRoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ClusterRoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1ClusterRoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "ClusterRoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1Role : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Role"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1RoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "RoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1RoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "RoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1RoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "RoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1ClusterRole : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "ClusterRole"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1ClusterRoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "ClusterRoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1ClusterRoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "ClusterRoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1ClusterRoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "ClusterRoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1Role : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "Role"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1RoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "RoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1RoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "RoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1RoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "RoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1ClusterRole : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ClusterRole"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1ClusterRoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ClusterRoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1ClusterRoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ClusterRoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1ClusterRoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "ClusterRoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1Role : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "Role"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1RoleBinding : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "RoleBinding"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1RoleBindingList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "RoleBindingList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1beta1RoleList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "RoleList"; + public const string KubeGroup = "rbac.authorization.k8s.io"; + } + + public partial class V1alpha1PriorityClass : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "PriorityClass"; + public const string KubeGroup = "scheduling.k8s.io"; + } + + public partial class V1alpha1PriorityClassList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "PriorityClassList"; + public const string KubeGroup = "scheduling.k8s.io"; + } + + public partial class V1alpha1PodPreset : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "PodPreset"; + public const string KubeGroup = "settings.k8s.io"; + } + + public partial class V1alpha1PodPresetList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "PodPresetList"; + public const string KubeGroup = "settings.k8s.io"; + } + + public partial class V1StorageClass : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "StorageClass"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1StorageClassList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "StorageClassList"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1alpha1VolumeAttachment : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "VolumeAttachment"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1alpha1VolumeAttachmentList : IKubernetesObject + { + public const string KubeApiVersion = "v1alpha1"; + public const string KubeKind = "VolumeAttachmentList"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1beta1StorageClass : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "StorageClass"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1beta1StorageClassList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "StorageClassList"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1beta1VolumeAttachment : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "VolumeAttachment"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1beta1VolumeAttachmentList : IKubernetesObject + { + public const string KubeApiVersion = "v1beta1"; + public const string KubeKind = "VolumeAttachmentList"; + public const string KubeGroup = "storage.k8s.io"; + } + + public partial class V1APIGroup : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "APIGroup"; + public const string KubeGroup = ""; + } + + public partial class V1APIGroupList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "APIGroupList"; + public const string KubeGroup = ""; + } + + public partial class V1APIResourceList : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "APIResourceList"; + public const string KubeGroup = ""; + } + + public partial class V1APIVersions : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "APIVersions"; + public const string KubeGroup = ""; + } + + public partial class V1DeleteOptions : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "DeleteOptions"; + public const string KubeGroup = ""; + } + + public partial class V1Status : IKubernetesObject + { + public const string KubeApiVersion = "v1"; + public const string KubeKind = "Status"; + public const string KubeGroup = ""; + } + +}