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
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)
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
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