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
Show file tree
Hide file tree
Changes from all commits
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
4 changes: 3 additions & 1 deletion cli/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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) {
Expand Down
30 changes: 26 additions & 4 deletions cli/command/cluster/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
description string
filename string
deployType string
}

func NewAddCommand(curveadm *cli.CurveAdm) *cobra.Command {
Expand All @@ -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)
Expand All @@ -71,9 +80,9 @@ func NewAddCommand(curveadm *cli.CurveAdm) *cobra.Command {
}

flags := cmd.Flags()
flags.StringVarP(&options.descriotion, "description", "m", "", "Description for cluster")
flags.StringVarP(&options.description, "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
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.description, data, options.deployType)
if err != nil {
return errno.ERR_INSERT_CLUSTER_FAILED.E(err)
}
Expand Down
2 changes: 1 addition & 1 deletion cli/command/cluster/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
WhereAreBugs marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
return err
}
Expand Down
1 change: 1 addition & 0 deletions cli/command/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
WhereAreBugs marked this conversation as resolved.
Show resolved Hide resolved
curveadm.WriteOutln("")
}

Expand Down
2 changes: 1 addition & 1 deletion internal/errno/errno.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
13 changes: 10 additions & 3 deletions internal/storage/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ type Cluster struct {
Topology string
Pool string
Current bool
Type string
}

var (
Expand All @@ -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 = ?`
Expand Down
32 changes: 29 additions & 3 deletions internal/storage/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down