docs: def _generate_create_dict(
              self, cpus=None, memory=None, hourly=True,
              hostname=None, domain=None, local_disk=True,
              datacenter=None, os_code=None, image_id=None,
              dedicated=False, public_vlan=None, private_vlan=None,
              private_subnet=None, public_subnet=None,
              userdata=None, nic_speed=None, disks=None, post_uri=None,
              private=False, ssh_keys=None, public_security_groups=None,
              private_security_groups=None, boot_mode=None, **kwargs):
          """Returns a dict appropriate to pass into Virtual_Guest::createObject
  
              See :func:`create_instance` for a list of available options.
          """
          required = [hostname, domain]
  
          flavor = kwargs.get('flavor', None)
          host_id = kwargs.get('host_id', None)
  
          mutually_exclusive = [
              {'os_code': os_code, 'image_id': image_id},
              {'cpu': cpus, 'flavor': flavor},
              {'memory': memory, 'flavor': flavor},
              {'flavor': flavor, 'dedicated': dedicated},
              {'flavor': flavor, 'host_id': host_id}
          ]
  
          if not all(required):
              raise ValueError("hostname, and domain are required")
  
          for mu_ex in mutually_exclusive:
              if all(mu_ex.values()):
                  raise ValueError(
                      'Can only specify one of: %s' % (','.join(mu_ex.keys())))
  
          data = {
              "startCpus": cpus,
              "maxMemory": memory,
              "hostname": hostname,
              "domain": domain,
              "localDiskFlag": local_disk,
              "hourlyBillingFlag": hourly,
              "supplementalCreateObjectOptions": {
                  "bootMode": boot_mode
              }
          }
  
          if flavor:
              data["supplementalCreateObjectOptions"]["flavorKeyName"] = flavor
  
          if dedicated and not host_id:
              data["dedicatedAccountHostOnlyFlag"] = dedicated
  
          if host_id:
              data["dedicatedHost"] = {"id": host_id}
  
          if private:
              data['privateNetworkOnlyFlag'] = private
  
          if image_id:
              data["blockDeviceTemplateGroup"] = {"globalIdentifier": image_id}
          elif os_code:
              data["operatingSystemReferenceCode"] = os_code
  
          if datacenter:
              data["datacenter"] = {"name": datacenter}
  
          if private_vlan or public_vlan or private_subnet or public_subnet:
              network_components = self._create_network_components(public_vlan, private_vlan,
                                                                   private_subnet, public_subnet)
              data.update(network_components)
  
          if public_security_groups:
              secgroups = [{'securityGroup': {'id': int(sg)}}
                           for sg in public_security_groups]
              pnc = data.get('primaryNetworkComponent', {})
              pnc['securityGroupBindings'] = secgroups
              data.update({'primaryNetworkComponent': pnc})
  
          if private_security_groups:
              secgroups = [{'securityGroup': {'id': int(sg)}}
                           for sg in private_security_groups]
              pbnc = data.get('primaryBackendNetworkComponent', {})
              pbnc['securityGroupBindings'] = secgroups
              data.update({'primaryBackendNetworkComponent': pbnc})
  
          if userdata:
              data['userData'] = [{'value': userdata}]
  
          if nic_speed:
              data['networkComponents'] = [{'maxSpeed': nic_speed}]
  
          if disks:
              data['blockDevices'] = [
                  {"device": "0", "diskImage": {"capacity": disks[0]}}
              ]
  
              for dev_id, disk in enumerate(disks[1:], start=2):
                  data['blockDevices'].append(
                      {
                          "device": str(dev_id),
                          "diskImage": {"capacity": disk}
                      }
                  )
  
          if post_uri:
              data['postInstallScriptUri'] = post_uri
  
          if ssh_keys:
              data['sshKeys'] = [{'id': key_id} for key_id in ssh_keys]
  
          return data