Skip to content

Commit 73e66fe

Browse files
author
Steve Lee (POWERSHELL HE/HIM) (from Dev Box)
committed
add metadata to resource result
1 parent 199ddb2 commit 73e66fe

File tree

4 files changed

+109
-7
lines changed

4 files changed

+109
-7
lines changed

dsc/tests/dsc_group.tests.ps1

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,59 @@ metadata:
1616
duration: PT*S
1717
securityContext: *
1818
results:
19-
- name: First Group
19+
- metadata:
20+
Microsoft.DSC:
21+
version: 0.1.0
22+
duration: *
23+
name: First Group
2024
type: Microsoft.DSC/Group
2125
result:
22-
- name: First
26+
- metadata:
27+
Microsoft.DSC:
28+
version: 0.1.0
29+
duration: *
30+
name: First
2331
type: Test/Echo
2432
result:
2533
actualState:
2634
output: First
27-
- name: Nested Group
35+
- metadata:
36+
Microsoft.DSC:
37+
version: 0.1.0
38+
duration: *
39+
name: Nested Group
2840
type: Microsoft.DSC/Group
2941
result:
30-
- name: Nested First
42+
- metadata:
43+
Microsoft.DSC:
44+
version: 0.1.0
45+
duration: *
46+
name: Nested First
3147
type: Test/Echo
3248
result:
3349
actualState:
3450
output: Nested First
35-
- name: Nested Second
51+
- metadata:
52+
Microsoft.DSC:
53+
version: 0.1.0
54+
duration: *
55+
name: Nested Second
3656
type: Test/Echo
3757
result:
3858
actualState:
3959
output: Nested Second
40-
- name: Last Group
60+
- metadata:
61+
Microsoft.DSC:
62+
version: 0.1.0
63+
duration: *
64+
name: Last Group
4165
type: Microsoft.DSC/Group
4266
result:
43-
- name: Last
67+
- metadata:
68+
Microsoft.DSC:
69+
version: 0.1.0
70+
duration: *
71+
name: Last
4472
type: Test/Echo
4573
result:
4674
actualState:

dsc_lib/src/configure/config_doc.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ pub struct MicrosoftDscMetadata {
6161
pub context: Option<ContextKind>,
6262
}
6363

