Skip to content

Commit

Permalink
Feat: Add undeploy service command (#227)
Browse files Browse the repository at this point in the history
* Feat: Add undeploy cli command

* Fix:undeloy service log

* Fix: lint undeloy service

* Fix: lint undeloy service

---------

Co-authored-by: Susanth <[email protected]>
  • Loading branch information
umanggoyald11 and boppanasusanth committed Apr 30, 2024
1 parent 76f1b99 commit 9fc780a
Show file tree
Hide file tree
Showing 9 changed files with 509 additions and 188 deletions.
16 changes: 16 additions & 0 deletions cmd/deploy/deploy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package deploy

import (
"github.com/dream11/odin/cmd"
"github.com/spf13/cobra"
)

var deployCmd = &cobra.Command{
Use: "deploy",
Short: "Deploy resources",
Long: `Deploy resources`,
}

func init() {
cmd.RootCmd.AddCommand(deployCmd)
}
93 changes: 93 additions & 0 deletions cmd/deploy/service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package deploy

import (
"encoding/json"
"os"

"github.com/dream11/odin/internal/service"
serviceProto "github.com/dream11/odin/proto/gen/go/dream11/od/service/v1"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

var env string
var definitionFile string
var provisioningFile string

var serviceClient = service.Service{}

var serviceCmd = &cobra.Command{
Use: "Deploy service",
Short: "Deploy service",
Args: func(cmd *cobra.Command, args []string) error {
return cobra.NoArgs(cmd, args)
},
Long: "Deploy service using files or service name",
Run: func(cmd *cobra.Command, args []string) {
execute(cmd)
},
}

func init() {
serviceCmd.Flags().StringVar(&env, "env", "", "environment for deploying the service")
serviceCmd.Flags().StringVar(&definitionFile, "file", "", "path to the service definition file")
serviceCmd.Flags().StringVar(&provisioningFile, "provisioning", "", "path to the provisioning file")
serviceCmd.Flags().StringVar(&definitionFile, "file", "", "path to the service definition file")
serviceCmd.Flags().StringVar(&provisioningFile, "provisioning", "", "path to the provisioning file")
err := serviceCmd.MarkFlagRequired("env")
if err != nil {
log.Println("Error marking 'env' flag as required:", err)
os.Exit(1)
}

deployCmd.AddCommand(serviceCmd)
}

func execute(cmd *cobra.Command) {
ctx := cmd.Context()

definitionData, err := readFromFile(definitionFile)
if err != nil {
log.Fatal("Error while reading definition file ", err)
}
provisioningData, err := readFromFile(provisioningFile)

if err != nil {
log.Fatal("Error while reading provisioning file ", err)
}

err = serviceClient.DeployService(&ctx, &serviceProto.DeployServiceRequest{
EnvName: env,
ServiceDefinition: definitionData,
ProvisioningConfig: provisioningData,
})

if err != nil {
log.Fatal("Failed to deploy service ", err)
}
}

func readFromFile(filePath string) (string, error) {
content, err := os.ReadFile(filePath)
if err != nil {
log.Println("Error reading file:", err)
return "", err
}

var jsonData interface{}
err = json.Unmarshal(content, &jsonData)
if err != nil {
log.Println("Error decoding JSON:", err)
return "", err

}

jsonString, err := json.MarshalIndent(jsonData, "", " ")
if err != nil {
log.Println("Error converting JSON to string:", err)
return "", err

}

return string(jsonString), nil
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@ require (
golang.org/x/net v0.14.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 // indirect
google.golang.org/grpc v1.57.0
google.golang.org/protobuf v1.31.0
google.golang.org/protobuf v1.33.0
)
3 changes: 2 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1918,8 +1918,9 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
2 changes: 1 addition & 1 deletion internal/service/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func (e *Environment) CreateEnvironment(ctx *context.Context, request *environme
return err
}

// DeleteEnvironment : Delete environment
// DeleteEnvironment deletes environment
func (e *Environment) DeleteEnvironment(ctx *context.Context, request *environment.DeleteEnvironmentRequest) error {
conn, requestCtx, err := grpcClient(ctx)
if err != nil {
Expand Down
98 changes: 98 additions & 0 deletions internal/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,101 @@ func (e *Service) UndeployService(ctx *context.Context, request *service.Undeplo
log.Info(message)
return err
}

package service

import (
"context"
"errors"
"fmt"
"io"

"github.com/briandowns/spinner"
"github.com/dream11/odin/pkg/constant"
service "github.com/dream11/odin/proto/gen/go/dream11/od/service/v1"
log "github.com/sirupsen/logrus"
)

// Service performs operation on service like deploy. undeploy
type Service struct{}

// UndeployService : Delete environment
func (e *Service) UndeployService(ctx *context.Context, request *service.UndeployServiceRequest) error {
conn, requestCtx, err := grpcClient(ctx)
if err != nil {
return err
}

client := service.NewServiceServiceClient(conn)
stream, err := client.UndeployService(*requestCtx, request)

if err != nil {
return err
}

log.Info("Undeploying Service...")
spinner := spinner.New(spinner.CharSets[constant.SpinnerType], constant.SpinnerDelay)
err = spinner.Color(constant.SpinnerColor, constant.SpinnerStyle)
if err != nil {
return err
}
var message string
for {
response, err := stream.Recv()
spinner.Stop()
if err != nil {
if errors.Is(err, context.Canceled) || err == io.EOF {
break
}
return err
}
if response != nil {
message = response.Message
spinner.Prefix = fmt.Sprintf(" %s ", response.Message)
spinner.Start()
}
}
log.Info(message)
return err
}

// DeployService deploys service
func (e *Service) DeployService(ctx *context.Context, request *service.DeployServiceRequest) error {
conn, requestCtx, err := grpcClient(ctx)
if err != nil {
return err
}
client := service.NewServiceServiceClient(conn)
stream, err := client.DeployService(*requestCtx, request)
if err != nil {
return err
}

log.Info("Deploying Service...")
spinner := spinner.New(spinner.CharSets[constant.SpinnerType], constant.SpinnerDelay)
err = spinner.Color(constant.SpinnerColor, constant.SpinnerStyle)
if err != nil {
return err
}

var message string
for {
response, err := stream.Recv()
spinner.Stop()
if err != nil {
if errors.Is(err, context.Canceled) || err == io.EOF {
break
}
return err
}

if response != nil {
message = response.Message
spinner.Prefix = fmt.Sprintf(" %s ", response.Message)
spinner.Start()
}
}

log.Info(message)
return err
}
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
_ "github.com/dream11/odin/cmd/configure"
_ "github.com/dream11/odin/cmd/create"
_ "github.com/dream11/odin/cmd/delete"
_ "github.com/dream11/odin/cmd/deploy"
_ "github.com/dream11/odin/cmd/list"
_ "github.com/dream11/odin/cmd/operate"
_ "github.com/dream11/odin/cmd/undeploy"
Expand Down
4 changes: 2 additions & 2 deletions proto/dream11/od/service/v1/service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ service ServiceService {

message DeployServiceRequest {
string env_name = 1;
dream11.od.dto.v1.ServiceDefinition service_definition = 2;
dream11.od.dto.v1.ProvisioningConfig provisioning_config = 3;
string service_definition = 2;
string provisioning_config = 3;
}

message DeployServiceResponse {
Expand Down
Loading

0 comments on commit 9fc780a

Please sign in to comment.