Skip to content

Commit 36d1c03

Browse files
authored
support get engine by node, only show which engine type (#557)
1 parent 339e5f0 commit 36d1c03

File tree

15 files changed

+1943
-1738
lines changed

15 files changed

+1943
-1738
lines changed

cluster/calcium/node.go

+16
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/projecteru2/core/types"
99
"github.com/projecteru2/core/utils"
1010

11+
enginetypes "github.com/projecteru2/core/engine/types"
12+
1113
"github.com/pkg/errors"
1214
)
1315

@@ -84,6 +86,20 @@ func (c *Calcium) GetNode(ctx context.Context, nodename string) (*types.Node, er
8486
return node, logger.Err(ctx, errors.WithStack(err))
8587
}
8688

89+
// GetNodeEngine get node engine
90+
func (c *Calcium) GetNodeEngine(ctx context.Context, nodename string) (*enginetypes.Info, error) {
91+
logger := log.WithField("Calcium", "GetNodeEngine").WithField("nodename", nodename)
92+
if nodename == "" {
93+
return nil, logger.Err(ctx, errors.WithStack(types.ErrEmptyNodeName))
94+
}
95+
node, err := c.store.GetNode(ctx, nodename)
96+
if err != nil {
97+
return nil, logger.Err(ctx, errors.WithStack(err))
98+
}
99+
engineInfo, err := node.Engine.Info(ctx)
100+
return engineInfo, logger.Err(ctx, errors.WithStack(err))
101+
}
102+
87103
// SetNode set node available or not
88104
func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*types.Node, error) {
89105
logger := log.WithField("Calcium", "SetNode").WithField("opts", opts)

cluster/calcium/node_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"testing"
66

7+
enginemocks "github.com/projecteru2/core/engine/mocks"
8+
enginetypes "github.com/projecteru2/core/engine/types"
79
lockmocks "github.com/projecteru2/core/lock/mocks"
810
storemocks "github.com/projecteru2/core/store/mocks"
911
"github.com/projecteru2/core/types"
@@ -135,6 +137,31 @@ func TestGetNode(t *testing.T) {
135137
assert.Equal(t, n.Name, name)
136138
}
137139

140+
func TestGetNodeEngine(t *testing.T) {
141+
c := NewTestCluster()
142+
ctx := context.Background()
143+
144+
// fail by validating
145+
_, err := c.GetNodeEngine(ctx, "")
146+
assert.Error(t, err)
147+
148+
engine := &enginemocks.API{}
149+
engine.On("Info", mock.Anything).Return(&enginetypes.Info{Type: "fake"}, nil)
150+
name := "test"
151+
node := &types.Node{
152+
NodeMeta: types.NodeMeta{Name: name},
153+
Engine: engine,
154+
}
155+
156+
store := &storemocks.Store{}
157+
store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil)
158+
c.store = store
159+
160+
e, err := c.GetNodeEngine(ctx, name)
161+
assert.NoError(t, err)
162+
assert.Equal(t, e.Type, "fake")
163+
}
164+
138165
func TestSetNode(t *testing.T) {
139166
c := NewTestCluster()
140167
ctx := context.Background()

cluster/cluster.go

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type Cluster interface {
5454
RemoveNode(ctx context.Context, nodename string) error
5555
ListPodNodes(context.Context, *types.ListNodesOptions) (<-chan *types.Node, error)
5656
GetNode(ctx context.Context, nodename string) (*types.Node, error)
57+
GetNodeEngine(ctx context.Context, nodename string) (*enginetypes.Info, error)
5758
SetNode(ctx context.Context, opts *types.SetNodeOptions) (*types.Node, error)
5859
SetNodeStatus(ctx context.Context, nodename string, ttl int64) error
5960
GetNodeStatus(ctx context.Context, nodename string) (*types.NodeStatus, error)

cluster/mocks/Cluster.go

+24-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

engine/docker/docker.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ const (
2121
TCPPrefixKey = "tcp://"
2222
// SockPrefixKey indicate sock prefix
2323
SockPrefixKey = "unix://"
24+
// Type indicate docker
25+
Type = "docker"
2426
)
2527

2628
// Engine is engine for docker
@@ -80,7 +82,7 @@ func (e *Engine) Info(ctx context.Context) (*enginetypes.Info, error) {
8082
if err != nil {
8183
return nil, err
8284
}
83-
return &enginetypes.Info{ID: r.ID, NCPU: r.NCPU, MemTotal: r.MemTotal}, nil
85+
return &enginetypes.Info{Type: Type, ID: r.ID, NCPU: r.NCPU, MemTotal: r.MemTotal}, nil
8486
}
8587

8688
// ResourceValidate validate resource usage

engine/types/info.go

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package types
22

33
// Info define info response
44
type Info struct {
5+
Type string
56
ID string
67
NCPU int
78
MemTotal int64

engine/virt/virt.go

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ const (
3232
DmiUUIDKey = "DMIUUID"
3333
// ImageUserKey indicates the image's owner
3434
ImageUserKey = "ImageUser"
35+
// Type indicate type
36+
Type = "virt"
3537

3638
ttyFlag = "tty"
3739
)
@@ -69,6 +71,7 @@ func (v *Virt) Info(ctx context.Context) (*enginetypes.Info, error) {
6971
}
7072

7173
return &enginetypes.Info{
74+
Type: Type,
7275
ID: resp.ID,
7376
NCPU: resp.CPU,
7477
MemTotal: resp.Mem,

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/alexcesaro/statsd v2.0.0+incompatible // indirect
99
github.com/alicebob/miniredis/v2 v2.14.3
1010
github.com/cenkalti/backoff/v4 v4.0.2
11-
github.com/containerd/containerd v1.4.12 // indirect
11+
github.com/containerd/containerd v1.4.13 // indirect
1212
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe // indirect
1313
github.com/docker/distribution v2.8.0+incompatible
1414
github.com/docker/docker v20.10.0+incompatible

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1
8585
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
8686
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
8787
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
88-
github.com/containerd/containerd v1.4.12 h1:V+SHzYmhng/iju6M5nFrpTTusrhidoxKTwdwLw+u4c4=
89-
github.com/containerd/containerd v1.4.12/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
88+
github.com/containerd/containerd v1.4.13 h1:Z0CbagVdn9VN4K6htOCY/jApSw8YKP+RdLZ5dkXF8PM=
89+
github.com/containerd/containerd v1.4.13/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
9090
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
9191
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe h1:PEmIrUvwG9Yyv+0WKZqjXfSFDeZjs/q15g0m08BYS9k=
9292
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=

rpc/errors.go

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ const (
4040
GetNodeStatus codes.Code = 1038
4141
// GetNodeResource .
4242
GetNodeResource codes.Code = 1037
43+
// GetNodeEngine .
44+
GetNodeEngine codes.Code = 1038
4345

4446
// CalculateCapacity .
4547
CalculateCapacity codes.Code = 1041

0 commit comments

Comments
 (0)