diff --git a/pkg/baremetal/manager.go b/pkg/baremetal/manager.go index b4570d4adf..6a7a48a691 100644 --- a/pkg/baremetal/manager.go +++ b/pkg/baremetal/manager.go @@ -2448,9 +2448,7 @@ func (s *SBaremetalServer) DoDiskConfig(term *ssh.Client) error { } } - tool := disktool.NewSSHPartitionTool(term) - tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts)) - err = tool.RetrieveDiskInfo() + tool, err := disktool.NewSSHPartitionTool(term, layouts) if err != nil { return err } @@ -2529,11 +2527,9 @@ func (s *SBaremetalServer) DoPartitionDisk(term *ssh.Client) ([]*disktool.Partit return nil, errors.Wrapf(err, "CalculateLayout") } - tool := disktool.NewSSHPartitionTool(term) - tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts)) - err = tool.RetrieveDiskInfo() + tool, err := disktool.NewSSHPartitionTool(term, layouts) if err != nil { - return nil, errors.Wrapf(err, "RetrieveDiskInfo") + return nil, errors.Wrapf(err, "NewSSHPartitionTool") } disks, _ := s.desc.GetArray("disks") @@ -2606,9 +2602,7 @@ func (s *SBaremetalServer) DoRebuildRootDisk(term *ssh.Client) ([]*disktool.Part return nil, err } - tool := disktool.NewSSHPartitionTool(term) - tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts)) - err = tool.RetrieveDiskInfo() + tool, err := disktool.NewSSHPartitionTool(term, layouts) if err != nil { return nil, err } diff --git a/pkg/baremetal/utils/disktool/disktool.go b/pkg/baremetal/utils/disktool/disktool.go index 1daae03fbf..603f1980bb 100644 --- a/pkg/baremetal/utils/disktool/disktool.go +++ b/pkg/baremetal/utils/disktool/disktool.go @@ -753,7 +753,7 @@ type SSHPartitionTool struct { term *ssh.Client } -func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool { +func newSSHPartitionTool(term *ssh.Client) *SSHPartitionTool { tool := &SSHPartitionTool{ term: term, } @@ -761,6 +761,15 @@ func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool { return tool } +func NewSSHPartitionTool(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartitionTool, error) { + tool := newSSHPartitionTool(term) + tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts)) + if err := tool.RetrieveDiskInfo(); err != nil { + return nil, errors.Wrapf(err, "RetrieveDiskInfo") + } + return tool, nil +} + func (tool *SSHPartitionTool) Run(cmds ...string) ([]string, error) { return tool.term.Run(cmds...) } diff --git a/pkg/baremetal/utils/raid/adaptec/adaptec.go b/pkg/baremetal/utils/raid/adaptec/adaptec.go index 9fe6d89c1a..ac31dffc8e 100644 --- a/pkg/baremetal/utils/raid/adaptec/adaptec.go +++ b/pkg/baremetal/utils/raid/adaptec/adaptec.go @@ -58,7 +58,7 @@ func GetCommand(args ...string) string { return raid.GetCommand(bin, args...) } -func (raid *AdaptecRaid) GetName() string { +func (r *AdaptecRaid) GetName() string { return baremetal.DISK_DRIVER_ADAPTECRAID } @@ -77,8 +77,8 @@ func (r *AdaptecRaid) ParsePhyDevs() error { return nil } -func (raid *AdaptecRaid) CleanRaid() error { - for _, ada := range raid.adapters { +func (r *AdaptecRaid) CleanRaid() error { + for _, ada := range r.adapters { ada.removeJBODDisks() ada.RemoveLogicVolumes() } @@ -114,17 +114,17 @@ func getAdaptorIndex(line string) int { return adapInt } -func (raid *AdaptecRaid) parsePhyDevs(lines []string) error { +func (r *AdaptecRaid) parsePhyDevs(lines []string) error { for _, line := range lines { index := getAdaptorIndex(line) if index == -1 { continue } - ada, err := NewAdaptecRaidAdaptor(index, raid) + ada, err := NewAdaptecRaidAdaptor(index, r) if err != nil { return errors.Wrapf(err, "New raid adaptor %d", index) } - raid.adapters = append(raid.adapters, ada) + r.adapters = append(r.adapters, ada) } return nil } @@ -167,24 +167,9 @@ func (ada *AdaptecRaidAdaptor) GetIndex() int { } func (ada *AdaptecRaidAdaptor) PreBuildRaid(confs []*api.BaremetalDiskConfig) error { - // set to raid expose raw mode or mixed mode - if !ada.isRaidExposeRawMode() && !ada.isMixedMode() { - err := func() error { - errs := []error{} - if err := ada.setControllerModeRaidExposeRaw(); err != nil { - errs = append(errs, err) - } else { - return nil - } - if err := ada.setControllerModeMixed(); err != nil { - errs = append(errs, err) - } else { - return nil - } - return errors.NewAggregate(errs) - }() - if err != nil { - return errors.Wrap(err, "set raid to expose raw or mixed mode") + if !ada.isRaidHideRawMode() { + if err := ada.setControllerModeRaidHideRaw(); err != nil { + return errors.Wrapf(err, "set controller mode to raid hide raw mode") } } if err := ada.removeJBODDisks(); err != nil { @@ -365,6 +350,26 @@ func (ada *AdaptecRaidAdaptor) buildJBOD(dev *baremetal.BaremetalStorage) error } func (ada *AdaptecRaidAdaptor) buildNonRaid(dev *baremetal.BaremetalStorage) error { + // set to raid expose raw mode or mixed mode + if !ada.isRaidExposeRawMode() && !ada.isMixedMode() { + err := func() error { + errs := []error{} + if err := ada.setControllerModeRaidExposeRaw(); err != nil { + errs = append(errs, err) + } else { + return nil + } + if err := ada.setControllerModeMixed(); err != nil { + errs = append(errs, err) + } else { + return nil + } + return errors.NewAggregate(errs) + }() + if err != nil { + return errors.Wrap(err, "set raid to expose raw or mixed mode") + } + } // try build JBOD firstly if err := ada.buildJBOD(dev); err != nil { log.Warningf("try build JBOD error: %v", err) diff --git a/pkg/baremetal/utils/raid/drivers/drivers.go b/pkg/baremetal/utils/raid/drivers/drivers.go index 5f90d15e77..26882c31e4 100644 --- a/pkg/baremetal/utils/raid/drivers/drivers.go +++ b/pkg/baremetal/utils/raid/drivers/drivers.go @@ -65,7 +65,7 @@ func GetDriverByKernelModule(module string, term raid.IExecTerm) (raid.IRaidDriv name = baremetal.DISK_DRIVER_HPSARAID case raid.MODULE_MPT2SAS, raid.MODULE_MPT3SAS: name = baremetal.DISK_DRIVER_MPT2SAS - case raid.MODULE_AACRAID: + case raid.MODULE_AACRAID, raid.MODULE_SMARTPQI: name = baremetal.DISK_DRIVER_ADAPTECRAID } if name == "" { @@ -96,13 +96,13 @@ func BuildRaid(driver raid.IRaidDriver, confs []*api.BaremetalDiskConfig, adapte if adapter == nil { return fmt.Errorf("Not found adapter by index %d", adapterIdx) } - if err := buildRaid(adapter, confs); err != nil { + if err := buildRaid(driver, adapter, confs); err != nil { return fmt.Errorf("Driver %s, adapter %d build raid: %v", driver.GetName(), adapterIdx, err) } return nil } -func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error { +func buildRaid(driver raid.IRaidDriver, adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error { if err := adapter.PreBuildRaid(confs); err != nil { return fmt.Errorf("PreBuildRaid: %v", err) } @@ -142,6 +142,7 @@ func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) erro if err != nil { return fmt.Errorf("Build raid %s: %v", conf.Conf, err) } + log.Infof("Build %s:%d raid %s", driver.GetName(), adapter.GetIndex(), conf.Conf) } if len(nonDisks) > 0 { if err := adapter.BuildNoneRaid(nonDisks); err != nil { diff --git a/pkg/baremetal/utils/raid/raid.go b/pkg/baremetal/utils/raid/raid.go index 222674e962..d65e115583 100644 --- a/pkg/baremetal/utils/raid/raid.go +++ b/pkg/baremetal/utils/raid/raid.go @@ -37,6 +37,7 @@ const ( MODULE_MPT2SAS = "mpt2sas" MODULE_MPT3SAS = "mpt3sas" MODULE_AACRAID = "aacraid" + MODULE_SMARTPQI = "smartpqi" ) const ( diff --git a/pkg/hostman/guestfs/sshpart/sshpart.go b/pkg/hostman/guestfs/sshpart/sshpart.go index 172af5e6c3..f0821fdab8 100644 --- a/pkg/hostman/guestfs/sshpart/sshpart.go +++ b/pkg/hostman/guestfs/sshpart/sshpart.go @@ -572,9 +572,8 @@ func (p *SSHPartition) Zerofree() { } func MountSSHRootfs(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartition, fsdriver.IRootFsDriver, error) { - tool := disktool.NewSSHPartitionTool(term) - tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts)) - if err := tool.RetrieveDiskInfo(); err != nil { + tool, err := disktool.NewSSHPartitionTool(term, layouts) + if err != nil { return nil, nil, err } tool.RetrievePartitionInfo()