create_nfs_export
Create an NFS export on TrueNAS Core for Kubernetes persistent volumes, specifying dataset, allowed networks, read-only access, and root user/group mapping.
Instructions
Create an NFS export for Kubernetes persistent volumes
Args:
dataset: Dataset path to export (e.g., "tank/k8s-volumes")
allowed_networks: List of allowed networks (e.g., ["10.0.0.0/24"])
read_only: Whether the export is read-only
maproot_user: User to map root to
maproot_group: Group to map root to
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| allowed_networks | No | ||
| dataset | Yes | ||
| maproot_group | No | wheel | |
| maproot_user | No | root | |
| read_only | No |
Implementation Reference
- The @tool_handler decorated method that implements the core logic of the create_nfs_export tool. It normalizes the path, sets up export data with API calls to TrueNAS /sharing/nfs endpoint, handles defaults for networks/hosts, and returns structured response with mount example.@tool_handler async def create_nfs_export( self, path: str, allowed_networks: Optional[List[str]] = None, allowed_hosts: Optional[List[str]] = None, read_only: bool = False, maproot_user: str = "root", maproot_group: str = "wheel", alldirs: bool = False, comment: str = "" ) -> Dict[str, Any]: """ Create an NFS export Args: path: Path to export (must exist) allowed_networks: List of allowed networks (e.g., ["10.0.0.0/24"]) allowed_hosts: List of allowed hosts read_only: Whether export is read-only maproot_user: User to map root to maproot_group: Group to map root to alldirs: Allow mounting of subdirectories comment: Optional comment Returns: Dictionary containing created export information """ await self.ensure_initialized() # Ensure path starts with /mnt/ if not path.startswith("/mnt/"): path = f"/mnt/{path}" # Default to allow all if no restrictions specified if not allowed_networks and not allowed_hosts: allowed_networks = ["0.0.0.0/0"] export_data = { "path": path, "comment": comment, "ro": read_only, "maproot_user": maproot_user, "maproot_group": maproot_group, "alldirs": alldirs, "enabled": True } if allowed_networks: export_data["networks"] = allowed_networks if allowed_hosts: export_data["hosts"] = allowed_hosts created = await self.client.post("/sharing/nfs", export_data) # Generate example mount command server_ip = str(self.settings.truenas_url).replace("https://", "").replace("http://", "").split(":")[0] mount_example = f"mount -t nfs {server_ip}:{path} /local/mount/point" return { "success": True, "message": f"NFS export created for path '{path}'", "export": { "id": created.get("id"), "path": created.get("path"), "networks": created.get("networks", []), "enabled": created.get("enabled") }, "mount_example": mount_example }
- truenas_mcp_server/tools/sharing.py:27-32 (registration)Registration of the create_nfs_export tool within SharingTools.get_tool_definitions() method, including the tool name, handler reference, description, and input schema.("create_nfs_export", self.create_nfs_export, "Create an NFS export", {"path": {"type": "string", "required": True}, "allowed_networks": {"type": "array", "required": False}, "read_only": {"type": "boolean", "required": False}, "maproot_user": {"type": "string", "required": False}, "maproot_group": {"type": "string", "required": False}}),
- Input schema definition for the create_nfs_export tool, specifying parameter types and requirements as part of the tool registration.{"path": {"type": "string", "required": True}, "allowed_networks": {"type": "array", "required": False}, "read_only": {"type": "boolean", "required": False}, "maproot_user": {"type": "string", "required": False}, "maproot_group": {"type": "string", "required": False}}),