PowerShell / PowerShell/DSC

Resource and Canonical Properties use of null

Ouverte
#1,237 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Issue-Bug Need-Review
Langage dominant
Rust
Étoiles
526
Forks
76
Merge moyen
3 j 16 h
PR mergées (30 j)
24

Description

Prerequisites
  • Write a descriptive title.
  • Make sure you are able to repro it on the latest version
  • Search the existing issues.
Summary

There are built-in resources and canonical properties (_inDesiredState) that use null in addition to actual type of the property. Null should NOT be a valid type unless the property actually accepts null as a valid use case. By allowing null it can confuse users when we have auto-complete in BICEP and weakens the strongly validated schema.

JSON schema null and undefined properties are different.

https://json-schema.org/understanding-json-schema/reference/null

Excerpt:

It's important to remember that in JSON, null isn't equivalent to something being absent. See Required Properties for an example.

The mechanism to indicate a property is required or optional is by the use of the required property.

I understand that we're using nullable types so we can return only the properties that are actually defined instead of empty strings or false bools but it is not best practice.

Resources with Nullable Properties:

  1. Microsoft.DSC.Debug/Echo
    showSecrets: type: ["boolean", "null"]

  2. Microsoft.DSC.Transitional/PowerShellScript
    getScript: type: ["string", "null"]
    setScript: type: ["string", "null"]
    testScript: type: ["string", "null"]
    input: type: ["string", "boolean", "integer", "object", "array", "null"]
    output: type: ["array", "null"]
    _inDesiredState: type: ["boolean", "null"]

  3. Microsoft.DSC.Transitional/WindowsPowerShellScript
    getScript: type: ["string", "null"]
    setScript: type: ["string", "null"]
    testScript: type: ["string", "null"]
    input: type: ["string", "boolean", "integer", "object", "array", "null"]
    output: type: ["array", "null"]
    _inDesiredState: type: ["boolean", "null"]

  4. Microsoft.OpenSSH.SSHD/Windows
    shell: type: ["string", "null"]
    cmdOption: type: ["string", "null"]
    escapeArguments: type: ["boolean", "null"]

  5. Microsoft.Windows/RebootPending
    reasons: type: ["array", "null"]
    The entire object itself: type: ["object", "null"]

  6. Microsoft.Windows/Registry
    _metadata: anyOf: [{"$ref": "#/$defs/Metadata"}, {"type": "null"}]
    valueName: type: ["string", "null"]
    valueData: anyOf: [{"$ref": "#/$defs/RegistryValueData"}, {"type": "null"}]
    _exist: type: ["boolean", "null"]

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par examiner les schémas JSON des ressources DSC listées ainsi que la propriété canonique _inDesiredState, en utilisant la liste des ressources et des propriétés de l’issue comme périmètre. Vérifiez quelles propriétés acceptent réellement null plutôt que d’être simplement facultatives, puis validez les schémas obtenus par rapport à la sémantique documentée de JSON Schema et aux attentes de l’autocomplétion de Bicep. Le travail est terminé lorsque les types null injustifiés sont supprimés tout en conservant les valeurs nullable légitimes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
json
Domaine
tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.