'Creates a CloudSigma instance
@inherits: :class:`NodeDriver.create_node`
:keyword    name: String with a name for this new node (required)
:type       name: ``str``
:keyword    smp: Number of virtual processors or None to calculate
based on the cpu speed.
:type       smp: ``int``
:keyword    nic_model: e1000, rtl8139 or virtio (is not specified,
e1000 is used)
:type       nic_model: ``str``
:keyword    vnc_password: If not set, VNC access is disabled.
:type       vnc_password: ``bool``
:keyword    drive_type: Drive type (ssd|hdd). Defaults to hdd.
:type       drive_type: ``str``'

def create_node(self, **kwargs):

    size = kwargs['size']
    image = kwargs['image']
    smp = kwargs.get('smp', 'auto')
    nic_model = kwargs.get('nic_model', 'e1000')
    vnc_password = kwargs.get('vnc_password', None)
    drive_type = kwargs.get('drive_type', 'hdd')
    if (nic_model not in ['e1000', 'rtl8139', 'virtio']):
        raise CloudSigmaException('Invalid    NIC    model    specified')
    if (drive_type not in ['hdd', 'ssd']):
        raise CloudSigmaException(('Invalid    drive    type    "%s".    Valid    types    are:    hdd,    ssd' % drive_type))
    drive_data = {}
    drive_data.update({'name': kwargs['name'], 'size': ('%sG' % kwargs['size'].disk), 'driveType': drive_type})
    response = self.connection.request(action=('/drives/%s/clone' % image.id), data=dict2str(drive_data), method='POST').object
    if (not response):
        raise CloudSigmaException('Drive    creation    failed')
    drive_uuid = response[0]['drive']
    response = self.connection.request(action=('/drives/%s/info' % drive_uuid)).object
    imaging_start = time.time()
    while ('imaging' in response[0]):
        response = self.connection.request(action=('/drives/%s/info' % drive_uuid)).object
        elapsed_time = (time.time() - imaging_start)
        timed_out = (elapsed_time >= self.IMAGING_TIMEOUT)
        if (('imaging' in response[0]) and timed_out):
            raise CloudSigmaException('Drive    imaging    timed    out')
        time.sleep(1)
    node_data = {}
    node_data.update({'name': kwargs['name'], 'cpu': size.cpu, 'mem': size.ram, 'ide:0:0': drive_uuid, 'boot': 'ide:0:0', 'smp': smp})
    node_data.update({'nic:0:model': nic_model, 'nic:0:dhcp': 'auto'})
    if vnc_password:
        node_data.update({'vnc:ip': 'auto', 'vnc:password': vnc_password})
    response = self.connection.request(action='/servers/create', data=dict2str(node_data), method='POST').object
    if (not isinstance(response, list)):
        response = [response]
    node = self._to_node(response[0])
    if (node is None):
        self.ex_drive_destroy(drive_uuid)
        raise CloudSigmaInsufficientFundsException('Insufficient    funds,    node    creation    failed')
    started = self.ex_start_node(node)
    if started:
        node.state = NodeState.RUNNING
    return node
