sysknife_daemon/actions/
mod.rs1use 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}