Dagger
Search

k3s

Runs a k3s server than can be accessed both locally and in your pipelines

Example
no available example in current language
// starts a k3s server and deploys a helm chart
func (m *Examples) K3S(ctx context.Context) (string, error) {
	k3s := dag.K3S("test")
	kServer := k3s.Server()

	kServer, err := kServer.Start(ctx)
	if err != nil {
		return "", err
	}

	ep, err := kServer.Endpoint(ctx, dagger.ServiceEndpointOpts{Port: 80, Scheme: "http"})
	if err != nil {
		return "", err
	}

	return dag.Container().From("alpine/helm").
		WithExec([]string{"apk", "add", "kubectl"}).
		WithEnvVariable("KUBECONFIG", "/.kube/config").
		WithFile("/.kube/config", k3s.Config()).
		WithExec([]string{"helm", "upgrade", "--install", "--force", "--wait", "--debug", "nginx", "oci://registry-1.docker.io/bitnamicharts/nginx"}).
		WithExec([]string{"sh", "-c", "while true; do curl -sS " + ep + " && exit 0 || sleep 1; done"}).Stdout(ctx)

}
no available example in current language
no available example in current language

Installation

dagger install github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e

Entrypoint

Return Type
K3S !
Arguments
NameTypeDefault ValueDescription
nameString !-No description provided
imageString "rancher/k3s:latest"No description provided
keepStateBoolean "false"keeps the state of the cluster (not recommended).
enableTraefikBoolean !"false"enable traefik to be installed (not recommended).
debugBoolean "false"enable debug logging from k3s server.
kubeletVerbosityInteger "1"kubelet log verbosity level (0=minimal, 1=errors/warnings, 2=info).
Example
dagger -m github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e call \
 --name string --enable-traefik boolean
func (m *MyModule) Example(name string, enableTraefik bool) *dagger.K3S  {
	return dag.
			K3s(name, enableTraefik)
}
@function
def example(name: str, enable_traefik: bool, ) -> dagger.K3S:
	return (
		dag.k3s(name, enable_traefik)
	)
@func()
example(name: string, enableTraefik: boolean, ): K3S {
	return dag
		.k3s(name, enableTraefik)
}

Types

K3S 🔗

container() 🔗

Return Type
Container !
Example
dagger -m github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e call \
 --name string --enable-traefik boolean container
func (m *MyModule) Example(name string, enableTraefik bool) *dagger.Container  {
	return dag.
			K3s(name, enableTraefik).
			Container()
}
@function
def example(name: str, enable_traefik: bool, ) -> dagger.Container:
	return (
		dag.k3s(name, enable_traefik)
		.container()
	)
@func()
example(name: string, enableTraefik: boolean, ): Container {
	return dag
		.k3s(name, enableTraefik)
		.container()
}

server() 🔗

Returns a newly initialized kind cluster

Return Type
Service !
Example
no available example in current language
// starts a k3s server with a local registry and a pre-loaded alpine image
func (m *Examples) K3SServer(ctx context.Context) (*dagger.Service, error) {
	regSvc := dag.Container().From("registry:2.8").
		WithExposedPort(5000).AsService()

	_, err := dag.Container().From("quay.io/skopeo/stable").
		WithServiceBinding("registry", regSvc).
		WithEnvVariable("BUST", time.Now().String()).
		WithExec([]string{"copy", "--dest-tls-verify=false", "docker://docker.io/alpine:latest", "docker://registry:5000/alpine:latest"}, dagger.ContainerWithExecOpts{UseEntrypoint: true}).Sync(ctx)
	if err != nil {
		return nil, err
	}

	return dag.K3S("test").With(func(k *dagger.K3S) *dagger.K3S {
		return k.WithContainer(
			k.Container().
				WithEnvVariable("BUST", time.Now().String()).
				WithExec([]string{"sh", "-c", `
cat <<EOF > /etc/rancher/k3s/registries.yaml
mirrors:
  "registry:5000":
    endpoint:
      - "http://registry:5000"
EOF`}).
				WithServiceBinding("registry", regSvc),
		)
	}).Server(), nil
}
no available example in current language
no available example in current language

withContainer() 🔗

Returns a newly initialized kind cluster

Return Type
K3S !
Arguments
NameTypeDefault ValueDescription
cContainer !-No description provided
Example
dagger -m github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e call \
 --name string --enable-traefik boolean with-container --c IMAGE:TAG
func (m *MyModule) Example(name string, enableTraefik bool, c *dagger.Container) *dagger.K3S  {
	return dag.
			K3s(name, enableTraefik).
			WithContainer(c)
}
@function
def example(name: str, enable_traefik: bool, c: dagger.Container) -> dagger.K3S:
	return (
		dag.k3s(name, enable_traefik)
		.with_container(c)
	)
@func()
example(name: string, enableTraefik: boolean, c: Container): K3S {
	return dag
		.k3s(name, enableTraefik)
		.withContainer(c)
}

config() 🔗

returns the config file for the k3s cluster

Return Type
File !
Arguments
NameTypeDefault ValueDescription
localBoolean falseNo description provided
Example
dagger -m github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e call \
 --name string --enable-traefik boolean config
func (m *MyModule) Example(name string, enableTraefik bool) *dagger.File  {
	return dag.
			K3s(name, enableTraefik).
			Config()
}
@function
def example(name: str, enable_traefik: bool, ) -> dagger.File:
	return (
		dag.k3s(name, enable_traefik)
		.config()
	)
@func()
example(name: string, enableTraefik: boolean, ): File {
	return dag
		.k3s(name, enableTraefik)
		.config()
}

kubectl() 🔗

runs kubectl on the target k3s cluster

Return Type
Container !
Arguments
NameTypeDefault ValueDescription
argsString !-No description provided
Example
no available example in current language
// returns a kubectl container with the configured kube config context ready to run
// administrative commands
func (m *Examples) K3SKubectl(ctx context.Context, args string) *dagger.Container {
	return dag.K3S("test").Kubectl(args)
}
no available example in current language
no available example in current language

kns() 🔗

runs k9s on the target k3s cluster

Return Type
Container !
Example
dagger -m github.com/mnencia/daggerverse/k3s@dd5d6cd26e9981fa58b3d694bcb6acdce13d666e call \
 --name string --enable-traefik boolean kns
func (m *MyModule) Example(name string, enableTraefik bool) *dagger.Container  {
	return dag.
			K3s(name, enableTraefik).
			Kns()
}
@function
def example(name: str, enable_traefik: bool, ) -> dagger.Container:
	return (
		dag.k3s(name, enable_traefik)
		.kns()
	)
@func()
example(name: string, enableTraefik: boolean, ): Container {
	return dag
		.k3s(name, enableTraefik)
		.kns()
}