def create_instance(service_uuid, instance_type, user_name, image_id):
    service = Service.get(uuid=service_uuid)
    subnet_id = config.PRIVATE_SUBNET_ID
    if 'deploy' in service.name.lower():
        subnet_id = config.PUBLIC_SUBNET_ID

    conn = connect_ec2()
    reservation = conn.run_instances(image_id,
                                     key_name=service.key_name,
                                     instance_type=instance_type,
                                     security_group_ids=config.INSTANCE_SG,
                                     subnet_id=subnet_id)
    instances = reservation.instances
    instance = instances[0]
    host = Host.create_or_update(instance.id,
                                 private_ip=instance.private_ip_address,
                                 public_ip=instance.ip_address,
                                 public_dns=instance.public_dns_name,
                                 image_type=instance_type,
                                 image_id=image_id,
                                 username=user_name)
    host.add_service(service.uuid)
    instance.add_tag("Name", "{}-{}".format(service.name.lower(), host.uuid))
    queue().enqueue_call(func=check_instance_for_configuration, args=[host.uuid, service_uuid], timeout=120)
    return host
Example #2
0
def deploy_service(service, user_uuid):
    build_uuid = service.get_latest_build().uuid if service.get_latest_build() else None
    deploy = Deploy.create_deploy(service,
                                  user_uuid=user_uuid,
                                  build_uuid=build_uuid)
    queue().enqueue_call(func=deploy_f, args=[service.uuid, deploy.uuid], timeout=300)
    return deploy
 def _text_admins(self):
     m = 'SUCCEEDED' if self.deploy_succeeded else 'FAILED'
     message = "DEPLOY {}: {}.".format(m, self.service.name)
     if not self.current_deploy or not self.deploying.build_uuid:
         queue().enqueue_call(func=User.text_users, args=[None, message])
         return
     current_build = Build.get(uuid=self.current_deploy.build_uuid)
     latest_build = Build.get(uuid=self.deploying.build_uuid)
     queue().enqueue_call(func=text_github_users_diff,
                          args=(self.service.uuid, current_build.uuid, latest_build.uuid, message))
def check_instance_for_configuration(host_uuid, service_uuid):
    conn = connect_ec2()
    host = Host.get(uuid=host_uuid)
    reservations = conn.get_all_instances(instance_ids=[host.instance_id])
    if len(reservations) == 0 or len(reservations[0].instances) == 0:
        raise Exception('There are no AWS instances for this host.')
    instance = reservations[0].instances[0]
    if instance.state == 'running':
        queue().enqueue_call(func=configure_instance, args=[host_uuid, service_uuid])
        return
    time.sleep(5)
    queue().enqueue_call(func=check_instance_for_configuration, args=[host_uuid, service_uuid], timeout=120)
def update_instances_from_ids(service_uuid, instance_ids, configure=True):
    service = Service.get(uuid=service_uuid)

    conn = connect_ec2()
    reservation = conn.get_all_instances(instance_ids=instance_ids)
    for r in reservation:
        for instance in r.instances:
            host = Host.create_or_update(instance.id,
                                         private_ip=instance.private_ip_address,
                                         public_ip=instance.ip_address,
                                         public_dns=instance.public_dns_name)
            host.add_service(service.uuid)
            instance.add_tag("Name", "{}-{}".format(service.name.lower(), host.uuid))
            queue().enqueue_call(func=check_instance_for_configuration, args=[host.uuid, service.uuid], timeout=120)
def remove_service_from_host(host, service):
    host.remove_service(service.uuid)
    if host.is_empty():
        terminate_instance(host.uuid)
    else:
        queue().enqueue_call(func=remove_service, args=[host.uuid, service.uuid], timeout=90)
Example #7
0
def restart_deploy(service, user_uuid, deploy, hard_restart=False):
    queue().enqueue_call(func=restart_f, args=[service.uuid, deploy.uuid], kwargs={'hard_restart': hard_restart})
    return deploy
Example #8
0
def deploy_database_service(service, user_uuid):
    deploy = Deploy.create_deploy(service,
                                  user_uuid=user_uuid)
    queue().enqueue_call(func=deploy_f, args=[service.uuid, deploy.uuid])
    return deploy