mirror of
https://gitlab.steamos.cloud/holo/steamos-manager.git
synced 2025-07-13 18:02:00 -04:00
systemd: Add method for finding enable state of a unit
This commit is contained in:
parent
f6dd8ce3dd
commit
3fe16ce065
1 changed files with 31 additions and 5 deletions
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, bail, Result};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use zbus::zvariant::OwnedObjectPath;
|
use zbus::zvariant::OwnedObjectPath;
|
||||||
use zbus::Connection;
|
use zbus::Connection;
|
||||||
|
@ -18,6 +18,8 @@ use zbus::Connection;
|
||||||
trait SystemdUnit {
|
trait SystemdUnit {
|
||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
fn active_state(&self) -> Result<String>;
|
fn active_state(&self) -> Result<String>;
|
||||||
|
#[zbus(property)]
|
||||||
|
fn unit_file_state(&self) -> Result<String>;
|
||||||
|
|
||||||
async fn restart(&self, mode: &str) -> Result<OwnedObjectPath>;
|
async fn restart(&self, mode: &str) -> Result<OwnedObjectPath>;
|
||||||
async fn start(&self, mode: &str) -> Result<OwnedObjectPath>;
|
async fn start(&self, mode: &str) -> Result<OwnedObjectPath>;
|
||||||
|
@ -58,6 +60,13 @@ trait SystemdManager {
|
||||||
async fn reload(&self) -> Result<()>;
|
async fn reload(&self) -> Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq, Debug, Copy, Clone)]
|
||||||
|
pub enum EnableState {
|
||||||
|
Disbled,
|
||||||
|
Enabled,
|
||||||
|
Masked,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct SystemdUnit<'dbus> {
|
pub struct SystemdUnit<'dbus> {
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
proxy: SystemdUnitProxy<'dbus>,
|
proxy: SystemdUnitProxy<'dbus>,
|
||||||
|
@ -102,31 +111,48 @@ impl<'dbus> SystemdUnit<'dbus> {
|
||||||
|
|
||||||
pub async fn enable(&self) -> Result<bool> {
|
pub async fn enable(&self) -> Result<bool> {
|
||||||
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
||||||
let (_, res) = manager.enable_unit_files(&[self.name.as_str()], false, false).await?;
|
let (_, res) = manager
|
||||||
|
.enable_unit_files(&[self.name.as_str()], false, false)
|
||||||
|
.await?;
|
||||||
Ok(res.len() > 0)
|
Ok(res.len() > 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn disable(&self) -> Result<bool> {
|
pub async fn disable(&self) -> Result<bool> {
|
||||||
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
||||||
let res = manager.disable_unit_files(&[self.name.as_str()], false).await?;
|
let res = manager
|
||||||
|
.disable_unit_files(&[self.name.as_str()], false)
|
||||||
|
.await?;
|
||||||
Ok(res.len() > 0)
|
Ok(res.len() > 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn mask(&self) -> Result<bool> {
|
pub async fn mask(&self) -> Result<bool> {
|
||||||
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
||||||
let res = manager.mask_unit_files(&[self.name.as_str()], false).await?;
|
let res = manager
|
||||||
|
.mask_unit_files(&[self.name.as_str()], false)
|
||||||
|
.await?;
|
||||||
Ok(res.len() > 0)
|
Ok(res.len() > 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn unmask(&self) -> Result<bool> {
|
pub async fn unmask(&self) -> Result<bool> {
|
||||||
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
let manager = SystemdManagerProxy::new(&self.connection).await?;
|
||||||
let res = manager.unmask_unit_files(&[self.name.as_str()], false).await?;
|
let res = manager
|
||||||
|
.unmask_unit_files(&[self.name.as_str()], false)
|
||||||
|
.await?;
|
||||||
Ok(res.len() > 0)
|
Ok(res.len() > 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn active(&self) -> Result<bool> {
|
pub async fn active(&self) -> Result<bool> {
|
||||||
Ok(self.proxy.active_state().await? == "active")
|
Ok(self.proxy.active_state().await? == "active")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn enabled(&self) -> Result<EnableState> {
|
||||||
|
Ok(match self.proxy.unit_file_state().await?.as_str() {
|
||||||
|
"enabled" => EnableState::Enabled,
|
||||||
|
"disabled" => EnableState::Disbled,
|
||||||
|
"masked" => EnableState::Masked,
|
||||||
|
state => bail!("Unknown state {state}"),
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn escape(name: &str) -> String {
|
pub fn escape(name: &str) -> String {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue