@@ -27,7 +27,6 @@ import (
2727
2828 "github.com/fatih/color"
2929 "github.com/opencurve/curveadm/cli/cli"
30- "github.com/opencurve/curveadm/internal/common"
3130 comm "github.com/opencurve/curveadm/internal/common"
3231 "github.com/opencurve/curveadm/internal/configure/disks"
3332 "github.com/opencurve/curveadm/internal/configure/topology"
@@ -40,7 +39,8 @@ import (
4039)
4140
4241const (
43- COMMIT_EXAMPLE = `Examples:
42+ HOST_DEVICE_SEP = ":"
43+ COMMIT_EXAMPLE = `Examples:
4444 $ curveadm disks commit /path/to/disks.yaml # Commit disks`
4545)
4646
@@ -89,35 +89,55 @@ func readAndCheckDisks(curveadm *cli.CurveAdm, options commitOptions) (string, [
8989 }
9090
9191 // 3) check disks data
92- dcs , err = disks .ParseDisks (data , curveadm )
92+ dcs , err = disks .ParseDisks (data )
9393 return data , dcs , err
9494}
9595
9696func assambleNewDiskRecords (dcs []* disks.DiskConfig ,
9797 oldDiskRecords []storage.Disk ) ([]storage.Disk , []storage.Disk ) {
98- keySep := ":"
9998 newDiskMap := make (map [string ]bool )
10099
100+ // "ServiceMountDevice=0" means write disk UUID into /etc/fstab for host mounting.
101+ // "ServiceMountDevice=1" means not to update /etc/fstab, the disk UUID will be wrote
102+ // into the config of service(chunkserver) container for disk automatic mounting.
103+ serviceMountDevice := 0 // 0: false, 1: true
101104 var newDiskRecords , diskRecordDeleteList []storage.Disk
102105 for _ , dc := range dcs {
103106 for _ , host := range dc .GetHost () {
104- key := strings .Join ([]string {host , dc .GetDevice ()}, keySep )
107+ device := dc .GetDevice ()
108+ key := strings .Join ([]string {host , device }, HOST_DEVICE_SEP )
105109 newDiskMap [key ] = true
110+ if dc .GetServiceMount () {
111+ serviceMountDevice = 1
112+ }
113+ diskSize := comm .DISK_DEFAULT_NULL_SIZE
114+ diskUri := comm .DISK_DEFAULT_NULL_URI
115+ diskChunkserverId := comm .DISK_DEFAULT_NULL_CHUNKSERVER_ID
116+ for _ , dr := range oldDiskRecords {
117+ if dr .Host == host && device == dr .Device {
118+ diskSize = dr .Size
119+ diskUri = dr .URI
120+ diskChunkserverId = dr .ChunkServerID
121+ break
122+ }
123+ }
106124 newDiskRecords = append (
107125 newDiskRecords , storage.Disk {
108- Host : host ,
109- Device : dc .GetDevice (),
110- Size : comm .DISK_DEFAULT_NULL_SIZE ,
111- URI : comm .DISK_DEFAULT_NULL_URI ,
112- MountPoint : dc .GetMountPoint (),
113- FormatPercent : dc .GetFormatPercent (),
114- ChunkServerID : comm .DISK_DEFAULT_NULL_CHUNKSERVER_ID ,
126+ Host : host ,
127+ Device : device ,
128+ Size : diskSize ,
129+ URI : diskUri ,
130+ MountPoint : dc .GetMountPoint (),
131+ ContainerImage : dc .GetContainerImage (),
132+ FormatPercent : dc .GetFormatPercent (),
133+ ChunkServerID : diskChunkserverId ,
134+ ServiceMountDevice : serviceMountDevice ,
115135 })
116136 }
117137 }
118138
119139 for _ , dr := range oldDiskRecords {
120- key := strings .Join ([]string {dr .Host , dr .Device }, keySep )
140+ key := strings .Join ([]string {dr .Host , dr .Device }, HOST_DEVICE_SEP )
121141 if _ , ok := newDiskMap [key ]; ! ok {
122142 diskRecordDeleteList = append (diskRecordDeleteList , dr )
123143 }
@@ -127,19 +147,16 @@ func assambleNewDiskRecords(dcs []*disks.DiskConfig,
127147}
128148
129149func writeDiskRecord (dr storage.Disk , curveadm * cli.CurveAdm ) error {
130- if diskRecords , err := curveadm .Storage ().GetDisk (
131- common .DISK_FILTER_DEVICE , dr .Host , dr .Device ); err != nil {
150+ if err := curveadm .Storage ().SetDisk (
151+ dr .Host ,
152+ dr .Device ,
153+ dr .MountPoint ,
154+ dr .ContainerImage ,
155+ dr .FormatPercent ,
156+ dr .ServiceMountDevice ); err != nil {
132157 return err
133- } else if len (diskRecords ) == 0 {
134- if err := curveadm .Storage ().SetDisk (
135- dr .Host ,
136- dr .Device ,
137- dr .MountPoint ,
138- dr .ContainerImage ,
139- dr .FormatPercent ); err != nil {
140- return err
141- }
142158 }
159+
143160 return nil
144161}
145162
@@ -153,15 +170,17 @@ func syncDiskRecords(data string, dcs []*disks.DiskConfig,
153170 oldDiskRecordsString := tui .FormatDisks (oldDiskRecords )
154171 newDiskRecordsString := tui .FormatDisks (newDiskRecords )
155172
156- if ! options .slient {
157- diff := utils .Diff (oldDiskRecordsString , newDiskRecordsString )
158- curveadm .WriteOutln (diff )
159- }
173+ if len (newDiskRecords ) != len (oldDiskRecords ) {
174+ if ! options .slient {
175+ diff := utils .Diff (oldDiskRecordsString , newDiskRecordsString )
176+ curveadm .WriteOutln (diff )
177+ }
160178
161- pass := tuicomm .ConfirmYes ("Disk changes are showing above. Do you want to continue?" )
162- if ! pass {
163- curveadm .WriteOut (tuicomm .PromptCancelOpetation ("commit disk table" ))
164- return errno .ERR_CANCEL_OPERATION
179+ pass := tuicomm .ConfirmYes ("Disk changes are showing above. Do you want to continue?" )
180+ if ! pass {
181+ curveadm .WriteOut (tuicomm .PromptCancelOpetation ("commit disk table" ))
182+ return errno .ERR_CANCEL_OPERATION
183+ }
165184 }
166185
167186 // write new disk records
0 commit comments