Warning
This documentation is actively being updated as the project evolves and may not be complete in all areas.
iSCSI server driver¶
jumpstarter-driver-iscsi
provides a lightweight iSCSI target implementation powered by the Linux
RFC-tgt framework via the
rtslib-fb
Python bindings.
⚠️ The driver creates and manages an iSCSI target (server). To access the exported LUNs you still need a separate iSCSI initiator (client) on the machine running your test-code / DUT.
Installation¶
rtslib-fb
relies on the in-kernel LIO target framework which is packaged
differently by each distribution. You should be able to run sudo targetcli
without errors before you start the Jumpstarter driver.
Fedora:
$ sudo dnf install targetcli python3-rtslib
Finally, install the driver itself from the Jumpstarter package index:
$ pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple jumpstarter-driver-iscsi
Configuration¶
The driver is configured through the exporter YAML file. A minimal example
exports the local file disk.img
as a 5 GiB LUN:
export:
iscsi:
type: jumpstarter_driver_iscsi.driver.ISCSI
config:
root_dir: "/var/lib/iscsi"
target_name: "demo"
# When size_mb is 0 a pre-existing file size is used.
Config parameters¶
Parameter |
Description |
Type |
Required |
Default |
---|---|---|---|---|
|
Directory where image files will be stored. |
str |
no |
|
|
IQN prefix to use when building the target IQN. |
str |
no |
|
|
The target name appended to the IQN prefix. |
str |
no |
|
|
IP address to bind the target to. Empty string will auto-detect default IP. |
str |
no |
auto |
|
TCP port the target listens on. |
int |
no |
|
API Reference¶
- class jumpstarter_driver_iscsi.client.ISCSIServerClient¶
Client interface for iSCSI Server driver
This client provides methods to control an iSCSI target server and manage LUNs. Supports exposing files and block devices through the iSCSI protocol.
- add_lun(name: str, file_path: str, size_mb: int = 0, is_block: bool = False) str ¶
Add a new LUN to the iSCSI target
- Args:
name (str): Unique name for the LUN file_path (str): Path to the file or block device size_mb (int): Size in MB for new file (if file doesn’t exist), 0 means use existing file is_block (bool): If True, the path is treated as a block device
- Returns:
str: Name of the created LUN
- Raises:
ISCSIError: If the LUN cannot be created
- get_host() str ¶
Get the host address the iSCSI server is listening on
- Returns:
str: The IP address or hostname the server is bound to
- get_port() int ¶
Get the port number the iSCSI server is listening on
- Returns:
int: The port number (default is 3260)
- get_target_iqn() str ¶
Get the IQN of the target
- Returns:
str: The IQN string for connecting to this target
- list_luns() List[Dict[str, Any]] ¶
List all configured LUNs
- Returns:
List[Dict[str, Any]]: List of dictionaries with LUN information
- remove_lun(name: str)¶
Remove a LUN from the iSCSI target
- Args:
name (str): Name of the LUN to remove
- Raises:
ISCSIError: If the LUN cannot be removed
- start()¶
Start the iSCSI target server
Initializes and starts the iSCSI target server if it’s not already running. The server will listen on the configured host and port.
- stop()¶
Stop the iSCSI target server
Stops the running iSCSI target server and releases associated resources.
- Raises:
ISCSIError: If the server fails to stop
- upload_image(dst_name: str, src: str | PathLike, size_mb: int = 0, operator: Operator | None = None, force_upload: bool = False) str ¶
Upload an image file and expose it as a LUN
- Args:
dst_name (str): Name to use for the LUN and local filename src (PathBuf): Source file path to read from size_mb (int): Size in MB if creating a new image. If 0 will use source file size. operator (Operator): Optional OpenDAL operator to use for reading force_upload (bool): If True, skip file comparison and force upload
- Returns:
str: Target IQN for connecting to the LUN
- Raises:
ISCSIError: If the operation fails