Defer error checking to ansible layer
authorSapan Bhatia <sapanb@cs.princeton.edu>
Fri, 23 Jan 2015 16:21:57 +0000 (16:21 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Fri, 23 Jan 2015 16:21:57 +0000 (16:21 +0000)
planetstack/openstack_observer/steps/sync_controller_images.py
planetstack/openstack_observer/steps/sync_controller_networks.py
planetstack/openstack_observer/steps/sync_controller_site_privileges.py
planetstack/openstack_observer/steps/sync_controller_sites.py
planetstack/openstack_observer/steps/sync_controller_slice_privileges.py
planetstack/openstack_observer/steps/sync_controller_slices.py
planetstack/openstack_observer/steps/sync_controller_users.py
planetstack/openstack_observer/steps/sync_slivers.py

index 2014a25..17ffe57 100644 (file)
@@ -32,11 +32,9 @@ class SyncControllerImages(OpenStackSyncStep):
                         'ansible_tag': '%s@%s'%(controller_image.image.name,controller_image.controller.name), # name of ansible playbook
                         }
 
                         'ansible_tag': '%s@%s'%(controller_image.image.name,controller_image.controller.name), # name of ansible playbook
                         }
 
-        res = run_template('sync_controller_images.yaml', image_fields, path='controller_images')
 
 
-        if (len(res)!=1):
-            raise Exception('Could not sync image %s'%controller_image.image.name)
-        else:
-            image_id = res[0]['id']
-            controller_image.glance_image_id = image_id
-            controller_image.save()
+        res = run_template('sync_controller_images.yaml', image_fields, path='controller_images', expected_num=1)
+
+        image_id = res[0]['id']
+        controller_image.glance_image_id = image_id
+        controller_image.save()
index cb82680..ea888c7 100644 (file)
@@ -35,34 +35,29 @@ class SyncControllerNetworks(OpenStackSyncStep):
 
 
     def save_controller_network(self, controller_network):
 
 
     def save_controller_network(self, controller_network):
-            network_name = controller_network.network.name
-            subnet_name = '%s-%d'%(network_name,controller_network.pk)
-           cidr = self.alloc_subnet(controller_network.pk)
-           slice = controller_network.network.slices.all()[0] # XXX: FIXME!!
-
-           network_fields = {'endpoint':controller_network.controller.auth_url,
-                       'admin_user':slice.creator.email, # XXX: FIXME
-                       'tenant_name':slice.name, # XXX: FIXME
-                       'admin_password':slice.creator.remote_password,
-                       'name':network_name,
-                       'subnet_name':subnet_name,
-                       'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
-                       'cidr':cidr
-                       }
-
-           res = run_template('sync_controller_networks.yaml', network_fields, path = 'controller_networks')
-
-           if (len(res)!=2):
-               raise Exception('Could not sync network %s'%controller_network.network.name)
-           else:
-               network_id = res[0]['id'] 
-               subnet_id = res[1]['id'] 
-               controller_network.net_id = network_id
-               controller_network.subnet = cidr
-               controller_network.subnet_id = subnet_id
-               controller_network.save()
-
-               logger.info("sync'ed subnet (%s) for network: %s" % (controller_network.subnet, controller_network.network))
+        network_name = controller_network.network.name
+        subnet_name = '%s-%d'%(network_name,controller_network.pk)
+        cidr = self.alloc_subnet(controller_network.pk)
+        slice = controller_network.network.slices.all()[0] # XXX: FIXME!!
+
+        network_fields = {'endpoint':controller_network.controller.auth_url,
+                    'admin_user':slice.creator.email, # XXX: FIXME
+                    'tenant_name':slice.name, # XXX: FIXME
+                    'admin_password':slice.creator.remote_password,
+                    'name':network_name,
+                    'subnet_name':subnet_name,
+                    'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
+                    'cidr':cidr
+                    }
+
+        res = run_template('sync_controller_networks.yaml', network_fields, path = 'controller_networks',expected_num=2)
+
+        network_id = res[0]['id']
+        subnet_id = res[1]['id']
+        controller_network.net_id = network_id
+        controller_network.subnet = cidr
+        controller_network.subnet_id = subnet_id
+        controller_network.save()
 
 
     def sync_record(self, controller_network):
 
 
     def sync_record(self, controller_network):
index 99a5987..c87f6d5 100644 (file)
@@ -59,20 +59,15 @@ class SyncControllerSitePrivileges(OpenStackSyncStep):
                       'tenant':controller_site_privilege.site_privilege.site.login_base}    
        
            rendered = template.render(user_fields)
                       'tenant':controller_site_privilege.site_privilege.site.login_base}    
        
            rendered = template.render(user_fields)
