sub power_cycle_host_setup ($) {
my ($ho) = @_;
- my $spec = ($ho->{Power} // 'unsupported');
# $ho->{PowerApproaches}[]{Name} see below
# $ho->{PowerApproaches}[]{MethObjs}[] each has ->pdu_power_state($on)
# `Name's are:
# Only Host only supports one method and this is it
- $ho->{PowerApproaches} = {
- Name => 'Only',
- MethObjs => power_cycle_parse_method($ho, $spec),
- };
+ # ILOM Try to use just the ILOM
+ # PDU Try to use the PDU (but also turn off/on ILOM if provided)
+ my @approaches;
+ my $pdu_s = get_host_property($ho,'PowerPDU');
+ my $ilom_s = get_host_property($ho,'PowerILOM');
+ if ($pdu_s || $ilom_s) {
+ my $ilom_m;
+ if ($ilom_s) {
+ $ilom_m = power_cycle_parse_method($ho, $ilom_s);
+ push @approaches, {
+ Name => 'ILOM',
+ MethObjs => ['nest', @$ilom_m ],
+ };
+ }
+ if ($pdu_s) {
+ my $pdu_m = power_cycle_parse_method($ho, $pdu_s);
+ if ($ilom_m) {
+ require Osstest::PDU::try_off;
+ $pdu_m = [
+ @$pdu_m,
+ get_host_method_object($ho, 'PDU', 'pause'),
+ map { Osstest::PDU::try_off->new_from_mo($_) } @$ilom_m,
+ ];
+ }
+ push @approaches, {
+ Name => 'PDU',
+ MethObjs => ['nest', @$pdu_m ],
+ };
+ }
+ } else {
+ my $spec = ($ho->{Power} // 'unsupported');
+ push @approaches, {
+ Name => 'Only',
+ MethObjs => power_cycle_parse_method($ho, $spec),
+ };
+ }
+ $ho->{PowerApproaches} = \@approaches;
}
sub power_reboot_attempts ($$$) {