fix(baremetal): try clear jbod devices before create (#14181)

This commit is contained in:
Zexi Li
2022-05-01 21:36:42 +08:00
committed by GitHub
parent cb32843337
commit de3fbdedb5
2 changed files with 18 additions and 6 deletions

View File

@@ -873,6 +873,10 @@ func (adapter *MegaRaidAdaptor) megacliBuildJBOD(devs []*baremetal.BaremetalStor
if !adapter.megacliIsJBODEnabled() {
return fmt.Errorf("JBOD not supported")
}
// try clear jbod disk of devices
if err := adapter.megacliClearJBODDisks(devs); err != nil {
log.Warningf("try clear megaraid jbod disks before make jbod: %s", err)
}
devIds := []string{}
for _, d := range devs {
devIds = append(devIds, GetSpecString(d))
@@ -914,10 +918,10 @@ func (adapter *MegaRaidAdaptor) storcliClearJBODDisks() error {
return errors.NewAggregate(errs)
}
func (adapter *MegaRaidAdaptor) megacliClearJBODDisks() error {
func (adapter *MegaRaidAdaptor) megacliClearJBODDisks(devs []*baremetal.BaremetalStorage) error {
devIds := []string{}
for idx, dev := range adapter.devs {
devIds = append(devIds, GetSpecString(dev.ToBaremetalStorage(idx)))
for _, dev := range devs {
devIds = append(devIds, GetSpecString(dev))
}
errs := make([]error, 0)
for _, devId := range devIds {
@@ -930,9 +934,17 @@ func (adapter *MegaRaidAdaptor) megacliClearJBODDisks() error {
return errors.NewAggregate(errs)
}
func (adapter *MegaRaidAdaptor) megacliClearAllJBODDisks() error {
allDevs := make([]*baremetal.BaremetalStorage, 0)
for idx, dev := range adapter.devs {
allDevs = append(allDevs, dev.ToBaremetalStorage(idx))
}
return adapter.megacliClearJBODDisks(allDevs)
}
func (adapter *MegaRaidAdaptor) clearJBODDisks() {
if err := adapter.megacliClearJBODDisks(); err != nil {
log.Errorf("megacliClearJBODDisks error: %v", err)
if err := adapter.megacliClearAllJBODDisks(); err != nil {
log.Errorf("megacliClearAllJBODDisks error: %v", err)
log.Infof("try storcliClearJBODDisks")
if err := adapter.storcliClearJBODDisks(); err != nil {
log.Errorf("storcliClearJBODDisks error: %v", err)

View File

@@ -149,7 +149,7 @@ func (s *Client) run(parseOutput bool, cmds []string, input io.Reader, withPty b
}
}
log.Debugf("Run command: %s", cmd)
log.Debugf("Run command(%s@%s): %s", s.config.Username, s.config.Host, cmd)
var stdOut bytes.Buffer
var stdErr bytes.Buffer
session.Stdout = &stdOut