docs: def create(self, name, media=None, flist=None, cpu=2, memory=512,
                 nics=None, port=None, mount=None, tags=None, config=None):
          """
          :param name: Name of the kvm domain
          :param media: (optional) array of media objects to attach to the machine, where the first object is the boot device
                        each media object is a dict of {url, type} where type can be one of 'disk', or 'cdrom', or empty (default to disk)
                        example: [{'url': 'nbd+unix:///test?socket=/tmp/ndb.socket'}, {'type': 'cdrom', 'url: '/somefile.iso'}]
                        zdb exmpale:
                        [{'url': 'zdb://host:port?size=10G&blocksize=4096'},
                         {'url': 'zdb+unix:///path/to/unix.socket?size=5G'}]
          :param flist: (optional) VM flist. A special bootable flist witch has a correct boot.yaml file
                       example: http://hub.gig.tech/azmy/ubuntu-zesty.flist
          :param cpu: number of vcpu cores
          :param memory: memory in MiB
          :param port: A dict of host_port: container_port pairs
                         Example:
                          `port={8080: 80, 7000:7000}`
                       Only supported if default network is used
          :param nics: Configure the attached nics to the container
                       each nic object is a dict of the format
                       {
                          'type': nic_type # default, bridge, vlan, or vxlan (note, vlan and vxlan only supported by ovs)
                          'id': id # depends on the type, bridge name (bridge type) zerotier network id (zertier type), the vlan tag or the vxlan id
                       }
          :param port: Configure port forwards to vm, this only works if default network nic is added. Is a dict of {host-port: guest-port}
          :param mount: A list of host shared folders in the format {'source': '/host/path', 'target': '/guest/path', 'readonly': True|False}
          :param tags: A list of user defined tags (strings)
          :param config: a map with the config file path as a key and content as a value. This only works when creating a VM from an flist. The
                         config files are written to the machine before booting.
                         Example:
                         config = {'/root/.ssh/authorized_keys': '<PUBLIC KEYS>'}
  
                         If the machine is not booted from an flist, the config are discarded
  
          :note: At least one media or an flist must be provided.
          :return: uuid of the virtual machine
          """
  
          if nics is None:
              nics = []
  
          args = {
              'name': name,
              'media': media,
              'cpu': cpu,
              'flist': flist,
              'memory': memory,
              'nics': nics,
              'port': port,
              'mount': mount,
              'tags': tags,
              'config': config,
          }
          self._create_chk.check(args)
  
          if media is None and flist is None:
              raise ValueError('need at least one boot media via media or an flist')
  
          return self._client.json('kvm.create', args, tags=tags)