def test_get_avail_subnet(vpc): s1 = mock.Mock() s1.available_ip_address_count = 10 s1.availability_zone = "az1" s1.id = "id1" s2 = mock.Mock() s2.available_ip_address_count = 20 s2.availability_zone = "az1" s2.id = "id2" s3 = mock.Mock() s3.available_ip_address_count = 30 s3.availability_zone = "az2" s3.id = "id3" s4 = mock.Mock() s4.available_ip_address_count = 15 s4.availability_zone = "az1" s4.id = "id4" s5 = mock.Mock() s5.available_ip_address_count = 17 s5.availability_zone = "az1" s5.id = "id5" vpc.return_value.get_all_subnets.return_value = [s1, s2, s3, s4] assert get_avail_subnet( "r1", ["id1", "id2", "id3", "id4"], "az1") == "id2" vpc.return_value.get_all_subnets.assert_called_once_with( subnet_ids=("id1", "id2", "id3", "id4")) assert get_avail_subnet("r1", ["id44"], "azx") is None
def do_request_instance(region, moz_instance_type, price, ami, instance_config, instance_type, availability_zone, slaveset, is_spot, all_instances, dryrun): name = get_available_slave_name(region, moz_instance_type, slaveset, is_spot=is_spot, all_instances=all_instances) if not name: log.debug("No slave name available for %s, %s, %s" % (region, moz_instance_type, slaveset)) return False subnet_id = get_avail_subnet(region, instance_config[region]["subnet_ids"], availability_zone) if not subnet_id: log.debug("No free IP available for %s in %s", moz_instance_type, availability_zone) return False fqdn = "{}.{}".format(name, instance_config[region]["domain"]) if is_spot: log.debug("Spot request for %s (%s)", fqdn, price) else: log.debug("Starting %s", fqdn) if dryrun: log.info("Dry run. skipping") return True spec = NetworkInterfaceSpecification( associate_public_ip_address=True, subnet_id=subnet_id, delete_on_termination=True, groups=instance_config[region].get("security_group_ids")) nc = NetworkInterfaceCollection(spec) user_data = user_data_from_template(moz_instance_type, fqdn, region) bdm = create_block_device_mapping(ami, instance_config[region]['device_map']) if is_spot: rv = do_request_spot_instance( region, price, ami.id, instance_type, instance_config[region]["ssh_key"], user_data, bdm, nc, instance_config[region].get("instance_profile_name"), moz_instance_type, name, fqdn) else: rv = do_request_ondemand_instance( region, price, ami.id, instance_type, instance_config[region]["ssh_key"], user_data, bdm, nc, instance_config[region].get("instance_profile_name"), moz_instance_type, name, fqdn) if rv: template_values = dict( region=region, moz_instance_type=moz_instance_type, instance_type=instance_type.replace(".", "-"), life_cycle_type="spot" if is_spot else "ondemand", virtualization=ami.virtualization_type, root_device_type=ami.root_device_type, jacuzzi_type=jacuzzi_suffix(slaveset), ) name = "started.{region}.{moz_instance_type}.{instance_type}" \ ".{life_cycle_type}.{virtualization}.{root_device_type}" \ ".{jacuzzi_type}" gr_log.add(name.format(**template_values), 1, collect=True) return rv
def do_request_instance(region, moz_instance_type, price, ami, instance_config, instance_type, availability_zone, is_spot, all_instances, dryrun): name = get_available_slave_name(region, moz_instance_type, is_spot=is_spot, all_instances=all_instances) if not name: log.debug("No slave name available for %s, %s", region, moz_instance_type) return False subnet_id = get_avail_subnet(region, instance_config[region]["subnet_ids"], availability_zone) if not subnet_id: log.debug("No free IP available for %s in %s", moz_instance_type, availability_zone) return False fqdn = "{}.{}".format(name, instance_config[region]["domain"]) if is_spot: log.debug("Spot request for %s (%s)", fqdn, price) else: log.debug("Starting %s", fqdn) if dryrun: log.info("Dry run. skipping") return True spec = NetworkInterfaceSpecification( associate_public_ip_address=True, subnet_id=subnet_id, delete_on_termination=True, groups=instance_config[region].get("security_group_ids")) nc = NetworkInterfaceCollection(spec) user_data = user_data_from_template(moz_instance_type, { "moz_instance_type": moz_instance_type, "hostname": name, "domain": instance_config[region]["domain"], "fqdn": fqdn, "region_dns_atom": get_region_dns_atom(region), "puppet_server": "", # intentionally empty "password": "" # intentionally empty }) bdm = create_block_device_mapping( ami, instance_config[region]['device_map']) if is_spot: rv = do_request_spot_instance( region, price, ami.id, instance_type, instance_config[region]["ssh_key"], user_data, bdm, nc, instance_config[region].get("instance_profile_name"), moz_instance_type, name, fqdn) else: rv = do_request_ondemand_instance( region, price, ami.id, instance_type, instance_config[region]["ssh_key"], user_data, bdm, nc, instance_config[region].get("instance_profile_name"), moz_instance_type, name, fqdn) if rv: template_values = dict( region=region, moz_instance_type=moz_instance_type, instance_type=instance_type.replace(".", "-"), life_cycle_type="spot" if is_spot else "ondemand", virtualization=ami.virtualization_type, root_device_type=ami.root_device_type, ) name = "started.{region}.{moz_instance_type}.{instance_type}" \ ".{life_cycle_type}.{virtualization}.{root_device_type}" gr_log.add(name.format(**template_values), 1, collect=True) return rv