Skip to content

Commit 7cee1b6

Browse files
authored
Merge pull request #250 from SeanHai/curve-manager
Support manage curve monitor, curve website and support http service
2 parents 8fa1398 + 1ab4aac commit 7cee1b6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+5854
-835
lines changed

.github/workflows/go.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Set up Go
1515
uses: actions/setup-go@v3
1616
with:
17-
go-version: 1.18
17+
go-version: 1.19
1818
- name: Generate SSH key
1919
run: ssh-keygen -f ~/.ssh/id_rsa -P ""
2020
- name: Test
@@ -28,7 +28,7 @@ jobs:
2828
- name: Set up Go
2929
uses: actions/setup-go@v3
3030
with:
31-
go-version: 1.18
31+
go-version: 1.19
3232
- name: Set dependencies
3333
run: sudo apt update && sudo apt install musl-tools
3434
- name: Build

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ GO := go
2020

2121
# output
2222
OUTPUT := bin/curveadm
23+
SERVER_OUTPUT := bin/pigeon
2324

2425
# build flags
2526
LDFLAGS := -s -w
@@ -50,15 +51,18 @@ TEST_FLAGS += -run $(CASE)
5051

5152
# packages
5253
PACKAGES := $(PWD)/cmd/curveadm/main.go
54+
SERVER_PACKAGES := $(PWD)/cmd/service/main.go
5355

5456
# tar
5557
VERSION := "unknown"
5658

5759
build:
5860
$(GOENV) $(GO) build -o $(OUTPUT) $(BUILD_FLAGS) $(PACKAGES)
61+
$(GOENV) $(GO) build -o $(SERVER_OUTPUT) $(BUILD_FLAGS) $(SERVER_PACKAGES)
5962

6063
debug:
6164
$(GOENV) $(GO) build -o $(OUTPUT) $(DEBUG_FLAGS) $(PACKAGES)
65+
$(GOENV) $(GO) build -o $(SERVER_OUTPUT) $(DEBUG_FLAGS) $(SERVER_PACKAGES)
6266

6367
test:
6468
$(GO_TEST) $(TEST_FLAGS) ./...

build/package/upload.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ g_nos_cmd=${NOSCMD}
55
g_root=$(pwd)/.build
66
g_curveadm=${g_root}/curveadm
77
g_curveadm_bin=${g_curveadm}/bin
8+
g_curveadm_http_bin=${g_curveadm}/http
89
rm -rf ${g_root}
910

10-
mkdir -p ${g_curveadm_bin}
11+
mkdir -p ${g_curveadm_bin} ${g_curveadm_http_bin}
1112
cp bin/curveadm ${g_curveadm_bin}
13+
cp bin/pigeon ${g_curveadm_http_bin}
1214
[[ -f .CHANGELOG ]] && cp .CHANGELOG ${g_curveadm}/CHANGELOG
1315
(cd ${g_curveadm} && ./bin/curveadm -v && ls -ls bin/curveadm && [[ -f CHANGELOG ]] && cat CHANGELOG)
1416
(cd ${g_root} && tar -zcf curveadm-${g_version}.tar.gz curveadm)

cli/cli/cli.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ type CurveAdm struct {
7272
clusterName string // current cluster name
7373
clusterTopologyData string // cluster topology
7474
clusterPoolData string // cluster pool
75+
monitor storage.Monitor
7576
}
7677

