Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: bump kawesome module to 0.3.0 #11

Merged
merged 2 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ go.work

# KCL & KPM cache file
.kclvm
*.mod.lock
*.mod.lock

# Local binary files
bin/
4 changes: 2 additions & 2 deletions example/dev/example_workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
modules:
kawesome:
path: oci://ghcr.io/kusionstack/kawesome
version: 0.2.0
version: 0.3.0
configs:
default:
service:
labels:
kusionstack.io/module-name: kawesome
annotations:
kusionstack.io/module-version: 0.2.0
kusionstack.io/module-version: 0.3.0
2 changes: 1 addition & 1 deletion example/dev/kcl.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "example"

[dependencies]
kawesome = { oci = "oci://ghcr.io/kusionstack/kawesome", tag = "0.2.0" }
kawesome = { oci = "oci://ghcr.io/kusionstack/kawesome", tag = "0.3.0" }
service = {oci = "oci://ghcr.io/kusionstack/service", tag = "0.1.0" }
kam = { git = "https://github.com/KusionStack/kam.git", tag = "0.2.0" }

Expand Down
2 changes: 1 addition & 1 deletion kcl.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[package]
name = "kawesome"
version = "0.2.0"
version = "0.3.0"
2 changes: 1 addition & 1 deletion src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ TEST?=$$(go list ./... | grep -v 'vendor')
###### chang variables below according to your own modules ###
NAMESPACE=kusionstack
NAME=kawesome
VERSION=0.1.0
VERSION=0.3.0
BINARY=../bin/kusion-module-${NAME}_${VERSION}

LOCAL_ARCH := $(shell uname -m)
Expand Down
52 changes: 28 additions & 24 deletions src/go.mod
Original file line number Diff line number Diff line change
@@ -1,49 +1,53 @@
module kawsome

go 1.22.1
go 1.23.1

toolchain go1.23.2

