- handle BootAPI failures gracefully
[bootmanager.git] / source / steps / UpdateBootStateWithPLC.py
1 #!/usr/bin/python2 -u
2
3 # Copyright (c) 2003 Intel Corporation
4 # All rights reserved.
5 #
6 # Copyright (c) 2004-2006 The Trustees of Princeton University
7 # All rights reserved.
8
9 from Exceptions import *
10 import BootAPI
11 import notify_messages
12
13
14 def Run( vars, log ):
15     """
16     Change this nodes boot state at PLC.
17
18     The current value of the BOOT_STATE key in vars is used.
19     Optionally, notify the contacts of the boot state change.
20     If this is the case, the following keys/values
21     should be set in vars before calling this step:
22     STATE_CHANGE_NOTIFY= 1
23     STATE_CHANGE_NOTIFY_MESSAGE= "<notify message>"
24     The second value is a message to send the users from notify_messages.py
25
26     Return 1 if succesfull, a BootManagerException otherwise.
27     """
28
29     log.write( "\n\nStep: Updating node boot state at PLC.\n" )
30
31     update_vals= {}
32     update_vals['boot_state']= vars['BOOT_STATE']
33     try:
34         BootAPI.call_api_function( vars, "BootUpdateNode", (update_vals,) )
35         log.write( "Successfully updated boot state for this node at PLC\n" )
36     except BootManagerException, e:
37         log.write( "Unable to update boot state for this node at PLC: %s.\n" % e )
38
39     notify = vars.get("STATE_CHANGE_NOTIFY",0)
40
41     if notify:
42         message= vars['STATE_CHANGE_NOTIFY_MESSAGE']
43         include_pis= 0
44         include_techs= 1
45         include_support= 0
46
47         sent= 0
48         try:
49             sent= BootAPI.call_api_function( vars, "BootNotifyOwners",
50                                              (message,
51                                               include_pis,
52                                               include_techs,
53                                               include_support) )
54         except BootManagerException, e:
55             log.write( "Call to BootNotifyOwners failed: %s.\n" % e )
56
57         if sent == 0:
58             log.write( "Unable to notify site contacts of state change.\n" )
59
60     return 1