=== modified file 'maastest/cases.py' --- maastest/cases.py 2014-03-21 16:21:22 +0000 +++ maastest/cases.py 2014-04-05 17:25:42 +0000 @@ -120,6 +120,17 @@ '-u', self.args.bmc_username, '-p', self.args.bmc_password, '--off'], check_call=True) + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-c', + '-e Chassis_Boot_Flags:Boot_Flags_Persistent=No', + '-e Chassis_Boot_Flags:Boot_Device=PXE']) + if retcode != 0: + self.fail("BMC did not accept one-time PXE boot config.") self.maas.kvm_fixture.run_command([ 'ipmipower', '-h', power_address, '-W', 'opensesspriv', @@ -158,6 +169,74 @@ return self.fail("Failed to enlist node.") + def test_ipmi_boot_flags(self): + """Check that the BMC can report boot control information.""" + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-o', + '-e Chassis_Boot_Flags:Boot_Flags_Persistent', + '-e Chassis_Boot_Flags:Boot_Device']) + if retcode != 0: + self.fail("BMC failed when asked for Chassis Boot Flags") + if 'section' not in stdout.lower(): + self.fail("BMC has no power control config:\n\n"+stdout) + if 'endsection' not in stdout.lower(): + self.fail("BMC has no power control config:\n\n"+stdout) + if 'boot_flags_persistent' not in stdout.lower(): + self.fail("BMC did not report boot flag persistence.") + if 'boot_device' not in stdout.lower(): + self.fail("BMC did not report boot device.") + + def test_ipmi_pxe_control(self): + """Check that the BMC agrees to a one-time PXE boot.""" + # XXX should save and restore BMC details + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-c', + '-e Chassis_Boot_Flags:Boot_Flags_Persistent=No', + '-e Chassis_Boot_Flags:Boot_Device=NO-OVERRIDE']) + if retcode != 0: + self.fail("BMC did not accept one-time NO-OVERRIDE boot config.") + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-o', + '-e Chassis_Boot_Flags:Boot_Device']) + if 'no-override' not in stdout.lower(): + self.fail("NO-OVERRIDE was not fixed in BMC config.") + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-c', + '-e Chassis_Boot_Flags:Boot_Flags_Persistent=No', + '-e Chassis_Boot_Flags:Boot_Device=PXE']) + if retcode != 0: + self.fail("BMC did not accept one-time PXE boot config.") + retcode, stdout, stderr = self.maas.kvm_fixture.run_command([ + 'ipmi-chassis-config', '-h', power_address, + '-W', 'opensesspriv', + '-D', self.args.ipmi_driver, + '-u', self.args.bmc_username, + '-p', self.args.bmc_password, + '-o', + '-e Chassis_Boot_Flags:Boot_Device']) + if retcode != 0: + self.fail("PXE boot config was not fixed in BMC config.") + def test_wait_node_down(self): """Wait for the node to go down.""" if self.args.dry_run: