Skip to content

Commit 6e1e24c

Browse files
committed
add middleware support
Signed-off-by: fujiazheng <1358925318@qq.com>
1 parent 2b501c7 commit 6e1e24c

File tree

5 files changed

+133
-15
lines changed

5 files changed

+133
-15
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ _test
1010
releases
1111
tmp
1212
.idea/
13+
.vscode/
1314

1415
# Architecture specific extensions/prefixes
1516
trace.out

Makefile

+21-4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ BUILD_TARGET_CACHE=$(BUILD_TARGET)/cache
4949
BLADE_EXEC_OS_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-os.git
5050
BLADE_EXEC_OS_BRANCH=master
5151

52+
# chaosblade-exec-middleware
53+
BLADE_EXEC_MIDDLEWARE_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-middleware.git
54+
BLADE_EXEC_MIDDLEWARE_BRANCH=main
55+
5256
# chaosblade-exec-docker
5357
BLADE_EXEC_DOCKER_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-docker.git
5458
BLADE_EXEC_DOCKER_BRANCH=v1.5.0
@@ -94,7 +98,7 @@ help:
9498
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>...\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
9599

96100
##@ Build
97-
build: pre_build cli nsexec os cri cplus java kubernetes upx package check_yaml ## Build all scenarios
101+
build: pre_build cli nsexec os middleware cri cplus java kubernetes upx package check_yaml
98102

99103
# for example: make build_with cli
100104
build_with: pre_build ## Select scenario build, for example `make build_with cli os docker cri kubernetes java cplus`
@@ -106,12 +110,12 @@ build_with_linux_arm: pre_build build_linux_arm_with_arg ## Select scenario buil
106110

107111
# build chaosblade linux version by docker image
108112
build_linux: ## Build linux version of all scenarios by docker image
109-
make build_with_linux ARGS="cli os docker cri nsexec kubernetes java cplus check_yaml" upx package
113+
make build_with_linux ARGS="cli os middleware docker cri nsexec kubernetes java cplus check_yaml" upx package
110114

111115
build_linux_arm: ## Build linux arm version of all scenarios by docker image
112-
make build_with_linux_arm ARGS="cli os docker cri nsexec kubernetes java cplus check_yaml" upx package
116+
make build_with_linux_arm ARGS="cli os middleware docker cri nsexec kubernetes java cplus check_yaml" upx package
113117

114-
build_darwin: pre_build cli os cri cplus java kubernetes upx package check_yaml ## Build all scenarios darwin version
118+
build_darwin: pre_build cli os middleware cri cplus java kubernetes upx package check_yaml ## Build all scenarios darwin version
115119

116120
##@ Build sub
117121

@@ -141,6 +145,19 @@ endif
141145
cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
142146
cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
143147

