From b0567f244a2a662a80b0736d28c808c8406ebf73 Mon Sep 17 00:00:00 2001 From: Mathieu Poussin Date: Wed, 15 Dec 2021 11:53:18 +0100 Subject: [PATCH 1/3] v0.1.7: Add support for enabling devices --- Cargo.toml | 2 +- src/main.rs | 44 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9949c96..652da77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "netbox2netshot" -version = "0.1.8" +version = "0.1.7" authors = ["Mathieu Poussin "] edition = "2018" description = "Synchronization tool between netbox and netshot" diff --git a/src/main.rs b/src/main.rs index fe4c2f0..facd699 100644 --- a/src/main.rs +++ b/src/main.rs @@ -121,11 +121,16 @@ fn main() -> Result<(), Error> { log::info!("Getting devices list from Netshot"); let netshot_devices = netshot_client.get_devices()?; + let netshot_disabled_devices: Vec<&netshot::Device> = netshot_devices + .iter() + .filter(|dev| &dev.status == "DISABLED") + .collect::<>(); + log::debug!("Building netshot devices simplified inventory"); - let netshot_simplified_inventory: HashMap<_, _> = netshot_devices - .into_iter() - .map(|dev| (dev.management_address.ip, dev.name)) - .collect(); + let netshot_simplified_inventory: HashMap<&String, &String> = netshot_devices + .iter() + .map(|dev| (&dev.management_address.ip, &dev.name)) + .collect::<>(); log::info!("Getting devices list from Netbox"); let mut netbox_devices = netbox_client.get_devices(&opt.netbox_devices_filter)?; @@ -176,15 +181,30 @@ fn main() -> Result<(), Error> { let mut devices_to_disable: Vec = Vec::new(); for (ip, hostname) in &netshot_simplified_inventory { - match netbox_simplified_devices.get(ip) { + match netbox_simplified_devices.get(*ip) { Some(x) => log::debug!("{}({}) is present on both", x, ip), None => { - log::debug!("{}({}) missing from Netbox", hostname, ip); - devices_to_disable.push(ip.clone()); + log::debug!("{}({}) to be disabled (missing on Netbox)", hostname, ip); + devices_to_disable.push(ip.to_string()); } } } + let mut devices_to_enable: Vec = Vec::new(); + for device in &netshot_disabled_devices { + match netbox_simplified_devices.get(device.management_address.ip.as_str()) { + Some(x) => { + log::debug!( + "{}({}) to be enabled (present on Netbox)", + device.name, + device.management_address.ip + ); + devices_to_enable.push(device.management_address.ip.clone()); + } + None => {} + } + } + log::info!( "Found {} devices missing on Netshot, to be added", devices_to_register.len() @@ -193,6 +213,10 @@ fn main() -> Result<(), Error> { "Found {} devices missing on Netbox, to be disabled", devices_to_disable.len() ); + log::info!( + "Found {} devices disabled on Netshot but present on Netbox, to be enabled", + devices_to_enable.len() + ); if !opt.check { for device in devices_to_register { @@ -208,6 +232,12 @@ fn main() -> Result<(), Error> { log::warn!("Disable failure: {}", error); } } + for device in devices_to_enable { + let registration = netshot_client.enable_device(device); + if let Err(error) = registration { + log::warn!("Enable failure: {}", error); + } + } } Ok(()) } From 7f3b12090e2e8dae642e91c11ffe46c1b1617215 Mon Sep 17 00:00:00 2001 From: Mathieu Poussin Date: Wed, 15 Dec 2021 11:55:24 +0100 Subject: [PATCH 2/3] Cargo fix + rustfmt --- Cargo.lock | 2 +- src/main.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ec8583..d3b71ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -583,7 +583,7 @@ dependencies = [ [[package]] name = "netbox2netshot" -version = "0.1.8" +version = "0.1.7" dependencies = [ "anyhow", "ctor", diff --git a/src/main.rs b/src/main.rs index facd699..e61e2c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -124,13 +124,13 @@ fn main() -> Result<(), Error> { let netshot_disabled_devices: Vec<&netshot::Device> = netshot_devices .iter() .filter(|dev| &dev.status == "DISABLED") - .collect::<>(); + .collect(); log::debug!("Building netshot devices simplified inventory"); let netshot_simplified_inventory: HashMap<&String, &String> = netshot_devices .iter() .map(|dev| (&dev.management_address.ip, &dev.name)) - .collect::<>(); + .collect(); log::info!("Getting devices list from Netbox"); let mut netbox_devices = netbox_client.get_devices(&opt.netbox_devices_filter)?; @@ -193,7 +193,7 @@ fn main() -> Result<(), Error> { let mut devices_to_enable: Vec = Vec::new(); for device in &netshot_disabled_devices { match netbox_simplified_devices.get(device.management_address.ip.as_str()) { - Some(x) => { + Some(_x) => { log::debug!( "{}({}) to be enabled (present on Netbox)", device.name, From 75b87e8ca53ef04a8aa821075b44f5ea59407bcb Mon Sep 17 00:00:00 2001 From: Mathieu Poussin Date: Tue, 11 Jan 2022 11:56:17 +0100 Subject: [PATCH 3/3] Fix version to v0.1.9 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d3b71ed..a5dab56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -583,7 +583,7 @@ dependencies = [ [[package]] name = "netbox2netshot" -version = "0.1.7" +version = "0.1.9" dependencies = [ "anyhow", "ctor", diff --git a/Cargo.toml b/Cargo.toml index 652da77..87815f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "netbox2netshot" -version = "0.1.7" +version = "0.1.9" authors = ["Mathieu Poussin "] edition = "2018" description = "Synchronization tool between netbox and netshot"