Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)