summaryrefslogtreecommitdiffstats
path: root/plugins/c8y_configuration_plugin
diff options
context:
space:
mode:
authorRina Fujino <18257209+rina23q@users.noreply.github.com>2022-05-19 14:58:08 +0200
committerRina Fujino <18257209+rina23q@users.noreply.github.com>2022-05-19 14:58:08 +0200
commit5733a4aed1f980089caf38a39d96f5d50ec9151b (patch)
treec58f7abc5f80f7644884e7ef6b44608ad19b942b /plugins/c8y_configuration_plugin
parent79a3df295e881a71a9d8398b5344e4f202ee310e (diff)
Reload the plugin configuration file properly after update
Signed-off-by: Rina Fujino <18257209+rina23q@users.noreply.github.com>
Diffstat (limited to 'plugins/c8y_configuration_plugin')
-rw-r--r--plugins/c8y_configuration_plugin/src/download.rs32
-rw-r--r--plugins/c8y_configuration_plugin/src/main.rs4
-rw-r--r--plugins/c8y_configuration_plugin/src/upload.rs23
3 files changed, 37 insertions, 22 deletions
diff --git a/plugins/c8y_configuration_plugin/src/download.rs b/plugins/c8y_configuration_plugin/src/download.rs
index b281ec78..4c3fbc7a 100644
--- a/plugins/c8y_configuration_plugin/src/download.rs
+++ b/plugins/c8y_configuration_plugin/src/download.rs
@@ -1,3 +1,4 @@
+use crate::config::FileEntry;
use crate::error::ConfigManagementError;
use crate::{error, PluginConfig, CONFIG_CHANGE_TOPIC};
use c8y_api::http_proxy::C8YHttpProxy;
@@ -28,17 +29,26 @@ pub async fn handle_config_download_request(
let () = mqtt_client.published.send(executing_message).await?;
let target_config_type = smartrest_request.config_type.clone();
- let target_file_entry = plugin_config.get_file_entry_from_type(&target_config_type)?;
-
- match download_config_file(
- smartrest_request.url.as_str(),
- PathBuf::from(&target_file_entry.path),
- tmp_dir,
- target_file_entry.file_permissions,
- http_client,
- )
- .await
- {
+ let mut target_file_entry = FileEntry::default();
+
+ let download_result = {
+ match plugin_config.get_file_entry_from_type(&target_config_type) {
+ Ok(file_entry) => {
+ target_file_entry = file_entry;
+ download_config_file(
+ smartrest_request.url.as_str(),
+ PathBuf::from(&target_file_entry.path),
+ tmp_dir,
+ target_file_entry.file_permissions,
+ http_client,
+ )
+ .await
+ }
+ Err(err) => Err(err.into()),
+ }
+ };
+
+ match download_result {
Ok(_) => {
info!("The configuration download for '{target_config_type}' is successful.");
diff --git a/plugins/c8y_configuration_plugin/src/main.rs b/plugins/c8y_configuration_plugin/src/main.rs
index b8d56fa0..758a68a3 100644
--- a/plugins/c8y_configuration_plugin/src/main.rs
+++ b/plugins/c8y_configuration_plugin/src/main.rs
@@ -117,7 +117,7 @@ async fn main() -> Result<(), anyhow::Error> {
}
async fn run(
- plugin_config: PluginConfig,
+ mut plugin_config: PluginConfig,
mqtt_port: u16,
http_client: &mut impl C8YHttpProxy,
tmp_dir: PathBuf,
@@ -145,7 +145,7 @@ async fn run(
message.topic.name.as_str()
{
// Reload the plugin config file
- let plugin_config = PluginConfig::new(config_file_path);
+ plugin_config = PluginConfig::new(config_file_path);
// Resend the supported config types
let msg = plugin_config.to_supported_config_types_message()?;
mqtt_client.published.send(msg).await?;
diff --git a/plugins/c8y_configuration_plugin/src/upload.rs b/plugins/c8y_configuration_plugin/src/upload.rs
index 585c54de..bd389779 100644
--- a/plugins/c8y_configuration_plugin/src/upload.rs
+++ b/plugins/c8y_configuration_plugin/src/upload.rs
@@ -53,15 +53,20 @@ pub async fn handle_config_upload_request(
let msg = UploadConfigFileStatusMessage::executing()?;
let () = mqtt_client.published.send(msg).await?;
- let config_file_path = plugin_config
- .get_file_entry_from_type(&config_upload_request.config_type)?
- .path;
- let upload_result = upload_config_file(
- Path::new(config_file_path.as_str()),
- &config_upload_request.config_type,
- http_client,
- )
- .await;
+ let upload_result = {
+ match plugin_config.get_file_entry_from_type(&config_upload_request.config_type) {
+ Ok(file_entry) => {
+ let config_file_path = file_entry.path;
+ upload_config_file(
+ Path::new(config_file_path.as_str()),
+ &config_upload_request.config_type,
+ http_client,
+ )
+ .await
+ }
+ Err(err) => Err(err.into()),
+ }
+ };
let target_config_type = &config_upload_request.config_type;