'Create Voxel Node
:keyword name: the name to assign the node (mandatory)
:type    name: ``str``
:keyword image: distribution to deploy
:type    image: :class:`NodeImage`
:keyword size: the plan size to create (mandatory)
Requires size.disk (GB) to be set manually
:type    size: :class:`NodeSize`
:keyword location: which datacenter to create the node in
:type    location: :class:`NodeLocation`
:keyword ex_privateip: Backend IP address to assign to node;
must be chosen from the customer\'s
private VLAN assignment.
:type    ex_privateip: ``str``
:keyword ex_publicip: Public-facing IP address to assign to node;
must be chosen from the customer\'s
public VLAN assignment.
:type    ex_publicip: ``str``
:keyword ex_rootpass: Password for root access; generated if unset.
:type    ex_rootpass: ``str``
:keyword ex_consolepass: Password for remote console;
generated if unset.
:type    ex_consolepass: ``str``
:keyword ex_sshuser: Username for SSH access
:type    ex_sshuser: ``str``
:keyword ex_sshpass: Password for SSH access; generated if unset.
:type    ex_sshpass: ``str``
:keyword ex_voxel_access: Allow access Voxel administrative access.
Defaults to False.
:type    ex_voxel_access: ``bool``
:rtype: :class:`Node` or ``None``'

def create_node(self, **kwargs):

    if (not kwargs['size'].disk):
        raise ValueError('size.disk    must    be    non-zero')
    voxel_access = kwargs.get('ex_voxel_access', None)
    if (voxel_access is not None):
        voxel_access = ('true' if voxel_access else 'false')
    params = {'method': 'voxel.voxcloud.create', 'hostname': kwargs['name'], 'disk_size': int(kwargs['size'].disk), 'facility': kwargs['location'].id, 'image_id': kwargs['image'].id, 'processing_cores': (kwargs['size'].ram / RAM_PER_CPU), 'backend_ip': kwargs.get('ex_privateip', None), 'frontend_ip': kwargs.get('ex_publicip', None), 'admin_password': kwargs.get('ex_rootpass', None), 'console_password': kwargs.get('ex_consolepass', None), 'ssh_username': kwargs.get('ex_sshuser', None), 'ssh_password': kwargs.get('ex_sshpass', None), 'voxel_access': voxel_access}
    object = self.connection.request('/', params=params).object
    if self._getstatus(object):
        return Node(id=object.findtext('device/id'), name=kwargs['name'], state=NODE_STATE_MAP[object.findtext('device/status')], public_ips=kwargs.get('publicip', None), private_ips=kwargs.get('privateip', None), driver=self.connection.driver)
    else:
        return None
