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))
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)
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)