summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@ifm.com>2022-05-17 14:11:21 +0200
committerMatthias Beyer <matthias.beyer@ifm.com>2022-05-17 14:29:49 +0200
commit2b34ffac50d860d3a4907d15964393a50a98e621 (patch)
tree199587521a42f9cc83fa94591738387138a1f923
parent7b5089ce59809b6ca690d57d5fffea41fc74cc60 (diff)
plugin_c8y: Implement SM-handling functionality
This patch brings the configuration interface as well as fetching the address of the plugin that handles SM requests to the c8y plugin implementation. Signed-off-by: Matthias Beyer <matthias.beyer@ifm.com>
-rw-r--r--plugins/plugin_c8y/src/builder.rs11
-rw-r--r--plugins/plugin_c8y/src/config.rs3
-rw-r--r--plugins/plugin_c8y/src/plugin.rs9
3 files changed, 19 insertions, 4 deletions
diff --git a/plugins/plugin_c8y/src/builder.rs b/plugins/plugin_c8y/src/builder.rs
index 68d683f1..34d89583 100644
--- a/plugins/plugin_c8y/src/builder.rs
+++ b/plugins/plugin_c8y/src/builder.rs
@@ -7,10 +7,16 @@ use tedge_api::PluginError;
use tedge_api::plugin::BuiltPlugin;
use tedge_api::plugin::HandleTypes;
use tedge_api::plugin::PluginExt;
+use tedge_lib::sm::request::Install;
+use tedge_lib::sm::request::List;
+use tedge_lib::sm::request::Uninstall;
+use tedge_lib::sm::request::Update;
use crate::config::C8yConfig;
use crate::plugin::C8yPlugin;
+tedge_api::make_receiver_bundle!(pub struct SmReceiver(List, Install, Update, Uninstall));
+
pub struct C8yPluginBuilder;
#[async_trait]
@@ -49,13 +55,14 @@ where
&self,
config: PluginConfiguration,
_cancellation_token: CancellationToken,
- _plugin_dir: &PD,
+ plugin_dir: &PD,
) -> Result<BuiltPlugin, PluginError> {
let config = config
.try_into::<C8yConfig>()
.map_err(crate::error::Error::ConfigParseFailed)?;
- Ok(C8yPlugin::new(config).finish())
+ let sm_addr = plugin_dir.get_address_for::<SmReceiver>(&config.sm_plugin_name)?;
+ Ok(C8yPlugin::new(config, sm_addr).finish())
}
}
diff --git a/plugins/plugin_c8y/src/config.rs b/plugins/plugin_c8y/src/config.rs
index 7c9d2330..461bc91a 100644
--- a/plugins/plugin_c8y/src/config.rs
+++ b/plugins/plugin_c8y/src/config.rs
@@ -1,5 +1,6 @@
#[derive(serde::Deserialize, Debug, tedge_api::Config)]
pub struct C8yConfig {
- // currently empty
+ /// Name of the plugin that handles software-management operations
+ pub(crate) sm_plugin_name: String,
}
diff --git a/plugins/plugin_c8y/src/plugin.rs b/plugins/plugin_c8y/src/plugin.rs
index 31d104ca..239cccd7 100644
--- a/plugins/plugin_c8y/src/plugin.rs
+++ b/plugins/plugin_c8y/src/plugin.rs
@@ -1,5 +1,6 @@
use async_trait::async_trait;
+use tedge_api::Address;
use tedge_api::address::ReplySenderFor;
use tedge_api::plugin::Handle;
use tedge_api::Plugin;
@@ -12,12 +13,16 @@ use crate::config::C8yConfig;
#[derive(Debug)]
pub struct C8yPlugin {
config: C8yConfig,
+
+ #[allow(unused)]
+ sm_plugin_name: Address<crate::builder::SmReceiver>,
}
impl C8yPlugin {
- pub(crate) fn new(config: C8yConfig) -> Self {
+ pub(crate) fn new(config: C8yConfig, sm_plugin_name: Address<crate::builder::SmReceiver>) -> Self {
Self {
config,
+ sm_plugin_name,
}
}
}
@@ -30,6 +35,8 @@ impl tedge_api::plugin::PluginDeclaration for C8yPlugin {
impl Plugin for C8yPlugin {
#[tracing::instrument(name = "plugin.c8y.start", skip(self))]
async fn start(&mut self) -> Result<(), PluginError> {
+ // TODO: start some mainloop that handles incoming requests from c8y and passes SM requests
+ // via self.sm_plugin_name.send_and_wait() to the SM plugin.
Ok(())
}