Skip to main content

sysknife_daemon/actions/
mod.rs

1use sysknife_types::RiskLevel;
2
3pub mod apparmor;
4pub mod apt;
5pub mod apt_preferences;
6pub mod auditd;
7pub mod certbot;
8pub mod cloudinit;
9pub mod containers;
10pub mod deployment;
11pub mod distrobox;
12pub mod fail2ban;
13pub mod filesystem;
14pub mod flatpak;
15pub mod grub;
16pub mod identity;
17pub mod journald;
18pub mod layering;
19pub mod layering_ubuntu;
20pub mod livepatch;
21pub mod logging;
22pub mod lvm;
23pub mod mounts;
24pub mod multipass;
25pub mod netplan;
26pub mod network;
27pub mod package_repos;
28pub mod pam;
29pub mod ppa;
30pub mod processes;
31pub mod reboot;
32pub mod release_upgrade;
33pub mod resolvectl;
34pub mod services;
35pub mod snap;
36pub mod ssh;
37pub mod sudoers;
38pub mod sysctl;
39pub mod system_info;
40pub mod toolbox;
41pub mod ubuntu_pro;
42pub mod ufw;
43pub mod users;
44pub(crate) mod validate;
45
46#[derive(Clone, Debug, PartialEq, Eq)]
47pub enum ActionMechanism {
48    Command {
49        program: &'static str,
50        args: Vec<String>,
51    },
52    FileScan {
53        path: String,
54    },
55    FileWrite {
56        path: String,
57        content: String,
58    },
59    FilePatch {
60        path: String,
61        search: String,
62        replace: String,
63    },
64    FileDelete {
65        path: String,
66    },
67}
68
69#[derive(Clone, Debug, PartialEq, Eq)]
70pub struct ActionSpec {
71    pub action_name: &'static str,
72    pub mechanism: ActionMechanism,
73    pub risk_level: RiskLevel,
74    pub reboot_required: bool,
75    pub rollback_available: bool,
76}
77
78pub(crate) fn command_mechanism(
79    program: &'static str,
80    args: impl IntoIterator<Item = impl Into<String>>,
81) -> ActionMechanism {
82    ActionMechanism::Command {
83        program,
84        args: args.into_iter().map(Into::into).collect(),
85    }
86}
87
88pub(crate) fn file_write_mechanism(
89    path: impl Into<String>,
90    content: impl Into<String>,
91) -> ActionMechanism {
92    ActionMechanism::FileWrite {
93        path: path.into(),
94        content: content.into(),
95    }
96}
97
98pub(crate) fn file_patch_mechanism(
99    path: impl Into<String>,
100    search: impl Into<String>,
101    replace: impl Into<String>,
102) -> ActionMechanism {
103    ActionMechanism::FilePatch {
104        path: path.into(),
105        search: search.into(),
106        replace: replace.into(),
107    }
108}
109
110pub(crate) fn file_scan_mechanism(path: impl Into<String>) -> ActionMechanism {
111    ActionMechanism::FileScan { path: path.into() }
112}
113
114pub(crate) fn file_delete_mechanism(path: impl Into<String>) -> ActionMechanism {
115    ActionMechanism::FileDelete { path: path.into() }
116}