diff options
| author | Dan Smith <danms@us.ibm.com> | 2013-06-17 18:11:25 -0700 |
|---|---|---|
| committer | Dan Smith <danms@us.ibm.com> | 2013-06-24 15:47:53 -0700 |
| commit | 1792c03d81a5a72fbf881e26be235fb77236b1c2 (patch) | |
| tree | 164903f5c7a232da6b5be6b23480c9d660eb9156 /nova/objects | |
| parent | 771254b3a89e5f173896560d46489e6594be45e1 (diff) | |
| download | nova-1792c03d81a5a72fbf881e26be235fb77236b1c2.tar.gz nova-1792c03d81a5a72fbf881e26be235fb77236b1c2.tar.xz nova-1792c03d81a5a72fbf881e26be235fb77236b1c2.zip | |
Add basic SecurityGroup model
This adds a basic SecurityGroup model and query methods.
Related to blueprint unified-object-model
Change-Id: I92a18529add3e46e801a30e35cdbd4932c890a55
Diffstat (limited to 'nova/objects')
| -rw-r--r-- | nova/objects/__init__.py | 1 | ||||
| -rw-r--r-- | nova/objects/security_group.py | 95 |
2 files changed, 96 insertions, 0 deletions
diff --git a/nova/objects/__init__.py b/nova/objects/__init__.py index 00f8240f1..47f14f68a 100644 --- a/nova/objects/__init__.py +++ b/nova/objects/__init__.py @@ -19,3 +19,4 @@ def register_all(): # need to receive it via RPC. __import__('nova.objects.instance') __import__('nova.objects.instance_info_cache') + __import__('nova.objects.security_group') diff --git a/nova/objects/security_group.py b/nova/objects/security_group.py new file mode 100644 index 000000000..ccf4f027e --- /dev/null +++ b/nova/objects/security_group.py @@ -0,0 +1,95 @@ +# Copyright 2013 IBM Corp. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from nova import db +from nova.objects import base + + +class SecurityGroup(base.NovaObject): + fields = { + 'id': int, + 'name': str, + 'description': str, + 'user_id': str, + 'project_id': str, + } + + @staticmethod + def _from_db_object(secgroup, db_secgroup): + # NOTE(danms): These are identical right now + for field in secgroup.fields: + secgroup[field] = db_secgroup[field] + secgroup.obj_reset_changes() + return secgroup + + @base.remotable_classmethod + def get(cls, context, secgroup_id): + db_secgroup = db.security_group_get(context, secgroup_id) + return cls._from_db_object(cls(), db_secgroup) + + @base.remotable_classmethod + def get_by_name(cls, context, project_id, group_name): + db_secgroup = db.security_group_get_by_name(context, + project_id, + group_name) + return cls._from_db_object(cls(), db_secgroup) + + @base.remotable + def in_use(self, context): + return db.security_group_in_use(context, self.id) + + @base.remotable + def save(self, context): + updates = {} + for field in self.obj_what_changed(): + updates[field] = self[field] + if updates: + db_secgroup = db.security_group_update(context, self.id, updates) + SecurityGroup._from_db_object(self, db_secgroup) + self.obj_reset_changes() + + @base.remotable + def refresh(self, context): + SecurityGroup._from_db_object(self, + db.security_group_get(context, + self.id)) + + +def _make_secgroup_list(context, secgroup_list, db_secgroup_list): + secgroup_list.objects = [] + for db_secgroup in db_secgroup_list: + secgroup = SecurityGroup._from_db_object(SecurityGroup(), db_secgroup) + secgroup._context = context + secgroup_list.objects.append(secgroup) + secgroup_list.obj_reset_changes() + return secgroup_list + + +class SecurityGroupList(base.ObjectListBase, base.NovaObject): + @base.remotable_classmethod + def get_all(cls, context): + return _make_secgroup_list(context, cls(), + db.security_group_get_all(context)) + + @base.remotable_classmethod + def get_by_project(cls, context, project_id): + return _make_secgroup_list(context, cls(), + db.security_group_get_by_project( + context, project_id)) + + @base.remotable_classmethod + def get_by_instance(cls, context, instance): + return _make_secgroup_list(context, cls(), + db.security_group_get_by_instance( + context, instance.uuid)) |
