From 1d6c501f4952305300913884b91e3b6943e640e5 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 2 Feb 2012 15:09:24 -0500 Subject: [PATCH] implemented verify_slice, verify_users, verify_user_keys --- sfa/openstack/osaggregate.py | 56 +++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/sfa/openstack/osaggregate.py b/sfa/openstack/osaggregate.py index 54585d85..a7bef35d 100644 --- a/sfa/openstack/osaggregate.py +++ b/sfa/openstack/osaggregate.py @@ -89,11 +89,59 @@ class OSAggregate: return rspec_node - def verify_slice(self, slicename): - pass + def verify_slice(self, slicename, users, options={}): + """ + Create the slice if it doesn't alredy exist + """ + try: + slice = self.driver.shell.auth_manager.get_project(slicename) + except nova.exception.ProjectNotFound: + # convert urns to user names + usernames = [Xrn(user['urn']).get_leaf() for user in users] + # assume that the first user is the project manager + proj_manager = usernames[0] + self.driver.shell.auth_manager.create_project(slicename, proj_manager) - def verify_users(self, slicename, users): - pass + def verify_users(self, slicename, users, options={}): + """ + Add requested users to the specified slice. + """ + + # There doesn't seem to be an effcient way to + # look up all the users of a project, so lets not + # attempt to remove stale users . For now lets just + # ensure that the specified users exist + for user in users: + username = Xrn(user['urn']).get_leaf() + try: + self.driver.shell.auth_manager.get_user(username) + except nova.exception.UserNotFound: + self.driver.shell.auth_manager.create_user(username) + self.verify_user_keys(username, user['keys'], options) + + def verify_user_keys(self, username, keys, options={}): + """ + Add requested keys. + """ + append = options.get('append', True) + existing_keys = self.driver.shell.db.key_pair_get_all_by_user(username) + existing_pub_keys = [key.public_key for key in existing_keys] + removed_pub_keys = set(existing_pub_keys).difference(keys) + added_pub_keys = set(keys).difference(existing_pub_keys) + + # add new keys + for public_key in added_pub_keys: + key = {} + key['user_id'] = username + key['name'] = username + key['public'] = public_key + self.driver.shell.db.key_pair_create(key) + # remove old keys + if not append: + for key in existing_keys: + if key.public_key in removed_pub_keys: + self.driver.shell.db.key_pair_destroy(username, key.name) + def verify_instances(self, slicename, rspec): pass -- 2.43.0