64+
impl Default for MicrosoftDscMetadata {
65+
fn default() -> Self {
66+
Self {
67+
version: None,
68+
operation: None,
69+
execution_type: None,
70+
start_datetime: None,
71+
end_datetime: None,
72+
duration: None,
73+
security_context: None,
74+
context: None,
75+
}
76+
}
77+
}
78+
6479
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
6580
pub struct Metadata {
6681
#[serde(rename = "Microsoft.DSC", skip_serializing_if = "Option::is_none")]

dsc_lib/src/configure/config_result.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ pub struct ResourceMessage {
2626
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
2727
#[serde(deny_unknown_fields)]
2828
pub struct ResourceGetResult {
29+
#[serde(skip_serializing_if = "Option::is_none")]
30+
pub metadata: Option<Metadata>,
2931
pub name: String,
3032
#[serde(rename="type")]
3133
pub resource_type: String,
@@ -35,6 +37,7 @@ pub struct ResourceGetResult {
3537
impl From<ResourceTestResult> for ResourceGetResult {
3638
fn from(test_result: ResourceTestResult) -> Self {
3739
Self {
40+
metadata: None,
3841
name: test_result.name,
3942
resource_type: test_result.resource_type,
4043
result: test_result.result.into(),
@@ -88,6 +91,8 @@ impl From<ConfigurationTestResult> for ConfigurationGetResult {
8891
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
8992
#[serde(deny_unknown_fields)]
9093
pub struct ResourceSetResult {
94+
#[serde(skip_serializing_if = "Option::is_none")]
95+
pub metadata: Option<Metadata>,
9196
pub name: String,
9297
#[serde(rename="type")]
9398
pub resource_type: String,
@@ -146,6 +151,8 @@ impl Default for ConfigurationSetResult {
146151
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
147152
#[serde(deny_unknown_fields)]
148153
pub struct ResourceTestResult {
154+
#[serde(skip_serializing_if = "Option::is_none")]
155+
pub metadata: Option<Metadata>,
149156
pub name: String,
150157
#[serde(rename="type")]
151158
pub resource_type: String,

dsc_lib/src/configure/mod.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,22 @@ impl Configurator {
241241
debug!("resource_type {}", &resource.resource_type);
242242
let filter = add_metadata(&dsc_resource.kind, properties)?;
243243
trace!("filter: {filter}");
244+
let start_datetime = chrono::Local::now();
244245
let get_result = dsc_resource.get(&filter)?;
246+
let end_datetime = chrono::Local::now();
245247
self.context.outputs.insert(format!("{}:{}", resource.resource_type, resource.name), serde_json::to_value(&get_result)?);
246248
let resource_result = config_result::ResourceGetResult {
249+
metadata: Some(
250+
Metadata {
251+
microsoft: Some(
252+
MicrosoftDscMetadata {
253+
version: Some(dsc_resource.version.clone()),
254+
duration: Some(end_datetime.signed_duration_since(start_datetime).to_string()),
255+
..Default::default()
256+
}
257+
)
258+
}
259+
),
247260
name: resource.name.clone(),
248261
resource_type: resource.resource_type.clone(),
249262
result: get_result,
@@ -303,9 +316,22 @@ impl Configurator {
303316

304317
if exist || dsc_resource.capabilities.contains(&Capability::SetHandlesExist) {
305318
debug!("Resource handles _exist or _exist is true");
319+
let start_datetime = chrono::Local::now();
306320
let set_result = dsc_resource.set(&desired, skip_test)?;
321+
let end_datetime = chrono::Local::now();
307322
self.context.outputs.insert(format!("{}:{}", resource.resource_type, resource.name), serde_json::to_value(&set_result)?);
308323
let resource_result = config_result::ResourceSetResult {
324+
metadata: Some(
325+
Metadata {
326+
microsoft: Some(
327+
MicrosoftDscMetadata {
328+
version: Some(dsc_resource.version.clone()),
329+
duration: Some(end_datetime.signed_duration_since(start_datetime).to_string()),
330+
..Default::default()
331+
}
332+
)
333+
}
334+
),
309335
name: resource.name.clone(),
310336
resource_type: resource.resource_type.clone(),
311337
result: set_result,
@@ -314,7 +340,9 @@ impl Configurator {
314340
} else if dsc_resource.capabilities.contains(&Capability::Delete) {
315341
debug!("Resource implements delete and _exist is false");
316342
let before_result = dsc_resource.get(&desired)?;
343+
let start_datetime = chrono::Local::now();
317344
dsc_resource.delete(&desired)?;
345+
let end_datetime = chrono::Local::now();
318346
let after_result = dsc_resource.get(&desired)?;
319347
// convert get result to set result
320348
let set_result = match before_result {
@@ -336,6 +364,17 @@ impl Configurator {
336364
};
337365
self.context.outputs.insert(format!("{}:{}", resource.resource_type, resource.name), serde_json::to_value(&set_result)?);
338366
let resource_result = config_result::ResourceSetResult {
367+
metadata: Some(
368+
Metadata {
369+
microsoft: Some(
370+
MicrosoftDscMetadata {
371+
version: Some(dsc_resource.version.clone()),
372+
duration: Some(end_datetime.signed_duration_since(start_datetime).to_string()),
373+
..Default::default()
374+
}
375+
)
376+
}
377+
),
339378
name: resource.name.clone(),
340379
resource_type: resource.resource_type.clone(),
341380
result: SetResult::Resource(set_result),
@@ -380,9 +419,22 @@ impl Configurator {
380419
debug!("resource_type {}", &resource.resource_type);
381420
let expected = add_metadata(&dsc_resource.kind, properties)?;
382421
trace!("expected: {expected}");
422+
let start_datetime = chrono::Local::now();
383423
let test_result = dsc_resource.test(&expected)?;
424+
let end_datetime = chrono::Local::now();
384425
self.context.outputs.insert(format!("{}:{}", resource.resource_type, resource.name), serde_json::to_value(&test_result)?);
385426
let resource_result = config_result::ResourceTestResult {
427+
metadata: Some(
428+
Metadata {
429+
microsoft: Some(
430+
MicrosoftDscMetadata {
431+
version: Some(dsc_resource.version.clone()),
432+
duration: Some(end_datetime.signed_duration_since(start_datetime).to_string()),
433+
..Default::default()
434+
}
435+
)
436+
}
437+
),
386438
name: resource.name.clone(),
387439
resource_type: resource.resource_type.clone(),
388440
result: test_result,

0 commit comments

Comments
 (0)