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