-           res = run_template('sync_controller_users.yaml', user_fields,path='controller_site_privileges')
+           expected_length = len(roles) + 1
+           res = run_template('sync_controller_users.yaml', user_fields,path='controller_site_privileges', expected_num=expected_length)
 
            # results is an array in which each element corresponds to an 
            # "ok" string received per operation. If we get as many oks as
            # the number of operations we issued, that means a grand success.
            # Otherwise, the number of oks tell us which operation failed.
 
            # results is an array in which each element corresponds to an 
            # "ok" string received per operation. If we get as many oks as
            # the number of operations we issued, that means a grand success.
            # Otherwise, the number of oks tell us which operation failed.
-           expected_length = len(roles) + 1
-           if (len(res)==expected_length):
-                controller_site_privilege.role_id = res[0]['id']
-                controller_site_privilege.save()
-           elif (len(res)):
-               raise Exception('Could not assign roles for user %s'%user_fields['name'])
-           else:
-               raise Exception('Could not create or update user %s'%user_fields['name'])
+            controller_site_privilege.role_id = res[0]['id']
+            controller_site_privilege.save()
 
     def delete_record(self, controller_site_privilege):
         if controller_site_privilege.role_id:
 
     def delete_record(self, controller_site_privilege):
         if controller_site_privilege.role_id:
index 71837a3..3aa20d7 100644 (file)
@@ -26,15 +26,10 @@ class SyncControllerSites(OpenStackSyncStep):
                         'tenant_description': controller_site.site.name}
 
        rendered = template.render(tenant_fields)
                         'tenant_description': controller_site.site.name}
 
        rendered = template.render(tenant_fields)
-       res = run_template('sync_controller_sites.yaml', tenant_fields, path='controller_sites')
+       res = run_template('sync_controller_sites.yaml', tenant_fields, path='controller_sites', expected_num=1)
 
 
-       if (len(res)==1):
-               controller_site.tenant_id = res[0]['id']
-               controller_site.save()
-       elif (len(res)):
-               raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
-       else:
-               raise Exception('Could not create or update user %s'%tenant_fields['tenant'])
+       controller_site.tenant_id = res[0]['id']
+        controller_site.save()
             
     def delete_record(self, controller_site):
        if controller_site.tenant_id:
             
     def delete_record(self, controller_site):
        if controller_site.tenant_id:
index 94d5d21..5ec434c 100644 (file)
@@ -59,20 +59,15 @@ class SyncControllerSlicePrivileges(OpenStackSyncStep):
                       'tenant':controller_slice_privilege.slice_privilege.slice.name}    
        
            rendered = template.render(user_fields)
                       'tenant':controller_slice_privilege.slice_privilege.slice.name}    
        
            rendered = template.render(user_fields)
-           res = run_template('sync_controller_users.yaml', user_fields,path='controller_slice_privileges')
+           expected_length = len(roles) + 1
+           res = run_template('sync_controller_users.yaml', user_fields, path='controller_slice_privileges', expected_num=expected_length)
 
            # results is an array in which each element corresponds to an 
            # "ok" string received per operation. If we get as many oks as
            # the number of operations we issued, that means a grand success.
            # Otherwise, the number of oks tell us which operation failed.
 
            # results is an array in which each element corresponds to an 
            # "ok" string received per operation. If we get as many oks as
            # the number of operations we issued, that means a grand success.
            # Otherwise, the number of oks tell us which operation failed.
-           expected_length = len(roles) + 1
-           if (len(res)==expected_length):
-                controller_slice_privilege.role_id = res[0]['id']
-                controller_slice_privilege.save()
-           elif (len(res)):
-               raise Exception('Could not assign roles for user %s'%user_fields['name'])
-           else:
-               raise Exception('Could not create or update user %s'%user_fields['name'])
+            controller_slice_privilege.role_id = res[0]['id']
+            controller_slice_privilege.save()
 
     def delete_record(self, controller_slice_privilege):
         if controller_slice_privilege.role_id:
 
     def delete_record(self, controller_slice_privilege):
         if controller_slice_privilege.role_id:
index 0f8b6fc..0e37524 100644 (file)
@@ -50,22 +50,19 @@ class SyncControllerSlices(OpenStackSyncStep):
                          'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
                          'max_instances':max_instances}
 
                          'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
                          'max_instances':max_instances}
 
-        res = run_template('sync_controller_slices.yaml', tenant_fields, path='controller_slices')
         expected_num = len(roles)+1
         expected_num = len(roles)+1
-        if (len(res)!=expected_num):
-            raise Exception('Could not sync tenants for slice %s'%controller_slice.slice.name)
-        else:
-            tenant_id = res[0]['id']
-            if (not controller_slice.tenant_id):
-                try:
-                        driver = OpenStackDriver().admin_driver(controller=controller_slice.controller)
-                        driver.shell.nova.quotas.update(tenant_id=controller_slice.tenant_id, instances=int(controller_slice.slice.max_slivers))
-                except:
-                        logger.log_exc('Could not update quota for %s'%controller_slice.slice.name)
-                        raise Exception('Could not update quota for %s'%controller_slice.slice.name)
+        res = run_template('sync_controller_slices.yaml', tenant_fields, path='controller_slices', expected_num=expected_num)
+        tenant_id = res[0]['id']
+        if (not controller_slice.tenant_id):
+            try:
+                    driver = OpenStackDriver().admin_driver(controller=controller_slice.controller)
+                    driver.shell.nova.quotas.update(tenant_id=controller_slice.tenant_id, instances=int(controller_slice.slice.max_slivers))
+            except:
+                    logger.log_exc('Could not update quota for %s'%controller_slice.slice.name)
+                    raise Exception('Could not update quota for %s'%controller_slice.slice.name)
                 
                 
-                controller_slice.tenant_id = tenant_id
-                controller_slice.save()
+            controller_slice.tenant_id = tenant_id
+            controller_slice.save()
 
 
     def delete_record(self, controller_slice):
 
 
     def delete_record(self, controller_slice):
