import os import base64 import random import time from datetime import datetime from django.db.models import F, Q from planetstack.config import Config from ec2_observer.syncstep import SyncStep from core.models.node import Node from core.models.site import * from ec2_observer.awslib import * import pdb class SyncNodes(SyncStep): provides=[Node] requested_interval=0 def fetch_pending(self, deletion): if (deletion): return [] deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0] current_site_deployments = SiteDeployment.objects.filter(Q(deployment=deployment)) zone_ret = aws_run('ec2 describe-availability-zones') zones = zone_ret['AvailabilityZones'] # collect local nodes instance_types = 'm1.small | m1.medium | m1.large | m1.xlarge | m3.medium | m3.large | m3.xlarge | m3.2xlarge'.split(' | ') all_new_nodes = [] for sd in current_site_deployments: s = sd.site current_fqns = [n.name for n in s.nodes.all()] all_fqns = ['.'.join([n,s.name]) for n in instance_types] new_node_names = list(set(all_fqns) - set(current_fqns)) new_nodes = [] for node_name in new_node_names: node = Node(name=node_name, site=s,deployment=deployment) new_nodes.append(node) all_new_nodes.extend(new_nodes) return all_new_nodes def sync_record(self, node): node.save()