示例#1
0
    def boot(self, server):
        """
        Boot a new server
        """
        LOG.info('boot(server=%s)', server)

        name = server['name']
        image_id = server['imageRef']
        flavor_id = server['flavorRef']
        key_name = server.get('key_name', None)
        config_drive = server.get('config_drive', False)

        # Sanity checks, will throw exceptions if they fail
        self.images.show(image_id)
        self.flavors.show(flavor_id)
        if key_name is None:
            keypair = None
        else:
            keypair = self.keypairs.show(key_name)

        # Create a new server in the database
        server = self.db.servers.create(name=name, image_id=image_id,
                                        flavor_id=flavor_id, key_name=key_name,
                                        config_drive=config_drive,
                                        status=SERVER_BUILDING)
        server_id = server['id']

        # Generate some more server properties and update the database
        mac_address = _generate_mac()
        server = self.db.servers.update(id=server_id, mac_address=mac_address)

        # Extend the server details
        server = self._extend(server)

        # Create the server directory
        basepath = os.path.join(CONF.instances_dir, server_id)
        os.makedirs(basepath)

        # Create the server disk images and config drive
        _create_disks(server)
        _create_config_drive(server, keypair)

        # Finally boot the server
        self.virt.boot_server(server)

        # Start a task to wait for the server to get its DHCP IP address
        task.start(server_id, 2, 60 / 2, self._update_ip, server)

        return self._extend(self._update_status(server))
示例#2
0
文件: servers.py 项目: dtroyer/dwarf
    def create(self, server):
        """
        Create a new server
        """
        LOG.info('create(server=%s)', server)

        name = server['name']
        image_id = server['imageRef']
        flavor_id = server['flavorRef']
        key_name = server.get('key_name', None)
        config_drive = server.get('config_drive', False)

        # Get the associated image, flavor and keypair
        image = self.images.show(image_id)
        flavor = self.flavors.show(flavor_id)
        if key_name is None:
            keypair = None
        else:
            keypair = self.keypairs.show(key_name)

        # Create a new server in the database
        server = self.db.servers.create(name=name,
                                        image_id=image_id,
                                        flavor_id=flavor_id,
                                        key_name=key_name,
                                        config_drive=config_drive,
                                        status=SERVER_BUILDING)
        server_id = server['id']

        # Generate some more server properties and update the database
        mac_address = _generate_mac()
        server = self.db.servers.update(id=server_id, mac_address=mac_address)

        # Create the server directory
        basepath = os.path.join(CONF.instances_dir, server_id)
        os.makedirs(basepath)

        # Create the server disk images and config drive
        _create_disks(server, image, flavor)
        _create_config_drive(server, keypair)

        # Finally create the server
        self.virt.create_server(server, flavor)

        # Start a task to wait for the server to get its DHCP IP address
        task.start(server_id, 2, 60 / 2, self._update_ip, server)

        return self._update_status(server)
示例#3
0
文件: servers.py 项目: tpot/dwarf
    def boot(self, server):
        """
        Boot a new server
        """
        LOG.info('boot(server=%s)', server)

        name = server['name']
        image_id = server['imageRef']
        flavor_id = server['flavorRef']
        key_name = server.get('key_name', None)

        # Sanity checks, will throw exceptions if they fail
        IMAGES.exists(image_id)
        FLAVORS.exists(flavor_id)
        if key_name is not None:
            KEYPAIRS.exists(key_name)

        # Create a new server in the database
        server = DB.servers.create(name=name, image_id=image_id,
                                   flavor_id=flavor_id, key_name=key_name,
                                   status='BUILDING')
        server_id = server['id']

        # Generate some more server properties and update the database
        mac_address = _generate_mac()
        server = DB.servers.update(id=server_id, mac_address=mac_address)

        # Extend the server details
        server = self._extend(server)

        # Create the server directory
        basepath = os.path.join(CONF.instances_dir, server_id)
        os.makedirs(basepath)

        # Create the server disk images
        _create_disks(server)

        # Finally boot the server
        VIRT.boot_server(server)

        # Update the status of the server
        server = DB.servers.update(id=server_id, status='NETWORKING')

        # Start a task to wait for the server to get its DHCP IP address
        task.start(server_id, 2, 60/2, [True], self._wait_for_ip, server)

        return utils.sanitize(server, SERVERS_DETAIL)