Inspect all user deployments. No need to act on ever user on every run.
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 7 Apr 2014 23:47:28 +0000 (19:47 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 7 Apr 2014 23:49:13 +0000 (19:49 -0400)
planetstack/observer/steps/sync_user_deployments.py

index 5c04003..ceea4a9 100644 (file)
@@ -24,9 +24,13 @@ class SyncUserDeployments(OpenStackSyncStep):
         site_deploy_lookup = defaultdict(list)
         for site_deployment in site_deployments:
             site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
-        
-        user_deployments = []                
-        for user in User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)):
+
+        user_deploy_lookup = defaultdict(list)
+        for user_deployment in UserDeployments.objects.all():
+            user_deploy_lookup[user_deployment.user].append(user_deployment.deployment)
+       
+        user_deployments = [] 
+        for user in User.objects.filter():
             if user.is_admin:
                 # admins should have an account at all deployments
                 expected_deployments = deployments
@@ -34,8 +38,15 @@ class SyncUserDeployments(OpenStackSyncStep):
                 # normal users should have an account at their site's deployments
                 expected_deployments = site_deploy_lookup[user.site]
             for expected_deployment in expected_deployments:
-                ud = UserDeployments(user=user, deployment=expected_deployment)
-                user_deployments.append(ud)
+                if not user in user_deploy_lookup or \
+                  expected_deployment not in user_deploy_lookup[user]: 
+                    # add new record
+                    ud = UserDeployments(user=user, deployment=expected_deployment)
+                    user_deployments.append(ud)
+                #else:
+                #    # update existing record
+                #    ud = UserDeployments.objects.get(user=user, deployment=expected_deployment)
+                #    user_deployments.append(ud)
 
         return user_deployments
 
@@ -82,3 +93,5 @@ class SyncUserDeployments(OpenStackSyncStep):
         #    user_driver.create_keypair(**key_fields)
 
         user_deployment.save()
+        user = User.objects.get(id=user_deployment.user.id)
+        user.save()