def test_bd_should_be_not_smaller_than_ami(): ami = mock.MagicMock() ami.root_device_type = "ebs" ami.root_device_name = "/dev/xvda" ami.block_device_mapping["/dev/xvda"].size = 20 ami.virtualization_type = "pv" device_map = { "/dev/xvda": { "delete_on_termination": True, "skip_resize": True, "size": 10, "volume_type": "gp2", "instance_dev": "/dev/xvda1" } } with pytest.raises(AssertionError): create_block_device_mapping(ami, device_map)
def test_ephemeral_name(): ami = mock.Mock() ami.root_device_type = "instance-store" device_map = { "/dev/sdb": { "ephemeral_name": "ephemeral0", "instance_dev": "/dev/xvdb", "skip_resize": True, "delete_on_termination": False } } bdm = create_block_device_mapping(ami, device_map) _, bd = bdm.popitem() assert bd.ephemeral_name == "ephemeral0"
def test_bd_delete_on_termination(): ami = mock.MagicMock() ami.root_device_type = "ebs" ami.root_device_name = "/dev/xvda" ami.block_device_mapping["/dev/xvda"].size = 20 ami.virtualization_type = "hvm" device_map = { "/dev/xvda": { "skip_resize": True, "size": 30, # will be ignored "volume_type": "gp2", "instance_dev": "/dev/xvda1" } } bdm = create_block_device_mapping(ami, device_map) _, bd = bdm.popitem() assert bd.delete_on_termination
def test_no_ebs_on_instance_store(): ami = mock.Mock() ami.root_device_type = "instance-store" device_map = { "/dev/xvda": { "delete_on_termination": True, "skip_resize": True, "volume_type": "gp2", "instance_dev": "/dev/xvda1" }, "/dev/sdb": { "ephemeral_name": "ephemeral0", "instance_dev": "/dev/xvdb", "skip_resize": True, "delete_on_termination": False } } bdm = create_block_device_mapping(ami, device_map) first_disk_name, _ = bdm.popitem() assert len(bdm) == 0 assert first_disk_name == "/dev/sdb"
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