Skip to content

Commit c896257

Browse files
committed
add http service
Signed-off-by: wanghai01 <[email protected]>
1 parent 26a6b3c commit c896257

File tree

31 files changed

+1346
-33
lines changed

31 files changed

+1346
-33
lines changed

Makefile

Lines changed: 3 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,12 +51,14 @@ 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)

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/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: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/opencurve/curveadm/cli/command/disks"
3535
"github.com/opencurve/curveadm/cli/command/hosts"
3636
"github.com/opencurve/curveadm/cli/command/monitor"
37+
"github.com/opencurve/curveadm/cli/command/http"
3738
"github.com/opencurve/curveadm/cli/command/pfs"
3839
"github.com/opencurve/curveadm/cli/command/playground"
3940
"github.com/opencurve/curveadm/cli/command/target"
@@ -68,6 +69,7 @@ func addSubCommands(cmd *cobra.Command, curveadm *cli.CurveAdm) {
6869
target.NewTargetCommand(curveadm), // curveadm target ...
6970
pfs.NewPFSCommand(curveadm), // curveadm pfs ...
7071
monitor.NewMonitorCommand(curveadm), // curveadm monitor ...
72+
http.NewHttpCommand(curveadm), // curveadm http
7173

7274
NewAuditCommand(curveadm), // curveadm audit
7375
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+
}

cli/command/deploy.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,9 @@ func runDeploy(curveadm *cli.CurveAdm, options deployOptions) error {
333333
curveadm.WriteOutln(color.GreenString("Cluster '%s' successfully deployed ^_^."), curveadm.ClusterName())
334334
return nil
335335
}
336+
337+
// for http service
338+
func Deploy(curveadm *cli.CurveAdm) error {
339+
options := deployOptions{}
340+
return runDeploy(curveadm, options)
341+
}

cli/command/disks/commit.go

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func writeDiskRecord(dr storage.Disk, curveadm *cli.CurveAdm) error {
161161
}
162162

163163
func syncDiskRecords(data string, dcs []*disks.DiskConfig,
164-
curveadm *cli.CurveAdm, options commitOptions) error {
164+
curveadm *cli.CurveAdm, slient bool) error {
165165
oldDiskRecords := curveadm.DiskRecords()
166166
tui.SortDiskRecords(oldDiskRecords)
167167

@@ -171,7 +171,7 @@ func syncDiskRecords(data string, dcs []*disks.DiskConfig,
171171
newDiskRecordsString := tui.FormatDisks(newDiskRecords)
172172

173173
if len(newDiskRecords) != len(oldDiskRecords) {
174-
if !options.slient {
174+
if !slient {
175175
diff := utils.Diff(oldDiskRecordsString, newDiskRecordsString)
176176
curveadm.WriteOutln(diff)
177177
}
@@ -214,14 +214,16 @@ func runCommit(curveadm *cli.CurveAdm, options commitOptions) error {
214214
}
215215

216216
// 2) confirm by user
217-
pass := tuicomm.ConfirmYes("Do you want to continue?")
218-
if !pass {
219-
curveadm.WriteOut(tuicomm.PromptCancelOpetation("commit disks"))
220-
return errno.ERR_CANCEL_OPERATION
217+
if !options.slient {
218+
pass := tuicomm.ConfirmYes("Do you want to continue?")
219+
if !pass {
220+
curveadm.WriteOut(tuicomm.PromptCancelOpetation("commit disks"))
221+
return errno.ERR_CANCEL_OPERATION
222+
}
221223
}
222224

223225
// 3) add disk records
224-
err = syncDiskRecords(data, dcs, curveadm, options)
226+
err = syncDiskRecords(data, dcs, curveadm, options.slient)
225227
if err != nil {
226228
return err
227229
}
@@ -237,3 +239,24 @@ func runCommit(curveadm *cli.CurveAdm, options commitOptions) error {
237239
curveadm.WriteOutln(color.GreenString("Disks updated"))
238240
return nil
239241
}
242+
243+
func Commit(curveadm *cli.CurveAdm, data string) error {
244+
// parse disk
245+
dcs, err := disks.ParseDisks(data)
246+
if err != nil {
247+
return err
248+
}
249+
// add disk records
250+
err = syncDiskRecords(data, dcs, curveadm, true)
251+
if err != nil {
252+
return err
253+
}
254+
255+
// add disks data
256+
err = curveadm.Storage().SetDisks(data)
257+
if err != nil {
258+
return errno.ERR_UPDATE_DISKS_FAILED.
259+
F("commit disks failed")
260+
}
261+
return nil
262+
}

0 commit comments

Comments
 (0)