def run_instances(count, ec2_config, waitForSSH=True): '''Create a new reservation for count instances''' ec2_config.setdefault('min_count', count) ec2_config.setdefault('max_count', count) ec2params = inheritparams(ec2_config, EC2_API_RUN_INSTANCE) reservation = None conn = boto.connect_ec2() try: reservation = conn.run_instances(**ec2params) log('Waiting for {0} EC2 instances {1} to come up, this can take 1-2 minutes.'.format(len(reservation.instances), reservation.instances)) start = time.time() for instance in reservation.instances: while instance.update() == 'pending': time.sleep(1) h2o_cmd.dot() if not instance.state == 'running': raise Exception('[ec2] Error waiting for running state. Instance is in state {0}.'.format(instance.state)) log('Instances started in {0} seconds'.format(time.time() - start)) log('Instances: ') for inst in reservation.instances: log(" {0} ({1}) : public ip: {2}, private ip: {3}".format(inst.public_dns_name, inst.id, inst.ip_address, inst.private_ip_address)) if waitForSSH: wait_for_ssh([ i.private_ip_address for i in reservation.instances ]) return reservation except: print "Unexpected error:", sys.exc_info() if reservation: terminate_reservation(reservation) raise
def run_instances(count, ec2_config, region, waitForSSH=True, tags=None): '''Create a new reservation for count instances''' ec2params = inheritparams(ec2_config, EC2_API_RUN_INSTANCE) ec2params.setdefault('min_count', count) ec2params.setdefault('max_count', count) reservation = None conn = ec2_connect(region) try: reservation = conn.run_instances(**ec2params) log('Reservation: {0}'.format(reservation.id)) log('Waiting for {0} EC2 instances {1} to come up, this can take 1-2 minutes.' .format(len(reservation.instances), reservation.instances)) start = time.time() time.sleep(1) for instance in reservation.instances: while instance.update() == 'pending': time.sleep(1) h2o_cmd.dot() if not instance.state == 'running': raise Exception( '\033[91m[ec2] Error waiting for running state. Instance is in state {0}.\033[0m' .format(instance.state)) log('Instances started in {0} seconds'.format(time.time() - start)) log('Instances: ') for inst in reservation.instances: log(" {0} ({1}) : public ip: {2}, private ip: {3}".format( inst.public_dns_name, inst.id, inst.ip_address, inst.private_ip_address)) if waitForSSH: # kbn: changing to private address, so it should fail if not in right domain # used to have the public ip address wait_for_ssh([i.private_ip_address for i in reservation.instances]) # Tag instances try: if tags: conn.create_tags([i.id for i in reservation.instances], tags) except: warn( 'Something wrong during tagging instances. Exceptions IGNORED!' ) print sys.exc_info() pass return reservation except: print "\033[91mUnexpected error\033[0m :", sys.exc_info() if reservation: terminate_reservation(reservation, region) raise
def wait_for_ssh(ips, port=22, skipAlive=True, requiredsuccess=3): ''' Wait for ssh service to appear on given hosts''' log('Waiting for SSH on following hosts: {0}'.format(ips)) for ip in ips: if not skipAlive or not ssh_live(ip, port): log('Waiting for SSH on instance {0}...'.format(ip)) count = 0 while count < requiredsuccess: if ssh_live(ip, port): count += 1 else: count = 0 time.sleep(1) h2o_cmd.dot()
def run_instances(count, ec2_config, region, waitForSSH=True, tags=None): '''Create a new reservation for count instances''' ec2params = inheritparams(ec2_config, EC2_API_RUN_INSTANCE) ec2params.setdefault('min_count', count) ec2params.setdefault('max_count', count) reservation = None conn = ec2_connect(region) try: reservation = conn.run_instances(**ec2params) log('Reservation: {0}'.format(reservation.id)) log('Waiting for {0} EC2 instances {1} to come up, this can take 1-2 minutes.'.format(len(reservation.instances), reservation.instances)) start = time.time() time.sleep(1) for instance in reservation.instances: while instance.update() == 'pending': time.sleep(1) h2o_cmd.dot() if not instance.state == 'running': raise Exception('\033[91m[ec2] Error waiting for running state. Instance is in state {0}.\033[0m'.format(instance.state)) log('Instances started in {0} seconds'.format(time.time() - start)) log('Instances: ') for inst in reservation.instances: log(" {0} ({1}) : public ip: {2}, private ip: {3}".format(inst.public_dns_name, inst.id, inst.ip_address, inst.private_ip_address)) if waitForSSH: # kbn: changing to private address, so it should fail if not in right domain # used to have the public ip address wait_for_ssh([ i.private_ip_address for i in reservation.instances ]) # Tag instances try: if tags: conn.create_tags([i.id for i in reservation.instances], tags) except: warn('Something wrong during tagging instances. Exceptions IGNORED!') print sys.exc_info() pass return reservation except: print "\033[91mUnexpected error\033[0m :", sys.exc_info() if reservation: terminate_reservation(reservation, region) raise