diff --git a/composer.json b/composer.json
index e13de570..92886ba2 100755
--- a/composer.json
+++ b/composer.json
@@ -4,7 +4,7 @@
"php": "^8.4",
"php-http/guzzle7-adapter": "^1.1",
"php-di/php-di": "7.1.1",
- "dhope0000/lxd": "^1.2.0",
+ "dhope0000/lxd": "^1.3.0",
"vlucas/phpdotenv": "^5.6",
"symfony/http-foundation": "^7.3.6",
"symfony/filesystem": "^7.3.6",
diff --git a/composer.lock b/composer.lock
index dd58cdb7..df9f6927 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a3f4139e1fdc87de3e8b66b5f846f8d2",
+ "content-hash": "fa97b2bd4a8bc092159f9cde216e15d4",
"packages": [
{
"name": "cakephp/chronos",
@@ -488,16 +488,16 @@
},
{
"name": "dhope0000/lxd",
- "version": "v1.2.0",
+ "version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/turtle0x1/php-lxd.git",
- "reference": "5df1967e69f3b86aebb1194d7d6ade704e45a464"
+ "reference": "d5da20962a4b7f7ce71ce6fc890041d227c2ea4c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/turtle0x1/php-lxd/zipball/5df1967e69f3b86aebb1194d7d6ade704e45a464",
- "reference": "5df1967e69f3b86aebb1194d7d6ade704e45a464",
+ "url": "https://api.github.com/repos/turtle0x1/php-lxd/zipball/d5da20962a4b7f7ce71ce6fc890041d227c2ea4c",
+ "reference": "d5da20962a4b7f7ce71ce6fc890041d227c2ea4c",
"shasum": ""
},
"require": {
@@ -556,9 +556,9 @@
],
"support": {
"issues": "https://github.com/turtle0x1/php-lxd/issues",
- "source": "https://github.com/turtle0x1/php-lxd/tree/v1.2.0"
+ "source": "https://github.com/turtle0x1/php-lxd/tree/v1.3.0"
},
- "time": "2025-11-06T23:21:57+00:00"
+ "time": "2026-03-14T17:52:09+00:00"
},
{
"name": "doctrine/lexer",
diff --git a/src/classes/Controllers/Hosts/OS/Applications/GetApplicationController.php b/src/classes/Controllers/Hosts/OS/Applications/GetApplicationController.php
new file mode 100755
index 00000000..341bdf12
--- /dev/null
+++ b/src/classes/Controllers/Hosts/OS/Applications/GetApplicationController.php
@@ -0,0 +1,27 @@
+fetchUserDetails->isAdmin($userId);
+ if (!$isAdmin) {
+ throw new \Exception('No access', 1);
+ }
+ return $host->incusOS->applications->info($application);
+ }
+}
diff --git a/src/classes/Controllers/Hosts/OS/GetHostOSController.php b/src/classes/Controllers/Hosts/OS/GetHostOSController.php
new file mode 100755
index 00000000..2e21c822
--- /dev/null
+++ b/src/classes/Controllers/Hosts/OS/GetHostOSController.php
@@ -0,0 +1,27 @@
+fetchUserDetails->isAdmin($userId);
+ if (!$isAdmin) {
+ throw new \Exception('No access', 1);
+ }
+ return $this->getOSOverview->get($host);
+ }
+}
diff --git a/src/classes/Controllers/Hosts/OS/Services/GetServiceController.php b/src/classes/Controllers/Hosts/OS/Services/GetServiceController.php
new file mode 100755
index 00000000..afbef7d5
--- /dev/null
+++ b/src/classes/Controllers/Hosts/OS/Services/GetServiceController.php
@@ -0,0 +1,27 @@
+fetchUserDetails->isAdmin($userId);
+ if (!$isAdmin) {
+ throw new \Exception('No access', 1);
+ }
+ return $host->incusOS->services->info($service);
+ }
+}
diff --git a/src/classes/Controllers/Hosts/OS/System/GetSystemEndpointController.php b/src/classes/Controllers/Hosts/OS/System/GetSystemEndpointController.php
new file mode 100755
index 00000000..0ac48429
--- /dev/null
+++ b/src/classes/Controllers/Hosts/OS/System/GetSystemEndpointController.php
@@ -0,0 +1,27 @@
+fetchUserDetails->isAdmin($userId);
+ if (!$isAdmin) {
+ throw new \Exception('No access', 1);
+ }
+ return $host->incusOS->system->$endpoint->info();
+ }
+}
diff --git a/src/classes/Tools/Hosts/OS/GetOSOverview.php b/src/classes/Tools/Hosts/OS/GetOSOverview.php
new file mode 100644
index 00000000..c3b13c6e
--- /dev/null
+++ b/src/classes/Tools/Hosts/OS/GetOSOverview.php
@@ -0,0 +1,23 @@
+incusOS->system->endpoints();
+ $applications = $host->incusOS->applications->all();
+ $services = $host->incusOS->services->all();
+ return [
+ "applications"=>$applications,
+ "systemEndpoints"=>$systemEndpoints,
+ "services"=>$services
+ ];
+ }
+}
diff --git a/src/classes/Tools/Hosts/OS/System/GetSystemEndpoint.php b/src/classes/Tools/Hosts/OS/System/GetSystemEndpoint.php
new file mode 100644
index 00000000..01328355
--- /dev/null
+++ b/src/classes/Tools/Hosts/OS/System/GetSystemEndpoint.php
@@ -0,0 +1,17 @@
+incusOS->system->$endpoint->info();
+
+ }
+}
diff --git a/src/views/boxes/server.php b/src/views/boxes/server.php
index 4770e1a1..3d27b5d7 100644
--- a/src/views/boxes/server.php
+++ b/src/views/boxes/server.php
@@ -62,6 +62,11 @@
Proxy Devices
+
+
+ OS
+
+
Disks
@@ -217,6 +222,7 @@
@@ -574,6 +580,8 @@ function loadHostWarnings(req){
router.navigate(`/host/${currentServer.hostAlias}/settings`)
}else if($(this).data("view") == "serverDiskBox"){
router.navigate(`/host/${currentServer.hostAlias}/disks`)
+ }else if($(this).data("view") == "serverOSView"){
+ router.navigate(`/host/${currentServer.hostAlias}/os`)
}
});
diff --git a/src/views/boxes/server/os.php b/src/views/boxes/server/os.php
new file mode 100644
index 00000000..9f2be873
--- /dev/null
+++ b/src/views/boxes/server/os.php
@@ -0,0 +1,71 @@
+
+
+
+
+
System
+
+
Applications
+
+
Services
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/applications/incus.html b/src/views/boxes/server/os/applications/incus.html
new file mode 100644
index 00000000..2c9399ea
--- /dev/null
+++ b/src/views/boxes/server/os/applications/incus.html
@@ -0,0 +1,53 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/apps.php b/src/views/boxes/server/os/apps.php
new file mode 100644
index 00000000..32071953
--- /dev/null
+++ b/src/views/boxes/server/os/apps.php
@@ -0,0 +1,48 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services.php b/src/views/boxes/server/os/services.php
new file mode 100644
index 00000000..0a06e12c
--- /dev/null
+++ b/src/views/boxes/server/os/services.php
@@ -0,0 +1,62 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/iscsi.html b/src/views/boxes/server/os/services/iscsi.html
new file mode 100644
index 00000000..02f3cda0
--- /dev/null
+++ b/src/views/boxes/server/os/services/iscsi.html
@@ -0,0 +1,52 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/lvm.html b/src/views/boxes/server/os/services/lvm.html
new file mode 100644
index 00000000..f0902b4a
--- /dev/null
+++ b/src/views/boxes/server/os/services/lvm.html
@@ -0,0 +1,50 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/multipath.html b/src/views/boxes/server/os/services/multipath.html
new file mode 100644
index 00000000..9008994d
--- /dev/null
+++ b/src/views/boxes/server/os/services/multipath.html
@@ -0,0 +1,50 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/netbrid.html b/src/views/boxes/server/os/services/netbrid.html
new file mode 100644
index 00000000..ad6b1567
--- /dev/null
+++ b/src/views/boxes/server/os/services/netbrid.html
@@ -0,0 +1,46 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/nvme.html b/src/views/boxes/server/os/services/nvme.html
new file mode 100644
index 00000000..327be402
--- /dev/null
+++ b/src/views/boxes/server/os/services/nvme.html
@@ -0,0 +1,55 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/ovn.html b/src/views/boxes/server/os/services/ovn.html
new file mode 100644
index 00000000..a1fa6c14
--- /dev/null
+++ b/src/views/boxes/server/os/services/ovn.html
@@ -0,0 +1,58 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/tailscale.html b/src/views/boxes/server/os/services/tailscale.html
new file mode 100644
index 00000000..9450305a
--- /dev/null
+++ b/src/views/boxes/server/os/services/tailscale.html
@@ -0,0 +1,46 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/services/usbip.html b/src/views/boxes/server/os/services/usbip.html
new file mode 100644
index 00000000..62cff406
--- /dev/null
+++ b/src/views/boxes/server/os/services/usbip.html
@@ -0,0 +1,50 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system.php b/src/views/boxes/server/os/system.php
new file mode 100644
index 00000000..910f735c
--- /dev/null
+++ b/src/views/boxes/server/os/system.php
@@ -0,0 +1,59 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/logging.html b/src/views/boxes/server/os/system/logging.html
new file mode 100644
index 00000000..4a84a759
--- /dev/null
+++ b/src/views/boxes/server/os/system/logging.html
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/network.html b/src/views/boxes/server/os/system/network.html
new file mode 100644
index 00000000..81cc560c
--- /dev/null
+++ b/src/views/boxes/server/os/system/network.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+ | Name |
+ Type |
+ Mac |
+ State |
+ Addresses |
+ Stats |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/boxes/server/os/system/notImplemented.html b/src/views/boxes/server/os/system/notImplemented.html
new file mode 100644
index 00000000..5114274b
--- /dev/null
+++ b/src/views/boxes/server/os/system/notImplemented.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ The view for this endpoint is not implemented yet!
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/provider.html b/src/views/boxes/server/os/system/provider.html
new file mode 100644
index 00000000..a9043fab
--- /dev/null
+++ b/src/views/boxes/server/os/system/provider.html
@@ -0,0 +1,53 @@
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/security.html b/src/views/boxes/server/os/system/security.html
new file mode 100644
index 00000000..3c8b7945
--- /dev/null
+++ b/src/views/boxes/server/os/system/security.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+ | Volume |
+ State |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Type |
+ Issuer |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/stroage.html b/src/views/boxes/server/os/system/stroage.html
new file mode 100644
index 00000000..0c2b98c9
--- /dev/null
+++ b/src/views/boxes/server/os/system/stroage.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+ | Model |
+ Serial Number |
+ Capacity |
+ Boot |
+ Multipath |
+ Removable |
+ Remote |
+ Member Pool |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Name |
+ Type |
+ State |
+ Encryption Key Status |
+ Usable Size |
+ Allocated Space |
+ Volumes |
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/boxes/server/os/system/update.html b/src/views/boxes/server/os/system/update.html
new file mode 100644
index 00000000..c0ae0fd2
--- /dev/null
+++ b/src/views/boxes/server/os/system/update.html
@@ -0,0 +1,65 @@
+
+
\ No newline at end of file
diff --git a/src/views/index.php b/src/views/index.php
index 33255cc2..88e234b6 100755
--- a/src/views/index.php
+++ b/src/views/index.php
@@ -699,6 +699,10 @@ function makeProjectDropDown(member){
router.on('/host/:hostId/warnings', loadHostWarnings);
router.on('/host/:hostId/settings', loadHostSettings);
router.on('/host/:hostId/disks', loadHostDisks);
+ router.on('/host/:hostId/os', loadHostOS);
+ router.on('/host/:hostId/os/system/:endpoint', loadHostOSSystem);
+ router.on('/host/:hostId/os/apps/:app', loadHostOSApps);
+ router.on('/host/:hostId/os/services/:service', loadHostOSServices);
router.on('/instance/:hostId/:instance', loadContainerViewReq);
router.on("/backups", loadBackupsView);