def rebuild(self, image, root_pass=None, authorized_keys=None, **kwargs): """ Rebuilding an Instance deletes all existing Disks and Configs and deploys a new :any:`Image` to it. This can be used to reset an existing Instance or to install an Image on an empty Instance. :param image: The Image to deploy to this Instance :type image: str or Image :param root_pass: The root password for the newly rebuilt Instance. If omitted, a password will be generated and returned. :type root_pass: str :param authorized_keys: The ssh public keys to install in the linode's /root/.ssh/authorized_keys file. Each entry may be a single key, or a path to a file containing the key. :type authorized_keys: list or str :returns: The newly generated password, if one was not provided (otherwise True) :rtype: str or bool """ ret_pass = None if not root_pass: ret_pass = Instance.generate_root_password() root_pass = ret_pass authorized_keys = load_and_validate_keys(authorized_keys) params = { 'image': image.id if issubclass(type(image), Base) else image, 'root_pass': root_pass, 'authorized_keys': authorized_keys, } params.update(kwargs) result = self._client.post('{}/rebuild'.format(Instance.api_endpoint), model=self, data=params) if not 'id' in result: raise UnexpectedResponseError( 'Unexpected response issuing rebuild!', json=result) # update ourself with the newly-returned information self._populate(result) if not ret_pass: return True else: return ret_pass
def rebuild(self, image, root_pass=None, authorized_keys=None, **kwargs): """ Rebuilding an Instance deletes all existing Disks and Configs and deploys a new :any:`Image` to it. This can be used to reset an existing Instance or to install an Image on an empty Instance. :param image: The Image to deploy to this Instance :type image: str or Image :param root_pass: The root password for the newly rebuilt Instance. If omitted, a password will be generated and returned. :type root_pass: str :param authorized_keys: The ssh public keys to install in the linode's /root/.ssh/authorized_keys file. Each entry may be a single key, or a path to a file containing the key. :type authorized_keys: list or str :returns: The newly generated password, if one was not provided (otherwise True) :rtype: str or bool """ ret_pass = None if not root_pass: ret_pass = Instance.generate_root_password() root_pass = ret_pass authorized_keys = load_and_validate_keys(authorized_keys) params = { 'image': image.id if issubclass(type(image), Base) else image, 'root_pass': root_pass, 'authorized_keys': authorized_keys, } params.update(kwargs) result = self._client.post('{}/rebuild'.format(Instance.api_endpoint), model=self, data=params) if not 'id' in result: raise UnexpectedResponseError('Unexpected response issuing rebuild!', json=result) # update ourself with the newly-returned information self._populate(result) if not ret_pass: return True else: return ret_pass
def disk_create(self, size, label=None, filesystem=None, read_only=False, image=None, root_pass=None, authorized_keys=None, stackscript=None, **stackscript_args): gen_pass = None if image and not root_pass: gen_pass = Instance.generate_root_password() root_pass = gen_pass authorized_keys = load_and_validate_keys(authorized_keys) if image and not label: label = "My {} Disk".format(image.label) params = { 'size': size, 'label': label if label else "{}_disk_{}".format(self.label, len(self.disks)), 'read_only': read_only, 'filesystem': filesystem if filesystem else 'raw', 'authorized_keys': authorized_keys, } if image: params.update({ 'image': image.id if issubclass(type(image), Base) else image, 'root_pass': root_pass, }) if stackscript: params['stackscript_id'] = stackscript.id if stackscript_args: params['stackscript_data'] = stackscript_args result = self._client.post("{}/disks".format(Instance.api_endpoint), model=self, data=params) self.invalidate() if not 'id' in result: raise UnexpectedResponseError('Unexpected response creating disk!', json=result) d = Disk(self._client, result['id'], self.id, result) if gen_pass: return d, gen_pass return d
def disk_create(self, size, label=None, filesystem=None, read_only=False, image=None, root_pass=None, authorized_keys=None, stackscript=None, **stackscript_args): gen_pass = None if image and not root_pass: gen_pass = Instance.generate_root_password() root_pass = gen_pass authorized_keys = load_and_validate_keys(authorized_keys) if image and not label: label = "My {} Disk".format(image.label) params = { 'size': size, 'label': label if label else "{}_disk_{}".format(self.label, len(self.disks)), 'read_only': read_only, 'filesystem': filesystem if filesystem else 'raw', 'authorized_keys': authorized_keys, } if image: params.update({ 'image': image.id if issubclass(type(image), Base) else image, 'root_pass': root_pass, }) if stackscript: params['stackscript_id'] = stackscript.id if stackscript_args: params['stackscript_data'] = stackscript_args result = self._client.post("{}/disks".format(Instance.api_endpoint), model=self, data=params) self.invalidate() if not 'id' in result: raise UnexpectedResponseError('Unexpected response creating disk!', json=result) d = Disk(self._client, result['id'], self.id, result) if gen_pass: return d, gen_pass return d
def disk_create(self, size, label=None, filesystem=None, read_only=False, image=None, root_pass=None, authorized_keys=None, authorized_users=None, stackscript=None, **stackscript_args): """ Creates a new Disk for this Instance. :param size: The size of the disk, in MB :param label: The label of the disk. If not given, a default label will be generated. :param filesystem: The filesystem type for the disk. If not given, the default for the image deployed the disk will be used. Required if creating a disk without an image. :param read_only: If True, creates a read-only disk :param image: The Image to deploy to the disk. :param root_pass: The password to configure for the root user when deploying an image to this disk. Not used if image is not given. If an image is given and root_pass is not, a password will be generated and returned alongside the new disk. :param authorized_keys: A list of SSH keys to install as trusted for the root user. :param authorized_users: A list of usernames whose keys should be installed as trusted for the root user. These user's keys should already be set up, see :any:`ProfileGroup.ssh_keys` for details. :param stackscript: A StackScript object, or the ID of one, to deploy to this disk. Requires deploying a compatible image. :param **stackscript_args: Any arguments to pass to the StackScript, as defined by its User Defined Fields. """ gen_pass = None if image and not root_pass: gen_pass = Instance.generate_root_password() root_pass = gen_pass authorized_keys = load_and_validate_keys(authorized_keys) if image and not label: label = "My {} Disk".format(image.label) params = { 'size': size, 'label': label if label else "{}_disk_{}".format(self.label, len(self.disks)), 'read_only': read_only, 'filesystem': filesystem, 'authorized_keys': authorized_keys, 'authorized_users': authorized_users, } if image: params.update({ 'image': image.id if issubclass(type(image), Base) else image, 'root_pass': root_pass, }) if stackscript: params['stackscript_id'] = stackscript.id if stackscript_args: params['stackscript_data'] = stackscript_args result = self._client.post("{}/disks".format(Instance.api_endpoint), model=self, data=params) self.invalidate() if not 'id' in result: raise UnexpectedResponseError('Unexpected response creating disk!', json=result) d = Disk(self._client, result['id'], self.id, result) if gen_pass: return d, gen_pass return d