Skip to content

Commit

Permalink
Merge pull request #30 from tinythings/isbm-group-selector
Browse files Browse the repository at this point in the history
Add selector by relations
  • Loading branch information
isbm authored Oct 27, 2024
2 parents d505471 + d48713f commit e1464dc
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 12 deletions.
4 changes: 2 additions & 2 deletions examples/models/inherited/evt.cfg
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
constraints:
addresses-verification:
descr: Modified to intentionally fail
descr: Addresses verification
all:
interfaces:
- fact: if-up.virbr1.port
equals: 1
equals: 0
4 changes: 4 additions & 0 deletions examples/models/router/entities/processes.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ entities:

journald:
descr: journald daemon process
hosts:
- $
- "192.168.1.12"
- local
facts:
default:
- label:
Expand Down
7 changes: 7 additions & 0 deletions examples/models/router/relations/basic.cfg
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
relations:
# Relation Id
general-network:
# State
remote:
# Condition
requires:
- ssh-sockets

# State
local:
requires:
- no-ssh-sockets

# State
$:
consists:
- routes
Expand Down
5 changes: 5 additions & 0 deletions libsysinspect/src/intp/checkbook.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ impl CheckbookSection {
pub fn id(&self) -> String {
self.id.to_owned()
}

/// Get available relations
pub fn relations(&self) -> &[Relation] {
&self.relations
}
}

impl Display for CheckbookSection {
Expand Down
13 changes: 11 additions & 2 deletions libsysinspect/src/intp/inspector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,17 @@ impl SysInspector {
}

/// Get actions by relations
pub fn actions_by_relations(&self, rids: Vec<String>) -> Result<Vec<Action>, SysinspectError> {
Ok(vec![])
pub fn actions_by_relations(&self, rids: Vec<String>, state: Option<String>) -> Result<Vec<Action>, SysinspectError> {
let mut out: Vec<Action> = Vec::default();
for s in &self.checkbook {
if rids.contains(&s.id()) {
for rel in s.relations() {
out.extend(self.actions_by_entities(rel.get_entities(state.to_owned()), state.to_owned())?);
}
}
}

Ok(out)
}

/// Get actions by entities
Expand Down
17 changes: 17 additions & 0 deletions libsysinspect/src/intp/relations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,21 @@ impl Relation {
pub fn id(&self) -> String {
self.id.to_owned().unwrap_or("".to_string())
}

/// Get states to relations
pub fn states(&self) -> &HashMap<String, HashMap<String, Vec<String>>> {
&self.states
}

/// Get related entities
pub fn get_entities(&self, state: Option<String>) -> Vec<String> {
let mut out: Vec<String> = Vec::default();
let state = state.unwrap_or_default();
for (st, ent) in self.states() {
if st.eq(&state) || st.eq("$") {
out.extend(ent.values().flat_map(|eids| eids.to_owned()).collect::<Vec<String>>());
}
}
out
}
}
2 changes: 1 addition & 1 deletion libsysinspect/src/reactor/handlers/cstr_stdhdl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ impl EventHandler for ConstraintHandler {
let prefix = self.get_prefix();

if !evt.errors.has_errors() {
log::info!("{}All constraints {}", prefix, "passed".bright_green().bold());
log::info!("{}{} {}", prefix, evt.aid(), "passed".bright_green().bold());
return;
}

Expand Down
5 changes: 4 additions & 1 deletion libsysinspect/src/reactor/handlers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ pub mod registry {
/// NOTE: [`init_handlers`] must be called.
///
pub fn get_handler_names() -> Vec<String> {
REGISTRY_MAP.lock().unwrap().keys().map(|s| s.to_string()).collect::<Vec<String>>()
let mut out = REGISTRY_MAP.lock().unwrap().keys().cloned().map(|s| s.to_string()).collect::<Vec<String>>();
out.sort();

out
}
}
15 changes: 9 additions & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,16 @@ fn main() {
// Setup event processor
let mut evtproc = EventProcessor::new().set_config(isp.cfg());

// XXX: Move all this elsewhere
//let ar = isp.actions_by_relations(clidef::split_by(&params, "labels", None)).unwrap();
let arg_state = params.get_one::<String>("state").cloned();
let arg_labels = clidef::split_by(&params, "labels", None);

match isp.actions_by_entities(
clidef::split_by(&params, "entities", None),
params.get_one::<String>("state").cloned(),
) {
let actions = if !arg_labels.is_empty() {
isp.actions_by_relations(arg_labels, arg_state.to_owned())
} else {
isp.actions_by_entities(clidef::split_by(&params, "entities", None), arg_state)
};

match actions {
Ok(actions) => {
for ac in actions {
match ac.run() {
Expand Down

0 comments on commit e1464dc

Please sign in to comment.