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

improve(cluster add): add deploy type and fix a typo #367

Merged
merged 2 commits into from
Dec 7, 2023
Merged
Changes from 1 commit
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
Next Next commit
Feature(cluster add): add deploy type parameter
Signed-off-by: WhereAreBugs <2572414306@qq.com>
WhereAreBugs committed Dec 7, 2023

Unverified

This user has not yet uploaded their public signing key.
commit 4d99c3d7395be090d56eed494337981d55fad54e
4 changes: 3 additions & 1 deletion cli/cli/cli.go
Original file line number Diff line number Diff line change
@@ -69,6 +69,7 @@ type CurveAdm struct {
clusterName string // current cluster name
clusterTopologyData string // cluster topology
clusterPoolData string // cluster pool
clusterType string // cluster type like develop, production, etc.
monitor storage.Monitor
}

@@ -195,7 +196,7 @@ func (curveadm *CurveAdm) init() error {
curveadm.clusterTopologyData = cluster.Topology
curveadm.clusterPoolData = cluster.Pool
curveadm.monitor = monitor

curveadm.clusterType = cluster.Type
return nil
}

@@ -276,6 +277,7 @@ func (curveadm *CurveAdm) ClusterUUId() string { return curveadm.c
func (curveadm *CurveAdm) ClusterName() string { return curveadm.clusterName }
func (curveadm *CurveAdm) ClusterTopologyData() string { return curveadm.clusterTopologyData }
func (curveadm *CurveAdm) ClusterPoolData() string { return curveadm.clusterPoolData }
func (curveadm *CurveAdm) ClusterType() string { return curveadm.clusterType }
func (curveadm *CurveAdm) Monitor() storage.Monitor { return curveadm.monitor }

func (curveadm *CurveAdm) GetHost(host string) (*hosts.HostConfig, error) {
26 changes: 24 additions & 2 deletions cli/command/cluster/add.go
Original file line number Diff line number Diff line change
@@ -47,12 +47,18 @@ var (
CHECK_TOPOLOGY_PLAYBOOK_STEPS = []int{
playbook.CHECK_TOPOLOGY,
}
SUPPORTED_DEPLOY_TYPES = []string{
"production",
"test",
"develop",
}
)

type addOptions struct {
name string
descriotion string
filename string
deployType string
}

func NewAddCommand(curveadm *cli.CurveAdm) *cobra.Command {
@@ -63,6 +69,9 @@ func NewAddCommand(curveadm *cli.CurveAdm) *cobra.Command {
Short: "Add cluster",
Args: utils.ExactArgs(1),
Example: ADD_EXAMPLE,
PreRunE: func(cmd *cobra.Command, args []string) error {
return checkAddOptions(cmd)
},
RunE: func(cmd *cobra.Command, args []string) error {
options.name = args[0]
return runAdd(curveadm, options)
@@ -73,7 +82,7 @@ func NewAddCommand(curveadm *cli.CurveAdm) *cobra.Command {
flags := cmd.Flags()
flags.StringVarP(&options.descriotion, "description", "m", "", "Description for cluster")
flags.StringVarP(&options.filename, "topology", "f", "", "Specify the path of topology file")

flags.StringVar(&options.deployType, "type", "develop", "Specify the type of cluster")
return cmd
}

@@ -134,6 +143,19 @@ func checkTopology(curveadm *cli.CurveAdm, data string, options addOptions) erro
return pb.Run()
}

func checkAddOptions(cmd *cobra.Command) error {
deployType, err := cmd.Flags().GetString("deploy-type")
if err != nil {
return err
}
for _, t := range SUPPORTED_DEPLOY_TYPES {
if deployType == t {
return nil
}
}
return errno.ERR_UNSUPPORT_DEPLOY_TYPE.F("deploy type: %s", deployType)
}

func runAdd(curveadm *cli.CurveAdm, options addOptions) error {
// 1) check wether cluster already exist
name := options.name
@@ -163,7 +185,7 @@ func runAdd(curveadm *cli.CurveAdm, options addOptions) error {

// 4) insert cluster (with topology) into database
uuid := uuid.NewString()
err = storage.InsertCluster(name, uuid, options.descriotion, data)
err = storage.InsertCluster(name, uuid, options.descriotion, data, options.deployType)
if err != nil {
return errno.ERR_INSERT_CLUSTER_FAILED.E(err)
}
2 changes: 1 addition & 1 deletion cli/command/cluster/import.go
Original file line number Diff line number Diff line change
@@ -100,7 +100,7 @@ func importCluster(storage *storage.Storage, dbfile, name string) error {
}

// insert cluster
err = storage.InsertCluster(name, cluster.UUId, cluster.Description, cluster.Topology)
err = storage.InsertCluster(name, cluster.UUId, cluster.Description, cluster.Topology, cluster.Type)
if err != nil {
return err
}
1 change: 1 addition & 0 deletions cli/command/deploy.go
Original file line number Diff line number Diff line change
@@ -302,6 +302,7 @@ func displayDeployTitle(curveadm *cli.CurveAdm, dcs []*topology.DeployConfig) {
curveadm.WriteOutln("Cluster Name : %s", curveadm.ClusterName())
curveadm.WriteOutln("Cluster Kind : %s", dcs[0].GetKind())
curveadm.WriteOutln("Cluster Services: %s", serviceStats(dcs))
curveadm.WriteOutln("Cluster Type : %s", curveadm.ClusterType())
curveadm.WriteOutln("")
}

2 changes: 1 addition & 1 deletion internal/errno/errno.go
Original file line number Diff line number Diff line change
@@ -254,7 +254,7 @@ var (
ERR_NO_SERVICES_MATCHED = EC(210006, "no services matched")
// TODO: please check pool set disk type
ERR_INVALID_DISK_TYPE = EC(210007, "poolset disk type must be lowercase and can only be one of ssd, hdd and nvme")

ERR_UNSUPPORT_DEPLOY_TYPE = EC(210008, "unknown deploy type")
// 220: commad options (client common)
ERR_UNSUPPORT_CLIENT_KIND = EC(220000, "unsupport client kind")
// 221: command options (client/bs)
13 changes: 10 additions & 3 deletions internal/storage/sql.go
Original file line number Diff line number Diff line change
@@ -103,6 +103,7 @@ type Cluster struct {
Topology string
Pool string
Current bool
Type string
}

var (
@@ -116,15 +117,21 @@ var (
topology TEXT NULL,
pool TEXT NULL,
create_time DATE NOT NULL,
current INTEGER DEFAULT 0
current INTEGER DEFAULT 0,
type TEXT NOT NULL
)
`

// insert cluster
InsertCluster = `
INSERT INTO clusters(uuid, name, description, topology, pool, create_time)
VALUES(?, ?, ?, ?, "", datetime('now','localtime'))
INSERT INTO clusters(uuid, name, description, topology, type, pool, create_time)
VALUES(?, ?, ?, ?, ?, "", datetime('now','localtime'))
`
// check new cluster column
GetTypeFiled = `SELECT COUNT(*) FROM pragma_table_info('clusters') WHERE name = 'type'`

// update new cluster column
UpdateCluster = `ALTER TABLE clusters ADD COLUMN type TEXT NOT NULL DEFAULT 'develop'`

// delete cluster
DeleteCluster = `DELETE from clusters WHERE name = ?`
32 changes: 29 additions & 3 deletions internal/storage/storage.go
Original file line number Diff line number Diff line change
@@ -91,7 +91,14 @@ func (s *Storage) init() error {
}
}

return nil
flag, err := s.CheckTypeFiledExist()
if err != nil {
return err
}
if !flag {
_, err = s.db.Write(UpdateCluster)
}
return err
}

func (s *Storage) write(query string, args ...any) error {
@@ -160,8 +167,26 @@ func (s *Storage) GetHostses() ([]Hosts, error) {
}

// cluster
func (s *Storage) InsertCluster(name, uuid, description, topology string) error {
return s.write(InsertCluster, uuid, name, description, topology)
func (s *Storage) InsertCluster(name, uuid, description, topology, deployType string) error {
return s.write(InsertCluster, uuid, name, description, topology, deployType)
}

func (s *Storage) CheckTypeFiledExist() (bool, error) {
result, err := s.db.Query(GetTypeFiled)
if err != nil {
return false, err
}
defer result.Close()

var isFiledExist bool
for result.Next() {
err = result.Scan(&isFiledExist)
if err != nil {
return false, err
}
break
}
return isFiledExist, nil
}

func (s *Storage) DeleteCluster(name string) error {
@@ -187,6 +212,7 @@ func (s *Storage) getClusters(query string, args ...interface{}) ([]Cluster, err
&cluster.Pool,
&cluster.CreateTime,
&cluster.Current,
&cluster.Type,
)
if err != nil {
return nil, err