Skip to content

Commit 0ae6f27

Browse files
committed
feat: wrap kubernetes models and export from sdk
1 parent c96a4a1 commit 0ae6f27

File tree

5 files changed

+187
-6
lines changed

5 files changed

+187
-6
lines changed

packages/sdk/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ export type * from "./src/types.ts"
77
export * from "./src/Model/index.ts"
88
export * from "./src/utils/FieldRef.ts"
99
export * from "./src/utils/secretUtils.ts"
10+
11+
// Export Kubernetes resources with FieldRef support
12+
export * from "./src/kubernetes/index.ts"

packages/sdk/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"@kubernetes-models/base": "^5.0.1",
1111
"@types/jsonpath": "^0.2.4",
1212
"jsonpath": "^1.1.1",
13+
"kubernetes-models": "^4.5.0",
1314
"lodash": "^4.17.21",
1415
"pino": "^9.6.0",
1516
"yaml": "^2.7.0"
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import * as kubernetesModels from "kubernetes-models"
2+
3+
import { withFieldRefsClassFactory } from "../utils/FieldRef"
4+
5+
// Core v1 resources with FieldRef support
6+
export const v1 = {
7+
// Core resources
8+
ConfigMap: withFieldRefsClassFactory(kubernetesModels.v1.ConfigMap),
9+
Secret: withFieldRefsClassFactory(kubernetesModels.v1.Secret),
10+
Service: withFieldRefsClassFactory(kubernetesModels.v1.Service),
11+
Pod: withFieldRefsClassFactory(kubernetesModels.v1.Pod),
12+
Namespace: withFieldRefsClassFactory(kubernetesModels.v1.Namespace),
13+
14+
// Storage resources
15+
PersistentVolume: withFieldRefsClassFactory(kubernetesModels.v1.PersistentVolume),
16+
PersistentVolumeClaim: withFieldRefsClassFactory(kubernetesModels.v1.PersistentVolumeClaim),
17+
18+
// Service account and RBAC
19+
ServiceAccount: withFieldRefsClassFactory(kubernetesModels.v1.ServiceAccount),
20+
21+
// Events and endpoints
22+
Event: withFieldRefsClassFactory(kubernetesModels.v1.Event),
23+
Endpoints: withFieldRefsClassFactory(kubernetesModels.v1.Endpoints),
24+
25+
// Resource management
26+
ResourceQuota: withFieldRefsClassFactory(kubernetesModels.v1.ResourceQuota),
27+
LimitRange: withFieldRefsClassFactory(kubernetesModels.v1.LimitRange),
28+
29+
// Node resources
30+
Node: withFieldRefsClassFactory(kubernetesModels.v1.Node),
31+
32+
// Controllers
33+
ReplicationController: withFieldRefsClassFactory(kubernetesModels.v1.ReplicationController),
34+
35+
// Pod templates
36+
PodTemplate: withFieldRefsClassFactory(kubernetesModels.v1.PodTemplate),
37+
38+
// Bindings
39+
Binding: withFieldRefsClassFactory(kubernetesModels.v1.Binding),
40+
41+
// Component status
42+
ComponentStatus: withFieldRefsClassFactory(kubernetesModels.v1.ComponentStatus),
43+
}
44+
45+
// Apps resources with FieldRef support
46+
export const apps = {
47+
v1: {
48+
Deployment: withFieldRefsClassFactory(kubernetesModels.apps.v1.Deployment),
49+
StatefulSet: withFieldRefsClassFactory(kubernetesModels.apps.v1.StatefulSet),
50+
DaemonSet: withFieldRefsClassFactory(kubernetesModels.apps.v1.DaemonSet),
51+
ReplicaSet: withFieldRefsClassFactory(kubernetesModels.apps.v1.ReplicaSet),
52+
},
53+
}
54+
55+
// Batch resources with FieldRef support
56+
export const batch = {
57+
v1: {
58+
Job: withFieldRefsClassFactory(kubernetesModels.batch.v1.Job),
59+
CronJob: withFieldRefsClassFactory(kubernetesModels.batch.v1.CronJob),
60+
},
61+
}
62+
63+
// Networking resources with FieldRef support
64+
export const networking = {
65+
v1: {
66+
Ingress: withFieldRefsClassFactory(kubernetesModels.networkingK8sIo.v1.Ingress),
67+
NetworkPolicy: withFieldRefsClassFactory(kubernetesModels.networkingK8sIo.v1.NetworkPolicy),
68+
IngressClass: withFieldRefsClassFactory(kubernetesModels.networkingK8sIo.v1.IngressClass),
69+
},
70+
}
71+
72+
// RBAC resources with FieldRef support
73+
export const rbac = {
74+
v1: {
75+
Role: withFieldRefsClassFactory(kubernetesModels.rbacAuthorizationK8sIo.v1.Role),
76+
RoleBinding: withFieldRefsClassFactory(kubernetesModels.rbacAuthorizationK8sIo.v1.RoleBinding),
77+
ClusterRole: withFieldRefsClassFactory(kubernetesModels.rbacAuthorizationK8sIo.v1.ClusterRole),
78+
ClusterRoleBinding: withFieldRefsClassFactory(
79+
kubernetesModels.rbacAuthorizationK8sIo.v1.ClusterRoleBinding
80+
),
81+
},
82+
}
83+
84+
// Storage resources with FieldRef support
85+
export const storage = {
86+
v1: {
87+
StorageClass: withFieldRefsClassFactory(kubernetesModels.storageK8sIo.v1.StorageClass),
88+
VolumeAttachment: withFieldRefsClassFactory(kubernetesModels.storageK8sIo.v1.VolumeAttachment),
89+
CSIDriver: withFieldRefsClassFactory(kubernetesModels.storageK8sIo.v1.CSIDriver),
90+
CSINode: withFieldRefsClassFactory(kubernetesModels.storageK8sIo.v1.CSINode),
91+
CSIStorageCapacity: withFieldRefsClassFactory(
92+
kubernetesModels.storageK8sIo.v1.CSIStorageCapacity
93+
),
94+
},
95+
}
96+
97+
// Autoscaling resources with FieldRef support
98+
export const autoscaling = {
99+
v1: {
100+
HorizontalPodAutoscaler: withFieldRefsClassFactory(
101+
kubernetesModels.autoscaling.v1.HorizontalPodAutoscaler
102+
),
103+
},
104+
v2: {
105+
HorizontalPodAutoscaler: withFieldRefsClassFactory(
106+
kubernetesModels.autoscaling.v2.HorizontalPodAutoscaler
107+
),
108+
},
109+
}
110+
111+
// Policy resources with FieldRef support
112+
export const policy = {
113+
v1: {
114+
PodDisruptionBudget: withFieldRefsClassFactory(kubernetesModels.policy.v1.PodDisruptionBudget),
115+
},
116+
}
117+
118+
// API extensions resources with FieldRef support
119+
export const apiextensions = {
120+
v1: {
121+
CustomResourceDefinition: withFieldRefsClassFactory(
122+
kubernetesModels.apiextensionsK8sIo.v1.CustomResourceDefinition
123+
),
124+
},
125+
}
126+
127+
// Certificates resources with FieldRef support
128+
export const certificates = {
129+
v1: {
130+
CertificateSigningRequest: withFieldRefsClassFactory(
131+
kubernetesModels.certificatesK8sIo.v1.CertificateSigningRequest
132+
),
133+
},
134+
}
135+
136+
// Coordination resources with FieldRef support
137+
export const coordination = {
138+
v1: {
139+
Lease: withFieldRefsClassFactory(kubernetesModels.coordinationK8sIo.v1.Lease),
140+
},
141+
}
142+
143+
// Events resources with FieldRef support
144+
export const events = {
145+
v1: {
146+
Event: withFieldRefsClassFactory(kubernetesModels.eventsK8sIo.v1.Event),
147+
},
148+
}
149+
150+
// Also export the original kubernetes-models for reference if needed
151+
export { kubernetesModels }
152+
153+
// Export types for convenience
154+
export type {
155+
IConfigMap,
156+
IPod,
157+
IService,
158+
ISecret,
159+
INamespace,
160+
IPersistentVolume,
161+
IPersistentVolumeClaim,
162+
IServiceAccount,
163+
} from "kubernetes-models/v1"
164+
165+
export type { IDeployment, IStatefulSet, IDaemonSet, IReplicaSet } from "kubernetes-models/apps/v1"
166+
167+
export type { IJob, ICronJob } from "kubernetes-models/batch/v1"