index 0c35047..ca2909c 100644 (file)
@@ -65,20 +65,12 @@ class SyncControllerUsers(OpenStackSyncStep):
                       'tenant':controller_user.user.site.login_base}    
        
            rendered = template.render(user_fields)
                       'tenant':controller_user.user.site.login_base}    
        
            rendered = template.render(user_fields)
-           res = run_template('sync_controller_users.yaml', user_fields,path='controller_users')
-
-           # results is an array in which each element corresponds to an 
-           # "ok" string received per operation. If we get as many oks as
-           # the number of operations we issued, that means a grand success.
-           # Otherwise, the number of oks tell us which operation failed.
            expected_length = len(roles) + 1
            expected_length = len(roles) + 1
-           if (len(res)==expected_length):
-                controller_user.kuser_id = res[0]['id']
-                controller_user.save()
-           elif (len(res)):
-               raise Exception('Could not assign roles for user %s'%user_fields['name'])
-           else:
-               raise Exception('Could not create or update user %s'%user_fields['name'])
+
+           res = run_template('sync_controller_users.yaml', user_fields,path='controller_users', expected_num=expected_length)
+
+            controller_user.kuser_id = res[0]['id']
+            controller_user.save()
 
     def delete_record(self, controller_user):
         if controller_user.kuser_id:
 
     def delete_record(self, controller_user):
         if controller_user.kuser_id:
index 8155c10..e31afda 100644 (file)
@@ -120,28 +120,35 @@ class SyncSlivers(OpenStackSyncStep):
                      'key':key_fields,
                      'user_data':r'%s'%escape(userData)}
 
                      'key':key_fields,
                      'user_data':r'%s'%escape(userData)}
 
-        res = run_template('sync_slivers.yaml', tenant_fields,path='slivers')
-        if (len(res)!=2):
-            raise Exception('Could not sync sliver %s'%sliver.slice.name)
-        else:
-            sliver_id = res[1]['info']['OS-EXT-SRV-ATTR:instance_name'] # 0 is for the key
-            sliver_uuid = res[1]['id'] # 0 is for the key
+        res = run_template('sync_slivers.yaml', tenant_fields,path='slivers', expected_num=2)
+        sliver_id = res[1]['info']['OS-EXT-SRV-ATTR:instance_name'] # 0 is for the key
+        sliver_uuid = res[1]['id'] # 0 is for the key
 
 
-            try:
-                hostname = res[1]['info']['OS-EXT-SRV-ATTR:hypervisor_hostname']
-                ip = socket.gethostbyname(hostname)
-                sliver.ip = ip
-            except:
-                pass
+        try:
+            hostname = res[1]['info']['OS-EXT-SRV-ATTR:hypervisor_hostname']
+            ip = socket.gethostbyname(hostname)
+            sliver.ip = ip
+        except:
+            pass
 
 
-            sliver.instance_id = sliver_id
-            sliver.instance_uuid = sliver_uuid
-            sliver.instance_name = sliver_name
-            sliver.save()
+        sliver.instance_id = sliver_id
+        sliver.instance_uuid = sliver_uuid
+        sliver.instance_name = sliver_name
+        sliver.save()
 
     def delete_record(self, sliver):
 
     def delete_record(self, sliver):
-        sliver_name = '@'.join([sliver.slice.name,sliver.node.name])
-        tenant_fields = {'name':sliver_name,
-                         'ansible_tag':sliver_name
-                        }
-        res = run_template('delete_slivers.yaml', tenant_fields, path='slivers')
+        sliver_name = '%s-%d'%(sliver.slice.name,sliver.id)
+        controller = sliver.node.site_deployment.controller
+        tenant_fields = {'endpoint':controller.auth_url,
+                     'admin_user': sliver.creator.email,
+                     'admin_password': sliver.creator.remote_password,
+                     'admin_tenant': sliver.slice.name,
+                     'tenant': sliver.slice.name,
+                     'tenant_description': sliver.slice.description,
+                     'name':sliver_name,
+                     'ansible_tag':sliver_name,
+                     'delete': True}
+
+        res = run_template('sync_slivers.yaml', tenant_fields,path='slivers')
+        if (len(res)!=1):
+            raise Exception('Could not delete sliver %s'%sliver.slice.name)