Skip to content

Commit 2822630

Browse files
authored
feat: update kusion module develop guide (#527)
1 parent 187dd7e commit 2822630

File tree

4 files changed

+135
-3
lines changed

4 files changed

+135
-3
lines changed

docs/kusion/3-concepts/3-module/2-develop-guide.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,73 @@ type Patcher struct {
141141
The `GeneratorRequest` contains the application developer's config, platform engineer's config, workload config and related metadata a module could need to generate infrastructure resources.
142142
In the `GeneratorResponse`, there are two fields, `Resources` and `Patchers`. The `Resource` represents resources that should operated by Kusion and they will be appended into the [Spec](../spec). The `Patchers` are used to patch the workload and other resources.
143143

144+
### Implicit Resource Dependency
145+
146+
When you need to use an attribute of another resource as the value of a specific resource attribute, Kusion supports declaring the implicit resource dependencies with the `$kusion_path` prefix. You can concatenate the implicit resource dependency path with the resource `id`, attribute `name` and the `$kusion_path` prefix, for example:
147+
148+
```yaml
149+
# Dependency path as an attribute value.
150+
spec:
151+
resources:
152+
- id: v1:Service:test-ns:test-service
153+
type: Kubernetes
154+
attributes:
155+
metadata:
156+
annotations:
157+
deployment-name: $kusion_path.v1:Deployment:test-ns:test-deployment.metadata.name
158+
```
159+
160+
In addition, please note that:
161+
162+
- The implicit resource dependency path can only be used to replace the value in `Attributes` field of the `Resource`, but not the key. For example, the following `Spec` is **invalid**:
163+
164+
```yaml
165+
# Dependency path not in `attributes`.
166+
spec:
167+
resources:
168+
- id: v1:Service:test:$kusion_path.apps/v1:Deployment:test-ns:test-deployment.metadata.name
169+
```
170+
171+
```yaml
172+
# Dependency path in the key, but not in the value.
173+
spec:
174+
resources:
175+
- id: apps/v1:Deployment:test-ns:test-deployment
176+
type: Kubernetes
177+
attributes:
178+
metadata:
179+
annotations:
180+
$kusion_path.v1:Service:test-ns:test-service.metadata.name: test-svc
181+
```
182+
183+
- The implicit resource dependency path can only be used as a standalone value and cannot be combined with other string. For example, the following `Spec` is **invalid**:
184+
185+
```yaml
186+
# Dependency path combined with other string.
187+
spec:
188+
resources:
189+
- id: apps/v1:Deployment:test-ns:test-deployment
190+
type: Kubernetes
191+
attributes:
192+
metadata:
193+
annotations:
194+
test-svc: $kusion_path.v1:Service:test-ns:test-service.metadata.name + "-test"
195+
```
196+
197+
- The impliciy resource dependency path does not support accessing the value in an array, so the following is currently **invalid**:
198+
199+
```yaml
200+
# Dependency path accessing the value in an array.
201+
spec:
202+
resources:
203+
- id: apps/v1:Deployment:test-ns:test-deployment
204+
type: Kubernetes
205+
attributes:
206+
metadata:
207+
annotations:
208+
test-svc: $kusion_path.v1:Service:test-ns:test-service.spec.ports[0].name
209+
```
210+
144211
## Publish
145212

146213
Publish the Kusion module to an OCI registry with the command `kusion mod push`. If your module is open to the public, we **welcome and highly encourage** you to contribute it to the module registry [catalog](https://github.com/KusionStack/catalog), so that more people can benefit from the module. Submit a pull request to this repository, once it is merged, it will be published to the [KusionStack GitHub container registry](https://github.com/orgs/KusionStack/packages).

docs/kusion/3-concepts/3-module/3-app-dev-guide.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
To follow this guide, you will need:
66

7-
- Go 1.22 or higher installed and configured
87
- Kusion v0.12 or higher installed locally
98

109
## Workflow

docs_versioned_docs/version-v0.12/3-concepts/3-module/2-develop-guide.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,73 @@ type Patcher struct {
141141
The `GeneratorRequest` contains the application developer's config, platform engineer's config, workload config and related metadata a module could need to generate infrastructure resources.
142142
In the `GeneratorResponse`, there are two fields, `Resources` and `Patchers`. The `Resource` represents resources that should operated by Kusion and they will be appended into the [Spec](../spec). The `Patchers` are used to patch the workload and other resources.
143143

144+
### Implicit Resource Dependency
145+
146+
When you need to use an attribute of another resource as the value of a specific resource attribute, Kusion supports declaring the implicit resource dependencies with the `$kusion_path` prefix. You can concatenate the implicit resource dependency path with the resource `id`, attribute `name` and the `$kusion_path` prefix, for example:
147+
148+
```yaml
149+
# Dependency path as an attribute value.
150+
spec:
151+
resources:
152+
- id: v1:Service:test-ns:test-service
153+
type: Kubernetes
154+
attributes:
155+
metadata:
156+
annotations:
157+
deployment-name: $kusion_path.v1:Deployment:test-ns:test-deployment.metadata.name
158+
```
159+
160+
In addition, please note that:
161+
162+
- The implicit resource dependency path can only be used to replace the value in `Attributes` field of the `Resource`, but not the key. For example, the following `Spec` is **invalid**:
163+
164+
```yaml
165+
# Dependency path not in `attributes`.
166+
spec:
167+
resources:
168+
- id: v1:Service:test:$kusion_path.apps/v1:Deployment:test-ns:test-deployment.metadata.name
169+
```
170+
171+
```yaml
172+
# Dependency path in the key, but not in the value.
173+
spec:
174+
resources:
175+
- id: apps/v1:Deployment:test-ns:test-deployment
176+
type: Kubernetes
177+
attributes:
178+
metadata:
179+
annotations:
180+
$kusion_path.v1:Service:test-ns:test-service.metadata.name: test-svc
181+
```
182+
183+
- The implicit resource dependency path can only be used as a standalone value and cannot be combined with other string. For example, the following `Spec` is **invalid**:
184+
185+
```yaml
186+
# Dependency path combined with other string.
187+
spec:
188+
resources:
189+
- id: apps/v1:Deployment:test-ns:test-deployment
190+
type: Kubernetes
191+
attributes:
192+
metadata:
193+
annotations:
194+
test-svc: $kusion_path.v1:Service:test-ns:test-service.metadata.name + "-test"
195+
```
196+
197+
- The impliciy resource dependency path does not support accessing the value in an array, so the following is currently **invalid**:
198+
199+
```yaml
200+
# Dependency path accessing the value in an array.
201+
spec:
202+
resources:
203+
- id: apps/v1:Deployment:test-ns:test-deployment
204+
type: Kubernetes
205+
attributes:
206+
metadata:
207+
annotations:
208+
test-svc: $kusion_path.v1:Service:test-ns:test-service.spec.ports[0].name
209+
```
210+
144211
## Publish
145212

146213
Publish the Kusion module to an OCI registry with the command `kusion mod push`. If your module is open to the public, we **welcome and highly encourage** you to contribute it to the module registry [catalog](https://github.com/KusionStack/catalog), so that more people can benefit from the module. Submit a pull request to this repository, once it is merged, it will be published to the [KusionStack GitHub container registry](https://github.com/orgs/KusionStack/packages).

docs_versioned_docs/version-v0.12/3-concepts/3-module/3-app-dev-guide.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44

55
To follow this guide, you will need:
66

7-
- Go 1.22 or higher installed and configured
87
- Kusion v0.12 or higher installed locally
98

109
## Workflow
1110

12-
As a platform engineer, the workflow of developing a Kusion module looks like this:
11+
As an application developer, the workflow of using a Kusion module looks like this:
1312

1413
1. Browse available modules registered by platform engineers in the workspace
1514
2. Add modules you need to your Stack

0 commit comments

Comments
 (0)