--- /dev/null
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Auth import BootAuth
+from PLC.Nodes import Node, Nodes
+from PLC.NodeNetworks import NodeNetwork, NodeNetworks
+from PLC.Sessions import Session, Sessions
+
+class BootGetNodeDetails(Method):
+ """
+ Returns a set of details about the calling node, including a new
+ node session value.
+ """
+
+ accepts = [BootAuth()]
+ returns = {
+ 'hostname': Node.fields['hostname'],
+ 'boot_state': Node.fields['boot_state'],
+ 'model': Node.fields['model'],
+ 'networks': [NodeNetwork.fields],
+ 'session': Session.fields['session_id'],
+ }
+
+ def call(self, auth, update_fields):
+ details = {
+ 'hostname': self.caller['hostname'],
+ 'boot_state': self.caller['boot_state'],
+ 'model': self.caller['model'],
+ }
+
+ # Generate a new session value
+ session = Session(self.api)
+ session.sync(commit = False)
+ session.add_node(self.caller, commit = True)
+
+ details['session'] = session['session_id']
+
+ if self.caller['nodenetwork_ids']:
+ details['networks'] = NodeNetworks(self.api, self.caller['nodenetwork_ids']).values()
+
+ return details
+