3 from django.db.models import F, Q
4 from planetstack.config import Config
5 from ec2_observer.syncstep import SyncStep
6 from core.models.site import *
7 from ec2_observer.awslib import *
10 class SyncSiteDeployments(SyncStep):
11 requested_interval=86400
12 provides=[SiteDeployments]
14 def fetch_pending(self, deletion):
18 zone_ret = aws_run('ec2 describe-availability-zones')
19 zones = zone_ret['AvailabilityZones']
20 available_sites = [zone['ZoneName'] for zone in zones]
23 for s in available_sites:
24 site = Site.objects.filter(Q(name=s))
26 current_sites.append(site[0])
28 # OK not to catch exception
29 # The syncstep should catch it
30 # At any rate, we should not run if there are no deployments
31 deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
32 current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
35 for sd in current_site_deployments:
38 updated_site_deployments = []
39 for site in current_sites:
41 site_record = site_dict[site]
43 sd = SiteDeployments(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
44 updated_site_deployments.append(sd)
46 return updated_site_deployments
49 def sync_record(self, site_deployment):
50 site_deployment.save()