@intentius/chant-lexicon-k8s 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/integrity.json +14 -6
- package/dist/manifest.json +1 -1
- package/dist/meta.json +216 -0
- package/dist/rules/argo-appset-single-project.ts +66 -0
- package/dist/rules/argo-ast.ts +121 -0
- package/dist/rules/argo-automated-prune.ts +75 -0
- package/dist/rules/argo-helpers.ts +49 -0
- package/dist/rules/argo002.ts +47 -0
- package/dist/rules/argo003.ts +80 -0
- package/dist/rules/argo005.ts +59 -0
- package/dist/rules/wk8301.ts +11 -3
- package/dist/skills/chant-k8s-argo.md +176 -0
- package/dist/types/index.d.ts +34 -0
- package/package.json +1 -1
- package/src/codegen/docs.ts +14 -1
- package/src/codegen/versions.ts +8 -5
- package/src/composites/argo-app.ts +380 -0
- package/src/composites/composites.test.ts +136 -0
- package/src/composites/index.ts +12 -0
- package/src/crd/crd-sources.ts +18 -0
- package/src/crd/loader.ts +4 -5
- package/src/crd/parser.test.ts +61 -0
- package/src/crd/parser.ts +37 -2
- package/src/describe-resources.ts +8 -1
- package/src/export-resources-io.test.ts +72 -0
- package/src/export-resources.ts +60 -0
- package/src/generated/index.d.ts +34 -0
- package/src/generated/index.ts +25 -0
- package/src/generated/lexicon-k8s.json +216 -0
- package/src/import/live-export.test.ts +114 -0
- package/src/import/live-export.ts +89 -0
- package/src/index.ts +5 -0
- package/src/lifecycle-integration.test.ts +111 -0
- package/src/lint/post-synth/argo-helpers.ts +49 -0
- package/src/lint/post-synth/argo002.ts +47 -0
- package/src/lint/post-synth/argo003.ts +80 -0
- package/src/lint/post-synth/argo005.ts +59 -0
- package/src/lint/post-synth/post-synth.test.ts +146 -2
- package/src/lint/post-synth/wk8301.ts +11 -3
- package/src/lint/rules/argo-appset-single-project.ts +66 -0
- package/src/lint/rules/argo-ast.ts +121 -0
- package/src/lint/rules/argo-automated-prune.ts +75 -0
- package/src/lint/rules/rules.test.ts +109 -0
- package/src/plugin.test.ts +6 -1
- package/src/plugin.ts +44 -1
- package/src/serializer-ownership.test.ts +44 -0
- package/src/serializer.test.ts +25 -0
- package/src/serializer.ts +9 -4
- package/src/skills/chant-k8s-argo.md +176 -0
package/src/crd/parser.ts
CHANGED
|
@@ -12,12 +12,24 @@ import type { CRDSpec } from "./types";
|
|
|
12
12
|
import type { PropertyConstraints } from "@intentius/chant/codegen/json-schema";
|
|
13
13
|
import { loadAll } from "js-yaml";
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Group names whose first segment doesn't yield the conventional namespace.
|
|
17
|
+
* "argoproj.io" → "Argo" (not "Argoproj") to match the Argo CD vocabulary
|
|
18
|
+
* and the ArgoAppFor / ArgoAppSetForRegions composites.
|
|
19
|
+
*/
|
|
20
|
+
const GROUP_NAMESPACE_OVERRIDES: Record<string, string> = {
|
|
21
|
+
"argoproj.io": "Argo",
|
|
22
|
+
};
|
|
23
|
+
|
|
15
24
|
/**
|
|
16
25
|
* Normalize a CRD group to a PascalCase namespace segment.
|
|
17
26
|
* "cert-manager.io" → "CertManager"
|
|
18
27
|
* "monitoring.coreos.com" → "Monitoring"
|
|
28
|
+
* "argoproj.io" → "Argo" (override)
|
|
19
29
|
*/
|
|
20
30
|
function normalizeGroupName(group: string): string {
|
|
31
|
+
const override = GROUP_NAMESPACE_OVERRIDES[group];
|
|
32
|
+
if (override) return override;
|
|
21
33
|
// Take the first segment before the first dot
|
|
22
34
|
const firstSegment = group.split(".")[0];
|
|
23
35
|
// Convert kebab-case to PascalCase
|
|
@@ -165,10 +177,33 @@ function extractPropertyTypes(schema: OpenAPISchema, parentTypeName: string): Pa
|
|
|
165
177
|
// "K8s::Ray::RayCluster::AutoscalerOptions".
|
|
166
178
|
const shortName = parentTypeName.split("::").pop()!;
|
|
167
179
|
|
|
180
|
+
// Property-type identifiers must be unique within a resource. Singularizing
|
|
181
|
+
// array names can collide a sibling scalar object — e.g. Argo Application has
|
|
182
|
+
// both `source` (object) and `sources` (array), which both reduce to
|
|
183
|
+
// `Application_Source`. Track emitted names and fall back to the raw
|
|
184
|
+
// (un-singularized) name, then a numeric suffix, on collision.
|
|
185
|
+
const usedNames = new Set<string>();
|
|
186
|
+
const uniqueName = (base: string, raw: string): string => {
|
|
187
|
+
if (!usedNames.has(base)) {
|
|
188
|
+
usedNames.add(base);
|
|
189
|
+
return base;
|
|
190
|
+
}
|
|
191
|
+
const rawCandidate = `${shortName}_${pascalCase(raw)}`;
|
|
192
|
+
if (!usedNames.has(rawCandidate)) {
|
|
193
|
+
usedNames.add(rawCandidate);
|
|
194
|
+
return rawCandidate;
|
|
195
|
+
}
|
|
196
|
+
let i = 2;
|
|
197
|
+
while (usedNames.has(`${base}${i}`)) i++;
|
|
198
|
+
const suffixed = `${base}${i}`;
|
|
199
|
+
usedNames.add(suffixed);
|
|
200
|
+
return suffixed;
|
|
201
|
+
};
|
|
202
|
+
|
|
168
203
|
for (const [name, prop] of Object.entries(specSchema.properties)) {
|
|
169
204
|
// Extract inline object definitions as property types
|
|
170
205
|
if (prop.type === "object" && prop.properties) {
|
|
171
|
-
const ptName = `${shortName}_${pascalCase(name)}
|
|
206
|
+
const ptName = uniqueName(`${shortName}_${pascalCase(name)}`, name);
|
|
172
207
|
const requiredSet = new Set<string>(prop.required ?? []);
|
|
173
208
|
|
|
174
209
|
results.push({
|
|
@@ -189,7 +224,7 @@ function extractPropertyTypes(schema: OpenAPISchema, parentTypeName: string): Pa
|
|
|
189
224
|
if (prop.type === "array" && prop.items?.type === "object" && prop.items.properties) {
|
|
190
225
|
const itemSchema = prop.items;
|
|
191
226
|
const itemProps = itemSchema.properties!;
|
|
192
|
-
const ptName = `${shortName}_${pascalCase(singularize(name))}
|
|
227
|
+
const ptName = uniqueName(`${shortName}_${pascalCase(singularize(name))}`, name);
|
|
193
228
|
const requiredSet = new Set<string>(itemSchema.required ?? []);
|
|
194
229
|
|
|
195
230
|
results.push({
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { exec } from "node:child_process";
|
|
16
16
|
import { promisify } from "node:util";
|
|
17
17
|
import type { ResourceMetadata } from "@intentius/chant/lexicon";
|
|
18
|
+
import { hasOwnershipMarker, classifyOwnership } from "@intentius/chant/ownership";
|
|
18
19
|
|
|
19
20
|
const execAsync = promisify(exec);
|
|
20
21
|
|
|
@@ -22,7 +23,7 @@ const execAsync = promisify(exec);
|
|
|
22
23
|
* Map chant entity types to `kubectl get` resource names. Add entries here
|
|
23
24
|
* as new types are needed.
|
|
24
25
|
*/
|
|
25
|
-
const KUBECTL_RESOURCE: Record<string, string> = {
|
|
26
|
+
export const KUBECTL_RESOURCE: Record<string, string> = {
|
|
26
27
|
"K8s::Apps::Deployment": "deployment.apps",
|
|
27
28
|
"K8s::Apps::StatefulSet": "statefulset.apps",
|
|
28
29
|
"K8s::Apps::DaemonSet": "daemonset.apps",
|
|
@@ -85,6 +86,7 @@ export async function describeResources(options: {
|
|
|
85
86
|
buildOutput: string;
|
|
86
87
|
entityNames: string[];
|
|
87
88
|
entities: Map<string, { entityType: string; props: Record<string, unknown> }>;
|
|
89
|
+
owned?: boolean;
|
|
88
90
|
}): Promise<Record<string, ResourceMetadata>> {
|
|
89
91
|
const result: Record<string, ResourceMetadata> = {};
|
|
90
92
|
const skippedTypes = new Set<string>();
|
|
@@ -106,11 +108,16 @@ export async function describeResources(options: {
|
|
|
106
108
|
try {
|
|
107
109
|
const { stdout } = await execAsync(cmd);
|
|
108
110
|
const obj: KubectlResponse = JSON.parse(stdout);
|
|
111
|
+
// owned filter: skip resources not carrying chant's marker label.
|
|
112
|
+
if (options.owned && !hasOwnershipMarker(obj.metadata?.labels, "label")) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
109
115
|
result[entityName] = {
|
|
110
116
|
type: entityType,
|
|
111
117
|
physicalId: obj.metadata?.uid,
|
|
112
118
|
status: statusFromKubectl(obj),
|
|
113
119
|
lastUpdated: obj.metadata?.creationTimestamp,
|
|
120
|
+
ownership: classifyOwnership(obj.metadata?.labels, "label"),
|
|
114
121
|
attributes: pruneUndefined({
|
|
115
122
|
namespace: obj.metadata?.namespace,
|
|
116
123
|
labels: obj.metadata?.labels,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { describe, test, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
|
|
3
|
+
// Synchronous delivery (value, or Error for skipped kinds) avoids dangling
|
|
4
|
+
// unhandled rejections when a kind is missing / RBAC-denied.
|
|
5
|
+
const execMock = vi.fn();
|
|
6
|
+
vi.mock("node:child_process", async () => {
|
|
7
|
+
const actual = await vi.importActual<typeof import("node:child_process")>("node:child_process");
|
|
8
|
+
return {
|
|
9
|
+
...actual,
|
|
10
|
+
exec: (
|
|
11
|
+
cmd: string,
|
|
12
|
+
cb: (err: Error | null, out: { stdout: string; stderr: string }) => void,
|
|
13
|
+
) => {
|
|
14
|
+
const r = execMock(cmd);
|
|
15
|
+
queueMicrotask(() =>
|
|
16
|
+
r instanceof Error
|
|
17
|
+
? cb(r, { stdout: "", stderr: "" })
|
|
18
|
+
: cb(null, r as { stdout: string; stderr: string }),
|
|
19
|
+
);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const { exportResources } = await import("./export-resources");
|
|
25
|
+
|
|
26
|
+
const liveDeployment = {
|
|
27
|
+
apiVersion: "apps/v1",
|
|
28
|
+
kind: "Deployment",
|
|
29
|
+
metadata: { name: "web", namespace: "default", uid: "d-1" },
|
|
30
|
+
spec: { replicas: 3, selector: { matchLabels: { app: "web" } } },
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const emptyList = { stdout: JSON.stringify({ items: [] }), stderr: "" };
|
|
34
|
+
|
|
35
|
+
describe("k8s exportResources I/O glue (#160)", () => {
|
|
36
|
+
beforeEach(() => execMock.mockReset());
|
|
37
|
+
|
|
38
|
+
test("sweeps known kinds via `kubectl get <kind> -A -o json` and maps to IR", async () => {
|
|
39
|
+
execMock.mockImplementation((cmd?: string) =>
|
|
40
|
+
cmd?.includes("get deployment.apps")
|
|
41
|
+
? { stdout: JSON.stringify({ items: [liveDeployment] }), stderr: "" }
|
|
42
|
+
: emptyList,
|
|
43
|
+
);
|
|
44
|
+
const ir = await exportResources({ environment: "prod" });
|
|
45
|
+
const cmds = execMock.mock.calls.map((c) => c[0] as string).filter(Boolean);
|
|
46
|
+
expect(cmds.every((c) => c.startsWith("kubectl get ") && c.endsWith("-A -o json"))).toBe(true);
|
|
47
|
+
expect(cmds).toContain("kubectl get deployment.apps -A -o json");
|
|
48
|
+
expect(ir.resources.map((r) => r.type)).toContain("K8s::Apps::Deployment");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("a kind that errors is skipped; the rest of the sweep still maps", async () => {
|
|
52
|
+
execMock.mockImplementation((cmd?: string) => {
|
|
53
|
+
if (cmd?.includes("get secret ")) return new Error("Error from server (Forbidden)");
|
|
54
|
+
if (cmd?.includes("get deployment.apps")) {
|
|
55
|
+
return { stdout: JSON.stringify({ items: [liveDeployment] }), stderr: "" };
|
|
56
|
+
}
|
|
57
|
+
return emptyList;
|
|
58
|
+
});
|
|
59
|
+
const ir = await exportResources({ environment: "prod" });
|
|
60
|
+
expect(ir.resources.map((r) => r.type)).toContain("K8s::Apps::Deployment");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("a type selector narrows the sweep to a single kubectl get", async () => {
|
|
64
|
+
execMock.mockImplementation(() => ({
|
|
65
|
+
stdout: JSON.stringify({ items: [liveDeployment] }),
|
|
66
|
+
stderr: "",
|
|
67
|
+
}));
|
|
68
|
+
await exportResources({ environment: "prod", selector: { type: "K8s::Apps::Deployment" } });
|
|
69
|
+
expect(execMock.mock.calls.length).toBe(1);
|
|
70
|
+
expect(execMock.mock.calls[0][0]).toBe("kubectl get deployment.apps -A -o json");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live export for the Kubernetes lexicon — implements
|
|
3
|
+
* LexiconPlugin.exportResources() so `chant import --from <cluster-env>`
|
|
4
|
+
* regenerates live objects as chant TypeScript.
|
|
5
|
+
*
|
|
6
|
+
* Reads live objects with `kubectl get <kinds> -A -o json`, strips
|
|
7
|
+
* server-managed noise to reach the declared shape (kept under `verbatim`),
|
|
8
|
+
* and maps to the import IR via the shared K8sParser. All I/O lives here; the
|
|
9
|
+
* cleaning and IR-building logic is pure in `./import/live-export`.
|
|
10
|
+
*/
|
|
11
|
+
import { exec } from "node:child_process";
|
|
12
|
+
import { promisify } from "node:util";
|
|
13
|
+
import type { ExportedTemplate, ResourceSelector } from "@intentius/chant/lexicon";
|
|
14
|
+
import { KUBECTL_RESOURCE } from "./describe-resources";
|
|
15
|
+
import { buildExportFromObjects } from "./import/live-export";
|
|
16
|
+
|
|
17
|
+
const execAsync = promisify(exec);
|
|
18
|
+
|
|
19
|
+
interface KubectlList {
|
|
20
|
+
items?: unknown[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function exportResources(options: {
|
|
24
|
+
environment: string;
|
|
25
|
+
selector?: ResourceSelector;
|
|
26
|
+
owned?: boolean;
|
|
27
|
+
verbatim?: boolean;
|
|
28
|
+
}): Promise<ExportedTemplate> {
|
|
29
|
+
// Resolve which kinds to query. A type selector narrows to one kind;
|
|
30
|
+
// otherwise sweep every kind chant knows how to map.
|
|
31
|
+
const kinds = options.selector?.type
|
|
32
|
+
? [KUBECTL_RESOURCE[options.selector.type]].filter(Boolean)
|
|
33
|
+
: Array.from(new Set(Object.values(KUBECTL_RESOURCE)));
|
|
34
|
+
|
|
35
|
+
if (kinds.length === 0) {
|
|
36
|
+
return { resources: [], parameters: [] };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// One List per kind keeps parsing simple and isolates a missing-kind error
|
|
40
|
+
// to that kind rather than failing the whole export.
|
|
41
|
+
const objects: unknown[] = [];
|
|
42
|
+
for (const kind of kinds) {
|
|
43
|
+
try {
|
|
44
|
+
const { stdout } = await execAsync(
|
|
45
|
+
["kubectl", "get", kind, "-A", "-o", "json"].join(" "),
|
|
46
|
+
);
|
|
47
|
+
const list = JSON.parse(stdout) as KubectlList;
|
|
48
|
+
if (Array.isArray(list.items)) objects.push(...list.items);
|
|
49
|
+
} catch {
|
|
50
|
+
// Kind not present in the cluster / RBAC denied — skip it, don't fail
|
|
51
|
+
// the whole export.
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return buildExportFromObjects(objects, {
|
|
56
|
+
verbatim: options.verbatim,
|
|
57
|
+
selector: options.selector,
|
|
58
|
+
owned: options.owned,
|
|
59
|
+
});
|
|
60
|
+
}
|
package/src/generated/index.d.ts
CHANGED
|
@@ -76,6 +76,40 @@ export declare class APIVersions {
|
|
|
76
76
|
readonly uid: string;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
export declare class Application {
|
|
80
|
+
constructor(props: {
|
|
81
|
+
metadata: Record<string, unknown>;
|
|
82
|
+
/** ApplicationSpec represents desired application state. Contains link to repository with application definition and additional parameters link definition revision. */
|
|
83
|
+
spec: Record<string, unknown>;
|
|
84
|
+
/** Operation contains information about a requested or running operation */
|
|
85
|
+
operation?: Record<string, unknown>;
|
|
86
|
+
});
|
|
87
|
+
readonly name: string;
|
|
88
|
+
readonly namespace: string;
|
|
89
|
+
readonly uid: string;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export declare class ApplicationSet {
|
|
93
|
+
constructor(props: {
|
|
94
|
+
metadata: Record<string, unknown>;
|
|
95
|
+
spec: Record<string, unknown>;
|
|
96
|
+
});
|
|
97
|
+
readonly name: string;
|
|
98
|
+
readonly namespace: string;
|
|
99
|
+
readonly uid: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export declare class AppProject {
|
|
103
|
+
constructor(props: {
|
|
104
|
+
metadata: Record<string, unknown>;
|
|
105
|
+
/** AppProjectSpec is the specification of an AppProject */
|
|
106
|
+
spec: Record<string, unknown>;
|
|
107
|
+
});
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly namespace: string;
|
|
110
|
+
readonly uid: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
79
113
|
export declare class BatchJob {
|
|
80
114
|
constructor(props: {
|
|
81
115
|
/** Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */
|
package/src/generated/index.ts
CHANGED
|
@@ -7,6 +7,9 @@ export const APIResourceList = createResource("K8s::Core::APIResourceList", "k8s
|
|
|
7
7
|
export const APIService = createResource("K8s::Apiregistration::APIService", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
8
8
|
export const APIServiceList = createResource("K8s::Apiregistration::APIServiceList", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
9
9
|
export const APIVersions = createResource("K8s::Core::APIVersions", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
10
|
+
export const Application = createResource("K8s::Argo::Application", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
11
|
+
export const ApplicationSet = createResource("K8s::Argo::ApplicationSet", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
12
|
+
export const AppProject = createResource("K8s::Argo::AppProject", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
10
13
|
export const BatchJob = createResource("K8s::Batch::Job", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
11
14
|
export const Binding = createResource("K8s::Core::Binding", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
12
15
|
export const CertificateSigningRequest = createResource("K8s::Certificates::CertificateSigningRequest", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
@@ -153,6 +156,28 @@ export const VolumeAttributesClassList = createResource("K8s::Storage::VolumeAtt
|
|
|
153
156
|
export const WatchEvent = createResource("K8s::Core::WatchEvent", "k8s", {"name":"name","namespace":"namespace","uid":"uid"});
|
|
154
157
|
|
|
155
158
|
export const Affinity = createProperty("K8s::Core::Affinity", "k8s");
|
|
159
|
+
export const Application_Destination = createProperty("K8s::Argo::Application.destination", "k8s");
|
|
160
|
+
export const Application_IgnoreDifference = createProperty("K8s::Argo::Application.ignoreDifferences", "k8s");
|
|
161
|
+
export const Application_Info = createProperty("K8s::Argo::Application.info", "k8s");
|
|
162
|
+
export const Application_Source = createProperty("K8s::Argo::Application.source", "k8s");
|
|
163
|
+
export const Application_Sources = createProperty("K8s::Argo::Application.sources", "k8s");
|
|
164
|
+
export const Application_SyncPolicy = createProperty("K8s::Argo::Application.syncPolicy", "k8s");
|
|
165
|
+
export const ApplicationSet_Generator = createProperty("K8s::Argo::ApplicationSet.generators", "k8s");
|
|
166
|
+
export const ApplicationSet_IgnoreApplicationDifference = createProperty("K8s::Argo::ApplicationSet.ignoreApplicationDifferences", "k8s");
|
|
167
|
+
export const ApplicationSet_PreservedFields = createProperty("K8s::Argo::ApplicationSet.preservedFields", "k8s");
|
|
168
|
+
export const ApplicationSet_Strategy = createProperty("K8s::Argo::ApplicationSet.strategy", "k8s");
|
|
169
|
+
export const ApplicationSet_SyncPolicy = createProperty("K8s::Argo::ApplicationSet.syncPolicy", "k8s");
|
|
170
|
+
export const ApplicationSet_Template = createProperty("K8s::Argo::ApplicationSet.template", "k8s");
|
|
171
|
+
export const AppProject_ClusterResourceBlacklist = createProperty("K8s::Argo::AppProject.clusterResourceBlacklist", "k8s");
|
|
172
|
+
export const AppProject_ClusterResourceWhitelist = createProperty("K8s::Argo::AppProject.clusterResourceWhitelist", "k8s");
|
|
173
|
+
export const AppProject_Destination = createProperty("K8s::Argo::AppProject.destinations", "k8s");
|
|
174
|
+
export const AppProject_DestinationServiceAccount = createProperty("K8s::Argo::AppProject.destinationServiceAccounts", "k8s");
|
|
175
|
+
export const AppProject_NamespaceResourceBlacklist = createProperty("K8s::Argo::AppProject.namespaceResourceBlacklist", "k8s");
|
|
176
|
+
export const AppProject_NamespaceResourceWhitelist = createProperty("K8s::Argo::AppProject.namespaceResourceWhitelist", "k8s");
|
|
177
|
+
export const AppProject_OrphanedResources = createProperty("K8s::Argo::AppProject.orphanedResources", "k8s");
|
|
178
|
+
export const AppProject_Role = createProperty("K8s::Argo::AppProject.roles", "k8s");
|
|
179
|
+
export const AppProject_SignatureKey = createProperty("K8s::Argo::AppProject.signatureKeys", "k8s");
|
|
180
|
+
export const AppProject_SyncWindow = createProperty("K8s::Argo::AppProject.syncWindows", "k8s");
|
|
156
181
|
export const Capabilities = createProperty("K8s::Core::Capabilities", "k8s");
|
|
157
182
|
export const ConfigMapKeySelector = createProperty("K8s::Core::ConfigMapKeySelector", "k8s");
|
|
158
183
|
export const Container = createProperty("K8s::Core::Container", "k8s");
|
|
@@ -46,6 +46,137 @@
|
|
|
46
46
|
"kind": "property",
|
|
47
47
|
"lexicon": "k8s"
|
|
48
48
|
},
|
|
49
|
+
"AppProject": {
|
|
50
|
+
"resourceType": "K8s::Argo::AppProject",
|
|
51
|
+
"kind": "resource",
|
|
52
|
+
"lexicon": "k8s",
|
|
53
|
+
"apiVersion": "argoproj.io/v1alpha1",
|
|
54
|
+
"gvkKind": "AppProject"
|
|
55
|
+
},
|
|
56
|
+
"AppProject_ClusterResourceBlacklist": {
|
|
57
|
+
"resourceType": "K8s::Argo::AppProject.clusterResourceBlacklist",
|
|
58
|
+
"kind": "property",
|
|
59
|
+
"lexicon": "k8s"
|
|
60
|
+
},
|
|
61
|
+
"AppProject_ClusterResourceWhitelist": {
|
|
62
|
+
"resourceType": "K8s::Argo::AppProject.clusterResourceWhitelist",
|
|
63
|
+
"kind": "property",
|
|
64
|
+
"lexicon": "k8s"
|
|
65
|
+
},
|
|
66
|
+
"AppProject_Destination": {
|
|
67
|
+
"resourceType": "K8s::Argo::AppProject.destinations",
|
|
68
|
+
"kind": "property",
|
|
69
|
+
"lexicon": "k8s"
|
|
70
|
+
},
|
|
71
|
+
"AppProject_DestinationServiceAccount": {
|
|
72
|
+
"resourceType": "K8s::Argo::AppProject.destinationServiceAccounts",
|
|
73
|
+
"kind": "property",
|
|
74
|
+
"lexicon": "k8s"
|
|
75
|
+
},
|
|
76
|
+
"AppProject_NamespaceResourceBlacklist": {
|
|
77
|
+
"resourceType": "K8s::Argo::AppProject.namespaceResourceBlacklist",
|
|
78
|
+
"kind": "property",
|
|
79
|
+
"lexicon": "k8s"
|
|
80
|
+
},
|
|
81
|
+
"AppProject_NamespaceResourceWhitelist": {
|
|
82
|
+
"resourceType": "K8s::Argo::AppProject.namespaceResourceWhitelist",
|
|
83
|
+
"kind": "property",
|
|
84
|
+
"lexicon": "k8s"
|
|
85
|
+
},
|
|
86
|
+
"AppProject_OrphanedResources": {
|
|
87
|
+
"resourceType": "K8s::Argo::AppProject.orphanedResources",
|
|
88
|
+
"kind": "property",
|
|
89
|
+
"lexicon": "k8s"
|
|
90
|
+
},
|
|
91
|
+
"AppProject_Role": {
|
|
92
|
+
"resourceType": "K8s::Argo::AppProject.roles",
|
|
93
|
+
"kind": "property",
|
|
94
|
+
"lexicon": "k8s"
|
|
95
|
+
},
|
|
96
|
+
"AppProject_SignatureKey": {
|
|
97
|
+
"resourceType": "K8s::Argo::AppProject.signatureKeys",
|
|
98
|
+
"kind": "property",
|
|
99
|
+
"lexicon": "k8s"
|
|
100
|
+
},
|
|
101
|
+
"AppProject_SyncWindow": {
|
|
102
|
+
"resourceType": "K8s::Argo::AppProject.syncWindows",
|
|
103
|
+
"kind": "property",
|
|
104
|
+
"lexicon": "k8s"
|
|
105
|
+
},
|
|
106
|
+
"Application": {
|
|
107
|
+
"resourceType": "K8s::Argo::Application",
|
|
108
|
+
"kind": "resource",
|
|
109
|
+
"lexicon": "k8s",
|
|
110
|
+
"apiVersion": "argoproj.io/v1alpha1",
|
|
111
|
+
"gvkKind": "Application"
|
|
112
|
+
},
|
|
113
|
+
"ApplicationSet": {
|
|
114
|
+
"resourceType": "K8s::Argo::ApplicationSet",
|
|
115
|
+
"kind": "resource",
|
|
116
|
+
"lexicon": "k8s",
|
|
117
|
+
"apiVersion": "argoproj.io/v1alpha1",
|
|
118
|
+
"gvkKind": "ApplicationSet"
|
|
119
|
+
},
|
|
120
|
+
"ApplicationSet_Generator": {
|
|
121
|
+
"resourceType": "K8s::Argo::ApplicationSet.generators",
|
|
122
|
+
"kind": "property",
|
|
123
|
+
"lexicon": "k8s"
|
|
124
|
+
},
|
|
125
|
+
"ApplicationSet_IgnoreApplicationDifference": {
|
|
126
|
+
"resourceType": "K8s::Argo::ApplicationSet.ignoreApplicationDifferences",
|
|
127
|
+
"kind": "property",
|
|
128
|
+
"lexicon": "k8s"
|
|
129
|
+
},
|
|
130
|
+
"ApplicationSet_PreservedFields": {
|
|
131
|
+
"resourceType": "K8s::Argo::ApplicationSet.preservedFields",
|
|
132
|
+
"kind": "property",
|
|
133
|
+
"lexicon": "k8s"
|
|
134
|
+
},
|
|
135
|
+
"ApplicationSet_Strategy": {
|
|
136
|
+
"resourceType": "K8s::Argo::ApplicationSet.strategy",
|
|
137
|
+
"kind": "property",
|
|
138
|
+
"lexicon": "k8s"
|
|
139
|
+
},
|
|
140
|
+
"ApplicationSet_SyncPolicy": {
|
|
141
|
+
"resourceType": "K8s::Argo::ApplicationSet.syncPolicy",
|
|
142
|
+
"kind": "property",
|
|
143
|
+
"lexicon": "k8s"
|
|
144
|
+
},
|
|
145
|
+
"ApplicationSet_Template": {
|
|
146
|
+
"resourceType": "K8s::Argo::ApplicationSet.template",
|
|
147
|
+
"kind": "property",
|
|
148
|
+
"lexicon": "k8s"
|
|
149
|
+
},
|
|
150
|
+
"Application_Destination": {
|
|
151
|
+
"resourceType": "K8s::Argo::Application.destination",
|
|
152
|
+
"kind": "property",
|
|
153
|
+
"lexicon": "k8s"
|
|
154
|
+
},
|
|
155
|
+
"Application_IgnoreDifference": {
|
|
156
|
+
"resourceType": "K8s::Argo::Application.ignoreDifferences",
|
|
157
|
+
"kind": "property",
|
|
158
|
+
"lexicon": "k8s"
|
|
159
|
+
},
|
|
160
|
+
"Application_Info": {
|
|
161
|
+
"resourceType": "K8s::Argo::Application.info",
|
|
162
|
+
"kind": "property",
|
|
163
|
+
"lexicon": "k8s"
|
|
164
|
+
},
|
|
165
|
+
"Application_Source": {
|
|
166
|
+
"resourceType": "K8s::Argo::Application.source",
|
|
167
|
+
"kind": "property",
|
|
168
|
+
"lexicon": "k8s"
|
|
169
|
+
},
|
|
170
|
+
"Application_Sources": {
|
|
171
|
+
"resourceType": "K8s::Argo::Application.sources",
|
|
172
|
+
"kind": "property",
|
|
173
|
+
"lexicon": "k8s"
|
|
174
|
+
},
|
|
175
|
+
"Application_SyncPolicy": {
|
|
176
|
+
"resourceType": "K8s::Argo::Application.syncPolicy",
|
|
177
|
+
"kind": "property",
|
|
178
|
+
"lexicon": "k8s"
|
|
179
|
+
},
|
|
49
180
|
"AutoscalerOptions": {
|
|
50
181
|
"resourceType": "K8s::Ray::RayCluster.autoscalerOptions",
|
|
51
182
|
"kind": "property",
|
|
@@ -133,6 +264,16 @@
|
|
|
133
264
|
"apiVersion": "certificates.k8s.io/v1",
|
|
134
265
|
"gvkKind": "CertificateSigningRequestList"
|
|
135
266
|
},
|
|
267
|
+
"ClusterResourceBlacklist": {
|
|
268
|
+
"resourceType": "K8s::Argo::AppProject.clusterResourceBlacklist",
|
|
269
|
+
"kind": "property",
|
|
270
|
+
"lexicon": "k8s"
|
|
271
|
+
},
|
|
272
|
+
"ClusterResourceWhitelist": {
|
|
273
|
+
"resourceType": "K8s::Argo::AppProject.clusterResourceWhitelist",
|
|
274
|
+
"kind": "property",
|
|
275
|
+
"lexicon": "k8s"
|
|
276
|
+
},
|
|
136
277
|
"ClusterRole": {
|
|
137
278
|
"resourceType": "K8s::Rbac::ClusterRole",
|
|
138
279
|
"kind": "resource",
|
|
@@ -325,6 +466,11 @@
|
|
|
325
466
|
"kind": "property",
|
|
326
467
|
"lexicon": "k8s"
|
|
327
468
|
},
|
|
469
|
+
"DestinationServiceAccount": {
|
|
470
|
+
"resourceType": "K8s::Argo::AppProject.destinationServiceAccounts",
|
|
471
|
+
"kind": "property",
|
|
472
|
+
"lexicon": "k8s"
|
|
473
|
+
},
|
|
328
474
|
"DeviceClass": {
|
|
329
475
|
"resourceType": "K8s::Resource::DeviceClass",
|
|
330
476
|
"kind": "resource",
|
|
@@ -449,6 +595,11 @@
|
|
|
449
595
|
"kind": "property",
|
|
450
596
|
"lexicon": "k8s"
|
|
451
597
|
},
|
|
598
|
+
"Generator": {
|
|
599
|
+
"resourceType": "K8s::Argo::ApplicationSet.generators",
|
|
600
|
+
"kind": "property",
|
|
601
|
+
"lexicon": "k8s"
|
|
602
|
+
},
|
|
452
603
|
"HPA": {
|
|
453
604
|
"resourceType": "K8s::Autoscaling::HorizontalPodAutoscaler",
|
|
454
605
|
"kind": "resource",
|
|
@@ -509,6 +660,21 @@
|
|
|
509
660
|
"apiVersion": "networking.k8s.io/v1beta1",
|
|
510
661
|
"gvkKind": "IPAddressList"
|
|
511
662
|
},
|
|
663
|
+
"IgnoreApplicationDifference": {
|
|
664
|
+
"resourceType": "K8s::Argo::ApplicationSet.ignoreApplicationDifferences",
|
|
665
|
+
"kind": "property",
|
|
666
|
+
"lexicon": "k8s"
|
|
667
|
+
},
|
|
668
|
+
"IgnoreDifference": {
|
|
669
|
+
"resourceType": "K8s::Argo::Application.ignoreDifferences",
|
|
670
|
+
"kind": "property",
|
|
671
|
+
"lexicon": "k8s"
|
|
672
|
+
},
|
|
673
|
+
"Info": {
|
|
674
|
+
"resourceType": "K8s::Argo::Application.info",
|
|
675
|
+
"kind": "property",
|
|
676
|
+
"lexicon": "k8s"
|
|
677
|
+
},
|
|
512
678
|
"Ing": {
|
|
513
679
|
"resourceType": "K8s::Networking::Ingress",
|
|
514
680
|
"kind": "resource",
|
|
@@ -678,6 +844,16 @@
|
|
|
678
844
|
"apiVersion": "v1",
|
|
679
845
|
"gvkKind": "NamespaceList"
|
|
680
846
|
},
|
|
847
|
+
"NamespaceResourceBlacklist": {
|
|
848
|
+
"resourceType": "K8s::Argo::AppProject.namespaceResourceBlacklist",
|
|
849
|
+
"kind": "property",
|
|
850
|
+
"lexicon": "k8s"
|
|
851
|
+
},
|
|
852
|
+
"NamespaceResourceWhitelist": {
|
|
853
|
+
"resourceType": "K8s::Argo::AppProject.namespaceResourceWhitelist",
|
|
854
|
+
"kind": "property",
|
|
855
|
+
"lexicon": "k8s"
|
|
856
|
+
},
|
|
681
857
|
"NetPol": {
|
|
682
858
|
"resourceType": "K8s::Networking::NetworkPolicy",
|
|
683
859
|
"kind": "resource",
|
|
@@ -756,6 +932,11 @@
|
|
|
756
932
|
"kind": "property",
|
|
757
933
|
"lexicon": "k8s"
|
|
758
934
|
},
|
|
935
|
+
"OrphanedResources": {
|
|
936
|
+
"resourceType": "K8s::Argo::AppProject.orphanedResources",
|
|
937
|
+
"kind": "property",
|
|
938
|
+
"lexicon": "k8s"
|
|
939
|
+
},
|
|
759
940
|
"PDB": {
|
|
760
941
|
"resourceType": "K8s::Policy::PodDisruptionBudget",
|
|
761
942
|
"kind": "resource",
|
|
@@ -899,6 +1080,11 @@
|
|
|
899
1080
|
"kind": "property",
|
|
900
1081
|
"lexicon": "k8s"
|
|
901
1082
|
},
|
|
1083
|
+
"PreservedFields": {
|
|
1084
|
+
"resourceType": "K8s::Argo::ApplicationSet.preservedFields",
|
|
1085
|
+
"kind": "property",
|
|
1086
|
+
"lexicon": "k8s"
|
|
1087
|
+
},
|
|
902
1088
|
"PriorityClass": {
|
|
903
1089
|
"resourceType": "K8s::Scheduling::PriorityClass",
|
|
904
1090
|
"kind": "resource",
|
|
@@ -1330,6 +1516,21 @@
|
|
|
1330
1516
|
}
|
|
1331
1517
|
}
|
|
1332
1518
|
},
|
|
1519
|
+
"SignatureKey": {
|
|
1520
|
+
"resourceType": "K8s::Argo::AppProject.signatureKeys",
|
|
1521
|
+
"kind": "property",
|
|
1522
|
+
"lexicon": "k8s"
|
|
1523
|
+
},
|
|
1524
|
+
"Source": {
|
|
1525
|
+
"resourceType": "K8s::Argo::Application.source",
|
|
1526
|
+
"kind": "property",
|
|
1527
|
+
"lexicon": "k8s"
|
|
1528
|
+
},
|
|
1529
|
+
"Sources": {
|
|
1530
|
+
"resourceType": "K8s::Argo::Application.sources",
|
|
1531
|
+
"kind": "property",
|
|
1532
|
+
"lexicon": "k8s"
|
|
1533
|
+
},
|
|
1333
1534
|
"StatefulSet": {
|
|
1334
1535
|
"resourceType": "K8s::Apps::StatefulSet",
|
|
1335
1536
|
"kind": "resource",
|
|
@@ -1370,6 +1571,11 @@
|
|
|
1370
1571
|
"apiVersion": "storage.k8s.io/v1",
|
|
1371
1572
|
"gvkKind": "StorageClassList"
|
|
1372
1573
|
},
|
|
1574
|
+
"Strategy": {
|
|
1575
|
+
"resourceType": "K8s::Argo::ApplicationSet.strategy",
|
|
1576
|
+
"kind": "property",
|
|
1577
|
+
"lexicon": "k8s"
|
|
1578
|
+
},
|
|
1373
1579
|
"Subject": {
|
|
1374
1580
|
"resourceType": "K8s::Rbac::Subject",
|
|
1375
1581
|
"kind": "property",
|
|
@@ -1392,11 +1598,21 @@
|
|
|
1392
1598
|
"kind": "property",
|
|
1393
1599
|
"lexicon": "k8s"
|
|
1394
1600
|
},
|
|
1601
|
+
"SyncWindow": {
|
|
1602
|
+
"resourceType": "K8s::Argo::AppProject.syncWindows",
|
|
1603
|
+
"kind": "property",
|
|
1604
|
+
"lexicon": "k8s"
|
|
1605
|
+
},
|
|
1395
1606
|
"TCPSocketAction": {
|
|
1396
1607
|
"resourceType": "K8s::Core::TCPSocketAction",
|
|
1397
1608
|
"kind": "property",
|
|
1398
1609
|
"lexicon": "k8s"
|
|
1399
1610
|
},
|
|
1611
|
+
"Template": {
|
|
1612
|
+
"resourceType": "K8s::Argo::ApplicationSet.template",
|
|
1613
|
+
"kind": "property",
|
|
1614
|
+
"lexicon": "k8s"
|
|
1615
|
+
},
|
|
1400
1616
|
"TokenRequest": {
|
|
1401
1617
|
"resourceType": "K8s::Authentication::TokenRequest",
|
|
1402
1618
|
"kind": "resource",
|