import os import base64 from django.db.models import F, Q from planetstack.config import Config from ec2_observer.syncstep import SyncStep from core.models.image import Image from ec2_observer.awslib import * class SyncImages(SyncStep): provides=[Image] requested_interval=3600 def fetch_pending(self,deletion): if (deletion): return [] images = Image.objects.all() image_names = [image.name for image in images] new_images = [] try: aws_images = json.loads(open('/opt/planetstack/aws-images').read()) except: aws_images = aws_run('ec2 describe-images --owner 099720109477') open('/opt/planetstack/aws-images','w').write(json.dumps(aws_images)) aws_images=aws_images['Images'] aws_images=filter(lambda x:x['ImageType']=='machine',aws_images)[:50] names = set([]) for aws_image in aws_images: desc_ok = True try: desc = aws_image['Description'] except: try: desc = aws_image['ImageLocation'] except: desc_ok = False if (desc_ok): try: desc_ok = desc and desc not in names and desc not in image_names and '14.04' in desc except KeyError: desc_ok = False if desc_ok and aws_image['ImageType']=='machine': image = Image(disk_format=aws_image['ImageLocation'], name=desc, container_format=aws_image['Hypervisor'], path=aws_image['ImageId']) new_images.append(image) names.add(image.name) #print new_images return new_images def sync_record(self, image): image.save()