Skip to content

Commit

Permalink
Merge pull request #124 from kndpio/117-environment-stopstart-commands
Browse files Browse the repository at this point in the history
Implemented 'kndp env stop/start' commands for stop/start cluster whe…
  • Loading branch information
evghen1 authored Jun 4, 2024
2 parents 87ae3d9 + 5c19bbe commit b8b950b
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 2 deletions.
2 changes: 2 additions & 0 deletions cmd/kndp/environment/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ type Cmd struct {
Delete deleteCmd `cmd:"" help:"Delete an Environment"`
Copy copyCmd `cmd:"" help:"Copy an Environment to another destination context"`
List listCmd `cmd:"" help:"List of Environments"`
Stop stopCmd `cmd:"" help:"Stop an Environment"`
Start startCmd `cmd:"" help:"Start an Environment"`
}
16 changes: 16 additions & 0 deletions cmd/kndp/environment/start.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package environment

import (
"context"

"github.com/charmbracelet/log"
"github.com/kndpio/kndp/internal/environment"
)

type startCmd struct {
Name string `arg:"" required:"" help:"Name of environment."`
}

func (c *startCmd) Run(ctx context.Context, logger *log.Logger) error {
return environment.Start(ctx, c.Name, logger)
}
16 changes: 16 additions & 0 deletions cmd/kndp/environment/stop.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package environment

import (
"context"

"github.com/charmbracelet/log"
"github.com/kndpio/kndp/internal/environment"
)

type stopCmd struct {
Name string `arg:"" required:"" help:"Name of environment."`
}

func (c *stopCmd) Run(ctx context.Context, logger *log.Logger) error {
return environment.Stop(ctx, c.Name, logger)
}
6 changes: 4 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ go 1.21.4

require (
github.com/Masterminds/semver/v3 v3.2.1
github.com/docker/docker v24.0.7+incompatible
github.com/pkg/errors v0.9.1
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.29.1
k8s.io/apiextensions-apiserver v0.29.0
Expand All @@ -24,6 +26,7 @@ require (
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
github.com/Masterminds/squirrel v1.5.4 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/Microsoft/hcsshim v0.11.4 // indirect
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
Expand All @@ -43,7 +46,6 @@ require (
github.com/distribution/reference v0.5.0 // indirect
github.com/docker/cli v24.0.6+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
github.com/docker/docker v24.0.7+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.0 // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
Expand Down Expand Up @@ -127,7 +129,6 @@ require (
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/prometheus/client_golang v1.18.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
Expand Down Expand Up @@ -161,6 +162,7 @@ require (
golang.org/x/oauth2 v0.15.0 // indirect
golang.org/x/sync v0.5.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.16.1 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
Expand Down
49 changes: 49 additions & 0 deletions internal/environment/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import (
"regexp"
"strings"

"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
docker "github.com/docker/docker/client"
"github.com/kndpio/kndp/internal/engine"
"github.com/kndpio/kndp/internal/kube"
"github.com/kndpio/kndp/internal/namespace"
Expand Down Expand Up @@ -150,3 +153,49 @@ func ListEnvironments(logger *log.Logger, tableData pterm.TableData) pterm.Table
}
return tableData
}

// Stop Environment
func Stop(ctx context.Context, name string, logger *log.Logger) error {
dockerClient, err := docker.NewClientWithOpts(docker.FromEnv)
if err != nil {
return err
}
containers, err := dockerClient.ContainerList(ctx, types.ContainerListOptions{All: true})
if err != nil {
return err
}
for _, c := range containers {
if strings.Contains(c.Names[0], name) {
containerID := c.ID
err := dockerClient.ContainerStop(ctx, containerID, container.StopOptions{})
if err != nil {
return err
}
}
}
logger.Info("Environment stopped successfully.")
return nil
}

// Start Environment
func Start(ctx context.Context, name string, logger *log.Logger) error {
dockerClient, err := docker.NewClientWithOpts(docker.FromEnv)
if err != nil {
return err
}
containers, err := dockerClient.ContainerList(ctx, types.ContainerListOptions{All: true})
if err != nil {
return err
}
for _, c := range containers {
if strings.Contains(c.Names[0], name) {
containerID := c.ID
err := dockerClient.ContainerStart(ctx, containerID, types.ContainerStartOptions{})
if err != nil {
return err
}
}
}
logger.Info("Environment started successfully.")
return nil
}

0 comments on commit b8b950b

Please sign in to comment.