Dagger
Search

kubernetes-microservice

This module provides a high-level abstraction for working with container images
tailored for Kubernetes microservices, using Dagger as the execution engine.

It offers two primary functions:
- BakeImage: Builds and optionally pushes a Docker image from source code
with support for extra build directories and custom Dockerfile paths.
- StageImage: Stages (copies) an existing image between registries, optionally
using Docker config authentication or username/password pairs.
Supports insecure registries and custom platforms.

Typical usage scenarios include:
- Building a microservice image in CI/CD pipelines and pushing directly to a registry
- Promoting (staging) images between registries (e.g., dev -> staging -> prod)
- Supporting custom build contexts through additional directories

Internally, this module delegates to the 'Docker' module for building/pushing images,
and the 'Crane' module for staging images between registries.

Example workflows:
- Bake a microservice image and push to a dev registry
- Stage a built image to a production registry using secure or insecure connections

This module is designed for integration in CI pipelines, platform automation, or
developer tooling around Kubernetes microservices.

Installation

dagger install github.com/stuttgart-things/blueprints/kubernetes-microservice@v1.51.0

Entrypoint

Return Type
KubernetesMicroservice
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
func (m *MyModule) Example() *dagger.KubernetesMicroservice  {
	return dag.
			KubernetesMicroservice()
}
@function
def example() -> dagger.KubernetesMicroservice:
	return (
		dag.kubernetes_microservice()
	)
@func()
example(): KubernetesMicroservice {
	return dag
		.kubernetesMicroservice()
}

Types

KubernetesMicroservice 🔗

runStaticStage() 🔗

Return Type
File !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-the src directory
pathToDockerfileString ""No description provided
nameDockerfileString "Dockerfile"No description provided
severityString "HIGH,CRITICAL"No description provided
trivyVersionString "0.64.1"No description provided
thresholdString -The failure threshold
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 run-static-stage --src DIR_PATH
func (m *MyModule) Example(src *dagger.Directory) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			RunStaticStage(src)
}
@function
def example(src: dagger.Directory) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.run_static_stage(src)
	)
@func()
example(src: Directory): File {
	return dag
		.kubernetesMicroservice()
		.runStaticStage(src)
}

runBakeStage() 🔗

Return Type
String !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-The source directory
repositoryNameString !-The repository name
tagString !-tag
registryUsernameSecret -The registry username
registryPasswordSecret -The registry password
registryUrlString !-The registry URL
dockerfileString "Dockerfile"The Dockerfile path
withDirectories[Directory ! ] -Set extra directories
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 run-bake-stage --src DIR_PATH --repository-name string --tag string --registry-url string
func (m *MyModule) Example(ctx context.Context, src *dagger.Directory, repositoryName string, tag string, registryUrl string) string  {
	return dag.
			KubernetesMicroservice().
			RunBakeStage(ctx, src, repositoryName, tag, registryUrl)
}
@function
async def example(src: dagger.Directory, repository_name: str, tag: str, registry_url: str) -> str:
	return await (
		dag.kubernetes_microservice()
		.run_bake_stage(src, repository_name, tag, registry_url)
	)
@func()
async example(src: Directory, repositoryName: string, tag: string, registryUrl: string): Promise<string> {
	return dag
		.kubernetesMicroservice()
		.runBakeStage(src, repositoryName, tag, registryUrl)
}

scanImage() 🔗

Return Type
File !
Arguments
NameTypeDefault ValueDescription
imageRefString !-Fully qualified image reference (e.g., "ttl.sh/my-repo:1.0.0")
registryUserSecret -No description provided
registryPasswordSecret -No description provided
severityString "HIGH,CRITICAL"No description provided
trivyVersionString "0.64.1"No description provided
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 scan-image --image-ref string
func (m *MyModule) Example(imageRef string) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			ScanImage(imageRef)
}
@function
def example(image_ref: str) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.scan_image(image_ref)
	)
@func()
example(imageRef: string): File {
	return dag
		.kubernetesMicroservice()
		.scanImage(imageRef)
}

scanFilesystem() 🔗

Return Type
File !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-No description provided
severityString "HIGH,CRITICAL"No description provided
trivyVersionString "0.64.1"No description provided
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 scan-filesystem --src DIR_PATH
func (m *MyModule) Example(src *dagger.Directory) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			ScanFilesystem(src)
}
@function
def example(src: dagger.Directory) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.scan_filesystem(src)
	)
@func()
example(src: Directory): File {
	return dag
		.kubernetesMicroservice()
		.scanFilesystem(src)
}

bakeImage() 🔗

Return Type
String !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-The source directory
repositoryNameString !-The repository name
tagString !-tag
registryUsernameSecret -The registry username
registryPasswordSecret -The registry password
registryUrlString !-The registry URL
dockerfileString "Dockerfile"The Dockerfile path
withDirectories[Directory ! ] -Set extra directories
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 bake-image --src DIR_PATH --repository-name string --tag string --registry-url string
func (m *MyModule) Example(ctx context.Context, src *dagger.Directory, repositoryName string, tag string, registryUrl string) string  {
	return dag.
			KubernetesMicroservice().
			BakeImage(ctx, src, repositoryName, tag, registryUrl)
}
@function
async def example(src: dagger.Directory, repository_name: str, tag: str, registry_url: str) -> str:
	return await (
		dag.kubernetes_microservice()
		.bake_image(src, repository_name, tag, registry_url)
	)
