Skip to content

Commit e01cf3d

Browse files
committed
pass input metadata to resource
1 parent 12a5faf commit e01cf3d

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

dsc_lib/src/configure/mod.rs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,15 @@ fn escape_property_values(properties: &Map<String, Value>) -> Result<Option<Map<
170170
Ok(Some(result))
171171
}
172172

173-
fn add_metadata(kind: &Kind, mut properties: Option<Map<String, Value>> ) -> Result<String, DscError> {
173+
fn add_metadata(kind: &Kind, mut properties: Option<Map<String, Value>>, resource_metadata: Option<Metadata> ) -> Result<String, DscError> {
174174
if *kind == Kind::Adapter {
175175
// add metadata to the properties so the adapter knows this is a config
176-
let mut metadata = Map::new();
176+
let mut metadata: Map<String, Value> = Map::new();
177+
if let Some(resource_metadata) = resource_metadata {
178+
if !resource_metadata.other.is_empty() {
179+
metadata.extend(resource_metadata.other);
180+
}
181+
}
177182
let mut dsc_value = Map::new();
178183
dsc_value.insert("context".to_string(), Value::String("configuration".to_string()));
179184
metadata.insert("Microsoft.DSC".to_string(), Value::Object(dsc_value));
@@ -185,6 +190,18 @@ fn add_metadata(kind: &Kind, mut properties: Option<Map<String, Value>> ) -> Res
185190
return Ok(serde_json::to_string(&properties)?);
186191
}
187192

193+
if let Some(resource_metadata) = resource_metadata {
194+
let other_metadata = resource_metadata.other.clone();
195+
if let Some(mut properties) = properties {
196+
properties.insert("_metadata".to_string(), Value::Object(other_metadata));
197+
return Ok(serde_json::to_string(&properties)?);
198+
}
199+
let mut props = Map::new();
200+
props.insert("_metadata".to_string(), Value::Object(other_metadata));
201+
properties = Some(props);
202+
return Ok(serde_json::to_string(&properties)?);
203+
}
204+
188205
match properties {
189206
Some(properties) => {
190207
Ok(serde_json::to_string(&properties)?)
@@ -330,7 +347,7 @@ impl Configurator {
330347
};
331348
let properties = self.get_properties(&resource, &dsc_resource.kind)?;
332349
debug!("resource_type {}", &resource.resource_type);
333-
let filter = add_metadata(&dsc_resource.kind, properties)?;
350+
let filter = add_metadata(&dsc_resource.kind, properties, resource.metadata.clone())?;
334351
trace!("filter: {filter}");
335352
let start_datetime = chrono::Local::now();
336353
let mut get_result = match dsc_resource.get(&filter) {
@@ -425,7 +442,7 @@ impl Configurator {
425442
}
426443
};
427444

428-
let desired = add_metadata(&dsc_resource.kind, properties)?;
445+
let desired = add_metadata(&dsc_resource.kind, properties, resource.metadata.clone())?;
429446
trace!("{}", t!("configure.mod.desired", state = desired));
430447

431448
let start_datetime;
@@ -562,7 +579,7 @@ impl Configurator {
562579
};
563580
let properties = self.get_properties(&resource, &dsc_resource.kind)?;
564581
debug!("resource_type {}", &resource.resource_type);
565-
let expected = add_metadata(&dsc_resource.kind, properties)?;
582+
let expected = add_metadata(&dsc_resource.kind, properties, resource.metadata.clone())?;
566583
trace!("{}", t!("configure.mod.expectedState", state = expected));
567584
let start_datetime = chrono::Local::now();
568585
let mut test_result = match dsc_resource.test(&expected) {
@@ -638,7 +655,7 @@ impl Configurator {
638655
return Err(DscError::ResourceNotFound(resource.resource_type.clone()));
639656
};
640657
let properties = self.get_properties(resource, &dsc_resource.kind)?;
641-
let input = add_metadata(&dsc_resource.kind, properties)?;
658+
let input = add_metadata(&dsc_resource.kind, properties, resource.metadata.clone())?;
642659
trace!("{}", t!("configure.mod.exportInput", input = input));
643660
let export_result = match add_resource_export_results_to_configuration(dsc_resource, &mut conf, input.as_str()) {
644661
Ok(result) => result,

0 commit comments

Comments
 (0)