示例#1
0
    def save(self):
        """Save updates to this instance group."""

        updates = self.obj_get_changes()

        # NOTE(sbauza): We do NOT save the set of compute nodes that an
        # instance group is connected to in this method. Instance groups are
        # implicitly connected to compute nodes when the
        # InstanceGroup.add_members() method is called, which adds the mapping
        # table entries.
        # So, since the only way to have hosts in the updates is to set that
        # field explicitly, we prefer to raise an Exception so the developer
        # knows he has to call obj_reset_changes(['hosts']) right after setting
        # the field.
        if 'hosts' in updates:
            raise exception.InstanceGroupSaveException(field='hosts')

        # NOTE(yikun): You have to provide exactly one policy on group create,
        # and also there are no group update APIs, so we do NOT support
        # policies update.
        if 'policies' in updates:
            raise exception.InstanceGroupSaveException(field='policies')

        if not updates:
            return

        payload = dict(updates)
        payload['server_group_id'] = self.uuid

        db_group = self._save_in_db(self._context, self.uuid, updates)
        self._from_db_object(self._context, self, db_group)
        compute_utils.notify_about_server_group_update(self._context,
                                                       "update", payload)
示例#2
0
    def create(self):
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        policy = updates.pop('policy', None)
        rules = updates.pop('_rules', None)
        members = updates.pop('members', None)

        if 'uuid' not in updates:
            self.uuid = uuidutils.generate_uuid()
            updates['uuid'] = self.uuid

        db_group = self._create_in_db(self._context, updates,
                                      policies=policies,
                                      members=members,
                                      policy=policy,
                                      rules=rules)
        self._from_db_object(self._context, self, db_group)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context,
                                                       "create", payload)
        compute_utils.notify_about_server_group_action(
            context=self._context,
            group=self,
            action=fields.NotificationAction.CREATE)
示例#3
0
    def _create(self, skipcheck=False):
        # NOTE(danms): This is just for the migration routine, and
        # can be removed once we're no longer supporting the migration
        # of instance groups from the main to api database.
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        members = updates.pop('members', None)

        if 'uuid' not in updates:
            self.uuid = uuidutils.generate_uuid()
            updates['uuid'] = self.uuid

        if not skipcheck:
            try:
                db.instance_group_get(self._context, self.uuid)
                raise exception.ObjectActionError(
                    action='create',
                    reason='already created in main')
            except exception.InstanceGroupNotFound:
                pass
        db_group = self._create_in_db(self._context, updates,
                                      policies=policies,
                                      members=members)
        self._from_db_object(self._context, self, db_group)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context,
                                                       "create", payload)
    def _create(self, skipcheck=False):
        # NOTE(danms): This is just for the migration routine, and
        # can be removed once we're no longer supporting the migration
        # of instance groups from the main to api database.
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        members = updates.pop('members', None)

        if 'uuid' not in updates:
            self.uuid = uuidutils.generate_uuid()
            updates['uuid'] = self.uuid

        if not skipcheck:
            try:
                db.instance_group_get(self._context, self.uuid)
                raise exception.ObjectActionError(
                    action='create', reason='already created in main')
            except exception.InstanceGroupNotFound:
                pass
        db_group = self._create_in_db(self._context,
                                      updates,
                                      policies=policies,
                                      members=members)
        self._from_db_object(self._context, self, db_group)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context, "create",
                                                       payload)
    def save(self):
        """Save updates to this instance group."""

        updates = self.obj_get_changes()

        # NOTE(sbauza): We do NOT save the set of compute nodes that an
        # instance group is connected to in this method. Instance groups are
        # implicitly connected to compute nodes when the
        # InstanceGroup.add_members() method is called, which adds the mapping
        # table entries.
        # So, since the only way to have hosts in the updates is to set that
        # field explicitly, we prefer to raise an Exception so the developer
        # knows he has to call obj_reset_changes(['hosts']) right after setting
        # the field.
        if 'hosts' in updates:
            raise exception.InstanceGroupSaveException(field='hosts')

        if not updates:
            return

        payload = dict(updates)
        payload['server_group_id'] = self.uuid

        try:
            db_group = self._save_in_db(self._context, self.uuid, updates)
        except exception.InstanceGroupNotFound:
            db.instance_group_update(self._context, self.uuid, updates)
            db_group = db.instance_group_get(self._context, self.uuid)
        self._from_db_object(self._context, self, db_group)
        compute_utils.notify_about_server_group_update(self._context, "update",
                                                       payload)
示例#6
0
    def create(self):
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        members = updates.pop('members', None)

        if 'uuid' not in updates:
            self.uuid = uuidutils.generate_uuid()
            updates['uuid'] = self.uuid

        db_group = self._create_in_db(self._context,
                                      updates,
                                      policies=policies,
                                      members=members)
        self._from_db_object(self._context, self, db_group)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context, "create",
                                                       payload)
        compute_utils.notify_about_server_group_action(
            context=self._context,
            group=self,
            action=fields.NotificationAction.CREATE)
