

@base.remotable
def create(self):
    if self.obj_attr_is_set('id'):
        raise exception.ObjectActionError(action='create', reason='already created')
    updates = self.obj_get_changes()
    expected_attrs = [attr for attr in INSTANCE_DEFAULT_FIELDS if (attr in updates)]
    if ('security_groups' in updates):
        updates['security_groups'] = [x.name for x in updates['security_groups']]
    if ('info_cache' in updates):
        updates['info_cache'] = {
            'network_info': updates['info_cache'].network_info.json(),
        }
    updates['extra'] = {
        
    }
    numa_topology = updates.pop('numa_topology', None)
    expected_attrs.append('numa_topology')
    if numa_topology:
        updates['extra']['numa_topology'] = numa_topology._to_json()
    else:
        updates['extra']['numa_topology'] = None
    pci_requests = updates.pop('pci_requests', None)
    expected_attrs.append('pci_requests')
    if pci_requests:
        updates['extra']['pci_requests'] = pci_requests.to_json()
    else:
        updates['extra']['pci_requests'] = None
    flavor = updates.pop('flavor', None)
    if flavor:
        expected_attrs.append('flavor')
        old = (((self.obj_attr_is_set('old_flavor') and self.old_flavor) and self.old_flavor.obj_to_primitive()) or None)
        new = (((self.obj_attr_is_set('new_flavor') and self.new_flavor) and self.new_flavor.obj_to_primitive()) or None)
        flavor_info = {
            'cur': self.flavor.obj_to_primitive(),
            'old': old,
            'new': new,
        }
        updates['extra']['flavor'] = jsonutils.dumps(flavor_info)
    vcpu_model = updates.pop('vcpu_model', None)
    expected_attrs.append('vcpu_model')
    if vcpu_model:
        updates['extra']['vcpu_model'] = jsonutils.dumps(vcpu_model.obj_to_primitive())
    else:
        updates['extra']['vcpu_model'] = None
    db_inst = db.instance_create(self._context, updates)
    self._from_db_object(self._context, self, db_inst, expected_attrs)
    self._load_ec2_ids()
    self.obj_reset_changes(['ec2_ids'])

dataset/ETHPy150Open BU-NU-CLOUD-SP16/Trusted-Platform-Module-nova/nova/objects/instance.py Instance.create/original