Application Developer User Guide
Prerequisites
To follow this guide, you will need:
- Kusion v0.12 or higher installed locally
Workflow
As an application developer, the workflow of using a Kusion module looks like this:
- Browse available modules registered by platform engineers in the workspace
- Add modules you need to your Stack
- Initialize modules
- Apply the AppConfiguration
Browse available modules
For all KusionStack built-in modules, you can find all available modules and documents in the reference
Since the platform engineers have already registered the available modules in the workspace, app developers can execute kusion mod list to list the available modules.
kusion mod list --workspace dev
Name      Version  URL
kawesome  0.2.0    oci://ghcr.io/kusionstack/kawesome
Add modules to your Stack
Taking kawesome as an example, the directory structure is shown below:
example
├── dev
│   ├── example_workspace.yaml
│   ├── kcl.mod
│   ├── main.k
│   └── stack.yaml
└── project.yaml
Select the module you need from the result of kusion mod list and execute kusion mod add kawesome to add kawesome into your Stack.
Once you have added the kawesome module, the kcl.mod file will be updated to look like this.
[package]
name = "example"
[dependencies]
kawesome = { oci = "oci://ghcr.io/kusionstack/kawesome", tag = "0.2.0" }
service = {oci = "oci://ghcr.io/kusionstack/service", tag = "0.1.0" }
kam = { git = "https://github.com/KusionStack/kam.git", tag = "0.2.0" }
[profile]
entries = ["main.k"]
- The kamdependency represents the Kusion Application Module which contains the AppConfiguration.
- The servicedependency represents the service workload module.
- The kawesomeis the Kusion module we are going to use in the AppConfiguration.
Initialize modules
# The configuration codes in perspective of developers. 
import kam.v1.app_configuration as ac
import service
import service.container as c
import kawesome.v1.kawesome
kawesome: ac.AppConfiguration {
    # Declare the workload configurations. 
    workload: service.Service {
        containers: {
            kawesome: c.Container {
                image: "hashicorp/http-echo"
                env: {
                    "ECHO_TEXT": "$(KUSION_KAWESOME_RANDOM_PASSWORD)"
                }
            }
        }
        replicas: 1
    }
    # Declare the kawesome module configurations. 
    accessories: {
        "kawesome": kawesome.Kawesome {
            service: kawesome.Service{
                port: 5678
            }
            randomPassword: kawesome.RandomPassword {
                length: 20
            }
        }
    }
}
Initialize the kawesome module in the accessories block of the AppConfiguration. The key of the accessories item represents the module name and the value represents the actual module you required.
Apply the result
Execute the preview command to validate the result.
kusion apply
 ✔︎  Generating Spec in the Stack dev...
Stack: dev
ID                                                     Action
hashicorp:random:random_password:example-dev-kawesome  Create
v1:Namespace:example                                   Create
v1:Service:example:example-dev-kawesome                Create
apps/v1:Deployment:example:example-dev-kawesome        Create
Do you want to apply these diffs?:
  > details
Which diff detail do you want to see?:
> all
  hashicorp:random:random_password:example-dev-kawesome Create
  v1:Namespace:example Create
  v1:Service:example:example-dev-kawesome Create
  apps/v1:Deployment:example:example-dev-kawesome Create