require (
github.com/stretchr/testify v1.9.0
github.com/stretchr/testify v1.10.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.30.0
k8s.io/apimachinery v0.30.0
kusionstack.io/kusion v0.12.0-rc.3.0.20240612063438-7e50571609dc
kusionstack.io/kusion-module-framework v0.2.0
k8s.io/api v0.31.3
k8s.io/apimachinery v0.31.3
kusionstack.io/kusion-api-go v0.13.0
kusionstack.io/kusion-module-framework v0.2.3-beta.6
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/hashicorp/go-hclog v1.6.2 // indirect
github.com/hashicorp/go-plugin v1.6.0 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-plugin v1.6.2 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect
google.golang.org/grpc v1.64.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
golang.org/x/net v0.31.0 // indirect
golang.org/x/sys v0.27.0 // indirect
golang.org/x/text v0.20.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect
google.golang.org/grpc v1.68.0 // indirect
google.golang.org/protobuf v1.35.2 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
k8s.io/utils v0.0.0-20240310230437-4693a0247e57 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/utils v0.0.0-20241104163129-6fe5fd82f078 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.3 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
101 changes: 52 additions & 49 deletions src/go.sum

Large diffs are not rendered by default.

50 changes: 31 additions & 19 deletions src/kawesome_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@ package main

import (
"context"
"encoding/json"
"errors"
"fmt"
"runtime/debug"
"strings"

"gopkg.in/yaml.v2"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
kusionapiv1 "kusionstack.io/kusion-api-go/api.kusion.io/v1"
"kusionstack.io/kusion-module-framework/pkg/log"
"kusionstack.io/kusion-module-framework/pkg/module"
"kusionstack.io/kusion-module-framework/pkg/server"
apiv1 "kusionstack.io/kusion/pkg/apis/api.kusion.io/v1"
"kusionstack.io/kusion/pkg/log"
"kusionstack.io/kusion/pkg/modules"
)

func main() {
Expand Down Expand Up @@ -61,37 +62,48 @@ type RandomPassword struct {

// Generate implements the generation logic of kawesome module, including a Kubernetes Service and
// a Terraform random_password resource.
func (k *Kawesome) Generate(_ context.Context, request *module.GeneratorRequest) (*module.GeneratorResponse, error) {
func (k *Kawesome) Generate(ctx context.Context, request *module.GeneratorRequest) (response *module.GeneratorResponse, err error) {
// Get the module logger with the generator context.
logger := log.GetModuleLogger(ctx)
logger.Info("Generating resources...")

defer func() {
if r := recover(); r != nil {
log.Debugf("failed to generate kawesome module: %v", r)
logger.Debug("failed to generate kawesome module: %v", r)
response = nil
rawRequest, _ := json.Marshal(request)
err = fmt.Errorf("panic in kawesome module generator but recovered with error: [%v] and stack %v and request %v",
r, string(debug.Stack()), string(rawRequest))
}
}()

// Kawesome module does not exist in AppConfiguration configs.
if request.DevConfig == nil {
log.Info("Kawesome module does not exist in AppConfiguration configs")
logger.Info("Kawesome module does not exist in AppConfiguration configs")
}

// Port should be binded to a Service Workload.
if request.Workload.Service == nil {
if request.Workload == nil {
return nil, errors.New("empty workload")
} else if workloadType, ok := request.Workload["_type"]; !ok ||
!strings.Contains(workloadType.(string), ".Service") {
return nil, errors.New("port should be binded to a service workload")
}

// Get the complete kawesome module configs.
if err := k.CompleteConfig(request.DevConfig, request.PlatformConfig); err != nil {
log.Debugf("failed to get complete kawesome module configs: %v", err)
logger.Debug("failed to get complete kawesome module configs: %v", err)
return nil, err
}

// Validate the completed kawesome module configs.
if err := k.ValidateConfig(); err != nil {
log.Debugf("failed to validate the kawesome module configs: %v", err)
logger.Debug("failed to validate the kawesome module configs: %v", err)
return nil, err
}

var resources []apiv1.Resource
var patcher *apiv1.Patcher
var resources []kusionapiv1.Resource
var patcher *kusionapiv1.Patcher

// Generate the Kubernetes Service related resource.
resource, err := k.GenerateServiceResource(request)
Expand All @@ -115,7 +127,7 @@ func (k *Kawesome) Generate(_ context.Context, request *module.GeneratorRequest)
}

// CompleteConfig completes the kawesome module configs with both devModuleConfig and platformModuleConfig.
func (k *Kawesome) CompleteConfig(devConfig apiv1.Accessory, platformConfig apiv1.GenericConfig) error {
func (k *Kawesome) CompleteConfig(devConfig kusionapiv1.Accessory, platformConfig kusionapiv1.GenericConfig) error {
// Retrieve the config items the developers are concerned about.
if devConfig != nil {
devCfgYamlStr, err := yaml.Marshal(devConfig)
Expand Down Expand Up @@ -172,14 +184,14 @@ func (k *Kawesome) ValidateConfig() error {
//
// Note that we will use the SDK provided by the kusion module framework to wrap the Kubernetes resource
// into Kusion resource.
func (k *Kawesome) GenerateServiceResource(request *module.GeneratorRequest) (*apiv1.Resource, error) {
func (k *Kawesome) GenerateServiceResource(request *module.GeneratorRequest) (*kusionapiv1.Resource, error) {
// Generate the unique application name with project, stack and app name.
appUniqueName := modules.UniqueAppName(request.Project, request.Stack, request.App)
appUniqueName := module.UniqueAppName(request.Project, request.Stack, request.App)
svcType := v1.ServiceTypeClusterIP

// Generate the selector for the Service workload with the unique app labels SDK
// provided by Kusion.
selector := modules.UniqueAppLabels(request.Project, request.App)
selector := module.UniqueAppLabels(request.Project, request.App)
svc := &v1.Service{
TypeMeta: metav1.TypeMeta{
APIVersion: v1.SchemeGroupVersion.String(),
Expand Down Expand Up @@ -234,7 +246,7 @@ func (k *Kawesome) GenerateServiceResource(request *module.GeneratorRequest) (*a
//
// Note that we will use the SDK provided by the kusion module framework to wrap the Terraform resource
// into Kusion resource.
func (k *Kawesome) GenerateRandomPasswordResource(request *module.GeneratorRequest) (*apiv1.Resource, *apiv1.Patcher, error) {
func (k *Kawesome) GenerateRandomPasswordResource(request *module.GeneratorRequest) (*kusionapiv1.Resource, *kusionapiv1.Patcher, error) {
// Set the random_password provider config.
randomPasswordPvdCfg := module.ProviderConfig{
Source: "hashicorp/random",
Expand All @@ -250,7 +262,7 @@ func (k *Kawesome) GenerateRandomPasswordResource(request *module.GeneratorReque

// Generate Kusion resource ID & extentions and wrap the Terraform random_password into Kusion resource
// with the SDK provided by kusion module framework.
appUniqueName := modules.UniqueAppName(request.Project, request.Stack, request.App)
appUniqueName := module.UniqueAppName(request.Project, request.Stack, request.App)
resourceID, err := module.TerraformResourceID(randomPasswordPvdCfg, "random_password", appUniqueName)
if err != nil {
return nil, nil, err
Expand All @@ -268,10 +280,10 @@ func (k *Kawesome) GenerateRandomPasswordResource(request *module.GeneratorReque
envVars := []v1.EnvVar{
{
Name: "KUSION_KAWESOME_RANDOM_PASSWORD",
Value: modules.KusionPathDependency(resourceID, "result"),
Value: module.KusionPathDependency(resourceID, "result"),
},
}
patcher := &apiv1.Patcher{
patcher := &kusionapiv1.Patcher{
Environments: envVars,
}

Expand Down
Loading