@@ -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