a pass on some explicit encode calls that are obviously wrong in python3; some may...
[plcapi.git] / PLC / Methods / GenerateNodeConfFile.py
index 0b5cf8e..13a17b7 100644 (file)
@@ -5,7 +5,7 @@ from PLC.Faults import *
 from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
 from PLC.Nodes import Node, Nodes
-from PLC.NodeNetworks import NodeNetwork, NodeNetworks
+from PLC.Interfaces import Interface, Interfaces
 from PLC.Auth import Auth
 
 class GenerateNodeConfFile(Method):
@@ -26,7 +26,7 @@ class GenerateNodeConfFile(Method):
         Auth(),
         Mixed(Node.fields['node_id'],
               Node.fields['hostname']),
-       Parameter(bool, "True if you want to regenerate node key")
+        Parameter(bool, "True if you want to regenerate node key")
         ]
 
     returns = Parameter(str, "Node configuration file")
@@ -35,42 +35,42 @@ class GenerateNodeConfFile(Method):
         # Get node information
         nodes = Nodes(self.api, [node_id_or_hostname])
         if not nodes:
-            raise PLCInvalidArgument, "No such node"
+            raise PLCInvalidArgument("No such node")
         node = nodes[0]
 
         if node['peer_id'] is not None:
-            raise PLCInvalidArgument, "Not a local node"
+            raise PLCInvalidArgument("Not a local node")
 
         # If we are not an admin, make sure that the caller is a
         # member of the site at which the node is located.
         if 'admin' not in self.caller['roles']:
             if node['site_id'] not in self.caller['site_ids']:
-                raise PLCPermissionDenied, "Not allowed to generate a configuration file for that node"
+                raise PLCPermissionDenied("Not allowed to generate a configuration file for that node")
 
-       # Get node networks for this node
+        # Get interfaces for this node
         primary = None
-        nodenetworks = NodeNetworks(self.api, node['nodenetwork_ids'])
-        for nodenetwork in nodenetworks:
-            if nodenetwork['is_primary']:
-                primary = nodenetwork
+        interfaces = Interfaces(self.api, node['interface_ids'])
+        for interface in interfaces:
+            if interface['is_primary']:
+                primary = interface
                 break
         if primary is None:
-            raise PLCInvalidArgument, "No primary network configured"
+            raise PLCInvalidArgument("No primary network configured")
 
         # Split hostname into host and domain parts
         parts = node['hostname'].split(".", 1)
         if len(parts) < 2:
-            raise PLCInvalidArgument, "Node hostname is invalid"
+            raise PLCInvalidArgument("Node hostname is invalid")
         host = parts[0]
         domain = parts[1]
 
-       if regenerate_node_key:
+        if regenerate_node_key:
             # Generate 32 random bytes
-            bytes = random.sample(xrange(0, 256), 32)
+            int8s = random.sample(range(0, 256), 32)
             # Base64 encode their string representation
-            node['key'] = base64.b64encode("".join(map(chr, bytes)))
+            node['key'] = base64.b64encode(bytes(int8s))
             # XXX Boot Manager cannot handle = in the key
-            node['key'] = node['key'].replace("=", "")
+            node['key'] = node['key'].replace(b"=", b"")
             # Save it
             node.sync()
 
@@ -97,11 +97,11 @@ class GenerateNodeConfFile(Method):
         file += 'HOST_NAME="%s"\n' % host
         file += 'DOMAIN_NAME="%s"\n' % domain
 
-        for nodenetwork in nodenetworks:
-            if nodenetwork['method'] == 'ipmi':
-                file += 'IPMI_ADDRESS="%s"\n' % nodenetwork['ip']
-                if nodenetwork['mac']:
-                    file += 'IPMI_MAC="%s"\n' % nodenetwork['mac'].lower()
+        for interface in interfaces:
+            if interface['method'] == 'ipmi':
+                file += 'IPMI_ADDRESS="%s"\n' % interface['ip']
+                if interface['mac']:
+                    file += 'IPMI_MAC="%s"\n' % interface['mac'].lower()
                 break
 
         return file