blob: 3a15b33f7df4f2b43b028da7682ad6bfb52f08c9 [file] [log] [blame]
Sapan Bhatia26d40bc2014-05-12 15:28:02 -04001import os
2import base64
3from django.db.models import F, Q
4from planetstack.config import Config
Sapan Bhatia511ea5f2014-07-21 22:53:58 -04005from ec2_observer.syncstep import SyncStep
Sapan Bhatia26d40bc2014-05-12 15:28:02 -04006from core.models.image import Image
Sapan Bhatia511ea5f2014-07-21 22:53:58 -04007from ec2_observer.awslib import *
Sapan Bhatia26d40bc2014-05-12 15:28:02 -04008
Sapan Bhatia511ea5f2014-07-21 22:53:58 -04009
10class SyncImages(SyncStep):
Sapan Bhatia26d40bc2014-05-12 15:28:02 -040011 provides=[Image]
12 requested_interval=3600
13
Sapan Bhatia511ea5f2014-07-21 22:53:58 -040014 def fetch_pending(self,deletion):
Sapan Bhatia26d40bc2014-05-12 15:28:02 -040015 images = Image.objects.all()
16 image_names = [image.name for image in images]
17
18 new_images = []
19
Sapan Bhatia511ea5f2014-07-21 22:53:58 -040020 try:
21 aws_images = json.loads(open('/opt/planetstack/aws-images').read())
22 except:
23 aws_images = aws_run('ec2 describe-images --owner 099720109477')
24 open('/opt/planetstack/aws-images','w').write(json.dumps(aws_images))
Sapan Bhatia26d40bc2014-05-12 15:28:02 -040025
Sapan Bhatia511ea5f2014-07-21 22:53:58 -040026
27
28 aws_images=aws_images['Images']
29 aws_images=filter(lambda x:x['ImageType']=='machine',aws_images)[:50]
30
31 names = set([])
Sapan Bhatia26d40bc2014-05-12 15:28:02 -040032 for aws_image in aws_images:
Sapan Bhatia511ea5f2014-07-21 22:53:58 -040033 desc_ok = True
34
35 try:
36 desc = aws_image['Description']
37 except:
38 try:
39 desc = aws_image['ImageLocation']
40 except:
41 desc_ok = False
42
43 if (desc_ok):
44 try:
45 desc_ok = desc and desc not in names and desc not in image_names and '14.04' in desc
46 except KeyError:
47 desc_ok = False
48
49 if desc_ok and aws_image['ImageType']=='machine':
50 image = Image(disk_format=aws_image['ImageLocation'],
51 name=desc,
52 container_format=aws_image['Hypervisor'],
53 path=aws_image['ImageId'])
54 new_images.append(image)
55 names.add(image.name)
56
57 #print new_images
Sapan Bhatia26d40bc2014-05-12 15:28:02 -040058 return new_images
59
60 def sync_record(self, image):
61 image.save()