Set backend status when saving backend version of object
[plstackapi.git] / planetstack / ec2_observer / steps / sync_users.py
index 71f9c0f..10ebd60 100644 (file)
@@ -1,20 +1,52 @@
 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 *
+from ec2_observer.creds import *
+import pdb
 
-class SyncUsers(OpenStackSyncStep):
+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))
+        
+        keys = []
+        creds = []
+        for u in users:
+            e = get_creds(user=u, site=u.site)
+            key_sig = aws_run('ec2 describe-key-pairs', env=e)
+            ec2_keys = key_sig['KeyPairs']
+            creds.append(e)
+            keys.append(ec2_keys)
+        else:
+            ec2_keys = []
+
+        for user,ec2_keys,e in zip(users,keys,creds):
+            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),env=e)
+                    
+        return users
+
+    def sync_record(self, node):
+        node.save()