tests/fixtures/domain-sdk/functions/xsimpleconfigmaps/composition.fn.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { logger, FieldRef, withFieldRefsClassFactory, Model } from "@crossplane-js/sdk"
1+
import { logger, FieldRef, v1 } from "@crossplane-js/sdk"
22
import type { CrossplaneDesiredResources, CrossplaneObservedResources } from "@crossplane-js/sdk"
33

4-
import { v1 } from "kubernetes-models"
54
import type { XSimpleConfigMap } from "@/models/test.crossplane.io/v1beta1"
65

7-
const ConfigMap = withFieldRefsClassFactory(v1.ConfigMap)
8-
96
export default function(composite: XSimpleConfigMap, _resources: CrossplaneObservedResources): CrossplaneDesiredResources {
107
logger.info("Composition function started")
118

@@ -23,14 +20,14 @@ export default function(composite: XSimpleConfigMap, _resources: CrossplaneObser
2320
uppercaseData[key.toUpperCase()] = data[key].toUpperCase();
2421
}
2522

26-
const testConfigMap = new ConfigMap({
23+
const testConfigMap = new v1.ConfigMap({
2724
metadata: {
2825
name: "generated-configmap",
2926
namespace: "test-xfuncjs",
3027
// namespace: namespace,
3128
labels: {
3229
example: "true"
33-
}
30+
},
3431
},
3532
data: {
3633
...uppercaseData,

yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ __metadata:
336336
"@types/jsonpath": "npm:^0.2.4"
337337
"@types/lodash": "npm:^4"
338338
jsonpath: "npm:^1.1.1"
339+
kubernetes-models: "npm:^4.5.0"
339340
lodash: "npm:^4.17.21"
340341
pino: "npm:^9.6.0"
341342
yaml: "npm:^2.7.0"
@@ -5894,6 +5895,18 @@ __metadata:
58945895
languageName: node
58955896
linkType: hard
58965897

5898+
"kubernetes-models@npm:^4.5.0":
5899+
version: 4.5.0
5900+
resolution: "kubernetes-models@npm:4.5.0"
5901+
dependencies:
5902+
"@kubernetes-models/apimachinery": "npm:^2.1.0"
5903+
"@kubernetes-models/base": "npm:^5.0.1"
5904+
"@kubernetes-models/validate": "npm:^4.0.0"
5905+
"@swc/helpers": "npm:^0.5.8"
5906+
checksum: 10c0/f890a42b28724704b6b2ccff301f08ab52e2d76bb4797344a7d10e663bd99e3d3c8a1b99cb8d69a8af47463bad147ed445fad1ea946cbb098aad3ca573a8d677
5907+
languageName: node
5908+
linkType: hard
5909+
58975910
"levn@npm:^0.4.1":
58985911
version: 0.4.1
58995912
resolution: "levn@npm:0.4.1"

0 commit comments

Comments
 (0)