Skip to content

Commit 8b07dc0

Browse files
authored
Merge pull request #762 from SteveL-MSFT/appx-discover
Experimental Appx resource discovery extension
2 parents ad75d30 + 58fcd21 commit 8b07dc0

File tree

8 files changed

+49
-3
lines changed

8 files changed

+49
-3
lines changed

build.ps1

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ if ($GetPackageVersion) {
3838
}
3939

4040
$filesForWindowsPackage = @(
41+
'appx.dsc.extension.json',
42+
'appx-discover.ps1',
4143
'dsc.exe',
4244
'dsc_default.settings.json',
4345
'dsc.settings.json',
@@ -250,7 +252,7 @@ if (!$SkipBuild) {
250252
}
251253

252254
# make sure dependencies are built first so clippy runs correctly
253-
$windows_projects = @("pal", "registry", "reboot_pending", "wmi-adapter", "configurations/windows")
255+
$windows_projects = @("pal", "registry", "reboot_pending", "wmi-adapter", "configurations/windows", 'extensions/appx')
254256
$macOS_projects = @("resources/brew")
255257
$linux_projects = @("resources/apt")
256258

dsc_lib/locales/en-us.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ resourceManifestSchemaDescription = "Defines the JSON Schema the resource manife
170170
[extensions.dscextension]
171171
discoverNoResults = "No results returned for discovery extension '%{extension}'"
172172
discoverNotAbsolutePath = "Resource path from extension '%{extension}' is not an absolute path: %{path}"
173+
extensionReturned = "Extension '%{extension}' returned line: %{line}"
173174

174175
[extensions.extension_manifest]
175176
extensionManifestSchemaTitle = "Extension manifest schema URI"

dsc_lib/src/discovery/command_discovery.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ fn insert_resource(resources: &mut BTreeMap<String, Vec<DscResource>>, resource:
567567
},
568568
};
569569
// if the version already exists, we might skip it
570-
if !skip_duplicate_version && resource_instance_version == resource_version {
570+
if skip_duplicate_version && resource_instance_version == resource_version {
571571
return;
572572
}
573573

dsc_lib/src/extensions/dscextension.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
66
use serde_json::Value;
77
use schemars::JsonSchema;
88
use std::{fmt::Display, path::Path};
9-
use tracing::info;
9+
use tracing::{info, trace};
1010

1111
use crate::{discovery::command_discovery::{load_manifest, ImportedManifest}, dscerror::DscError, dscresources::{command_resource::{invoke_command, process_args}, dscresource::DscResource}};
1212

@@ -99,6 +99,7 @@ impl DscExtension {
9999
info!("{}", t!("extensions.dscextension.discoverNoResults", extension = self.type_name));
100100
} else {
101101
for line in stdout.lines() {
102+
trace!("{}", t!("extensions.dscextension.extensionReturned", extension = self.type_name, line = line));
102103
let discover_result: DiscoverResult = match serde_json::from_str(line) {
103104
Ok(result) => result,
104105
Err(err) => {

extensions/appx/appx-discover.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
$packages = Get-AppxPackage
2+
foreach ($package in $packages) {
3+
$manifests = Get-ChildItem -Path "$($package.InstallLocation)\*" -File -Include '*.dsc.resource.json','*.dsc.resource.yaml','*.dsc.resource.yml' -ErrorAction Ignore
4+
foreach ($manifest in $manifests) {
5+
@{ manifestPath = $manifest.FullName } | ConvertTo-Json -Compress
6+
}
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"$schema": "https://aka.ms/dsc/schemas/v3/bundled/resource/manifest.json",
3+
"type": "Microsoft.Windows.Appx/Discover",
4+
"version": "0.1.0",
5+
"description": "Discovers DSC resources packaged as Appx packages.",
6+
"discover": {
7+
"executable": "powershell",
8+
"args": [
9+
"-NoLogo",
10+
"-NonInteractive",
11+
"-NoProfile",
12+
"-Command",
13+
"./appx-discover.ps1"
14+
]
15+
}
16+
}

extensions/appx/appx.tests.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright (c) Microsoft Corporation.
2+
# Licensed under the MIT License.
3+
4+
Describe 'Tests for Appx resource discovery' -Skip:(!$IsWindows){
5+
It 'Should find DSC appx resources' {
6+
$out = dsc resource list | ConvertFrom-Json
7+
$LASTEXITCODE | Should -Be 0
8+
$found = $false
9+
foreach ($resource in $out) {
10+
if ($resource.directory.StartsWith("$env:ProgramFiles\WindowsApps\Microsoft.DesiredStateConfiguration-Private")) {
11+
$found = $true
12+
break
13+
}
14+
}
15+
$found | Should -Be $true
16+
}
17+
}

extensions/appx/copy_files.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
appx-discover.ps1
2+
appx.dsc.extension.json

0 commit comments

Comments
 (0)