blob: ef66783608eb659a370f1206c82f24d4c69f8622 [file] [log] [blame]
import os
import base64
from django.db.models import F, Q
from xos.config import Config
from ec2_observer.syncstep import SyncStep
from core.models.site import *
from ec2_observer.awslib import *
import pdb
class SyncSiteDeployment(SyncStep):
requested_interval=86400
provides=[SiteDeployment]
def fetch_pending(self, deletion):
if (deletion):
return []
zone_ret = aws_run('ec2 describe-availability-zones')
zones = zone_ret['AvailabilityZones']
available_sites = [zone['ZoneName'] for zone in zones]
current_sites = []
for s in available_sites:
site = Site.objects.filter(Q(name=s))
if (site):
current_sites.append(site[0])
# OK not to catch exception
# The syncstep should catch it
# At any rate, we should not run if there are no deployments
deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
current_site_deployments = SiteDeployment.objects.filter(Q(deployment=deployment))
site_dict = {}
for sd in current_site_deployments:
site_dict[sd.site]=sd
updated_site_deployments = []
for site in current_sites:
try:
site_record = site_dict[site]
except KeyError:
sd = SiteDeployment(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
updated_site_deployments.append(sd)
return updated_site_deployments
def sync_record(self, site_deployment):
site_deployment.save()