@func()
async example(src: Directory, repositoryName: string, tag: string, registryUrl: string): Promise<string> {
	return dag
		.kubernetesMicroservice()
		.bakeImage(src, repositoryName, tag, registryUrl)
}

bakeAndScanImage() 🔗

BakeAndScanImage builds, pushes, and scans an image, returning the scan result file

Return Type
File !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-The source directory
repositoryNameString !-The repository name
tagString !-tag
registryUsernameSecret -The registry username
registryPasswordSecret -The registry password
registryUrlString !-The registry URL
dockerfileString "Dockerfile"The Dockerfile path
withDirectories[Directory ! ] -Set extra directories
scanSeverityString "HIGH,CRITICAL"Severity levels to scan for
trivyVersionString "0.64.1"Trivy version to use for scanning
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 bake-and-scan-image --src DIR_PATH --repository-name string --tag string --registry-url string
func (m *MyModule) Example(src *dagger.Directory, repositoryName string, tag string, registryUrl string) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			BakeAndScanImage(src, repositoryName, tag, registryUrl)
}
@function
def example(src: dagger.Directory, repository_name: str, tag: str, registry_url: str) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.bake_and_scan_image(src, repository_name, tag, registry_url)
	)
@func()
example(src: Directory, repositoryName: string, tag: string, registryUrl: string): File {
	return dag
		.kubernetesMicroservice()
		.bakeAndScanImage(src, repositoryName, tag, registryUrl)
}

analyzeHelmfile() 🔗

AnalyzeHelmfile reads a helmfile and uses AI to analyze what cluster resources it references, then queries those resources and provides validation/recommendations

Return Type
File !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-The helmfile directory to analyze
helmfilePathString "helmfile.yaml"Path to the helmfile within the directory
kubeConfigSecret !-Kubeconfig for cluster queries
modelString "claude-3-5-sonnet-20241022"No description provided
outputFileString "helmfile-analysis.yaml"No description provided
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 analyze-helmfile --src DIR_PATH --kube-config env:MYSECRET
func (m *MyModule) Example(src *dagger.Directory, kubeConfig *dagger.Secret) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			AnalyzeHelmfile(src, kubeConfig)
}
@function
def example(src: dagger.Directory, kube_config: dagger.Secret) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.analyze_helmfile(src, kube_config)
	)
@func()
example(src: Directory, kubeConfig: Secret): File {
	return dag
		.kubernetesMicroservice()
		.analyzeHelmfile(src, kubeConfig)
}

config() 🔗

Return Type
File !
Arguments
NameTypeDefault ValueDescription
promptScopeString !-The scope/prompt that defines what cluster information to gather
kubeConfigSecret !-No description provided
modelString "claude-3-5-sonnet-20241022"No description provided
namespaceString -No description provided
outputFileString "cluster-analysis.yaml"No description provided
contextFileFile -Additional context file (e.g., helmfile, manifest) to validate against cluster state
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 config --prompt-scope string --kube-config env:MYSECRET
func (m *MyModule) Example(promptScope string, kubeConfig *dagger.Secret) *dagger.File  {
	return dag.
			KubernetesMicroservice().
			Config(promptScope, kubeConfig)
}
@function
def example(prompt_scope: str, kube_config: dagger.Secret) -> dagger.File:
	return (
		dag.kubernetes_microservice()
		.config(prompt_scope, kube_config)
	)
@func()
example(promptScope: string, kubeConfig: Secret): File {
	return dag
		.kubernetesMicroservice()
		.config(promptScope, kubeConfig)
}

stageImage() 🔗

Return Type
String !
Arguments
NameTypeDefault ValueDescription
sourceString !-No description provided
targetString !-No description provided
sourceRegistryString -No description provided
sourceUsernameString -No description provided
sourcePasswordSecret -No description provided
targetRegistryString -No description provided
targetUsernameString -No description provided
targetPasswordSecret -No description provided
insecureBoolean falseNo description provided
platformString "linux/amd64"No description provided
dockerConfigSecretSecret -No description provided
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 stage-image --source string --target string
func (m *MyModule) Example(ctx context.Context, source string, target string) string  {
	return dag.
			KubernetesMicroservice().
			StageImage(ctx, source, target)
}
@function
async def example(source: str, target: str) -> str:
	return await (
		dag.kubernetes_microservice()
		.stage_image(source, target)
	)
@func()
async example(source: string, target: string): Promise<string> {
	return dag
		.kubernetesMicroservice()
		.stageImage(source, target)
}

lintDockerfile() 🔗

Return Type
String !
Arguments
NameTypeDefault ValueDescription
srcDirectory !-the src directory
dockerfileString -The dockerfile path
thresholdString -The failure threshold
Example
dagger -m github.com/stuttgart-things/blueprints/kubernetes-microservice@e925e4794eeb85f9397463a707ea72d80143119c call \
 lint-dockerfile --src DIR_PATH
func (m *MyModule) Example(ctx context.Context, src *dagger.Directory) string  {
	return dag.
			KubernetesMicroservice().
			LintDockerfile(ctx, src)
}
@function
async def example(src: dagger.Directory) -> str:
	return await (
		dag.kubernetes_microservice()
		.lint_dockerfile(src)
	)
@func()
async example(src: Directory): Promise<string> {
	return dag
		.kubernetesMicroservice()
		.lintDockerfile(src)
}