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):
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")
# 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()
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