148+
middleware: ## Build middleware experimental scenarios.
149+
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-middleware, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware))
150+
git clone -b $(BLADE_EXEC_MIDDLEWARE_BRANCH) $(BLADE_EXEC_MIDDLEWARE_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
151+
else
152+
ifdef ALERTMSG
153+
$(error $(ALERTMSG))
154+
endif
155+
git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware pull origin $(BLADE_EXEC_MIDDLEWARE_BRANCH)
156+
endif
157+
make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
158+
cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
159+
cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
160+
144161
docker: ## Build docker experimental scenarios.
145162
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-docker, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-docker))
146163
git clone -b $(BLADE_EXEC_DOCKER_BRANCH) $(BLADE_EXEC_DOCKER_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-docker

cli/cmd/exp.go

+19
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/chaosblade-io/chaosblade-exec-cri/exec"
2323
"github.com/chaosblade-io/chaosblade-operator/exec/model"
2424
"github.com/chaosblade-io/chaosblade-spec-go/log"
25+
"github.com/chaosblade-io/chaosblade/exec/middleware"
2526
"path"
2627

2728
"github.com/chaosblade-io/chaosblade-spec-go/channel"
@@ -117,6 +118,8 @@ func (ec *baseExpCommandService) GetExecutor(target, actionTarget, action string
117118
func (ec *baseExpCommandService) registerSubCommands() {
118119
// register os type command
119120
ec.registerOsExpCommands()
121+
// register middleware command
122+
ec.registerMiddlewareExpCommands()
120123
// register jvm framework commands
121124
ec.registerJvmExpCommands()
122125
// register cplus
@@ -145,6 +148,22 @@ func (ec *baseExpCommandService) registerOsExpCommands() []*modelCommand {
145148
return osCommands
146149
}
147150

151+
// registerMiddlewareExpCommands
152+
func (ec *baseExpCommandService) registerMiddlewareExpCommands() []*modelCommand {
153+
file := path.Join(util.GetYamlHome(), fmt.Sprintf("chaosblade-middleware-spec-%s.yaml", version.Ver))
154+
models, err := specutil.ParseSpecsToModel(file, middleware.NewExecutor())
155+
if err != nil {
156+
return nil
157+
}
158+
middlewareCommands := make([]*modelCommand, 0)
159+
for idx := range models.Models {
160+
model := &models.Models[idx]
161+
command := ec.registerExpCommand(model, "")
162+
middlewareCommands = append(middlewareCommands, command)
163+
}
164+
return middlewareCommands
165+
}
166+
148167
// registerJvmExpCommands
149168
func (ec *baseExpCommandService) registerJvmExpCommands() []*modelCommand {
150169
file := path.Join(util.GetYamlHome(), fmt.Sprintf("chaosblade-jvm-spec-%s.yaml", version.Ver))

exec/middleware/executor.go

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
* Copyright 1999-2020 Alibaba Group Holding Ltd.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package middleware
18+
19+
import (
20+
"context"
21+
"fmt"
22+
"github.com/chaosblade-io/chaosblade-exec-os/exec"
23+
"github.com/chaosblade-io/chaosblade-spec-go/log"
24+
"github.com/chaosblade-io/chaosblade-spec-go/spec"
25+
"github.com/chaosblade-io/chaosblade-spec-go/util"
26+
os_exec "os/exec"
27+
"path"
28+
"syscall"
29+
)
30+
31+
type Executor struct {
32+
}
33+
34+
func NewExecutor() spec.Executor {
35+
return &Executor{}
36+
}
37+
38+
func (*Executor) Name() string {
39+
return "middleware"
40+
}
41+
42+
func (e *Executor) Exec(uid string, ctx context.Context, model *spec.ExpModel) *spec.Response {
43+
44+
if model.ActionFlags[exec.ChannelFlag.Name] == "ssh" {
45+
sshExecutor := &exec.SSHExecutor{}
46+
return sshExecutor.Exec(uid, ctx, model)
47+
}
48+
49+
var mode string
50+
var argsArray []string
51+
52+
_, isDestroy := spec.IsDestroy(ctx)
53+
if isDestroy {
54+
mode = spec.Destroy
55+
} else {
56+
mode = spec.Create
57+
}
58+
59+
argsArray = append(argsArray, mode, model.Target, model.ActionName, fmt.Sprintf("--uid=%s", uid))
60+
for k, v := range model.ActionFlags {
61+
if v == "" || k == "timeout" {
62+
continue
63+
}
64+
argsArray = append(argsArray, fmt.Sprintf("--%s=%s", k, v))
65+
}
66+
67+
chaosOsBin := path.Join(util.GetProgramPath(), "bin", spec.ChaosMiddlewareBin)
68+
command := os_exec.CommandContext(ctx, chaosOsBin, argsArray...)
69+
log.Debugf(ctx, "run command, %s %v", chaosOsBin, argsArray)
70+
71+
if model.ActionProcessHang && !isDestroy {
72+
if err := command.Start(); err != nil {
73+
sprintf := fmt.Sprintf("create experiment command start failed, %v", err)
74+
return spec.ReturnFail(spec.OsCmdExecFailed, sprintf)
75+
}
76+
command.SysProcAttr = &syscall.SysProcAttr{}
77+
return spec.ReturnSuccess(command.Process.Pid)
78+
} else {
79+
output, err := command.CombinedOutput()
80+
outMsg := string(output)
81+
log.Debugf(ctx, "Command Result, output: %v, err: %v", outMsg, err)
82+
if err != nil {
83+
return spec.ReturnFail(spec.OsCmdExecFailed, fmt.Sprintf("command exec failed, %s", err.Error()))
84+
}
85+
return spec.Decode(outMsg, nil)
86+
}
87+
}
88+
89+
func (*Executor) SetChannel(channel spec.Channel) {
90+
}

go.sum

+2-11
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible/go.mod h1:T/Aws4fEfogEE9
119119
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
120120
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
121121
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
122+
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220715204823-f1df3164ca2c h1:4KdBasbkBGsTPOIaD1Mr2IL4b1ifSbW29IF7WPrnBNY=
123+
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220715204823-f1df3164ca2c/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
122124
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
123125
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
124126
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -164,22 +166,11 @@ github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tj
164166
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
165167
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
166168
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw=
167-
github.com/chaosblade-io/chaosblade-exec-cri v1.5.1-0.20220429064319-1baacd4efc7e h1:ZF05b4HKrg3vKe6b0QI9UxtebZ3M8ZS3fNW/A7/z598=
168169
github.com/chaosblade-io/chaosblade-exec-cri v1.5.1-0.20220429064319-1baacd4efc7e/go.mod h1:ntY1QmFauHvQ6jIuAeJXjDoaNxuQxi6lmzodBsScZbc=
169170
github.com/chaosblade-io/chaosblade-exec-cri v1.6.1-0.20220624081117-892e8ba08983 h1:cdztcdV7ZGbQ6Jkm3Ek6hUB7HqKYK8U6B28ZUxamwck=
170171
github.com/chaosblade-io/chaosblade-exec-cri v1.6.1-0.20220624081117-892e8ba08983/go.mod h1:ntY1QmFauHvQ6jIuAeJXjDoaNxuQxi6lmzodBsScZbc=
171-
github.com/chaosblade-io/chaosblade-exec-os v1.5.1-0.20220426025253-6d1640d20ae4 h1:L1S4syQy85xfC+Yb7S88DIkdYrRyJV1Rqq5GfBYwbKg=
172-
github.com/chaosblade-io/chaosblade-exec-os v1.5.1-0.20220426025253-6d1640d20ae4/go.mod h1:UNDuSGNygBqqGVxUMhCL56BwK/up53bz8qKVOdEEyFE=
173-
github.com/chaosblade-io/chaosblade-exec-os v1.6.1-0.20220624033144-ee86ca0c3a31 h1:QCCKsDQJEikN+MhNXbLjz4hBmR1Ldvphz5Hy548YGiI=
174-
github.com/chaosblade-io/chaosblade-exec-os v1.6.1-0.20220624033144-ee86ca0c3a31/go.mod h1:UNDuSGNygBqqGVxUMhCL56BwK/up53bz8qKVOdEEyFE=
175-
github.com/chaosblade-io/chaosblade-operator v1.5.1-0.20220429080716-d91b82573cbc h1:flvATfoh6jsf8vViEyIJkwmhJHfgJV6OzUdbY/Gm9e4=
176-
github.com/chaosblade-io/chaosblade-operator v1.5.1-0.20220429080716-d91b82573cbc/go.mod h1:oEXBsPLe6eYQV3/cctw9u2Skye7erXOx+OVJshtgR/0=
177172
github.com/chaosblade-io/chaosblade-operator v1.6.1-0.20220624033356-cdb8ba30adfd h1:dxp0Qo7ounoxnhjH/aVmztpr8haoIolv3Z9DwRqJU2A=
178173
github.com/chaosblade-io/chaosblade-operator v1.6.1-0.20220624033356-cdb8ba30adfd/go.mod h1:oEXBsPLe6eYQV3/cctw9u2Skye7erXOx+OVJshtgR/0=
179-
github.com/chaosblade-io/chaosblade-spec-go v1.5.1-0.20220423030509-6d8dbd90b300 h1:zHZkTkuMHbeSOZ/vXYgo+0p/qFfLaXQdwKyAFh75hyA=
180-
github.com/chaosblade-io/chaosblade-spec-go v1.5.1-0.20220423030509-6d8dbd90b300/go.mod h1:977aR5J4BBfLtFkYZkbHv1i7NJYN1X0x85xO3b8YLpc=
181-
github.com/chaosblade-io/chaosblade-spec-go v1.6.0 h1:IF77oiLJzJhZc/hT71TMscneXKCrcjv8WEAQhl+scs8=
182-
github.com/chaosblade-io/chaosblade-spec-go v1.6.0/go.mod h1:977aR5J4BBfLtFkYZkbHv1i7NJYN1X0x85xO3b8YLpc=
183174
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
184175
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
185176
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=

0 commit comments

Comments
 (0)