7778
/*
@@ -193,6 +194,13 @@ func (curveadm *CurveAdm) init() error {
193194
return errno.ERR_GET_DISK_RECORDS_FAILED.E(err)
194195
}
195196

197+
// (10) Get monitor configure
198+
monitor, err := s.GetMonitor(cluster.Id)
199+
if err != nil {
200+
log.Error("Get monitor failed", log.Field("Error", err))
201+
return errno.ERR_GET_MONITOR_FAILED.E(err)
202+
}
203+
196204
curveadm.dbpath = dbpath
197205
curveadm.logpath = logpath
198206
curveadm.config = config
@@ -209,6 +217,7 @@ func (curveadm *CurveAdm) init() error {
209217
curveadm.clusterName = cluster.Name
210218
curveadm.clusterTopologyData = cluster.Topology
211219
curveadm.clusterPoolData = cluster.Pool
220+
curveadm.monitor = monitor
212221

213222
return nil
214223
}
@@ -292,6 +301,7 @@ func (curveadm *CurveAdm) ClusterUUId() string { return curveadm.c
292301
func (curveadm *CurveAdm) ClusterName() string { return curveadm.clusterName }
293302
func (curveadm *CurveAdm) ClusterTopologyData() string { return curveadm.clusterTopologyData }
294303
func (curveadm *CurveAdm) ClusterPoolData() string { return curveadm.clusterPoolData }
304+
func (curveadm *CurveAdm) Monitor() storage.Monitor { return curveadm.monitor }
295305

296306
func (curveadm *CurveAdm) GetHost(host string) (*hosts.HostConfig, error) {
297307
if len(curveadm.Hosts()) == 0 {
@@ -367,6 +377,11 @@ func (curveadm *CurveAdm) GetServiceId(dcId string) string {
367377
return utils.MD5Sum(serviceId)[:12]
368378
}
369379

380+
// website is cluster-independent
381+
func (curveadm *CurveAdm) GetWebsiteServiceId(wcId string) string {
382+
return utils.MD5Sum(wcId)[:12]
383+
}
384+
370385
func (curveadm *CurveAdm) GetContainerId(serviceId string) (string, error) {
371386
containerId, err := curveadm.Storage().GetContainerId(serviceId)
372387
if err != nil {

cli/command/cluster/add.go

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ import (
3737

3838
const (
3939
ADD_EXAMPLE = `Examples:
40-
$ curveadm add my-cluster # Add a cluster named 'my-cluster'
41-
$ curveadm add my-cluster -m "deploy for test" # Add a cluster with description
42-
$ curveadm add my-cluster -f /path/to/topology.yaml # Add a cluster with specified topology`
40+
$ curveadm cluster add my-cluster # Add a cluster named 'my-cluster'
41+
$ curveadm cluster add my-cluster -m "deploy for test" # Add a cluster with description
42+
$ curveadm cluster add my-cluster -f /path/to/topology.yaml # Add a cluster with specified topology`
4343
)
4444

4545
var (
@@ -92,8 +92,7 @@ func readTopology(filename string) (string, error) {
9292
}
9393

9494
func genCheckTopologyPlaybook(curveadm *cli.CurveAdm,
95-
dcs []*topology.DeployConfig,
96-
options addOptions) (*playbook.Playbook, error) {
95+
dcs []*topology.DeployConfig) (*playbook.Playbook, error) {
9796
steps := CHECK_TOPOLOGY_PLAYBOOK_STEPS
9897
pb := playbook.NewPlaybook(curveadm)
9998
for _, step := range steps {
@@ -116,8 +115,8 @@ func genCheckTopologyPlaybook(curveadm *cli.CurveAdm,
116115
return pb, nil
117116
}
118117

119-
func checkTopology(curveadm *cli.CurveAdm, data string, options addOptions) error {
120-
if len(options.filename) == 0 {
118+
func checkTopology(curveadm *cli.CurveAdm, data string, filename string) error {
119+
if len(filename) == 0 {
121120
return nil
122121
}
123122

@@ -126,7 +125,7 @@ func checkTopology(curveadm *cli.CurveAdm, data string, options addOptions) erro
126125
return err
127126
}
128127

129-
pb, err := genCheckTopologyPlaybook(curveadm, dcs, options)
128+
pb, err := genCheckTopologyPlaybook(curveadm, dcs)
130129
if err != nil {
131130
return err
132131
}
@@ -155,7 +154,7 @@ func runAdd(curveadm *cli.CurveAdm, options addOptions) error {
155154
}
156155

157156
// 3) check topology
158-
err = checkTopology(curveadm, data, options)
157+
err = checkTopology(curveadm, data, options.filename)
159158
if err != nil {
160159
return err
161160
}
@@ -170,3 +169,28 @@ func runAdd(curveadm *cli.CurveAdm, options addOptions) error {
170169
curveadm.WriteOutln("Added cluster '%s'", name)
171170
return nil
172171
}
172+
173+
// for http service
174+
func Add(curveadm *cli.CurveAdm, name, desc, topo string) error {
175+
storage := curveadm.Storage()
176+
clusters, err := storage.GetClusters(name)
177+
if err != nil {
178+
return errno.ERR_GET_ALL_CLUSTERS_FAILED.E(err)
179+
} else if len(clusters) > 0 {
180+
return errno.ERR_CLUSTER_ALREADY_EXIST.
181+
F("cluster name: %s", name)
182+
}
183+
184+
// check topology
185+
err = checkTopology(curveadm, topo, topo)
186+
if err != nil {
187+
return err
188+
}
189+
190+
// 4) insert cluster (with topology) into database
191+
err = storage.InsertCluster(name, desc, topo)
192+
if err != nil {
193+
return errno.ERR_INSERT_CLUSTER_FAILED.E(err)
194+
}
195+
return nil
196+
}

cli/command/cluster/checkout.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,22 @@ func runCheckout(curveadm *cli.CurveAdm, options checkoutOptions) error {
7777
curveadm.WriteOutln("Switched to cluster '%s'", clusterName)
7878
return nil
7979
}
80+
81+
// for http service
82+
func Checkout(curveadm *cli.CurveAdm, clusterName string) error {
83+
storage := curveadm.Storage()
84+
clusters, err := storage.GetClusters(clusterName)
85+
if err != nil {
86+
return errno.ERR_GET_ALL_CLUSTERS_FAILED.E(err)
87+
} else if len(clusters) == 0 {
88+
return errno.ERR_CLUSTER_NOT_FOUND.
89+
F("cluster name: %s", clusterName)
90+
}
91+
92+
// 2) switch current cluster in database
93+
err = storage.CheckoutCluster(clusterName)
94+
if err != nil {
95+
return errno.ERR_CHECKOUT_CLUSTER_FAILED.E(err)
96+
}
97+
return nil
98+
}

cli/command/cluster/list.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ package cluster
2727
import (
2828
"github.com/opencurve/curveadm/cli/cli"
2929
"github.com/opencurve/curveadm/internal/errno"
30+
"github.com/opencurve/curveadm/internal/storage"
3031
"github.com/opencurve/curveadm/internal/tui"
3132
cliutil "github.com/opencurve/curveadm/internal/utils"
3233
log "github.com/opencurve/curveadm/pkg/log/glg"
@@ -72,3 +73,13 @@ func runList(curveadm *cli.CurveAdm, options listOptions) error {
7273
curveadm.WriteOut(output)
7374
return nil
7475
}
76+
77+
// for http service
78+
func List(curveadm *cli.CurveAdm) ([]storage.Cluster, error) {
79+
storage := curveadm.Storage()
80+
clusters, err := storage.GetClusters("%")
81+
if err != nil {
82+
return nil, errno.ERR_GET_ALL_CLUSTERS_FAILED.E(err)
83+
}
84+
return clusters, nil
85+
}

cli/command/cmd.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,12 @@ import (
3333
"github.com/opencurve/curveadm/cli/command/config"
3434
"github.com/opencurve/curveadm/cli/command/disks"
3535
"github.com/opencurve/curveadm/cli/command/hosts"
36+
"github.com/opencurve/curveadm/cli/command/http"
37+
"github.com/opencurve/curveadm/cli/command/monitor"
3638
"github.com/opencurve/curveadm/cli/command/pfs"
3739
"github.com/opencurve/curveadm/cli/command/playground"
3840
"github.com/opencurve/curveadm/cli/command/target"
41+
"github.com/opencurve/curveadm/cli/command/website"
3942
"github.com/opencurve/curveadm/internal/errno"
4043
tools "github.com/opencurve/curveadm/internal/tools/upgrade"
4144
cliutil "github.com/opencurve/curveadm/internal/utils"
@@ -66,6 +69,9 @@ func addSubCommands(cmd *cobra.Command, curveadm *cli.CurveAdm) {
6669
playground.NewPlaygroundCommand(curveadm), // curveadm playground ...
6770
target.NewTargetCommand(curveadm), // curveadm target ...
6871
pfs.NewPFSCommand(curveadm), // curveadm pfs ...
72+
monitor.NewMonitorCommand(curveadm), // curveadm monitor ...
73+
http.NewHttpCommand(curveadm), // curveadm http
74+
website.NewWebsiteCommand(curveadm), // curveadm website ...
6975

7076
NewAuditCommand(curveadm), // curveadm audit
7177
NewCleanCommand(curveadm), // curveadm clean

cli/command/config/commit.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,7 @@ func checkDiff(curveadm *cli.CurveAdm, newData string) error {
105105
}
106106

107107
func genCheckTopologyPlaybook(curveadm *cli.CurveAdm,
108-
dcs []*topology.DeployConfig,
109-
options commitOptions) (*playbook.Playbook, error) {
108+
dcs []*topology.DeployConfig) (*playbook.Playbook, error) {
110109
steps := CHECK_TOPOLOGY_PLAYBOOK_STEPS
111110
pb := playbook.NewPlaybook(curveadm)
112111
for _, step := range steps {
@@ -161,7 +160,7 @@ func checkTopology(curveadm *cli.CurveAdm, data string, options commitOptions) e
161160
return err
162161
}
163162

164-
pb, err := genCheckTopologyPlaybook(curveadm, dcs, options)
163+
pb, err := genCheckTopologyPlaybook(curveadm, dcs)
165164
if err != nil {
166165
return err
167166
}
@@ -217,3 +216,25 @@ func runCommit(curveadm *cli.CurveAdm, options commitOptions) error {
217216
curveadm.WriteOutln("Cluster '%s' topology updated", curveadm.ClusterName())
218217
return err
219218
}
219+
220+
// for http service
221+
func Commit(curveadm *cli.CurveAdm, name, conf string) error {
222+
// parse cluster topology
223+
_, err := curveadm.ParseTopology()
224+
if err != nil && !skipError(err) {
225+
return err
226+
}
227+
228+
// check topology
229+
err = checkTopology(curveadm, conf, commitOptions{force: false})
230+
if err != nil {
231+
return err
232+
}
233+
234+
// update cluster topology in database
235+
err = curveadm.Storage().SetClusterTopologyByName(name, conf)
236+
if err != nil {
237+
return errno.ERR_UPDATE_CLUSTER_TOPOLOGY_FAILED.E(err)
238+
}
239+
return err
240+
}

cli/command/config/show.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,12 @@ func runShow(curveadm *cli.CurveAdm, options showOptions) error {
9797
curveadm.WriteOutln(data)
9898
return nil
9999
}
100+
101+
// for http service
102+
func Show(curveadm *cli.CurveAdm) (string, string, error) {
103+
cluster, err := curveadm.Storage().GetCurrentCluster()
104+
if err != nil {
105+
return "", "", errno.ERR_GET_CURRENT_CLUSTER_FAILED.E(err)
106+
}
107+
return cluster.Name, cluster.Topology, nil
108+
}

0 commit comments

Comments
 (0)