def init(self, force_deploy=False): conf = self.provider_conf env = openstack.check_environment(conf) lease = check_reservation(conf, env["session"]) extra_ips = check_extra_ports(env["session"], env["network"], conf.extra_ips) reservations = lease["reservations"] machines = self.provider_conf.machines machines = sorted(machines, key=by_flavor) servers = [] for flavor, descs in groupby(machines, key=by_flavor): _machines = list(descs) # NOTE(msimonin): There should be only one reservation per flavor hints = [{"reservation": r["id"]} for r in reservations if flavor in r["resource_properties"]] # It's still a bit tricky here os_servers = openstack.check_servers( env["session"], _machines, # NOTE(msimonin): we should be able to deduce the flavour from # the name extra_prefix="-o-{}-o-".format(flavor), force_deploy=force_deploy, key_name=conf.key_name, image_id=env["image_id"], flavors="baremetal", network=env["network"], ext_net=env["ext_net"], scheduler_hints=hints) servers.extend(os_servers) deployed, _ = openstack.wait_for_servers( env["session"], servers) gateway_ip, _ = openstack.check_gateway( env, conf.gateway, deployed) # NOTE(msimonin) build the roles and networks This is a bit tricky here # since flavor (e.g compute_haswell) doesn"t correspond to a flavor # attribute of the nova server object. We have to encode the flavor # name (e.g compute_haswell) in the server name. Decoding the flavor # name from the server name helps then to form the roles. return openstack.finalize( env, conf, gateway_ip, deployed, lambda s: s.name.split("-o-")[1], extra_ips=extra_ips)
def init(self, force_deploy=False): def by_flavor(x): return x["flavor"] conf = self.provider_conf env = openstack.check_environment(conf) lease = check_reservation(conf) extra_ips = check_extra_ports(env['session'], env['network'], conf['extra_ips']) reservations = lease['reservations'] machines = self.provider_conf["resources"]["machines"] machines = sorted(machines, key=by_flavor) servers = [] for flavor, descs in groupby(machines, key=by_flavor): machines = list(descs) reservation = filter(lambda r: flavor in r['resource_properties'], reservations)[0] os_servers = openstack.check_servers( env['session'], {"machines": machines}, extra_prefix=flavor, force_deploy=force_deploy, key_name=conf.get('key_name'), image_id=env['image_id'], flavors="baremetal", network=env['network'], ext_net=env['ext_net'], scheduler_hints={'reservation': reservation['id']}) servers.extend(os_servers) deployed, _ = openstack.wait_for_servers( env['session'], servers) gateway = openstack.check_gateway( env, conf.get('gateway', False), deployed) return openstack.finalize( env, conf, gateway, deployed, lambda s: s.name.split('-')[1], extra_ips=extra_ips)
def init(self, force_deploy=False): conf = self.provider_conf env = openstack.check_environment(conf) lease = check_reservation(conf, env['session']) extra_ips = check_extra_ports(env['session'], env['network'], conf['extra_ips']) reservations = lease['reservations'] machines = self.provider_conf["resources"]["machines"] machines = sorted(machines, key=by_flavor) servers = [] for flavor, descs in groupby(machines, key=by_flavor): machines = list(descs) # NOTE(msimonin): There should be only one reservation per flavor hints = [{ 'reservation': r['id'] } for r in reservations if flavor in r['resource_properties']] os_servers = openstack.check_servers( env['session'], {"machines": machines}, extra_prefix="{}__{}__".format(conf['prefix'], flavor), force_deploy=force_deploy, key_name=conf.get('key_name'), image_id=env['image_id'], flavors="baremetal", network=env['network'], ext_net=env['ext_net'], scheduler_hints=hints) servers.extend(os_servers) deployed, _ = openstack.wait_for_servers(env['session'], servers) gateway_ip, _ = openstack.check_gateway(env, conf.get('gateway', False), deployed) # NOTE(msimonin) build the roles and networks This is a bit tricky here # since flavor (e.g compute_haswell) doesn't correspond to a flavor # attribute of the nova server object. We have to encode the flavor # name (e.g compute_haswell) in the server name. Decoding the flavor # name from the server name helps then to form the roles. return openstack.finalize(env, conf, gateway_ip, deployed, lambda s: s.name.split('__')[1], extra_ips=extra_ips)