@@ -30,7 +30,9 @@ import (
3030 "github.com/opencurve/curveadm/internal/configure/topology"
3131 "github.com/opencurve/curveadm/internal/errno"
3232 "github.com/opencurve/curveadm/internal/playbook"
33- tui "github.com/opencurve/curveadm/internal/tui/common"
33+ "github.com/opencurve/curveadm/internal/task/task/common"
34+ tuicomm "github.com/opencurve/curveadm/internal/tui/common"
35+
3436 cliutil "github.com/opencurve/curveadm/internal/utils"
3537 "github.com/spf13/cobra"
3638)
@@ -71,26 +73,23 @@ var (
7173 // chunkserevr (curvebs)
7274 MIGRATE_CHUNKSERVER_STEPS = []int {
7375 playbook .BACKUP_ETCD_DATA ,
74- playbook .STOP_SERVICE ,
75- playbook .CLEAN_SERVICE , // only container
76+ playbook .CREATE_PHYSICAL_POOL , // add machine that migrate to
7677 playbook .PULL_IMAGE ,
7778 playbook .CREATE_CONTAINER ,
7879 playbook .SYNC_CONFIG ,
79- playbook .CREATE_PHYSICAL_POOL ,
8080 playbook .START_CHUNKSERVER ,
81- playbook .CREATE_LOGICAL_POOL ,
81+ playbook .MARK_SERVER_PENGDDING , // start migrate to new server
8282 }
8383
8484 // metaserver (curvefs)
8585 MIGRATE_METASERVER_STEPS = []int {
8686 playbook .BACKUP_ETCD_DATA ,
87- playbook .STOP_SERVICE , // only container
88- playbook .CLEAN_SERVICE ,
87+ playbook .CREATE_LOGICAL_POOL ,
8988 playbook .PULL_IMAGE ,
9089 playbook .CREATE_CONTAINER ,
9190 playbook .SYNC_CONFIG ,
9291 playbook .START_METASERVER ,
93- playbook .CREATE_LOGICAL_POOL ,
92+ playbook .STOP_SERVICE , // start migrate to new server
9493 }
9594
9695 MIGRATE_ROLE_STEPS = map [string ][]int {
@@ -100,12 +99,21 @@ var (
10099 topology .ROLE_SNAPSHOTCLONE : MIGRATE_SNAPSHOTCLONE_STEPS ,
101100 topology .ROLE_METASERVER : MIGRATE_METASERVER_STEPS ,
102101 }
102+
103+ MIGRATE_POST_CLEAN_STEPS = []int {
104+ playbook .STOP_SERVICE , // bs
105+ playbook .CLEAN_SERVICE , // bs, fs
106+ playbook .CREATE_PHYSICAL_POOL , // only for chunkserver, remove server that migrate from
107+ playbook .CREATE_LOGICAL_POOL , // only for metaserver, remove server that migrate from
108+ playbook .UPDATE_TOPOLOGY , // bs, fs
109+ }
103110)
104111
105112type migrateOptions struct {
106113 filename string
107114 poolset string
108115 poolsetDiskType string
116+ clean bool
109117}
110118
111119func NewMigrateCommand (curveadm * cli.CurveAdm ) * cobra.Command {
@@ -125,7 +133,7 @@ func NewMigrateCommand(curveadm *cli.CurveAdm) *cobra.Command {
125133 flags := cmd .Flags ()
126134 flags .StringVar (& options .poolset , "poolset" , "default" , "Specify the poolset" )
127135 flags .StringVar (& options .poolsetDiskType , "poolset-disktype" , "ssd" , "Specify the disk type of physical pool" )
128-
136+ flags . BoolVar ( & options . clean , "clean" , false , "Clean migrated environment for chunkserver or metaserver" )
129137 return cmd
130138}
131139
@@ -191,8 +199,21 @@ func genMigratePlaybook(curveadm *cli.CurveAdm,
191199 migrates := getMigrates (curveadm , data )
192200 role := migrates [0 ].From .GetRole ()
193201 steps := MIGRATE_ROLE_STEPS [role ]
194- poolset := options .poolset
195- poolsetDiskType := options .poolsetDiskType
202+
203+ // post clean
204+ if options .clean {
205+ steps = MIGRATE_POST_CLEAN_STEPS
206+ if migrates [0 ].From .GetKind () == common .KIND_CURVEBS {
207+ steps = append (steps [:3 ], steps [4 :]... )
208+ } else {
209+ steps = append (steps [1 :2 ], steps [3 :]... )
210+ }
211+ }
212+
213+ poolset := configure.Poolset {
214+ Name : options .poolset ,
215+ Type : options .poolsetDiskType ,
216+ }
196217
197218 pb := playbook .NewPlaybook (curveadm )
198219 for _ , step := range steps {
@@ -204,38 +225,40 @@ func genMigratePlaybook(curveadm *cli.CurveAdm,
204225 config = dcs2del
205226 case playbook .BACKUP_ETCD_DATA :
206227 config = curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_ETCD )
207- case CREATE_PHYSICAL_POOL ,
208- CREATE_LOGICAL_POOL :
228+ case
229+ playbook .CREATE_PHYSICAL_POOL ,
230+ playbook .CREATE_LOGICAL_POOL ,
231+ playbook .MARK_SERVER_PENGDDING :
209232 config = curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_MDS )[:1 ]
210233 }
211234
212235 // options
213- options := map [string ]interface {}{}
236+ optionsKV := map [string ]interface {}{}
214237 switch step {
215238 case playbook .CLEAN_SERVICE :
216- options [comm .KEY_CLEAN_ITEMS ] = []string {comm .CLEAN_ITEM_CONTAINER }
217- options [comm .KEY_CLEAN_BY_RECYCLE ] = true
239+ optionsKV [comm .KEY_CLEAN_ITEMS ] = []string {comm .CLEAN_ITEM_CONTAINER }
240+ optionsKV [comm .KEY_CLEAN_BY_RECYCLE ] = true
241+ optionsKV [comm .KEY_REMOVE_MIGRATED_SERVER ] = true
218242 case playbook .CREATE_PHYSICAL_POOL :
219- options [comm .KEY_CREATE_POOL_TYPE ] = comm .POOL_TYPE_PHYSICAL
220- options [comm .KEY_MIGRATE_SERVERS ] = migrates
221- options [comm .POOLSET ] = poolset
222- options [comm .POOLSET_DISK_TYPE ] = poolsetDiskType
243+ optionsKV [comm .KEY_CREATE_POOL_TYPE ] = comm .POOL_TYPE_PHYSICAL
244+ optionsKV [comm .KEY_MIGRATE_SERVERS ] = migrates
245+ optionsKV [comm .KEY_POOLSET ] = poolset
223246 case playbook .CREATE_LOGICAL_POOL :
224- options [comm .KEY_CREATE_POOL_TYPE ] = comm .POOL_TYPE_LOGICAL
225- options [comm .KEY_MIGRATE_SERVERS ] = migrates
226- options [comm .KEY_NEW_TOPOLOGY_DATA ] = data
227- options [comm .POOLSET ] = poolset
228- options [comm .POOLSET_DISK_TYPE ] = poolsetDiskType
247+ optionsKV [comm .KEY_CREATE_POOL_TYPE ] = comm .POOL_TYPE_LOGICAL
248+ optionsKV [comm .KEY_MIGRATE_SERVERS ] = migrates
249+ optionsKV [comm .KEY_NEW_TOPOLOGY_DATA ] = data
250+ optionsKV [comm .KEY_IF_UPDATE_TOPOLOG ] = false
251+ optionsKV [comm .KEY_POOLSET ] = poolset
229252 case playbook .UPDATE_TOPOLOGY :
230- options [comm .KEY_NEW_TOPOLOGY_DATA ] = data
253+ optionsKV [comm .KEY_NEW_TOPOLOGY_DATA ] = data
231254 }
232255
233256 pb .AddStep (& playbook.PlaybookStep {
234- Type : step ,
235- Configs : config ,
236- Options : options ,
257+ Type : step ,
258+ Configs : config ,
259+ Options : optionsKV ,
237260 ExecOptions : playbook.ExecOptions {
238- SilentSubBar : step == playbook .UPDATE_TOPOLOGY ,
261+ // SilentSubBar: step == playbook.UPDATE_TOPOLOGY,
239262 },
240263 })
241264 }
@@ -261,7 +284,10 @@ func runMigrate(curveadm *cli.CurveAdm, options migrateOptions) error {
261284 }
262285
263286 // 2) read topology from file
264- data , err := readTopology (curveadm , options .filename )
287+ data , err := readTopology (curveadm ,
288+ options .filename ,
289+ options .clean ,
290+ )
265291 if err != nil {
266292 return err
267293 }
@@ -272,13 +298,15 @@ func runMigrate(curveadm *cli.CurveAdm, options migrateOptions) error {
272298 return err
273299 }
274300
275- // 4) display title
276- displayMigrateTitle (curveadm , data )
301+ if ! options .clean {
302+ // 4) display title
303+ displayMigrateTitle (curveadm , data )
277304
278- // 5) confirm by user
279- if pass := tui .ConfirmYes (tui .DEFAULT_CONFIRM_PROMPT ); ! pass {
280- curveadm .WriteOutln (tui .PromptCancelOpetation ("migrate service" ))
281- return errno .ERR_CANCEL_OPERATION
305+ // 5) confirm by user
306+ if pass := tuicomm .ConfirmYes (tuicomm .DEFAULT_CONFIRM_PROMPT ); ! pass {
307+ curveadm .WriteOutln (tuicomm .PromptCancelOpetation ("migrate service" ))
308+ return errno .ERR_CANCEL_OPERATION
309+ }
282310 }
283311
284312 // 6) generate migrate playbook
@@ -294,6 +322,9 @@ func runMigrate(curveadm *cli.CurveAdm, options migrateOptions) error {
294322 }
295323
296324 // 9) print success prompt
325+ if options .clean {
326+ return nil
327+ }
297328 curveadm .WriteOutln ("" )
298329 curveadm .WriteOutln (color .GreenString ("Services successfully migrateed ^_^." ))
299330 // TODO(P1): warning iff there is changed configs
0 commit comments