Explicitly prevent deletion processing in steps in which it doesn't make
[plstackapi.git] / planetstack / ec2_observer / steps / sync_users.py
index 71f9c0f..030e360 100644 (file)
@@ -1,20 +1,46 @@
 import os
 import base64
-import hashlib
+import random
+import time
+from datetime import datetime 
 from django.db.models import F, Q
 from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User, UserDeployments
+from ec2_observer.syncstep import SyncStep
+from core.models.user import User
+from core.models.site import *
+from ec2_observer.awslib import *
+import pdb
 
-class SyncUsers(OpenStackSyncStep):
-    provides=[User]
-    requested_interval=0
+class SyncUsers(SyncStep):
+       provides=[User]
+       requested_interval=0
 
-    def fetch_pending(self):
-        return User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+       def fetch_pending(self, deletion):
+        if (deletion):
+            return []
 
-    def sync_record(self, user):
-        for user_deployment in UserDeployments.objects.filter(user=user):
-            # bump the 'updated' field so user account are updated across 
-            # deployments.
-            user_deployment.save()
+               users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+               if (users):
+                       key_sig = aws_run('ec2 describe-key-pairs')
+                       ec2_keys = key_sig['KeyPairs']
+               else:
+                       ec2_keys = []
+
+               for user in users:
+                       if (user.public_key): 
+                               key_name = user.email.lower().replace('@', 'AT').replace('.', '')
+                               key_found = False
+
+                               for key in ec2_keys:
+                                       if (key['KeyName']==key_name):
+                                               key_found = True
+                                               break
+
+                               if (not key_found):
+                                       aws_run('ec2 import-key-pair --key-name %s --public-key-material "%s"'%(key_name, user.public_key))
+                                       
+               return users
+
+       def sync_record(self, node):
+               node.save()
+