Skip to content

Commit f7108d0

Browse files
author
Steve Lee (POWERSHELL HE/HIM) (from Dev Box)
committed
combine metadata to single struct
1 parent 32de326 commit f7108d0

File tree

4 files changed

+64
-77
lines changed

4 files changed

+64
-77
lines changed

dsc_lib/src/configure/config_doc.rs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ use serde::{Deserialize, Serialize};
66
use serde_json::{Map, Value};
77
use std::collections::HashMap;
88

9-
use super::config_result::ResultMetadata;
10-
119
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
1210
pub enum ContextKind {
1311
Configuration,
@@ -22,18 +20,45 @@ pub enum SecurityContextKind {
2220
}
2321

2422
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
25-
pub struct MicrosoftDscMetadata {
26-
#[serde(skip_serializing_if = "Option::is_none")]
27-
pub context: Option<ContextKind>,
28-
#[serde(rename = "requiredSecurityContext", skip_serializing_if = "Option::is_none")]
29-
pub required_security_context: Option<SecurityContextKind>,
23+
pub enum Operation {
24+
Get,
25+
Set,
26+
Test,
27+
Export,
28+
}
29+
30+
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
31+
pub enum ExecutionKind {
32+
Actual,
33+
WhatIf,
3034
}
3135

3236
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
33-
#[serde(untagged)]
34-
pub enum MicrosoftMetadata {
35-
DscInput(Metadata),
36-
DscResult(ResultMetadata),
37+
pub struct MicrosoftDscMetadata {
38+
/// Version of DSC
39+
#[serde(skip_serializing_if = "Option::is_none")]
40+
pub version: Option<String>,
41+
/// The operation being performed
42+
#[serde(skip_serializing_if = "Option::is_none")]
43+
pub operation: Option<Operation>,
44+
/// The type of execution
45+
#[serde(rename = "executionType", skip_serializing_if = "Option::is_none")]
46+
pub execution_type: Option<ExecutionKind>,
47+
/// The start time of the configuration operation
48+
#[serde(rename = "startDatetime", skip_serializing_if = "Option::is_none")]
49+
pub start_datetime: Option<String>,
50+
/// The end time of the configuration operation
51+
#[serde(rename = "endDatetime", skip_serializing_if = "Option::is_none")]
52+
pub end_datetime: Option<String>,
53+
/// The duration of the configuration operation
54+
#[serde(skip_serializing_if = "Option::is_none")]
55+
pub duration: Option<String>,
56+
/// The security context of the configuration operation, can be specified to be required
57+
#[serde(rename = "securityContext", skip_serializing_if = "Option::is_none")]
58+
pub security_context: Option<SecurityContextKind>,
59+
/// Identifies if the operation is part of a configuration
60+
#[serde(skip_serializing_if = "Option::is_none")]
61+
pub context: Option<ContextKind>,
3762
}
3863

3964
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
@@ -54,7 +79,7 @@ pub struct Configuration {
5479
pub variables: Option<HashMap<String, Value>>,
5580
pub resources: Vec<Resource>,
5681
#[serde(skip_serializing_if = "Option::is_none")]
57-
pub metadata: Option<MicrosoftMetadata>,
82+
pub metadata: Option<Metadata>,
5883
}
5984

6085
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]

dsc_lib/src/configure/config_result.rs

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
use schemars::JsonSchema;
55
use serde::{Deserialize, Serialize};
66
use crate::dscresources::invoke_result::{GetResult, SetResult, TestResult};
7-
use crate::configure::config_doc::Configuration;
8-
9-
use super::config_doc::SecurityContextKind;
7+
use crate::configure::config_doc::{Configuration, Metadata};
108

119
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
1210
pub enum MessageLevel {
@@ -25,41 +23,6 @@ pub struct ResourceMessage {
2523
pub level: MessageLevel,
2624
}
2725

28-
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
29-
pub enum Operation {
30-
Get,
31-
Set,
32-
Test,
33-
Export,
34-
}
35-
36-
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
37-
pub enum ExecutionKind {
38-
Actual,
39-
WhatIf,
40-
}
41-
42-
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
43-
pub struct ResultMetadata {
44-
#[serde(rename = "Microsoft.DSC")]
45-
pub microsoft: MicrosoftDscResultMetadata,
46-
}
47-
48-
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
49-
pub struct MicrosoftDscResultMetadata {
50-
pub version: String,
51-
pub operation: Operation,
52-
#[serde(rename = "executionType")]
53-
pub execution_type: ExecutionKind,
54-
#[serde(rename = "startDatetime")]
55-
pub start_datetime: String,
56-
#[serde(rename = "endDatetime")]
57-
pub end_datetime: String,
58-
pub duration: String,
59-
#[serde(rename = "securityContext")]
60-
pub security_context: SecurityContextKind,
61-
}
62-
6326
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
6427
#[serde(deny_unknown_fields)]
6528
pub struct ResourceGetResult {
@@ -82,7 +45,7 @@ impl From<ResourceTestResult> for ResourceGetResult {
8245
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
8346
#[serde(deny_unknown_fields)]
8447
pub struct ConfigurationGetResult {
85-
pub metadata: Option<ResultMetadata>,
48+
pub metadata: Option<Metadata>,
8649
pub results: Vec<ResourceGetResult>,
8750
pub messages: Vec<ResourceMessage>,
8851
#[serde(rename = "hadErrors")]
@@ -155,7 +118,7 @@ impl Default for GroupResourceSetResult {
155118
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
156119
#[serde(deny_unknown_fields)]
157120
pub struct ConfigurationSetResult {
158-
pub metadata: Option<ResultMetadata>,
121+
pub metadata: Option<Metadata>,
159122
pub results: Vec<ResourceSetResult>,
160123
pub messages: Vec<ResourceMessage>,
161124
#[serde(rename = "hadErrors")]
@@ -213,7 +176,7 @@ impl Default for GroupResourceTestResult {
213176
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
214177
#[serde(deny_unknown_fields)]
215178
pub struct ConfigurationTestResult {
216-
pub metadata: Option<ResultMetadata>,
179+
pub metadata: Option<Metadata>,
217180
pub results: Vec<ResourceTestResult>,
218181
pub messages: Vec<ResourceMessage>,
219182
#[serde(rename = "hadErrors")]
@@ -241,7 +204,7 @@ impl Default for ConfigurationTestResult {
241204
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
242205
#[serde(deny_unknown_fields)]
243206
pub struct ConfigurationExportResult {
244-
pub metadata: Option<ResultMetadata>,
207+
pub metadata: Option<Metadata>,
245208
pub result: Option<Configuration>,
246209
pub messages: Vec<ResourceMessage>,
247210
#[serde(rename = "hadErrors")]

dsc_lib/src/configure/context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Licensed under the MIT License.
33

44
use chrono::{DateTime, Local};
5-
use crate::configure::ExecutionKind;
5+
use crate::configure::config_doc::ExecutionKind;
66
use security_context_lib::{get_security_context, SecurityContext};
77
use serde_json::Value;
88
use std::collections::HashMap;

dsc_lib/src/configure/mod.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
use crate::configure::config_doc::{MicrosoftMetadata, MicrosoftMetadata::DscInput};
4+
use crate::configure::config_doc::Metadata;
55
use crate::configure::parameters::Input;
66
use crate::dscerror::DscError;
77
use crate::dscresources::dscresource::get_diff;
@@ -12,9 +12,9 @@ use crate::DscResource;
1212
use crate::discovery::Discovery;
1313
use crate::parser::Statement;
1414
use self::context::Context;
15-
use self::config_doc::{Configuration, DataType, SecurityContextKind};
15+
use self::config_doc::{Configuration, DataType, MicrosoftDscMetadata, Operation, SecurityContextKind};
1616
use self::depends_on::get_resource_invocation_order;
17-
use self::config_result::{ConfigurationExportResult, ConfigurationGetResult, ConfigurationSetResult, ConfigurationTestResult, ExecutionKind, MicrosoftDscResultMetadata, Operation, ResultMetadata};
17+
use self::config_result::{ConfigurationExportResult, ConfigurationGetResult, ConfigurationSetResult, ConfigurationTestResult};
1818
use self::contraints::{check_length, check_number_limits, check_allowed_values};
1919
use indicatif::ProgressStyle;
2020
use security_context_lib::{SecurityContext, get_security_context};
@@ -165,14 +165,14 @@ fn add_metadata(kind: &Kind, mut properties: Option<Map<String, Value>> ) -> Res
165165
Ok(serde_json::to_string(&properties)?)
166166
}
167167

168-
fn check_security_context(metadata: &Option<MicrosoftMetadata>) -> Result<(), DscError> {
168+
fn check_security_context(metadata: &Option<Metadata>) -> Result<(), DscError> {
169169
if metadata.is_none() {
170170
return Ok(());
171171
}
172172

173-
if let Some(DscInput(metadata)) = &metadata {
173+
if let Some(metadata) = &metadata {
174174
if let Some(microsoft_dsc) = &metadata.microsoft {
175-
if let Some(required_security_context) = &microsoft_dsc.required_security_context {
175+
if let Some(required_security_context) = &microsoft_dsc.security_context {
176176
match required_security_context {
177177
SecurityContextKind::Current => {
178178
// no check needed
@@ -432,11 +432,7 @@ impl Configurator {
432432
add_resource_export_results_to_configuration(dsc_resource, Some(dsc_resource), &mut conf, input.as_str())?;
433433
}
434434

435-
conf.metadata = Some(
436-
MicrosoftMetadata::DscResult(
437-
self.get_result_metadata(Operation::Export)
438-
)
439-
);
435+
conf.metadata = Some(self.get_result_metadata(Operation::Export));
440436
result.result = Some(conf);
441437
std::mem::drop(pb_span_enter);
442438
std::mem::drop(pb_span);
@@ -511,18 +507,21 @@ impl Configurator {
511507
Ok(())
512508
}
513509

514-
fn get_result_metadata(&self, operation: Operation) -> ResultMetadata {
510+
fn get_result_metadata(&self, operation: Operation) -> Metadata {
515511
let end_datetime = chrono::Local::now();
516-
ResultMetadata {
517-
microsoft: MicrosoftDscResultMetadata {
518-
version: env!("CARGO_PKG_VERSION").to_string(),
519-
operation,
520-
execution_type: self.context.execution_type.clone(),
521-
start_datetime: self.context.start_datetime.to_rfc3339(),
522-
end_datetime: end_datetime.to_rfc3339(),
523-
duration: end_datetime.signed_duration_since(self.context.start_datetime).to_string(),
524-
security_context: self.context.security_context.clone(),
525-
}
512+
Metadata {
513+
microsoft: Some(
514+
MicrosoftDscMetadata {
515+
context: None,
516+
version: Some(env!("CARGO_PKG_VERSION").to_string()),
517+
operation: Some(operation),
518+
execution_type: Some(self.context.execution_type.clone()),
519+
start_datetime: Some(self.context.start_datetime.to_rfc3339()),
520+
end_datetime: Some(end_datetime.to_rfc3339()),
521+
duration: Some(end_datetime.signed_duration_since(self.context.start_datetime).to_string()),
522+
security_context: Some(self.context.security_context.clone()),
523+
}
524+
)
526525
}
527526
}
528527

0 commit comments

Comments
 (0)