Proposal: Configuration as resource
Maintainer antworten meist innerhalb von 2 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 38/100
- Issue-Typ
- Feature
- Klarheit
- Muss geklärt werden
- Aktivitätsstatus
- Ruhig
- Tech-Stack
- yaml
- Bereich
- infrastructure
Rechercherichtung
Das Issue nennt keine Dateien oder Tests. Beginne mit der Überprüfung der Ermittlung von Ressourcen für Konfigurationsdokumente und des zugehörigen Vorschlags #611, und verfolge anschließend die bestehende Arbeit an dsc config resolve. Für den Abschluss wäre ein abgestimmtes Design für wiederverwendbare Dokumente, die Parameterbehandlung, die Ermittlung von Ressourcen und die Versionierung sowie die Ressourcenerweiterung erforderlich.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary of the new feature / enhancement
As an infrastructure engineer,
I want to define a reusable configuration document that my coworkers can specify like a resource in their configuration documents,
So that we can provide an abstraction over a subset of configuration for readability, composability, and maintainability.
This feature would enable similar functionality for DSC as Puppet defined types, enabling users to define reusable "resources" in the form of a configuration document. This would let a user combine several related resource instances into a single definition that can be parameterized and used in different contexts.
In configuration management, users often find themselves reusing a few low-level resources repeatedly for different subsets of configuration. For example, ensuring a specific version of a package is installed, setting the service for that package, and providing some optional configuration overrides for it.
Proposed technical implementation details (optional)
We could extend the definition for a configuration document to indicate that the document is meant to be reusable as a resource. When a configuration document is used as a resource, it's subject to the normal semantics for discovery, versioning, and so on.
The following snippet shows an example of a hypothetical configuration document as a resource. The field names are placeholders for clarity.
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
manifest:
type: TailspinToys/Service
description: Installs and configures the TSToy service on Windows machines.
version: 1.2.3
author: TailspinToys
tags:
- tstoy
- Windows
parameters:
version:
description: Specifies the version of TSToy to ensure is installed.
type: string
defaultValue: "1.2.3"
packageSource:
description: Specifies the source from which to install the TSToy package.
type: string
defaultValue: winget
updateAutomatically:
description: Indicates whether TSToy should check for updates when it starts.
type: bool
defaultValue: true
updateFrequency:
description: Specifies how often TSToy should check for updates.
type: string
allowedValues:
- daily
- weekly
- monthly
defaultValue: daily
directive:
resourceDiscovery: duringDeployment
variables:
frequency:
daily: 1
weekly: 7
monthly: 30
resources:
- name: Install TSToy
type: Microsoft.WinGet/Package
properties:
version: "[parameters('version')]"
id: tstoy
source: "[parameters('packageSource')]"
- name: TSToy machine settings
type: TailspinToys.Service/Settings
properties:
scope: machine
updateAutomatically: "[parameters('updateAutomatically')]"
updateFrequency: >-
[tryGet(
variables('frequency'),
parameters('updateFrequency')
)]
dependsOn:
- "[resourceId('Microsoft.WinGet/Package','Install TSToy')]"
- name: Enable TSToy service
type: Microsoft.Windows/Service
properties:
name: tstoy
state: running
startMode: automatic
dependsOn:
- "[resourceId('TailspinToys.Service/Settings','TSToy machine settings')]"
In this example, the configuration-document-as-resource metadata is placed under the manifest field. Minimally, users need to give the document a fully qualified type name and version.
While this example is a little contrived, this resource uses a mix of built-in resources (Microsoft.Windows/Service), other public resources (Microsoft.WinGet/Package), and a package published by the same author (TailspinToys.Service/Settings, which is "actually" installed as part of the package). It shows how you can take a relatively complex set of resources to surface a neater resource surface for end users. The alternative option for people would be to develop a resource that handles all of these components together, but that's more fragile and many users won't want to fully author a resource to compose configuration at this relatively low level.
The following snippet shows an instance of this configuration-document resource in an actual configuration:
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
- name: Setup TSToy
type: TailspinToys/Service
properties:
updateAutomatically: true
updateFrequency: weekly
Considerations
- We can't perfectly replicate a resource instance schema from the parameter definitions - might be useful to support a
schemafield that applies to the parameters (either in themanifestfield or per-parameter) to clarify validation requirements. In the example above, theversionproperty is just a string that defaults to1.0.0. More correctly it should be a semantic version, but that isn't representable in the current data model. - Unless we add a field to enumerate operations, we have to infer available operations by inspecting the resources defined in the configuration.
- There are further potential complications, especially around using adapted resources, but I think they are resolvable.
- Enabling resources to be developed this way raises the importance of a
dsc config resolvecommand that "expands" the node graph to show the full set of resources that will be applied. - This proposal in some ways mirrors #611, though it's more limited - extendable resources enables you to do relatively complex processing and then hand off all or some of the actual system-modifying logic to another resource. In this model, you're limited to what you can express in a configuration document. I think this proposal still covers numerous use cases.
- Vorherrschende Sprache
- Rust
- Sterne
- 526
- Forks
- 76
- Ø Merge
- 4 T. 20 Std.
- Gemergte PRs (30 T.)
- 24
Entwicklungsumgebung
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus PowerShell/DSC
-
Issue-Enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 38/100
PowerShell/DSC#1729 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Feature Request: Support dsc functions in executable argsEvtl. vergeben @SteveL-MSFT hat das vor 5 Tagen übernommen. OffenIssue-Enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 62/100
PowerShell/DSC#1722 · 4 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Dev-UX Needs Triage
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
PowerShell/DSC#1694 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Issue-Enhancement Needs Triage
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 38/100
PowerShell/DSC#1683 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Issue-Enhancement Needs Triage
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
PowerShell/DSC#1673 ·
Maintainer antworten meist innerhalb von 2 Tagen
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
trezor/trezor-firmware#7997 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
smol-machines/smolvm#1489 · 1 Kommentar · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag