Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi
authorScott Baker <smbaker@gmail.com>
Sat, 17 Jan 2015 03:15:20 +0000 (19:15 -0800)
committerScott Baker <smbaker@gmail.com>
Sat, 17 Jan 2015 03:15:20 +0000 (19:15 -0800)
19 files changed:
planetstack/core/admin.py
planetstack/model_policies/model_policy_Controller.py
planetstack/model_policies/model_policy_Network.py
planetstack/model_policies/model_policy_Site.py
planetstack/model_policies/model_policy_SitePrivilege.py
planetstack/model_policies/model_policy_Slice.py
planetstack/model_policies/model_policy_SlicePrivilege.py
planetstack/model_policies/model_policy_User.py
planetstack/model_policy.py
planetstack/openstack_observer/event_loop.py
planetstack/openstack_observer/run_ansible
planetstack/openstack_observer/steps/sync_controller_images.py
planetstack/openstack_observer/steps/sync_controller_images.yaml
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_slivers.py

index e187f68..5f9efd2 100644 (file)
@@ -633,7 +633,7 @@ class DeploymentAdmin(PlanetStackBaseAdmin):
 
     # nodes no longer direclty connected to deployments
     #suit_form_tabs =(('sites','Deployment Details'),('nodes','Nodes'),('deploymentprivileges','Privileges'),('tags','Tags'),('imagedeployments','Images'))
-    suit_form_tabs =(('sites','Deployment Details'),('deploymentprivileges','Privileges'),,('imagedeployments','Images'))
+    suit_form_tabs =(('sites','Deployment Details'),('deploymentprivileges','Privileges'))
 
     def get_form(self, request, obj=None, **kwargs):
         if request.user.isReadOnlyUser():
@@ -935,6 +935,7 @@ class SliceAdmin(PlanetStackBaseAdmin):
           ('sliceprivileges','Privileges'),
           ('slivers','Slivers'),
           ('reservations','Reservations'),
+          ('tags','Tags'),
           ]
 
         request=getattr(_thread_locals, "request", None)
index 9415bb5..98eeaff 100644 (file)
@@ -2,6 +2,10 @@
 def handle(controller):
     from core.models import Controller, Site, ControllerSite, Slice, ControllerSlice, User, ControllerUser
     from collections import defaultdict
+
+    #controller = Controller.get(controller_id)
+
+       
     # relations for all sites
     ctrls_by_site = defaultdict(list)
     ctrl_sites = ControllerSite.objects.all()
@@ -12,7 +16,7 @@ def handle(controller):
         if site not in ctrls_by_site or \
             controller not in ctrls_by_site[site]:
             controller_site = ControllerSite(controller=controller, site=site)
-            controller_site.save()     
+            controller_site.save()
     # relations for all slices
     ctrls_by_slice = defaultdict(list)
     ctrl_slices = ControllerSlice.objects.all()
@@ -23,7 +27,7 @@ def handle(controller):
         if slice not in ctrls_by_slice or \
             controller not in ctrls_by_slice:
             controller_slice = ControllerSlice(controller=controller, slice=slice)
-            controller_slice.save()    
+            controller_slice.save()
     # relations for all users
     ctrls_by_user = defaultdict(list)
     ctrl_users = ControllerUser.objects.all()
@@ -34,8 +38,4 @@ def handle(controller):
         if user not in ctrls_by_user or \
             controller not in ctrls_by_user[user]:
             controller_user = ControllerUser(controller=controller, user=user)
-            controller_user.save()         
-
-
-
-
+            controller_user.save()
index f822bf2..8702d21 100644 (file)
@@ -1,8 +1,10 @@
 from core.models import *
 
 def handle(network):
-       from core.models import ControllerSlice,ControllerNetwork
+       from core.models import ControllerSlice,ControllerNetwork, Network
        from collections import defaultdict
+
+        # network = Network.get(network_id)
        # network controllers are not visible to users. We must ensure
        # networks are deployed at all deploymets available to their slices.
        slice_controllers = ControllerSlice.objects.all()
index 7d96264..23010a2 100644 (file)
@@ -1,6 +1,8 @@
 
 def handle(site):
-    from core.models import Controller, ControllerSite 
+    from core.models import Controller, ControllerSite, Site 
+
+    # site = Site.get(site_id)
     # make sure site has a ControllerSite record for each controller
     ctrl_sites = ControllerSite.objects.filter(site=site)
     existing_controllers = [cs.controller for cs in ctrl_sites]
index 90280a3..6e9a65c 100644 (file)
@@ -1,6 +1,7 @@
 def handle(site_privilege):
     from core.models import Controller, SitePrivilege, ControllerSitePrivilege
     
+    # site_privilege = SitePrivilege.get(site_privilege_id)
     # apply site privilage at all controllers
     controller_site_privileges = ControllerSitePrivilege.objects.filter(
         site_privilege = site_privilege,
index cc9f2b0..1f58570 100644 (file)
@@ -1,7 +1,10 @@
 
 def handle(slice):
-    from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate
+    from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate, Slice
     from collections import defaultdict
+
+    # slice = Slice.get(slice_id)
+
     controller_slices = ControllerSlice.objects.filter(slice=slice)
     existing_controllers = [cs.controller for cs in controller_slices] 
     
index 0f772cb..e58a973 100644 (file)
@@ -1,6 +1,7 @@
 def handle(slice_privilege):
     from core.models import Controller, SlicePrivilege, ControllerSlicePrivilege
-    
+   
+    # slice_privilege = SlicePrivilege.get(slice_privilege_id) 
     # apply slice privilage at all controllers
     controller_slice_privileges = ControllerSlicePrivilege.objects.filter(
         slice_privilege = slice_privilege,
index b7b16ad..8d14244 100644 (file)
@@ -1,6 +1,8 @@
 def handle(user):
-    from core.models import Controller, ControllerSite, ControllerUser
+    from core.models import Controller, ControllerSite, ControllerUser, User
     from collections import defaultdict
+
+    # user = User.get(user_id)
     
     controller_users = ControllerUser.objects.filter(user=user)
     existing_controllers = [cu.controller for cu in controller_users]
index e12b15c..7aef793 100644 (file)
@@ -6,6 +6,7 @@ from dependency_walker import *
 import model_policies
 from util.logger import logger
 
+
 modelPolicyEnabled = True
 
 def EnableModelPolicy(x):
@@ -17,7 +18,6 @@ def update_dep(d, o):
                if (d.updated < o.updated):
                        d.save(update_fields=['updated'])
        except AttributeError,e:
-               pdb.set_trace()
                raise e
        
 def delete_if_inactive(d, o):
@@ -25,24 +25,37 @@ def delete_if_inactive(d, o):
        d.delete()      
        return
 
-@receiver(post_save)
-def post_save_handler(sender, instance, **kwargs):
-        if not modelPolicyEnabled:
-            return
-
-       sender_name = sender.__name__
-       policy_name = 'model_policy_%s'%sender_name
-       
-       if (not kwargs['update_fields']):
+def execute_model_policy(policy_name, instance, update_fields_empty, deleted):
+       if (update_fields_empty):
                # Automatic dirtying
-               walk_inv_deps(update_dep, instance)
+               #walk_inv_deps(update_dep, instance)
 
                try:
                        policy_handler = getattr(model_policies, policy_name, None)
+                        logger.error("POLICY HANDLER: %s %s" % (policy_name, policy_handler))                       
                        if policy_handler is not None:
                                policy_handler.handle(instance)
                except:
                        logger.log_exc("Model Policy Error:") 
-       elif 'deleted' in kwargs['update_fields']:
+                       print "Policy Exceution Error"
+       elif deleted:
                walk_inv_deps(delete_if_inactive, instance)
+
+
+@receiver(post_save)
+def post_save_handler(sender, instance, **kwargs):
+        if not modelPolicyEnabled:
+            return
+
+       sender_name = sender.__name__
+       policy_name = 'model_policy_%s'%sender_name
+        if (not kwargs['update_fields']):
+               noargs = True
+               deleted = False
+       else:
+               noargs = False
+               deleted = True
+
+       execute_model_policy(policy_name, instance, noargs, deleted)
+       
        
index cdd94a2..cc0611c 100644 (file)
@@ -22,9 +22,21 @@ from observer.steps import *
 from syncstep import SyncStep
 from toposort import toposort
 from observer.error_mapper import *
+from openstack_observer.openstacksyncstep import OpenStackSyncStep
+
 
 debug_mode = False
 
+class bcolors:
+    HEADER = '\033[95m'
+    OKBLUE = '\033[94m'
+    OKGREEN = '\033[92m'
+    WARNING = '\033[93m'
+    FAIL = '\033[91m'
+    ENDC = '\033[0m'
+    BOLD = '\033[1m'
+    UNDERLINE = '\033[4m'
+
 logger = Logger(level=logging.INFO)
 
 class StepNotReady(Exception):
@@ -96,7 +108,7 @@ class PlanetStackObserver:
                                        # provides field (this eliminates the abstract base classes
                                        # since they don't have a provides)
 
-                                       if inspect.isclass(c) and issubclass(c, SyncStep) and hasattr(c,"provides") and (c not in self.sync_steps):
+                                       if inspect.isclass(c) and (issubclass(c, SyncStep) or issubclass(c,OpenStackSyncStep)) and hasattr(c,"provides") and (c not in self.sync_steps):
                                                self.sync_steps.append(c)
                logger.info('loaded sync steps: %s' % ",".join([x.__name__ for x in self.sync_steps]))
                # print 'loaded sync steps: %s' % ",".join([x.__name__ for x in self.sync_steps])
index 5fab9df..224a6d7 100644 (file)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 source /opt/ansible/hacking/env-setup
 ansible-playbook -v $@
index 008de71..2014a25 100644 (file)
@@ -12,7 +12,7 @@ from observer.ansible import *
 logger = Logger(level=logging.INFO)
 
 class SyncControllerImages(OpenStackSyncStep):
-    provides=[ControllerImages]
+    provides=[ControllerImages, Image]
     requested_interval=0
 
     def fetch_pending(self, deleted):
@@ -24,19 +24,19 @@ class SyncControllerImages(OpenStackSyncStep):
 
     def sync_record(self, controller_image):
         logger.info("Working on image %s on controller %s" % (controller_image.image.name, controller_image.controller))
-       image_fields = {'endpoint':controller_image.controller.auth_url,
-                       'admin_user':controller_image.controller.admin_user,
-                       'admin_password':controller_image.controller.admin_password,
-                       'name':controller_image.image.name,
-                       'filepath':controller_image.image.path,
-                       'ansible_tag': '%s@%s'%(controller_image.image.name,controller_image.controller.name), # name of ansible playbook
-                       }
+        image_fields = {'endpoint':controller_image.controller.auth_url,
+                        'admin_user':controller_image.controller.admin_user,
+                        'admin_password':controller_image.controller.admin_password,
+                        'name':controller_image.image.name,
+                        'filepath':controller_image.image.path,
+                        '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')
+        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'] 
+        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()
index aca7171..18228db 100644 (file)
@@ -7,7 +7,7 @@
         login_username: {{ admin_user }}
         login_tenant_name: 'admin'
         login_password: {{ admin_password }}
-        name: {{ name }}
-        file: {{ filepath }}
+        name: "{{ name }}"
+        file: "{{ filepath }}"
         disk_format: 'raw'
         is_public: true
index c90e4df..cb82680 100644 (file)
@@ -15,7 +15,7 @@ logger = Logger(level=logging.INFO)
 
 class SyncControllerNetworks(OpenStackSyncStep):
     requested_interval = 0
-    provides=[Network, ControllerNetwork, Sliver]
+    provides=[ControllerNetwork, Network]
 
     def alloc_subnet(self, uuid):
         a = 10
index dd5bf3a..99a5987 100644 (file)
@@ -14,7 +14,7 @@ from observer.ansible import *
 logger = Logger(level=logging.INFO)
 
 class SyncControllerSitePrivileges(OpenStackSyncStep):
-    provides=[ControllerSitePrivilege]
+    provides=[ControllerSitePrivilege, SitePrivilege]
     requested_interval=0
 
     def fetch_pending(self, deleted):
index 865ae07..71837a3 100644 (file)
@@ -8,7 +8,7 @@ from observer.ansible import *
 
 class SyncControllerSites(OpenStackSyncStep):
     requested_interval=0
-    provides=[ControllerSite]
+    provides=[ControllerSite, Site]
 
     def fetch_pending(self, deleted=False):
         pending = super(OpenStackSyncStep, self).fetch_pending(deleted)
index f981f16..94d5d21 100644 (file)
@@ -14,7 +14,7 @@ from observer.ansible import *
 logger = Logger(level=logging.INFO)
 
 class SyncControllerSlicePrivileges(OpenStackSyncStep):
-    provides=[ControllerSlicePrivilege]
+    provides=[ControllerSlicePrivilege, SlicePrivilege]
     requested_interval=0
 
     def fetch_pending(self, deleted):
index 7331fac..0f8b6fc 100644 (file)
@@ -14,7 +14,7 @@ from openstack.driver import OpenStackDriver
 logger = Logger(level=logging.INFO)
 
 class SyncControllerSlices(OpenStackSyncStep):
-    provides=[ControllerSlice]
+    provides=[ControllerSlice, Slice]
     requested_interval=0
 
     def fetch_pending(self, deleted):
index 75b0b1e..06a05f1 100644 (file)
@@ -93,7 +93,7 @@ class SyncSlivers(OpenStackSyncStep):
         if (legacy):
             host_filter = sliver.node.name.split('.',1)[0]
         else:
-            host_filter = sliver.node.name
+            host_filter = sliver.node.name.strip()
 
         availability_zone_filter = 'nova:%s'%host_filter
         sliver_name = '%s-%d'%(sliver.slice.name,sliver.id)
@@ -105,7 +105,7 @@ class SyncSlivers(OpenStackSyncStep):
         controller = sliver.node.site_deployment.controller
         tenant_fields = {'endpoint':controller.auth_url,
                      'admin_user': sliver.creator.email,
-                     'admin_password': sliver.creator.reomote_password,
+                     'admin_password': sliver.creator.remote_password,
                      'admin_tenant': sliver.slice.name,
                      'tenant': sliver.slice.name,
                      'tenant_description': sliver.slice.description,