conflict resolution
[plstackapi.git] / planetstack / ec2_observer / steps / sync_users.py
1 import os
2 import base64
3 import random
4 import time
5 from datetime import datetime 
6 from django.db.models import F, Q
7 from planetstack.config import Config
8 from ec2_observer.syncstep import SyncStep
9 from core.models.user import User
10 from core.models.site import *
11 from ec2_observer.awslib import *
12 from ec2_observer.creds import *
13 import pdb
14
15 class SyncUsers(SyncStep):
16     provides=[User]
17     requested_interval=0
18
19     def fetch_pending(self, deletion):
20         if (deletion):
21             return []
22
23         users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
24         
25         keys = []
26         creds = []
27         for u in users:
28             e = get_creds(user=u, site=u.site)
29             key_sig = aws_run('ec2 describe-key-pairs', env=e)
30             ec2_keys = key_sig['KeyPairs']
31             creds.append(e)
32             keys.append(ec2_keys)
33         else:
34             ec2_keys = []
35
36         for user,ec2_keys,e in zip(users,keys,creds):
37             if (user.public_key): 
38                 key_name = user.email.lower().replace('@', 'AT').replace('.', '')
39                 key_found = False
40
41                 for key in ec2_keys:
42                     if (key['KeyName']==key_name):
43                         key_found = True
44                         break
45
46                 if (not key_found):
47                     aws_run('ec2 import-key-pair --key-name %s --public-key-material "%s"'%(key_name, user.public_key),env=e)
48                     
49         return users
50
51     def sync_record(self, node):
52         node.save()