From de3fbdedb54f28f17aa65b9aa96be180721f35e2 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Sun, 1 May 2022 21:36:42 +0800 Subject: [PATCH] fix(baremetal): try clear jbod devices before create (#14181) --- pkg/baremetal/utils/raid/megactl/megactl.go | 22 ++++++++++++++++----- pkg/util/ssh/ssh.go | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pkg/baremetal/utils/raid/megactl/megactl.go b/pkg/baremetal/utils/raid/megactl/megactl.go index 038173d55d..ec71066d26 100644 --- a/pkg/baremetal/utils/raid/megactl/megactl.go +++ b/pkg/baremetal/utils/raid/megactl/megactl.go @@ -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) diff --git a/pkg/util/ssh/ssh.go b/pkg/util/ssh/ssh.go index 48b75db4ee..1a719e19ca 100644 --- a/pkg/util/ssh/ssh.go +++ b/pkg/util/ssh/ssh.go @@ -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