示例#7
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     members = db.instance_group_members_add(context, group_uuid,
             instance_uuids)
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     return list(members)
示例#8
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     members = db.instance_group_members_add(context, group_uuid,
             instance_uuids)
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     return list(members)
示例#9
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     try:
         self._destroy_in_db(self._context, self.uuid)
     except exception.InstanceGroupNotFound:
         db.instance_group_delete(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context,
                                                    "delete", payload)
示例#10
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     try:
         self._destroy_in_db(self._context, self.uuid)
     except exception.InstanceGroupNotFound:
         db.instance_group_delete(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context,
                                                    "delete", payload)
示例#11
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     members = cls._add_members_in_db(context, group_uuid,
                                      instance_uuids)
     members = [member['instance_uuid'] for member in members]
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     compute_utils.notify_about_server_group_add_member(context, group_uuid)
     return list(members)
示例#12
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     self._destroy_in_db(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context, "delete",
                                                    payload)
     compute_utils.notify_about_server_group_action(
         context=self._context,
         group=self,
         action=fields.NotificationAction.DELETE)
示例#13
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     self._destroy_in_db(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context,
                                                    "delete", payload)
     compute_utils.notify_about_server_group_action(
         context=self._context,
         group=self,
         action=fields.NotificationAction.DELETE)
示例#14
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     members = cls._add_members_in_db(context, group_uuid,
                                      instance_uuids)
     members = [member['instance_uuid'] for member in members]
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     compute_utils.notify_about_server_group_add_member(context, group_uuid)
     return list(members)
示例#15
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     try:
         members = cls._add_members_in_db(context, group_uuid,
                                          instance_uuids)
         members = [member['instance_uuid'] for member in members]
     except exception.InstanceGroupNotFound:
         members = db.instance_group_members_add(context, group_uuid,
                                                 instance_uuids)
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     return list(members)
示例#16
0
 def add_members(cls, context, group_uuid, instance_uuids):
     payload = {'server_group_id': group_uuid,
                'instance_uuids': instance_uuids}
     try:
         members = cls._add_members_in_db(context, group_uuid,
                                          instance_uuids)
         members = [member['instance_uuid'] for member in members]
     except exception.InstanceGroupNotFound:
         members = db.instance_group_members_add(context, group_uuid,
                                                 instance_uuids)
     compute_utils.notify_about_server_group_update(context,
                                                    "addmember", payload)
     return list(members)
示例#17
0
    def save(self):
        """Save updates to this instance group."""

        updates = self.obj_get_changes()
        if not updates:
            return

        payload = dict(updates)
        payload['server_group_id'] = self.uuid

        db.instance_group_update(self._context, self.uuid, updates)
        db_inst = db.instance_group_get(self._context, self.uuid)
        self._from_db_object(self._context, self, db_inst)
        compute_utils.notify_about_server_group_update(self._context,
                                                       "update", payload)
示例#18
0
    def save(self):
        """Save updates to this instance group."""

        updates = self.obj_get_changes()
        if not updates:
            return

        payload = dict(updates)
        payload['server_group_id'] = self.uuid

        db.instance_group_update(self._context, self.uuid, updates)
        db_inst = db.instance_group_get(self._context, self.uuid)
        self._from_db_object(self._context, self, db_inst)
        compute_utils.notify_about_server_group_update(self._context, "update",
                                                       payload)
示例#19
0
    def create(self):
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        members = updates.pop('members', None)

        db_inst = db.instance_group_create(self._context, updates,
                                           policies=policies,
                                           members=members)
        self._from_db_object(self._context, self, db_inst)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context,
                                                       "create", payload)
示例#20
0
    def create(self):
        if self.obj_attr_is_set('id'):
            raise exception.ObjectActionError(action='create',
                                              reason='already created')
        updates = self.obj_get_changes()
        payload = dict(updates)
        updates.pop('id', None)
        policies = updates.pop('policies', None)
        members = updates.pop('members', None)

        db_inst = db.instance_group_create(self._context, updates,
                                           policies=policies,
                                           members=members)
        self._from_db_object(self._context, self, db_inst)
        payload['server_group_id'] = self.uuid
        compute_utils.notify_about_server_group_update(self._context,
                                                       "create", payload)
示例#21
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     db.instance_group_delete(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context, "delete",
                                                    payload)
示例#22
0
 def destroy(self):
     payload = {'server_group_id': self.uuid}
     db.instance_group_delete(self._context, self.uuid)
     self.obj_reset_changes()
     compute_utils.notify_about_server_group_update(self._context,
                                                    "delete", payload)