From d43d7ddddb3d98136f582bb5be9a95d7bba3aa62 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sat, 25 Jul 2026 14:29:23 -0700 Subject: [PATCH 01/17] feat(tools): keep readOnly/deprecated/type/format/required through spec extraction Get-PfbSpecCapabilities threw away everything but a bare property name string when extracting request-body properties (Get-PfbSchemaPropertyNames, line 221 in the old code) and a query parameter's name (Get-PfbSpecCapabilities, line 265-266). That's the reason readOnly never survives into the capability map or the drift report today: the information is discarded at the very first extraction step, before it reaches anything downstream. Add Get-PfbSchemaPropertyDetails as the one schema walker (Get-PfbSchemaPropertyNames is now a thin wrapper over it -- nothing else in the repo calls the old function, so a second parallel allOf/$ref walker would only drift from the first). It resolves the same allOf/$ref chains at the *schema* level and keeps each property's own node instead of discarding it, exposing Name/ReadOnly/Deprecated/Type/Format/Required. Deliberately does NOT follow a property's own "$ref" to look for these attributes (only its own directly-declared keys). Resolving into it is the natural implementation choice, and it changes the answer: `direction` on POST /file-system-replica-links is a bare $ref to `_direction`, which is itself readOnly, but `direction`'s own node has no sibling readOnly key. Following it would flip `direction` from an actionable gap to read-only and shift the fb2.27 baseline from 226 read-only / 402 addable / 33 enum-ready to 227 / 401 / 32 -- the only field on the whole surface where it matters, so it's easy to get wrong silently. Get-PfbSpecCapabilities gains ReadOnlyBodyProperties, DeprecatedBodyProperties, BodyPropertyDetails, and ParameterComponents (a { paramName: componentName } map recovered from each parameter's own "$ref" string, not from the resolved parameter object). ParameterComponents deliberately covers the same parameter set as the existing Parameters output (all `in:` locations), not just query params, so a future consumer can zip them together per endpoint. An inline parameter with no $ref simply has no entry (never emitted as null/'', indistinguishable from a bug downstream); a parameter name that resolves to two different components on one operation (not expected -- 0 occurrences across all of fb2.27) is reported via Write-Warning and resolved deterministically to the alphabetically-first component. All of this is additive: Parameters/BodyProperties keep their existing name, type, and contents unchanged, and every existing test in PfbSpecTools.Tests.ps1 passes with zero edits. Verified against tools/specs/fb2.27.json: PATCH /certificates's read-only set is exactly {issued_by, issued_to, realms, status, valid_from, valid_to}; GET /file-systems's context_names parameter resolves to component Context_names_get, PATCH /file-systems's to Context_names. Co-Authored-By: Claude Opus 5 (1M context) --- Tests/PfbSpecTools.Tests.ps1 | 164 ++++++++++++++++++++++- tools/lib/PfbSpecTools.ps1 | 243 +++++++++++++++++++++++++++++++---- 2 files changed, 383 insertions(+), 24 deletions(-) diff --git a/Tests/PfbSpecTools.Tests.ps1 b/Tests/PfbSpecTools.Tests.ps1 index 7f845aa..ec44f30 100644 --- a/Tests/PfbSpecTools.Tests.ps1 +++ b/Tests/PfbSpecTools.Tests.ps1 @@ -164,6 +164,106 @@ Describe 'Get-PfbSchemaPropertyNames' { } } +Describe 'Get-PfbSchemaPropertyDetails' { + BeforeAll { + $script:testSpec = [PSCustomObject]@{ + components = [PSCustomObject]@{ + schemas = [PSCustomObject]@{ + # PIN fixture: itself readOnly, but only reachable through a property + # that is a BARE $ref (no sibling keys) -- must not leak through. + _readOnlyLeaf = [PSCustomObject]@{ + type = 'string' + readOnly = $true + } + BaseResource = [PSCustomObject]@{ + type = 'object' + required = @('id') + properties = [PSCustomObject]@{ + id = [PSCustomObject]@{ type = 'string' } + name = [PSCustomObject]@{ type = 'string'; format = 'name-format' } + } + } + ResourcePatch = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ '$ref' = '#/components/schemas/BaseResource' } + [PSCustomObject]@{ + type = 'object' + required = @('enabled') + properties = [PSCustomObject]@{ + enabled = [PSCustomObject]@{ type = 'boolean'; readOnly = $true } + status = [PSCustomObject]@{ type = 'string'; deprecated = $true } + ref_only = [PSCustomObject]@{ '$ref' = '#/components/schemas/_readOnlyLeaf' } + } + } + ) + } + # Merge-rule fixture: 'shared' declared in two allOf branches of the + # SAME schema, read-only in only one of them. + MergeConflict = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ shared = [PSCustomObject]@{ type = 'string' } } + } + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ shared = [PSCustomObject]@{ type = 'string'; readOnly = $true } } + } + ) + } + } + } + } + } + + It 'resolves ReadOnly and Deprecated through an allOf/$ref chain' { + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'enabled').ReadOnly | Should -Be $true + ($details | Where-Object Name -eq 'status').Deprecated | Should -Be $true + ($details | Where-Object Name -eq 'id').ReadOnly | Should -Be $false + } + + It 'merge rule: a property marked read-only in one allOf branch and not another comes out read-only' { + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/MergeConflict' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'shared').ReadOnly | Should -Be $true + } + + It 'PIN: does not follow a property''s own $ref to a read-only-bearing schema' { + # ref_only's own node is a bare '$ref' to _readOnlyLeaf, which IS readOnly:true. + # Resolving into it would (wrongly) report ref_only as read-only. + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'ref_only').ReadOnly | Should -Be $false + } + + It 'populates Type and Format from the property''s own node' { + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/BaseResource' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'name').Type | Should -Be 'string' + ($details | Where-Object Name -eq 'name').Format | Should -Be 'name-format' + } + + It 'collects Required across allOf branches' { + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'id').Required | Should -Be $true + ($details | Where-Object Name -eq 'enabled').Required | Should -Be $true + ($details | Where-Object Name -eq 'name').Required | Should -Be $false + ($details | Where-Object Name -eq 'status').Required | Should -Be $false + } + + It 'returns an empty list for a null schema' { + Get-PfbSchemaPropertyDetails -Schema $null -Spec $testSpec | Should -BeNullOrEmpty + } +} + Describe 'Get-PfbSpecCapabilities' { BeforeAll { $script:testSpec = [PSCustomObject]@{ @@ -173,6 +273,9 @@ Describe 'Get-PfbSpecCapabilities' { get = [PSCustomObject]@{ parameters = @( [PSCustomObject]@{ '$ref' = '#/components/parameters/Filter' } + # Inline, no $ref -- must contribute to Parameters but have no + # entry in ParameterComponents at all (not null/''). + [PSCustomObject]@{ name = 'raw_only'; in = 'query' } ) } post = [PSCustomObject]@{ @@ -193,7 +296,12 @@ Describe 'Get-PfbSpecCapabilities' { schemas = [PSCustomObject]@{ WidgetPost = [PSCustomObject]@{ type = 'object' - properties = [PSCustomObject]@{ name = @{ type = 'string' }; color = @{ type = 'string' } } + properties = [PSCustomObject]@{ + name = [PSCustomObject]@{ type = 'string' } + color = [PSCustomObject]@{ type = 'string' } + id = [PSCustomObject]@{ type = 'string'; readOnly = $true } + status = [PSCustomObject]@{ type = 'string'; deprecated = $true } + } } } } @@ -225,6 +333,60 @@ Describe 'Get-PfbSpecCapabilities' { $postCap.BodyProperties | Should -Contain 'color' } + It 'populates BodyPropertyDetails for a mix of read-only, deprecated and plain properties' { + $caps = Get-PfbSpecCapabilities -Spec $testSpec + $postCap = $caps | Where-Object Method -eq 'POST' + $postCap.BodyPropertyDetails.Count | Should -Be 4 + ($postCap.BodyPropertyDetails | Where-Object Name -eq 'name').ReadOnly | Should -Be $false + ($postCap.BodyPropertyDetails | Where-Object Name -eq 'id').ReadOnly | Should -Be $true + ($postCap.BodyPropertyDetails | Where-Object Name -eq 'status').Deprecated | Should -Be $true + } + + It 'projects ReadOnlyBodyProperties and DeprecatedBodyProperties' { + $caps = Get-PfbSpecCapabilities -Spec $testSpec + $postCap = $caps | Where-Object Method -eq 'POST' + $postCap.ReadOnlyBodyProperties | Should -Be @('id') + $postCap.DeprecatedBodyProperties | Should -Be @('status') + } + + It 'populates ParameterComponents with the $ref''d parameter''s component name' { + $caps = Get-PfbSpecCapabilities -Spec $testSpec + $getCap = $caps | Where-Object Method -eq 'GET' + $getCap.ParameterComponents['filter'] | Should -Be 'Filter' + } + + It 'omits the ParameterComponents key entirely for an inline (no $ref) parameter' { + $caps = Get-PfbSpecCapabilities -Spec $testSpec + $getCap = $caps | Where-Object Method -eq 'GET' + $getCap.Parameters | Should -Contain 'raw_only' + $getCap.ParameterComponents.ContainsKey('raw_only') | Should -Be $false + } + + It 'deterministically resolves (and warns on) a parameter name that resolves to two different components' { + $conflictSpec = [PSCustomObject]@{ + paths = [PSCustomObject]@{ + '/api/9.9/conflict' = [PSCustomObject]@{ + get = [PSCustomObject]@{ + parameters = @( + [PSCustomObject]@{ '$ref' = '#/components/parameters/ZParam' } + [PSCustomObject]@{ '$ref' = '#/components/parameters/AParam' } + ) + } + } + } + components = [PSCustomObject]@{ + parameters = [PSCustomObject]@{ + ZParam = [PSCustomObject]@{ name = 'dup'; in = 'query' } + AParam = [PSCustomObject]@{ name = 'dup'; in = 'query' } + } + } + } + + $caps = Get-PfbSpecCapabilities -Spec $conflictSpec -WarningVariable warnings -WarningAction SilentlyContinue + $caps[0].ParameterComponents['dup'] | Should -Be 'AParam' + $warnings | Should -Not -BeNullOrEmpty + } + It 'returns an empty list for a spec with no paths' { $emptySpec = [PSCustomObject]@{ paths = [PSCustomObject]@{} } Get-PfbSpecCapabilities -Spec $emptySpec | Should -BeNullOrEmpty diff --git a/tools/lib/PfbSpecTools.ps1 b/tools/lib/PfbSpecTools.ps1 index 69082d9..92c82a3 100644 --- a/tools/lib/PfbSpecTools.ps1 +++ b/tools/lib/PfbSpecTools.ps1 @@ -188,47 +188,181 @@ function Resolve-PfbRef { return $current } -function Get-PfbSchemaPropertyNames { +function Get-PfbSchemaDetailsWalk { <# .SYNOPSIS - Returns the set of top-level property names for a (possibly $ref'd / allOf'd) - request-body schema. + Internal recursive helper for Get-PfbSchemaPropertyDetails. Not intended to be + called directly. .DESCRIPTION - Resolves $ref chains and merges properties across "allOf" branches (the common - pattern in these specs for e.g. "Patch: allOf [BaseResource, {extra - properties}]"). Does not attempt oneOf/anyOf — not used for FlashBlade request - bodies as of the versions surveyed. + Resolves $ref/allOf chains at the *schema* level (exactly like the old + Get-PfbSchemaPropertyNames did) and accumulates, per property name, the list of + raw (NOT further $ref-resolved) property schema nodes seen for it, plus the union + of every visited schema node's own "required" array. Mutates the two accumulator + arguments in place; both are reference types (Dictionary/HashSet) so no [ref] is + needed. #> [CmdletBinding()] param( - [Parameter(Mandatory)] [AllowNull()] - $Schema, + $Node, [Parameter(Mandatory)] $Spec, - [int]$MaxDepth = 8 + [int]$MaxDepth, + + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]$PropertyNodesByName, + + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [System.Collections.Generic.HashSet[string]]$RequiredNames ) - if ($null -eq $Schema -or $MaxDepth -le 0) { return @() } + if ($null -eq $Node -or $MaxDepth -le 0) { return } - $resolved = Resolve-PfbRef -Node $Schema -Spec $Spec + $resolved = Resolve-PfbRef -Node $Node -Spec $Spec + if ($null -eq $resolved) { return } - $names = [System.Collections.Generic.List[string]]::new() + if ($resolved.PSObject.Properties.Name -contains 'required' -and $resolved.required) { + foreach ($requiredName in $resolved.required) { [void]$RequiredNames.Add($requiredName) } + } if ($resolved.PSObject.Properties.Name -contains 'properties' -and $resolved.properties) { - $names.AddRange([string[]]$resolved.properties.PSObject.Properties.Name) + foreach ($propName in $resolved.properties.PSObject.Properties.Name) { + if (-not $PropertyNodesByName.ContainsKey($propName)) { + $PropertyNodesByName[$propName] = [System.Collections.Generic.List[object]]::new() + } + # Deliberately store the RAW property node (no Resolve-PfbRef here) -- see + # the PIN in Get-PfbSchemaPropertyDetails's help for why. + $PropertyNodesByName[$propName].Add($resolved.properties.$propName) + } } if ($resolved.PSObject.Properties.Name -contains 'allOf' -and $resolved.allOf) { foreach ($branch in $resolved.allOf) { - $branchNames = Get-PfbSchemaPropertyNames -Schema $branch -Spec $Spec -MaxDepth ($MaxDepth - 1) - foreach ($n in $branchNames) { $names.Add($n) } + Get-PfbSchemaDetailsWalk -Node $branch -Spec $Spec -MaxDepth ($MaxDepth - 1) ` + -PropertyNodesByName $PropertyNodesByName -RequiredNames $RequiredNames } } +} + +function Get-PfbSchemaPropertyDetails { + <# + .SYNOPSIS + Returns per-top-level-property schema details (ReadOnly, Deprecated, Type, Format, + Required) for a (possibly $ref'd / allOf'd) request-body schema. + .DESCRIPTION + Walks the same $ref/allOf resolution Get-PfbSchemaPropertyNames always has (the + common "Patch: allOf [BaseResource, {extra properties}]" pattern in these + specs), but keeps each property's own schema node instead of discarding it down to + a bare name. This is now the single source of truth for that walk -- + Get-PfbSchemaPropertyNames is a thin wrapper over it (one walker, not two, since + nothing else in the repo needs a second one). + + PIN -- do NOT follow a property's own "$ref" (or dive into an "allOf" nested + *inside* the property node) to look for ReadOnly/Deprecated/Type/Format: only the + property node's own directly-declared keys are read. Example: + `direction: { $ref: '#/components/schemas/_direction' }` on + `_replicaLinkBuiltIn` -- `_direction` itself is `readOnly: true`, but `direction`'s + own node has no sibling `readOnly` key. Resolving into it would flip `direction` to + read-only and move it out of the actionable-gap list; measured against fb2.27 that + changes the baseline split from 226 read-only / 402 addable / 33 enum-ready to + 227 / 401 / 32 -- the only field on the whole surface where it matters. This is the + same "top-level readOnly only, no recursive nested-schema analysis" rule applied to + one more level: it already governs at the schema level (no recursing into a + property's *referenced* schema body), this just states it applies to the property + node's own attributes too, not merely its `properties` collection. + + Merge rule across "allOf" branches of the *schema itself* (not the property): if a + property with the same name is declared by more than one branch, ReadOnly and + Deprecated are OR'd (any branch marking it true wins) and Required is the union of + every visited node's own `required: [...]` array. Type/Format use the first + non-null value encountered in traversal order. Verified: 0 real name collisions + across allOf branches in all of fb2.27, so this only matters for a future spec. + .OUTPUTS + [PSCustomObject]@{ Name; ReadOnly; Deprecated; Type; Format; Required } per + top-level property, sorted by Name for deterministic ordering (hashtable/dictionary + enumeration order is not guaranteed stable across processes). + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowNull()] + $Schema, + + [Parameter(Mandatory)] + $Spec, + + [int]$MaxDepth = 8 + ) + + if ($null -eq $Schema -or $MaxDepth -le 0) { return @() } - return ($names | Select-Object -Unique) + # Keyed by property name -- an API field name. Deliberately a typed Dictionary (not a + # plain Hashtable): a field literally named "keys"/"count"/"values" would otherwise + # shadow real member access on a Hashtable (a live bug elsewhere in this codebase). + $propertyNodesByName = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]::new() + $requiredNames = [System.Collections.Generic.HashSet[string]]::new() + + Get-PfbSchemaDetailsWalk -Node $Schema -Spec $Spec -MaxDepth $MaxDepth ` + -PropertyNodesByName $propertyNodesByName -RequiredNames $requiredNames + + $details = [System.Collections.Generic.List[object]]::new() + foreach ($name in $propertyNodesByName.get_Keys()) { + $nodes = $propertyNodesByName[$name] + $readOnly = $false + $deprecated = $false + $type = $null + $format = $null + foreach ($node in $nodes) { + if ($null -eq $node) { continue } + if ($node.PSObject.Properties.Name -contains 'readOnly' -and $node.readOnly) { $readOnly = $true } + if ($node.PSObject.Properties.Name -contains 'deprecated' -and $node.deprecated) { $deprecated = $true } + if ($null -eq $type -and $node.PSObject.Properties.Name -contains 'type') { $type = $node.type } + if ($null -eq $format -and $node.PSObject.Properties.Name -contains 'format') { $format = $node.format } + } + + $details.Add([PSCustomObject]@{ + Name = $name + ReadOnly = $readOnly + Deprecated = $deprecated + Type = $type + Format = $format + Required = $requiredNames.Contains($name) + }) + } + + return @($details | Sort-Object Name) +} + +function Get-PfbSchemaPropertyNames { + <# + .SYNOPSIS + Returns the set of top-level property names for a (possibly $ref'd / allOf'd) + request-body schema. + .DESCRIPTION + Thin wrapper over Get-PfbSchemaPropertyDetails (decision: one schema walker, not + two -- this function's only callers are Get-PfbSpecCapabilities, in this same + file, and its own Pester tests; nothing else in the repo needs a second, parallel + allOf/$ref walker that would drift from the first). Public contract and existing + tests are unchanged: still returns bare, de-duplicated property name strings. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowNull()] + $Schema, + + [Parameter(Mandatory)] + $Spec, + + [int]$MaxDepth = 8 + ) + + return @(Get-PfbSchemaPropertyDetails -Schema $Schema -Spec $Spec -MaxDepth $MaxDepth | + Select-Object -ExpandProperty Name | Select-Object -Unique) } function Get-PfbSpecCapabilities { @@ -236,9 +370,34 @@ function Get-PfbSpecCapabilities { .SYNOPSIS Flattens a single FlashBlade OpenAPI document into a list of capability records: one per (HTTP method, normalized path), each with its parameter names and - request-body top-level property names. + request-body top-level property names/details. + .DESCRIPTION + Additive outputs alongside the original Parameters/BodyProperties (unchanged in + name, type, and contents): + - BodyPropertyDetails: the full per-property detail records (Name, ReadOnly, + Deprecated, Type, Format, Required) from Get-PfbSchemaPropertyDetails. + - ReadOnlyBodyProperties / DeprecatedBodyProperties: string[] convenience + projections of the above, sorted for determinism. + - ParameterComponents: a { paramName: componentName } map + (System.Collections.Generic.Dictionary[string,string]) recovered from each + query/path/header parameter's own "$ref" (e.g. + "#/components/parameters/Context_names_get" -> "Context_names_get"), i.e. the + resolved parameter's component identity, not anything on the resolved object + itself. Covers the SAME parameter set as Parameters above (all `in:` locations, + not filtered to query) so the two stay zippable per endpoint. A parameter + declared inline with no "$ref" contributes no entry -- the key is omitted + entirely (never emitted as $null/'' , which would be indistinguishable from a + bug downstream). If the same parameter name resolves to more than one distinct + component on a single operation (not expected -- 0 occurrences across all of + fb2.27), a warning is emitted and the alphabetically-first component name wins, + deterministically. .OUTPUTS - [PSCustomObject]@{ Method; Path; Parameters = string[]; BodyProperties = string[] } + [PSCustomObject]@{ + Method; Path; Parameters = string[]; BodyProperties = string[]; + BodyPropertyDetails = object[]; ReadOnlyBodyProperties = string[]; + DeprecatedBodyProperties = string[]; + ParameterComponents = System.Collections.Generic.Dictionary[string,string] + } #> [CmdletBinding()] param( @@ -259,30 +418,68 @@ function Get-PfbSpecCapabilities { $op = $pathItem.$methodName $paramNames = [System.Collections.Generic.List[string]]::new() + # name -> candidate component names (collected raw; resolved to one winner + # after the loop so a same-name collision can be detected and reported + # rather than silently overwritten by iteration order). + $paramComponentCandidates = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[string]]]::new() if ($op.parameters) { foreach ($p in $op.parameters) { $resolved = Resolve-PfbRef -Node $p -Spec $Spec if ($resolved -and $resolved.PSObject.Properties.Name -contains 'name' -and $resolved.name) { $paramNames.Add($resolved.name) + + # Component identity comes from the $ref STRING on the unresolved + # node $p (e.g. '#/components/parameters/Context_names_get' -> + # 'Context_names_get') -- never from anything on $resolved. + if ($p.PSObject.Properties.Name -contains '$ref' -and $p.'$ref') { + $componentName = ($p.'$ref' -split '/')[-1] + if (-not $paramComponentCandidates.ContainsKey($resolved.name)) { + $paramComponentCandidates[$resolved.name] = [System.Collections.Generic.List[string]]::new() + } + $paramComponentCandidates[$resolved.name].Add($componentName) + } } } } + $paramComponents = [System.Collections.Generic.Dictionary[string, string]]::new() + foreach ($paramName in $paramComponentCandidates.get_Keys()) { + $candidates = @($paramComponentCandidates[$paramName] | Select-Object -Unique) + if ($candidates.Count -gt 1) { + $sortedCandidates = @($candidates | Sort-Object) + Write-Warning ("Get-PfbSpecCapabilities: parameter '{0}' on {1} {2} resolves to multiple different components ({3}) -- this should not occur; deterministically keeping '{4}' (alphabetically first)." -f ` + $paramName, $methodName.ToUpper(), $normalizedPath, ($sortedCandidates -join ', '), $sortedCandidates[0]) + $paramComponents[$paramName] = $sortedCandidates[0] + } + else { + $paramComponents[$paramName] = $candidates[0] + } + } + $bodyPropNames = @() + $bodyPropertyDetails = @() if ($op.requestBody -and $op.requestBody.content) { $mediaTypes = $op.requestBody.content.PSObject.Properties.Name $mediaKey = if ($mediaTypes -contains 'application/json') { 'application/json' } else { $mediaTypes | Select-Object -First 1 } if ($mediaKey) { $mediaSchema = $op.requestBody.content.$mediaKey.schema $bodyPropNames = Get-PfbSchemaPropertyNames -Schema $mediaSchema -Spec $Spec + $bodyPropertyDetails = @(Get-PfbSchemaPropertyDetails -Schema $mediaSchema -Spec $Spec) } } + $readOnlyBodyProperties = @($bodyPropertyDetails | Where-Object ReadOnly | ForEach-Object Name | Sort-Object) + $deprecatedBodyProperties = @($bodyPropertyDetails | Where-Object Deprecated | ForEach-Object Name | Sort-Object) + $results.Add([PSCustomObject]@{ - Method = $methodName.ToUpper() - Path = $normalizedPath - Parameters = ($paramNames | Select-Object -Unique) - BodyProperties = $bodyPropNames + Method = $methodName.ToUpper() + Path = $normalizedPath + Parameters = ($paramNames | Select-Object -Unique) + BodyProperties = $bodyPropNames + BodyPropertyDetails = $bodyPropertyDetails + ReadOnlyBodyProperties = $readOnlyBodyProperties + DeprecatedBodyProperties = $deprecatedBodyProperties + ParameterComponents = $paramComponents }) } } From b1ca0ac243f5b53af6bcc2366dbee0e464880393 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sat, 25 Jul 2026 14:57:00 -0700 Subject: [PATCH 02/17] fix(tools): restore BodyProperties traversal order, tighten review findings Code review of the Task 2 spec-details walker found six issues. Important 1 (controller ruling on a plan conflict -- byte-identical wins for BodyProperties): routing Get-PfbSchemaPropertyNames through Get-PfbSchemaPropertyDetails's now-sorted output flipped BodyProperties from spec-traversal order to alphabetical. Set contents are identical (0 differences over all 632 fb2.27 operations), but tools/Build-PfbCapabilityMap.ps1 inserts into an [ordered]@{} in traversal order, and 124 of 632 endpoints in the committed Data/PfbCapabilityMap.json already have non-alphabetical bodyProperties -- sorting would have churned ~1100 keys in a tracked file Task 3 is about to touch, burying its additive change in reordering noise. Fixed by extracting the shared walk setup into Get-PfbSchemaPropertyWalkAccumulators: Get-PfbSchemaPropertyDetails still sorts its own (detail-record) output by Name, but Get-PfbSchemaPropertyNames now reads straight off the Dictionary's traversal-order keys instead of piping through the sorted details. Re-verified byte-identical (including order) against the pre-Task-2 implementation across all 632 fb2.27 operations, plus confirmed the scalar-vs-array return shape (single-property bodies still return a plain String, not Object[]) -- 24 real fb2.27 operations exercise that shape in both old and new code. Important 2: the sort-invariant on Get-PfbSchemaPropertyDetails's output had no test -- deleting Sort-Object Name still passed 35/35. Added an assertion on the ResourcePatch fixture (traversal order id/name/enabled/status/ref_only, not alphabetical, so it actually bites), plus a companion assertion pinning Get-PfbSchemaPropertyNames to that SAME fixture's traversal order -- the pair is what stops either ordering behaviour silently flipping back. Both mutation-tested (each fails alone without affecting the other, confirming they're independent). Minor 3: ParameterComponents is populated in explicitly sorted-key order now, rather than relying on Dictionary enumeration order as an implicit (if reliable) .NET implementation detail -- it gets serialized into a tracked JSON file downstream. Minor 4: added a comment on the readOnly/deprecated/type/format reads explaining why every test fixture for this function must use PSCustomObject, never @{} -- PSObject.Properties.Name on a plain Hashtable exposes the dictionary's own members (Keys, Values, Count, ...), never a real key named "readOnly". Minor 5: strengthened the parameter-collision test's warning assertion from Should -Not -BeNullOrEmpty (satisfied by any warning at all) to -Match 'multiple different components'. Mutation-tested: the old assertion would have passed even with an unrelated warning message; the new one catches it. Minor 6: renamed Get-PfbSchemaDetailsWalk to Add-PfbSchemaPropertyNodes -- it used a "Get" verb but returns nothing, mutating its two accumulator arguments in place. Co-Authored-By: Claude Opus 5 (1M context) --- Tests/PfbSpecTools.Tests.ps1 | 22 ++++++- tools/lib/PfbSpecTools.ps1 | 121 +++++++++++++++++++++++++++-------- 2 files changed, 117 insertions(+), 26 deletions(-) diff --git a/Tests/PfbSpecTools.Tests.ps1 b/Tests/PfbSpecTools.Tests.ps1 index ec44f30..3dd3f73 100644 --- a/Tests/PfbSpecTools.Tests.ps1 +++ b/Tests/PfbSpecTools.Tests.ps1 @@ -262,6 +262,26 @@ Describe 'Get-PfbSchemaPropertyDetails' { It 'returns an empty list for a null schema' { Get-PfbSchemaPropertyDetails -Schema $null -Spec $testSpec | Should -BeNullOrEmpty } + + It 'sorts its output by Name regardless of traversal order (the sort invariant)' { + # ResourcePatch's declaration/traversal order is id, name, enabled, status, ref_only -- + # deliberately NOT alphabetical, so this assertion actually exercises the sort. + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + @($details.Name) | Should -Be (@($details.Name) | Sort-Object) + } + + It 'Get-PfbSchemaPropertyNames (the wrapper) returns TRAVERSAL order on the same fixture, NOT sorted' { + # Companion to the sort-invariant test above: Get-PfbSchemaPropertyDetails sorts, + # Get-PfbSchemaPropertyNames deliberately does not (controller ruling -- see that + # function's help). Pinning both on the same non-alphabetical fixture is what stops + # either behaviour silently flipping later. + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $names = Get-PfbSchemaPropertyNames -Schema $schema -Spec $testSpec + + @($names) | Should -Be @('id', 'name', 'enabled', 'status', 'ref_only') + } } Describe 'Get-PfbSpecCapabilities' { @@ -384,7 +404,7 @@ Describe 'Get-PfbSpecCapabilities' { $caps = Get-PfbSpecCapabilities -Spec $conflictSpec -WarningVariable warnings -WarningAction SilentlyContinue $caps[0].ParameterComponents['dup'] | Should -Be 'AParam' - $warnings | Should -Not -BeNullOrEmpty + ($warnings -join ' ') | Should -Match 'multiple different components' } It 'returns an empty list for a spec with no paths' { diff --git a/tools/lib/PfbSpecTools.ps1 b/tools/lib/PfbSpecTools.ps1 index 92c82a3..8ade653 100644 --- a/tools/lib/PfbSpecTools.ps1 +++ b/tools/lib/PfbSpecTools.ps1 @@ -188,18 +188,22 @@ function Resolve-PfbRef { return $current } -function Get-PfbSchemaDetailsWalk { +function Add-PfbSchemaPropertyNodes { <# .SYNOPSIS - Internal recursive helper for Get-PfbSchemaPropertyDetails. Not intended to be - called directly. + Internal recursive helper for Get-PfbSchemaPropertyWalkAccumulators. Not intended to + be called directly. (Uses the "Add" verb, not "Get", because it returns nothing -- + it mutates its two accumulator arguments in place.) .DESCRIPTION Resolves $ref/allOf chains at the *schema* level (exactly like the old Get-PfbSchemaPropertyNames did) and accumulates, per property name, the list of raw (NOT further $ref-resolved) property schema nodes seen for it, plus the union of every visited schema node's own "required" array. Mutates the two accumulator arguments in place; both are reference types (Dictionary/HashSet) so no [ref] is - needed. + needed. $PropertyNodesByName's key ENUMERATION ORDER is first-seen/traversal order + (insertion order on a Dictionary[TKey,TValue] with no removals) -- callers that care + about ordering (Get-PfbSchemaPropertyNames does; Get-PfbSchemaPropertyDetails + deliberately re-sorts instead) rely on that. #> [CmdletBinding()] param( @@ -242,12 +246,59 @@ function Get-PfbSchemaDetailsWalk { if ($resolved.PSObject.Properties.Name -contains 'allOf' -and $resolved.allOf) { foreach ($branch in $resolved.allOf) { - Get-PfbSchemaDetailsWalk -Node $branch -Spec $Spec -MaxDepth ($MaxDepth - 1) ` + Add-PfbSchemaPropertyNodes -Node $branch -Spec $Spec -MaxDepth ($MaxDepth - 1) ` -PropertyNodesByName $PropertyNodesByName -RequiredNames $RequiredNames } } } +function Get-PfbSchemaPropertyWalkAccumulators { + <# + .SYNOPSIS + Internal: runs Add-PfbSchemaPropertyNodes once over $Schema and returns its two + accumulators. Not intended to be called directly. + .DESCRIPTION + Shared setup for both Get-PfbSchemaPropertyDetails (reports property DETAILS, sorted + by Name for a stable, deterministic OUTPUT ORDER) and Get-PfbSchemaPropertyNames + (reports bare NAMES, in first-seen/traversal order -- see that function's help for + why the two deliberately differ). One schema walker (Add-PfbSchemaPropertyNodes), one + setup path -- this function exists so that shared setup isn't duplicated between the + two callers. + .OUTPUTS + [PSCustomObject]@{ + PropertyNodesByName = Dictionary[string, List[object]] # traversal order + RequiredNames = HashSet[string] + } + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowNull()] + $Schema, + + [Parameter(Mandatory)] + $Spec, + + [int]$MaxDepth = 8 + ) + + # Keyed by property name -- an API field name. Deliberately a typed Dictionary (not a + # plain Hashtable): a field literally named "keys"/"count"/"values" would otherwise + # shadow real member access on a Hashtable (a live bug elsewhere in this codebase). + $propertyNodesByName = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]::new() + $requiredNames = [System.Collections.Generic.HashSet[string]]::new() + + if ($null -ne $Schema -and $MaxDepth -gt 0) { + Add-PfbSchemaPropertyNodes -Node $Schema -Spec $Spec -MaxDepth $MaxDepth ` + -PropertyNodesByName $propertyNodesByName -RequiredNames $requiredNames + } + + return [PSCustomObject]@{ + PropertyNodesByName = $propertyNodesByName + RequiredNames = $requiredNames + } +} + function Get-PfbSchemaPropertyDetails { <# .SYNOPSIS @@ -283,8 +334,9 @@ function Get-PfbSchemaPropertyDetails { across allOf branches in all of fb2.27, so this only matters for a future spec. .OUTPUTS [PSCustomObject]@{ Name; ReadOnly; Deprecated; Type; Format; Required } per - top-level property, sorted by Name for deterministic ordering (hashtable/dictionary - enumeration order is not guaranteed stable across processes). + top-level property, sorted by Name for deterministic OUTPUT ordering (this is + distinct from Get-PfbSchemaPropertyNames, which intentionally preserves traversal + order instead -- see that function's help). #> [CmdletBinding()] param( @@ -298,16 +350,9 @@ function Get-PfbSchemaPropertyDetails { [int]$MaxDepth = 8 ) - if ($null -eq $Schema -or $MaxDepth -le 0) { return @() } - - # Keyed by property name -- an API field name. Deliberately a typed Dictionary (not a - # plain Hashtable): a field literally named "keys"/"count"/"values" would otherwise - # shadow real member access on a Hashtable (a live bug elsewhere in this codebase). - $propertyNodesByName = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]::new() - $requiredNames = [System.Collections.Generic.HashSet[string]]::new() - - Get-PfbSchemaDetailsWalk -Node $Schema -Spec $Spec -MaxDepth $MaxDepth ` - -PropertyNodesByName $propertyNodesByName -RequiredNames $requiredNames + $walk = Get-PfbSchemaPropertyWalkAccumulators -Schema $Schema -Spec $Spec -MaxDepth $MaxDepth + $propertyNodesByName = $walk.PropertyNodesByName + $requiredNames = $walk.RequiredNames $details = [System.Collections.Generic.List[object]]::new() foreach ($name in $propertyNodesByName.get_Keys()) { @@ -318,6 +363,14 @@ function Get-PfbSchemaPropertyDetails { $format = $null foreach ($node in $nodes) { if ($null -eq $node) { continue } + # $node.PSObject.Properties.Name -contains 'readOnly' only finds a REAL property + # literally named 'readOnly' when $node is a PSCustomObject -- exactly what + # ConvertFrom-Json always produces for a real spec. On a plain Hashtable/@{} + # (easy to reach for in an ad hoc test fixture), PSObject.Properties.Name instead + # exposes the DICTIONARY's own members (Keys, Values, Count, ...) and will never + # find a key named 'readOnly', no matter what the hashtable actually contains. + # Every fixture for this function must use [PSCustomObject], never @{}, for + # exactly this reason. if ($node.PSObject.Properties.Name -contains 'readOnly' -and $node.readOnly) { $readOnly = $true } if ($node.PSObject.Properties.Name -contains 'deprecated' -and $node.deprecated) { $deprecated = $true } if ($null -eq $type -and $node.PSObject.Properties.Name -contains 'type') { $type = $node.type } @@ -343,11 +396,24 @@ function Get-PfbSchemaPropertyNames { Returns the set of top-level property names for a (possibly $ref'd / allOf'd) request-body schema. .DESCRIPTION - Thin wrapper over Get-PfbSchemaPropertyDetails (decision: one schema walker, not - two -- this function's only callers are Get-PfbSpecCapabilities, in this same - file, and its own Pester tests; nothing else in the repo needs a second, parallel - allOf/$ref walker that would drift from the first). Public contract and existing - tests are unchanged: still returns bare, de-duplicated property name strings. + Shares its walk with Get-PfbSchemaPropertyDetails via + Get-PfbSchemaPropertyWalkAccumulators (decision: one schema walker, not two -- this + function's only callers are Get-PfbSpecCapabilities, in this same file, and its own + Pester tests; nothing else in the repo needs a second, parallel allOf/$ref walker + that would drift from the first). Public contract and existing tests are unchanged: + still returns bare, de-duplicated property name strings. + + Deliberately returns names in TRAVERSAL order (== Dictionary insertion order), NOT + sorted like Get-PfbSchemaPropertyDetails's output is. Controller ruling: this + function feeds tools/Build-PfbCapabilityMap.ps1's BodyProperties, which inserts into + an [ordered]@{} in exactly this order, and 124 of 632 endpoints in the committed + Data/PfbCapabilityMap.json already have non-alphabetical bodyProperties -- sorting + here would churn ~1100 keys in a tracked file for zero behavioural benefit, burying + a later additive change in reordering noise. This is NOT a determinism regression: + the randomization hazard this codebase guards against is Hashtable/@{} ENUMERATION + order (a per-process randomized hash seed), not a Dictionary[TKey,TValue]'s + insertion-order enumeration, which is stable here (no removals ever occur). Do not + "fix" this back to Sort-Object. #> [CmdletBinding()] param( @@ -361,8 +427,8 @@ function Get-PfbSchemaPropertyNames { [int]$MaxDepth = 8 ) - return @(Get-PfbSchemaPropertyDetails -Schema $Schema -Spec $Spec -MaxDepth $MaxDepth | - Select-Object -ExpandProperty Name | Select-Object -Unique) + $walk = Get-PfbSchemaPropertyWalkAccumulators -Schema $Schema -Spec $Spec -MaxDepth $MaxDepth + return @($walk.PropertyNodesByName.get_Keys()) } function Get-PfbSpecCapabilities { @@ -443,7 +509,12 @@ function Get-PfbSpecCapabilities { } $paramComponents = [System.Collections.Generic.Dictionary[string, string]]::new() - foreach ($paramName in $paramComponentCandidates.get_Keys()) { + # Populate in sorted-key order explicitly. Dictionary[TKey,TValue] enumeration + # happens to preserve insertion order in practice (relied on elsewhere in this + # file -- see Get-PfbSchemaPropertyNames), but that is a .NET implementation + # detail, not a contract, and this map gets serialized into a tracked JSON file + # downstream -- make the ordering explicit rather than incidental. + foreach ($paramName in ($paramComponentCandidates.get_Keys() | Sort-Object)) { $candidates = @($paramComponentCandidates[$paramName] | Select-Object -Unique) if ($candidates.Count -gt 1) { $sortedCandidates = @($candidates | Sort-Object) From de752d0d51c6e1a1215e456f2e9cac540b48f81b Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sat, 25 Jul 2026 15:33:58 -0700 Subject: [PATCH 03/17] feat(tools): persist readOnly/deprecated/parameterComponents into the capability map Task 3 of the drift-report-actionable plan: surfaces the per-property detail Task 2 taught the spec parser to extract, in the checked-in capability manifest, so the drift report can tell "actually addable" gaps from "read-only, don't bother" ones. readOnlyBodyProperties uses last-seen-wins (assigned unconditionally each ascending-version iteration), NOT the first-sight guard that parameters/ bodyProperties use. readOnly is not monotonic: 58 of 1264 analysed (endpoint, body-field) pairs flip somewhere across fb2.0-2.27, mostly read-only -> writable. Persisting first-sight would have silently suppressed 11 genuinely settable fields from the actionable gap list -- including PATCH /api-clients|max_role, one of the fields this whole effort exists to surface. A noisy gap is annoying; a missing gap is unfindable. Verified against all 11 negative-canary fields: none appear in the regenerated readOnlyBodyProperties. deprecatedBodyProperties and parameterComponents get the same last-seen-wins treatment for the same reason (parameterComponents in particular describes the CURRENT wire shape, not "introduced in version X" -- a version number on it would be meaningless). All three keys are emitted only when non-empty to keep the manifest lean: an unconditional "[]"/"{}" on every one of the ~520 operations with no read-only fields (or the ~1 endpoint with no $ref parameters) would blow the ~15KB growth budget roughly 14x for zero information gain -- confirmed by measurement (readOnly alone: +13.46KB, matching budget almost exactly; see report for the full parameterComponents size finding). The rebuild is capped at -MaxVersion 2.27 (new parameter, compared numerically via the existing Major/Minor int parsing -- never a string compare, since '2.9' would otherwise sort above '2.27'). tools/specs/ now also holds a cached fb2.28.json, but every acceptance number in this plan (226 read-only / 402 addable / 33 enum-ready / 13 phantom, and this task's own 632-endpoint/28-version checks) is calibrated against 2.0-2.27. An uncapped rebuild would silently ingest 2.28 and move those numbers, making a real regression indistinguishable from an input change. Adopting 2.28 is a separate, deliberate decision for a later PR. schemaVersion stays at 1 (purely additive; pinned by Tests/Build-PfbApiDriftReport.Tests.ps1 and Tests/Get-PfbCapabilityMap.Tests.ps1). Existing minVersion/parameters/bodyProperties values are verified byte-identical across all 632 endpoints. Determinism verified: two consecutive builds to separate paths are SHA256-identical. Co-Authored-By: Claude Opus 5 (1M context) --- Data/PfbCapabilityMap.json | 6965 ++++++++++++++++++++++-- Tests/Build-PfbCapabilityMap.Tests.ps1 | 176 + tools/Build-PfbCapabilityMap.ps1 | 92 +- 3 files changed, 6767 insertions(+), 466 deletions(-) diff --git a/Data/PfbCapabilityMap.json b/Data/PfbCapabilityMap.json index 75d67a6..7c0e161 100644 --- a/Data/PfbCapabilityMap.json +++ b/Data/PfbCapabilityMap.json @@ -48,7 +48,10 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "POST /api/login": { "minVersion": "2.0", @@ -59,6 +62,9 @@ "bodyProperties": { "password": "2.26", "username": "2.26" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "POST /api/logout": { @@ -66,14 +72,20 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /api/login-banner": { "minVersion": "2.0", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /active-directory": { "minVersion": "2.0", @@ -87,7 +99,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /active-directory": { "minVersion": "2.0", @@ -97,7 +119,13 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "local_only": "Local_only_ad", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /active-directory": { "minVersion": "2.0", @@ -116,6 +144,11 @@ "global_catalog_servers": "2.12", "ca_certificate": "2.27", "ca_certificate_group": "2.27" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "POST /active-directory": { @@ -139,6 +172,11 @@ "global_catalog_servers": "2.12", "ca_certificate": "2.27", "ca_certificate_group": "2.27" + }, + "parameterComponents": { + "join_existing_account": "Join_existing_acct_ad", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /active-directory/test": { @@ -154,7 +192,18 @@ "context_names": "2.23", "continuation_token": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /admins": { "minVersion": "2.0", @@ -171,7 +220,20 @@ "allow_errors": "2.22", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "expose_api_token": "Expose_api_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /admins": { "minVersion": "2.0", @@ -189,6 +251,12 @@ "role": "2.15", "authorization_model": "2.24", "management_access_policies": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /admins/api-tokens": { @@ -206,7 +274,20 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "admin_ids": "Admin_ids", + "admin_names": "Admin_names", + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "expose_api_token": "Expose_api_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /admins/api-tokens": { "minVersion": "2.0", @@ -217,7 +298,14 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "admin_ids": "Admin_ids", + "admin_names": "Admin_names", + "context_names": "Context_names", + "timeout": "Timeout", + "X-Request-ID": "XRequestId" + } }, "DELETE /admins/api-tokens": { "minVersion": "2.0", @@ -227,7 +315,13 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "admin_ids": "Admin_ids", + "admin_names": "Admin_names", + "context_names": "Context_names", + "X-Request-ID": "XRequestId" + } }, "GET /admins/cache": { "minVersion": "2.0", @@ -244,7 +338,20 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "refresh": "Refresh", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /admins/cache": { "minVersion": "2.0", @@ -254,7 +361,13 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /alerts": { "minVersion": "2.0", @@ -268,7 +381,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /alerts": { "minVersion": "2.0", @@ -296,6 +419,30 @@ "updated": "2.0", "variables": "2.0", "duration": "2.20" + }, + "readOnlyBodyProperties": [ + "action", + "code", + "component_name", + "component_type", + "created", + "description", + "duration", + "id", + "index", + "knowledge_base_url", + "name", + "notified", + "severity", + "state", + "summary", + "updated", + "variables" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /alert-watchers": { @@ -310,7 +457,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /alert-watchers": { "minVersion": "2.0", @@ -320,6 +477,10 @@ }, "bodyProperties": { "minimum_notification_severity": "2.0" + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /alert-watchers": { @@ -334,6 +495,15 @@ "id": "2.0", "enabled": "2.0", "minimum_notification_severity": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /alert-watchers": { @@ -343,7 +513,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /alert-watchers/test": { "minVersion": "2.0", @@ -354,7 +529,14 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "ids": "Ids", + "names": "Names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /api-clients": { "minVersion": "2.0", @@ -368,7 +550,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /api-clients": { "minVersion": "2.0", @@ -382,6 +574,10 @@ "public_key": "2.0", "access_token_ttl_in_ms": "2.0", "access_policies": "2.19" + }, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" } }, "PATCH /api-clients": { @@ -401,6 +597,20 @@ "enabled": "2.0", "access_token_ttl_in_ms": "2.0", "access_policies": "2.19" + }, + "readOnlyBodyProperties": [ + "access_policies", + "access_token_ttl_in_ms", + "id", + "issuer", + "key_id", + "name", + "public_key" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /api-clients": { @@ -410,7 +620,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /arrays": { "minVersion": "2.0", @@ -424,7 +639,17 @@ "allow_errors": "2.22", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /arrays": { "minVersion": "2.0", @@ -450,6 +675,21 @@ "network_access_policy": "2.13", "default_inbound_tls_policy": "2.17", "context": "2.22" + }, + "readOnlyBodyProperties": [ + "_as_of", + "context", + "encryption", + "id", + "os", + "product_type", + "revision", + "security_update", + "smb_mode", + "version" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /arrays/clients/performance": { @@ -463,7 +703,16 @@ "X-Request-ID": "2.14", "protocol": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "protocol": "Protocol_clients", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/eula": { "minVersion": "2.0", @@ -475,7 +724,15 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /arrays/eula": { "minVersion": "2.0", @@ -485,6 +742,12 @@ "bodyProperties": { "agreement": "2.0", "signature": "2.0" + }, + "readOnlyBodyProperties": [ + "agreement" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /array-connections": { @@ -502,7 +765,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "offset": "Offset", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /array-connections": { "minVersion": "2.0", @@ -526,6 +802,21 @@ "context": "2.17", "os": "2.17", "type": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "os", + "status", + "type", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "remote_ids": "Remote_ids_deprecated", + "remote_names": "Remote_names_deprecated", + "X-Request-ID": "XRequestId" } }, "POST /array-connections": { @@ -548,6 +839,18 @@ "context": "2.17", "os": "2.17", "type": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "os", + "status", + "type", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "X-Request-ID": "XRequestId" } }, "DELETE /array-connections": { @@ -559,7 +862,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "remote_ids": "Remote_ids_deprecated", + "remote_names": "Remote_names_deprecated", + "X-Request-ID": "XRequestId" + } }, "GET /array-connections/connection-key": { "minVersion": "2.0", @@ -573,14 +883,27 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /array-connections/connection-key": { "minVersion": "2.0", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /array-connections/path": { "minVersion": "2.0", @@ -597,7 +920,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "offset": "Offset", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /array-connections/performance/replication": { "minVersion": "2.0", @@ -617,7 +953,23 @@ "type": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "offset": "Offset", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "type": "Type_for_performance", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/http-specific-performance": { "minVersion": "2.0", @@ -629,7 +981,15 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "resolution": "Resolution", + "start_time": "Start_time", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/nfs-specific-performance": { "minVersion": "2.0", @@ -641,7 +1001,15 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "resolution": "Resolution", + "start_time": "Start_time", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/performance": { "minVersion": "2.0", @@ -654,7 +1022,16 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "protocol": "Protocol", + "resolution": "Resolution", + "start_time": "Start_time", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/performance/replication": { "minVersion": "2.0", @@ -667,7 +1044,16 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "resolution": "Resolution", + "start_time": "Start_time", + "type": "Type_for_performance", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/s3-specific-performance": { "minVersion": "2.0", @@ -679,7 +1065,15 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "resolution": "Resolution", + "start_time": "Start_time", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/space": { "minVersion": "2.0", @@ -692,7 +1086,16 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "end_time": "End_time", + "resolution": "Resolution", + "start_time": "Start_time", + "type": "Type", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/supported-time-zones": { "minVersion": "2.0", @@ -705,7 +1108,16 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /audits": { "minVersion": "2.0", @@ -719,7 +1131,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /blades": { "minVersion": "2.0", @@ -734,7 +1156,18 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /buckets": { "minVersion": "2.0", @@ -752,7 +1185,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /buckets": { "minVersion": "2.0", @@ -769,6 +1216,11 @@ "quota_limit": "2.8", "retention_lock": "2.8", "eradication_config": "2.13" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /buckets": { @@ -800,6 +1252,14 @@ "eradication_config": "2.13", "storage_class": "2.19", "qos_policy": "2.20" + }, + "parameterComponents": { + "cancel_in_progress_storage_class_transition": "Cancel_storage_class_transition", + "context_names": "Context_names", + "ids": "Ids", + "ignore_usage": "Ignore_usage", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets": { @@ -810,7 +1270,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/performance": { "minVersion": "2.0", @@ -828,7 +1294,21 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/s3-specific-performance": { "minVersion": "2.0", @@ -846,7 +1326,21 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /bucket-replica-links": { "minVersion": "2.0", @@ -867,7 +1361,24 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "local_bucket_ids": "Local_bucket_ids", + "local_bucket_names": "Local_bucket_names", + "offset": "Offset", + "remote_bucket_names": "Remote_bucket_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /bucket-replica-links": { "minVersion": "2.0", @@ -883,6 +1394,15 @@ "bodyProperties": { "paused": "2.0", "cascading_enabled": "2.2" + }, + "parameterComponents": { + "context_names": "Context_names", + "local_bucket_ids": "Local_bucket_ids", + "local_bucket_names": "Local_bucket_names", + "remote_bucket_names": "Remote_bucket_names", + "remote_credentials_ids": "Remote_credentials_ids", + "remote_credentials_names": "Remote_credentials_names", + "X-Request-ID": "XRequestId" } }, "PATCH /bucket-replica-links": { @@ -912,6 +1432,25 @@ "cascading_enabled": "2.2", "object_backlog": "2.2", "context": "2.17" + }, + "readOnlyBodyProperties": [ + "cascading_enabled", + "context", + "id", + "lag", + "recovery_point", + "status", + "status_details" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "local_bucket_ids": "Local_bucket_ids", + "local_bucket_names": "Local_bucket_names", + "remote_bucket_names": "Remote_bucket_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" } }, "DELETE /bucket-replica-links": { @@ -926,7 +1465,17 @@ "X-Request-ID": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "local_bucket_ids": "Local_bucket_ids", + "local_bucket_names": "Local_bucket_names", + "remote_bucket_names": "Remote_bucket_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "GET /certificates": { "minVersion": "2.0", @@ -940,7 +1489,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /certificates": { "minVersion": "2.0", @@ -972,6 +1531,18 @@ "realms": "2.20", "subject_alternative_names": "2.20", "days": "2.20" + }, + "readOnlyBodyProperties": [ + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" + ], + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" } }, "PATCH /certificates": { @@ -1007,6 +1578,20 @@ "valid_from": "2.20", "valid_to": "2.20", "days": "2.20" + }, + "readOnlyBodyProperties": [ + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" + ], + "parameterComponents": { + "generate_new_key": "Generate_new_key", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /certificates": { @@ -1016,7 +1601,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /certificates/certificate-groups": { "minVersion": "2.0", @@ -1032,7 +1622,19 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /certificates/certificate-groups": { "minVersion": "2.0", @@ -1043,7 +1645,14 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /certificates/certificate-groups": { "minVersion": "2.0", @@ -1054,7 +1663,14 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "X-Request-ID": "XRequestId" + } }, "GET /certificates/uses": { "minVersion": "2.0", @@ -1068,7 +1684,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /certificate-groups": { "minVersion": "2.0", @@ -1082,7 +1708,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /certificate-groups": { "minVersion": "2.0", @@ -1090,7 +1726,11 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "DELETE /certificate-groups": { "minVersion": "2.0", @@ -1099,7 +1739,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /certificate-groups/certificates": { "minVersion": "2.0", @@ -1115,7 +1760,19 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /certificate-groups/certificates": { "minVersion": "2.0", @@ -1126,7 +1783,14 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /certificate-groups/certificates": { "minVersion": "2.0", @@ -1137,7 +1801,14 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "X-Request-ID": "XRequestId" + } }, "GET /certificate-groups/uses": { "minVersion": "2.0", @@ -1151,7 +1822,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /directory-services": { "minVersion": "2.0", @@ -1165,7 +1846,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services": { "minVersion": "2.0", @@ -1188,6 +1879,16 @@ "services": "2.0", "smb": "2.0", "uris": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "services" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /directory-services/roles": { @@ -1204,7 +1905,19 @@ "X-Request-ID": "2.14", "names": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids_for_directory_service_roles", + "limit": "Limit", + "names": "Names_for_directory_service_roles", + "offset": "Offset", + "role_ids": "Role_ids", + "role_names": "Role_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services/roles": { "minVersion": "2.0", @@ -1222,7 +1935,19 @@ "group_base": "2.0", "name": "2.18", "management_access_policies": "2.19" - } + }, + "parameterComponents": { + "ids": "Ids_for_directory_service_roles", + "names": "Names_for_directory_service_roles", + "role_ids": "Role_ids", + "role_names": "Role_names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "management_access_policies", + "name" + ] }, "GET /directory-services/test": { "minVersion": "2.0", @@ -1237,7 +1962,18 @@ "context_names": "2.23", "continuation_token": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services/test": { "minVersion": "2.0", @@ -1266,6 +2002,22 @@ "services": "2.0", "smb": "2.0", "uris": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "services" + ], + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "X-Request-ID": "XRequestId" } }, "GET /dns": { @@ -1282,7 +2034,19 @@ "allow_errors": "2.25", "context_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /dns": { "minVersion": "2.0", @@ -1303,6 +2067,17 @@ "context": "2.25", "ca_certificate": "2.25", "ca_certificate_group": "2.25" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /file-systems": { @@ -1323,7 +2098,23 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems": { "minVersion": "2.0", @@ -1357,6 +2148,20 @@ "qos_policy": "2.17", "node_group": "2.18", "workload": "2.23" + }, + "readOnlyBodyProperties": [ + "requested_promotion_state" + ], + "parameterComponents": { + "context_names": "Context_names", + "default_exports": "Default_exports", + "discard_non_snapshotted_data": "Discard_non_snapshotted_data", + "include_snapshot": "Include_snapshot", + "names": "Names", + "overwrite": "Overwrite", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /file-systems": { @@ -1367,7 +2172,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /file-systems": { "minVersion": "2.0", @@ -1407,6 +2218,23 @@ "storage_class": "2.16", "qos_policy": "2.17", "workload": "2.23" + }, + "readOnlyBodyProperties": [ + "created", + "id", + "promotion_status", + "time_remaining" + ], + "parameterComponents": { + "cancel_in_progress_storage_class_transition": "Cancel_storage_class_transition", + "context_names": "Context_names", + "delete_link_on_eradication": "Delete_link_on_eradication", + "discard_detailed_permissions": "Discard_detailed_permissions", + "discard_non_snapshotted_data": "Discard_non_snapshotted_data", + "ids": "Ids", + "ignore_usage": "Ignore_usage", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /file-systems/groups/performance": { @@ -1423,7 +2251,19 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "gids": "Gids_not_strict", + "group_names": "Group_names_not_strict", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/performance": { "minVersion": "2.0", @@ -1442,7 +2282,22 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "protocol": "Protocol", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/policies": { "minVersion": "2.0", @@ -1460,7 +2315,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems/policies": { "minVersion": "2.0", @@ -1472,7 +2341,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/policies": { "minVersion": "2.0", @@ -1484,7 +2361,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/users/performance": { "minVersion": "2.0", @@ -1500,7 +2385,19 @@ "user_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "total_only": "Total_only", + "uids": "Uids_not_strict", + "user_names": "User_names_not_strict", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-replica-links": { "minVersion": "2.0", @@ -1521,7 +2418,24 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "offset": "Offset", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-system-replica-links": { "minVersion": "2.0", @@ -1549,6 +2463,25 @@ "status": "2.0", "context": "2.17", "link_type": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "lag", + "recovery_point", + "status", + "status_details" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "remote_default_exports": "Remote_default_exports", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" } }, "GET /file-system-replica-links/policies": { @@ -1572,7 +2505,26 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-system-replica-links/policies": { "minVersion": "2.0", @@ -1587,7 +2539,18 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-system-replica-links/policies": { "minVersion": "2.0", @@ -1602,7 +2565,18 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-replica-links/transfer": { "minVersion": "2.0", @@ -1621,7 +2595,22 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names_or_owner_names": "Names_or_owner_names", + "offset": "Offset", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-snapshots": { "minVersion": "2.0", @@ -1640,7 +2629,22 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names_or_owner_names": "Names_or_owner_names", + "offset": "Offset", + "owner_ids": "Owner_ids", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /file-system-snapshots": { "minVersion": "2.0", @@ -1654,6 +2658,14 @@ }, "bodyProperties": { "suffix": "2.0" + }, + "parameterComponents": { + "context_names": "Context_names", + "send": "Send", + "source_ids": "Source_ids", + "source_names": "Source_names", + "targets": "Targets", + "X-Request-ID": "XRequestId" } }, "DELETE /file-system-snapshots": { @@ -1664,7 +2676,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /file-system-snapshots": { "minVersion": "2.0", @@ -1689,6 +2707,22 @@ "time_remaining": "2.0", "policies": "2.12", "context": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "created", + "id", + "owner_destroyed", + "policies", + "suffix", + "time_remaining" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "latest_replica": "Latest_replica", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /file-system-snapshots/policies": { @@ -1707,7 +2741,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-system-snapshots/policies": { "minVersion": "2.0", @@ -1719,7 +2767,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-snapshots/transfer": { "minVersion": "2.0", @@ -1736,7 +2792,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names_or_owner_names": "Names_or_owner_names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-system-snapshots/transfer": { "minVersion": "2.0", @@ -1748,7 +2817,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "GET /hardware": { "minVersion": "2.0", @@ -1762,7 +2839,17 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /hardware": { "minVersion": "2.0", @@ -1788,6 +2875,28 @@ "management_mac": "2.16", "data_mac": "2.16", "sensor_readings": "2.18" + }, + "readOnlyBodyProperties": [ + "data_mac", + "details", + "id", + "index", + "management_mac", + "model", + "name", + "part_number", + "sensor_readings", + "serial", + "slot", + "speed", + "status", + "temperature", + "type" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /hardware-connectors": { @@ -1802,7 +2911,17 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /hardware-connectors": { "minVersion": "2.0", @@ -1820,7 +2939,18 @@ "transceiver_type": "2.0", "port_speed": "2.15", "lanes_per_port": "2.20" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "connector_type", + "id", + "name", + "transceiver_type" + ] }, "GET /keytabs": { "minVersion": "2.0", @@ -1834,7 +2964,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /keytabs": { "minVersion": "2.0", @@ -1843,7 +2983,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "POST /keytabs": { "minVersion": "2.0", @@ -1853,6 +2998,10 @@ }, "bodyProperties": { "source": "2.0" + }, + "parameterComponents": { + "name_prefixes": "Name_prefixes", + "X-Request-ID": "XRequestId" } }, "GET /keytabs/download": { @@ -1862,7 +3011,12 @@ "keytab_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "keytab_ids": "Keytab_ids", + "keytab_names": "Keytab_names", + "X-Request-ID": "XRequestId" + } }, "POST /keytabs/upload": { "minVersion": "2.0", @@ -1872,6 +3026,10 @@ }, "bodyProperties": { "keytab_file": "2.16" + }, + "parameterComponents": { + "name_prefixes": "Name_prefixes", + "X-Request-ID": "XRequestId" } }, "GET /lifecycle-rules": { @@ -1890,7 +3048,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /lifecycle-rules": { "minVersion": "2.0", @@ -1907,6 +3079,11 @@ "abort_incomplete_multipart_uploads_after": "2.1", "keep_current_version_for": "2.1", "keep_current_version_until": "2.1" + }, + "parameterComponents": { + "confirm_date": "Confirm_date", + "context_names": "Context_names", + "X-Request-ID": "XRequestId" } }, "PATCH /lifecycle-rules": { @@ -1927,6 +3104,15 @@ "abort_incomplete_multipart_uploads_after": "2.1", "keep_current_version_for": "2.1", "keep_current_version_until": "2.1" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "confirm_date": "Confirm_date", + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /lifecycle-rules": { @@ -1939,7 +3125,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /link-aggregation-groups": { "minVersion": "2.0", @@ -1953,7 +3147,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /link-aggregation-groups": { "minVersion": "2.0", @@ -1969,6 +3173,18 @@ "ports": "2.0", "port_speed": "2.0", "status": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "lag_speed", + "mac_address", + "name", + "port_speed", + "status" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /link-aggregation-groups": { @@ -1982,6 +3198,11 @@ "ports": "2.0", "add_ports": "2.0", "remove_ports": "2.0" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /link-aggregation-groups": { @@ -1991,7 +3212,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /logs": { "minVersion": "2.0", @@ -2000,7 +3226,12 @@ "start_time": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "end_time": "End_time", + "start_time": "Start_time", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces": { "minVersion": "2.0", @@ -2014,7 +3245,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /network-interfaces": { "minVersion": "2.0", @@ -2037,6 +3278,20 @@ "server": "2.16", "realms": "2.19", "attached_servers": "2.20" + }, + "readOnlyBodyProperties": [ + "enabled", + "gateway", + "id", + "mtu", + "name", + "netmask", + "realms", + "vlan" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /network-interfaces": { @@ -2051,6 +3306,11 @@ "services": "2.0", "server": "2.16", "attached_servers": "2.20" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /network-interfaces": { @@ -2060,7 +3320,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-access-keys": { "minVersion": "2.0", @@ -2075,7 +3340,18 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-access-keys": { "minVersion": "2.0", @@ -2087,6 +3363,11 @@ "bodyProperties": { "user": "2.0", "secret_access_key": "2.0" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Access_key_names", + "X-Request-ID": "XRequestId" } }, "PATCH /object-store-access-keys": { @@ -2104,6 +3385,19 @@ "user": "2.0", "context": "2.17", "access_key_id": "2.20" + }, + "readOnlyBodyProperties": [ + "access_key_id", + "context", + "created", + "name", + "secret_access_key", + "user" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-access-keys": { @@ -2113,7 +3407,12 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-access-policies": { "minVersion": "2.0", @@ -2130,7 +3429,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "exclude_rules": "Exclude_rules", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-access-policies/object-store-users": { "minVersion": "2.0", @@ -2148,7 +3460,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-access-policies/object-store-users": { "minVersion": "2.0", @@ -2160,7 +3486,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /object-store-access-policies/object-store-users": { "minVersion": "2.0", @@ -2172,7 +3506,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-accounts": { "minVersion": "2.0", @@ -2189,7 +3531,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-accounts": { "minVersion": "2.0", @@ -2203,6 +3558,11 @@ "hard_limit_enabled": "2.8", "quota_limit": "2.8", "account_exports": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-accounts": { @@ -2213,7 +3573,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-remote-credentials": { "minVersion": "2.0", @@ -2229,7 +3595,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-remote-credentials": { "minVersion": "2.0", @@ -2241,6 +3619,11 @@ "bodyProperties": { "access_key_id": "2.0", "secret_access_key": "2.0" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /object-store-remote-credentials": { @@ -2259,6 +3642,17 @@ "remote": "2.0", "context": "2.17", "realms": "2.20" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-remote-credentials": { @@ -2269,7 +3663,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-users": { "minVersion": "2.0", @@ -2285,7 +3685,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-users": { "minVersion": "2.0", @@ -2295,7 +3707,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "full_access": "Full_access", + "names": "Names_required", + "X-Request-ID": "XRequestId" + } }, "DELETE /object-store-users": { "minVersion": "2.0", @@ -2305,7 +3723,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-users/object-store-access-policies": { "minVersion": "2.0", @@ -2323,7 +3747,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-users/object-store-access-policies": { "minVersion": "2.0", @@ -2335,7 +3773,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /object-store-users/object-store-access-policies": { "minVersion": "2.0", @@ -2347,7 +3793,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-virtual-hosts": { "minVersion": "2.0", @@ -2363,7 +3817,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-virtual-hosts": { "minVersion": "2.0", @@ -2379,7 +3845,18 @@ "attached_servers": "2.20", "hostname": "2.20", "realms": "2.20" - } + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "realms" + ] }, "DELETE /object-store-virtual-hosts": { "minVersion": "2.0", @@ -2389,7 +3866,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /policies": { "minVersion": "2.0", @@ -2407,7 +3890,21 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /policies": { "minVersion": "2.0", @@ -2427,6 +3924,18 @@ "retention_lock": "2.5", "context": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms", + "retention_lock" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /policies": { @@ -2437,7 +3946,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /policies": { "minVersion": "2.0", @@ -2461,6 +3976,21 @@ "retention_lock": "2.5", "context": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "name", + "policy_type", + "realms", + "retention_lock" + ], + "parameterComponents": { + "context_names": "Context_names", + "destroy_snapshots": "Destroy_snapshots", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /policies/file-systems": { @@ -2479,7 +4009,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /policies/file-systems": { "minVersion": "2.0", @@ -2491,7 +4035,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /policies/file-systems": { "minVersion": "2.0", @@ -2503,7 +4055,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /policies/file-system-snapshots": { "minVersion": "2.0", @@ -2521,7 +4081,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /policies/file-system-snapshots": { "minVersion": "2.0", @@ -2533,7 +4107,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /policies/members": { "minVersion": "2.0", @@ -2558,7 +4140,28 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Member_types", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /policies/file-system-replica-links": { "minVersion": "2.0", @@ -2581,7 +4184,26 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /policies/file-system-replica-links": { "minVersion": "2.0", @@ -2596,7 +4218,18 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /policies/file-system-replica-links": { "minVersion": "2.0", @@ -2611,7 +4244,18 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "GET /quotas/groups": { "minVersion": "2.0", @@ -2630,7 +4274,22 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "gids": "Group_quota_gids", + "group_names": "Group_names", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /quotas/groups": { "minVersion": "2.0", @@ -2645,6 +4304,17 @@ "bodyProperties": { "name": "2.0", "quota": "2.0" + }, + "readOnlyBodyProperties": [ + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "gids": "Group_quota_gids", + "group_names": "Group_names", + "X-Request-ID": "XRequestId" } }, "DELETE /quotas/groups": { @@ -2658,7 +4328,16 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "gids": "Group_quota_gids", + "group_names": "Group_names", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /quotas/groups": { "minVersion": "2.0", @@ -2674,6 +4353,18 @@ "bodyProperties": { "name": "2.0", "quota": "2.0" + }, + "readOnlyBodyProperties": [ + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "gids": "Group_quota_gids", + "group_names": "Group_names", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /quotas/settings": { @@ -2683,7 +4374,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /quotas/settings": { "minVersion": "2.0", @@ -2695,6 +4391,13 @@ "id": "2.0", "contact": "2.0", "direct_notifications_enabled": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /quotas/users": { @@ -2714,7 +4417,22 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "uids": "User_quota_uids", + "user_names": "User_names", + "X-Request-ID": "XRequestId" + } }, "POST /quotas/users": { "minVersion": "2.0", @@ -2729,6 +4447,17 @@ "bodyProperties": { "name": "2.0", "quota": "2.0" + }, + "readOnlyBodyProperties": [ + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "uids": "User_quota_uids", + "user_names": "User_names", + "X-Request-ID": "XRequestId" } }, "DELETE /quotas/users": { @@ -2742,7 +4471,16 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "names": "Names", + "uids": "User_quota_uids", + "user_names": "User_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /quotas/users": { "minVersion": "2.0", @@ -2758,6 +4496,18 @@ "bodyProperties": { "name": "2.0", "quota": "2.0" + }, + "readOnlyBodyProperties": [ + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "names": "Names", + "uids": "User_quota_uids", + "user_names": "User_names", + "X-Request-ID": "XRequestId" } }, "GET /roles": { @@ -2772,7 +4522,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /smtp-servers": { "minVersion": "2.0", @@ -2786,7 +4546,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /smtp-servers": { "minVersion": "2.0", @@ -2799,6 +4569,13 @@ "relay_host": "2.0", "sender_domain": "2.0", "encryption_mode": "2.15" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /snmp-agents": { @@ -2813,7 +4590,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /snmp-agents": { "minVersion": "2.0", @@ -2827,6 +4614,14 @@ "version": "2.0", "v2c": "2.0", "v3": "2.0" + }, + "readOnlyBodyProperties": [ + "engine_id", + "id", + "name" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /snmp-agents/mib": { @@ -2834,7 +4629,10 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /snmp-managers": { "minVersion": "2.0", @@ -2848,7 +4646,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /snmp-managers": { "minVersion": "2.0", @@ -2862,6 +4670,10 @@ "version": "2.0", "v2c": "2.0", "v3": "2.0" + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /snmp-managers": { @@ -2879,6 +4691,14 @@ "version": "2.0", "v2c": "2.0", "v3": "2.0" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /snmp-managers": { @@ -2888,7 +4708,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /snmp-managers/test": { "minVersion": "2.0", @@ -2902,7 +4727,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /subnets": { "minVersion": "2.0", @@ -2916,7 +4751,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /subnets": { "minVersion": "2.0", @@ -2935,7 +4780,18 @@ "prefix": "2.18", "services": "2.18", "vlan": "2.18" - } + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ] }, "PATCH /subnets": { "minVersion": "2.0", @@ -2955,7 +4811,19 @@ "prefix": "2.18", "services": "2.18", "vlan": "2.18" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ] }, "DELETE /subnets": { "minVersion": "2.0", @@ -2964,7 +4832,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /support": { "minVersion": "2.0", @@ -2973,7 +4846,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /support": { "minVersion": "2.0", @@ -2993,6 +4871,17 @@ "remote_assist_duration": "2.14", "edge_agent_update_enabled": "2.18", "edge_management_enabled": "2.18" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "remote_assist_expires", + "remote_assist_opened", + "remote_assist_paths", + "remote_assist_status" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /support/test": { @@ -3003,7 +4892,13 @@ "test_type": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "sort": "Sort", + "test_type": "Test_type", + "X-Request-ID": "XRequestId" + } }, "GET /syslog-servers": { "minVersion": "2.0", @@ -3019,7 +4914,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names_for_syslog", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /syslog-servers": { "minVersion": "2.0", @@ -3031,6 +4938,10 @@ "uri": "2.14", "services": "2.14", "sources": "2.20" + }, + "parameterComponents": { + "names": "Names_for_syslog", + "X-Request-ID": "XRequestId" } }, "PATCH /syslog-servers": { @@ -3044,6 +4955,11 @@ "uri": "2.14", "services": "2.14", "sources": "2.20" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names_for_syslog", + "X-Request-ID": "XRequestId" } }, "DELETE /syslog-servers": { @@ -3053,7 +4969,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names_for_syslog", + "X-Request-ID": "XRequestId" + } }, "GET /syslog-servers/settings": { "minVersion": "2.0", @@ -3067,7 +4988,17 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /syslog-servers/settings": { "minVersion": "2.0", @@ -3081,6 +5012,15 @@ "id": "2.0", "ca_certificate": "2.0", "ca_certificate_group": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /syslog-servers/test": { @@ -3089,7 +5029,11 @@ "continuation_token": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "X-Request-ID": "XRequestId" + } }, "GET /targets": { "minVersion": "2.0", @@ -3105,7 +5049,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /targets": { "minVersion": "2.0", @@ -3115,6 +5071,10 @@ }, "bodyProperties": { "address": "2.0" + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /targets": { @@ -3131,6 +5091,16 @@ "ca_certificate_group": "2.0", "status": "2.0", "status_details": "2.0" + }, + "readOnlyBodyProperties": [ + "id", + "status", + "status_details" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /targets": { @@ -3140,7 +5110,12 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /targets/performance/replication": { "minVersion": "2.0", @@ -3158,7 +5133,21 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /usage/groups": { "minVersion": "2.0", @@ -3176,7 +5165,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "gids": "Group_quota_gids", + "group_names": "Group_names", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /usage/users": { "minVersion": "2.0", @@ -3194,7 +5197,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "uids": "User_quota_uids", + "user_names": "User_names", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/factory-reset-token": { "minVersion": "2.1", @@ -3206,21 +5223,35 @@ "sort": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /arrays/factory-reset-token": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "POST /arrays/factory-reset-token": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /kmip": { "minVersion": "2.1", @@ -3234,7 +5265,17 @@ "continuation_token": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /kmip": { "minVersion": "2.1", @@ -3248,7 +5289,15 @@ "ca_certificate": "2.18", "ca_certificate_group": "2.18", "uris": "2.18" - } + }, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ] }, "PATCH /kmip": { "minVersion": "2.1", @@ -3263,7 +5312,16 @@ "ca_certificate": "2.18", "ca_certificate_group": "2.18", "uris": "2.18" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ] }, "DELETE /kmip": { "minVersion": "2.1", @@ -3272,7 +5330,12 @@ "ids": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /kmip/test": { "minVersion": "2.1", @@ -3281,14 +5344,22 @@ "ids": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /rapid-data-locking": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "PATCH /rapid-data-locking": { "minVersion": "2.1", @@ -3298,6 +5369,9 @@ "bodyProperties": { "enabled": "2.1", "kmip_server": "2.1" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /rapid-data-locking/test": { @@ -3305,14 +5379,20 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "POST /rapid-data-locking/rotate": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "POST /object-store-access-policies": { "minVersion": "2.2", @@ -3325,6 +5405,12 @@ "bodyProperties": { "rules": "2.2", "description": "2.2" + }, + "parameterComponents": { + "context_names": "Context_names", + "enforce_action_restrictions": "Enforce_action_restrictions", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /object-store-access-policies": { @@ -3338,6 +5424,13 @@ }, "bodyProperties": { "rules": "2.2" + }, + "parameterComponents": { + "context_names": "Context_names", + "enforce_action_restrictions": "Enforce_action_restrictions", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-access-policies": { @@ -3348,7 +5441,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-access-policies/rules": { "minVersion": "2.2", @@ -3365,7 +5464,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-access-policies/rules": { "minVersion": "2.2", @@ -3382,6 +5494,14 @@ "conditions": "2.2", "resources": "2.2", "effect": "2.18" + }, + "parameterComponents": { + "context_names": "Context_names", + "enforce_action_restrictions": "Enforce_action_restrictions", + "names": "Names_required", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "PATCH /object-store-access-policies/rules": { @@ -3401,6 +5521,14 @@ "effect": "2.2", "policy": "2.2", "resources": "2.2" + }, + "parameterComponents": { + "context_names": "Context_names", + "enforce_action_restrictions": "Enforce_action_restrictions", + "names": "Names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-access-policies/rules": { @@ -3412,7 +5540,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-access-policy-actions": { "minVersion": "2.2", @@ -3427,7 +5562,18 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /policies-all": { "minVersion": "2.2", @@ -3443,7 +5589,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /policies-all/members": { "minVersion": "2.2", @@ -3468,7 +5626,28 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Member_types", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /admins/settings": { "minVersion": "2.3", @@ -3480,7 +5659,15 @@ "sort": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /admins/settings": { "minVersion": "2.3", @@ -3491,6 +5678,9 @@ "lockout_duration": "2.3", "max_login_attempts": "2.3", "min_password_length": "2.3" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /file-systems/policies-all": { @@ -3509,7 +5699,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /hardware-connectors/performance": { "minVersion": "2.3", @@ -3526,7 +5730,20 @@ "total_only": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /nfs-export-policies": { "minVersion": "2.3", @@ -3544,7 +5761,21 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /nfs-export-policies": { "minVersion": "2.3", @@ -3563,6 +5794,17 @@ "rules": "2.3", "version": "2.3", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /nfs-export-policies": { @@ -3585,6 +5827,20 @@ "version": "2.3", "context": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "DELETE /nfs-export-policies": { @@ -3596,7 +5852,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + } }, "GET /nfs-export-policies/rules": { "minVersion": "2.3", @@ -3614,7 +5877,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /nfs-export-policies/rules": { "minVersion": "2.3", @@ -3644,7 +5921,22 @@ "security": "2.18", "index": "2.18", "context": "2.18" - } + }, + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "policy_version" + ] }, "DELETE /nfs-export-policies/rules": { "minVersion": "2.3", @@ -3655,7 +5947,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + } }, "PATCH /nfs-export-policies/rules": { "minVersion": "2.3", @@ -3685,7 +5984,20 @@ "security": "2.18", "index": "2.18", "context": "2.18" - } + }, + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ] }, "GET /sessions": { "minVersion": "2.3", @@ -3699,7 +6011,17 @@ "sort": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /drives": { "minVersion": "2.4", @@ -3714,7 +6036,18 @@ "total_only": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /logs-async": { "minVersion": "2.4", @@ -3728,7 +6061,17 @@ "sort": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /logs-async": { "minVersion": "2.4", @@ -3745,6 +6088,17 @@ "progress": "2.4", "hardware_components": "2.4", "available_files": "2.4" + }, + "readOnlyBodyProperties": [ + "available_files", + "id", + "last_request_time", + "name", + "processing", + "progress" + ], + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /logs-async/download": { @@ -3753,7 +6107,11 @@ "names": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/ping": { "minVersion": "2.6", @@ -3767,7 +6125,17 @@ "resolve_hostname": "2.6", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "component_name": "Ping_trace_component", + "count": "Ping_count", + "destination": "Ping_trace_destination", + "packet_size": "Packet_size", + "print_latency": "Print_latency", + "resolve_hostname": "Resolve_hostname", + "source": "Ping_trace_source", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/trace": { "minVersion": "2.6", @@ -3782,7 +6150,18 @@ "resolve_hostname": "2.6", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "component_name": "Ping_trace_component", + "destination": "Ping_trace_destination", + "discover_mtu": "Mtu", + "fragment_packet": "Fragment_packet", + "method": "Method", + "port": "Port", + "resolve_hostname": "Resolve_hostname", + "source": "Ping_trace_source", + "X-Request-ID": "XRequestId" + } }, "GET /support/verification-keys": { "minVersion": "2.7", @@ -3794,7 +6173,15 @@ "sort": "2.7", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /support/verification-keys": { "minVersion": "2.7", @@ -3803,6 +6190,9 @@ }, "bodyProperties": { "signed_verification_key": "2.7" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /file-systems/locks": { @@ -3821,7 +6211,21 @@ "allow_errors": "2.22", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "client_names": "Client_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "inodes": "Inodes", + "limit": "Limit", + "names": "Names", + "paths": "Paths", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/locks": { "minVersion": "2.8", @@ -3836,7 +6240,18 @@ "X-Request-ID": "2.14", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "client_names": "Client_names", + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "inodes": "Inodes", + "names": "Names", + "paths": "Paths", + "recursive": "Recursive", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/locks/clients": { "minVersion": "2.8", @@ -3848,7 +6263,15 @@ "allow_errors": "2.22", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems/locks/nlm-reclamations": { "minVersion": "2.8", @@ -3856,7 +6279,11 @@ "X-Request-ID": "2.14", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /object-store-accounts": { "minVersion": "2.8", @@ -3872,6 +6299,13 @@ "hard_limit_enabled": "2.8", "quota_limit": "2.8", "public_access_config": "2.12" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "ignore_usage": "Ignore_usage", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /file-system-replica-links": { @@ -3888,7 +6322,19 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "cancel_in_progress_transfers": "Cancel_in_progress_transfers", + "context_names": "Context_names", + "ids": "Ids", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/sessions": { "minVersion": "2.10", @@ -3903,7 +6349,18 @@ "allow_errors": "2.22", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "client_names": "Client_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "limit": "Limit", + "names": "Names", + "protocols": "Protocols", + "user_names": "Sessions_user_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/sessions": { "minVersion": "2.10", @@ -3916,7 +6373,16 @@ "X-Request-ID": "2.14", "context_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "client_names": "Client_names", + "context_names": "Context_names", + "disruptive": "Disruptive", + "names": "Names", + "protocols": "Protocols", + "user_names": "Sessions_user_names", + "X-Request-ID": "XRequestId" + } }, "GET /smb-client-policies": { "minVersion": "2.10", @@ -3934,7 +6400,21 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /smb-client-policies": { "minVersion": "2.10", @@ -3953,6 +6433,17 @@ "rules": "2.10", "access_based_enumeration_enabled": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /smb-client-policies": { @@ -3975,6 +6466,19 @@ "context": "2.17", "access_based_enumeration_enabled": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /smb-client-policies": { @@ -3985,7 +6489,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /smb-client-policies/rules": { "minVersion": "2.10", @@ -4003,7 +6513,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /smb-client-policies/rules": { "minVersion": "2.10", @@ -4023,6 +6547,19 @@ "permission": "2.10", "index": "2.10", "encryption": "2.11" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "PATCH /smb-client-policies/rules": { @@ -4046,6 +6583,21 @@ "index": "2.10", "encryption": "2.11", "context": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "policy_version" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "DELETE /smb-client-policies/rules": { @@ -4057,7 +6609,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + } }, "GET /smb-share-policies": { "minVersion": "2.10", @@ -4075,7 +6634,21 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /smb-share-policies": { "minVersion": "2.10", @@ -4093,6 +6666,17 @@ "policy_type": "2.10", "rules": "2.10", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /smb-share-policies": { @@ -4113,6 +6697,18 @@ "rules": "2.10", "context": "2.17", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /smb-share-policies": { @@ -4123,7 +6719,13 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /smb-share-policies/rules": { "minVersion": "2.10", @@ -4141,7 +6743,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /smb-share-policies/rules": { "minVersion": "2.10", @@ -4158,6 +6774,16 @@ "full_control": "2.10", "principal": "2.10", "read": "2.10" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "PATCH /smb-share-policies/rules": { @@ -4178,6 +6804,18 @@ "policy": "2.10", "principal": "2.10", "read": "2.10" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /smb-share-policies/rules": { @@ -4190,7 +6828,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/cross-origin-resource-sharing-policies": { "minVersion": "2.12", @@ -4207,7 +6853,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /buckets/cross-origin-resource-sharing-policies": { "minVersion": "2.12", @@ -4219,6 +6878,12 @@ }, "bodyProperties": { "rules": "2.12" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets/cross-origin-resource-sharing-policies": { @@ -4230,7 +6895,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/cross-origin-resource-sharing-policies/rules": { "minVersion": "2.12", @@ -4248,7 +6920,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /buckets/cross-origin-resource-sharing-policies/rules": { "minVersion": "2.12", @@ -4264,6 +6950,14 @@ "allowed_headers": "2.12", "allowed_methods": "2.12", "allowed_origins": "2.12" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names_required", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets/cross-origin-resource-sharing-policies/rules": { @@ -4276,7 +6970,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/bucket-access-policies": { "minVersion": "2.12", @@ -4293,7 +6995,20 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /buckets/bucket-access-policies": { "minVersion": "2.12", @@ -4305,6 +7020,12 @@ }, "bodyProperties": { "rules": "2.12" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets/bucket-access-policies": { @@ -4316,7 +7037,14 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/bucket-access-policies/rules": { "minVersion": "2.12", @@ -4334,7 +7062,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /buckets/bucket-access-policies/rules": { "minVersion": "2.12", @@ -4351,6 +7093,17 @@ "effect": "2.12", "principals": "2.12", "resources": "2.12" + }, + "readOnlyBodyProperties": [ + "effect" + ], + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names_required", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets/bucket-access-policies/rules": { @@ -4363,7 +7116,15 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /network-access-policies": { "minVersion": "2.13", @@ -4377,7 +7138,17 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /network-access-policies": { "minVersion": "2.13", @@ -4397,6 +7168,19 @@ "version": "2.13", "rules": "2.13", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "GET /network-access-policies/members": { @@ -4413,7 +7197,19 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /network-access-policies/rules": { "minVersion": "2.13", @@ -4429,7 +7225,19 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /network-access-policies/rules": { "minVersion": "2.13", @@ -4448,6 +7256,18 @@ "client": "2.13", "interfaces": "2.13", "index": "2.13" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "PATCH /network-access-policies/rules": { @@ -4469,6 +7289,19 @@ "policy": "2.13", "policy_version": "2.13", "index": "2.13" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "policy_version" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "DELETE /network-access-policies/rules": { @@ -4479,7 +7312,13 @@ "versions": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + } }, "GET /admins/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4497,7 +7336,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /admins/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4509,7 +7362,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /admins/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4521,7 +7382,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4539,7 +7408,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /arrays/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4551,7 +7434,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /arrays/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4563,7 +7454,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /audit-file-systems-policies": { "minVersion": "2.14", @@ -4579,7 +7478,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /audit-file-systems-policies": { "minVersion": "2.14", @@ -4599,6 +7510,17 @@ "control_type": "2.18", "rules": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /audit-file-systems-policies": { @@ -4622,6 +7544,18 @@ "rules": "2.18", "realms": "2.19", "control_type": "2.25" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /audit-file-systems-policies": { @@ -4632,7 +7566,13 @@ "names": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /audit-file-systems-policies/members": { "minVersion": "2.14", @@ -4650,7 +7590,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /audit-file-systems-policies/members": { "minVersion": "2.14", @@ -4662,7 +7616,15 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /audit-file-systems-policies/members": { "minVersion": "2.14", @@ -4674,7 +7636,15 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/roles": { "minVersion": "2.14", @@ -4689,6 +7659,10 @@ "name": "2.18", "role": "2.18", "management_access_policies": "2.19" + }, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/roles": { @@ -4698,7 +7672,12 @@ "names": "2.14", "ids": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/audit-policies": { "minVersion": "2.14", @@ -4716,7 +7695,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems/audit-policies": { "minVersion": "2.14", @@ -4728,7 +7721,15 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/audit-policies": { "minVersion": "2.14", @@ -4740,7 +7741,15 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /public-keys": { "minVersion": "2.14", @@ -4754,7 +7763,17 @@ "offset": "2.14", "sort": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /public-keys": { "minVersion": "2.14", @@ -4764,6 +7783,10 @@ }, "bodyProperties": { "public_key": "2.14" + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /public-keys": { @@ -4773,7 +7796,12 @@ "ids": "2.14", "names": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /public-keys/uses": { "minVersion": "2.14", @@ -4787,7 +7815,17 @@ "offset": "2.14", "sort": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4803,7 +7841,19 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4821,6 +7871,16 @@ "signing_authority": "2.14", "static_authorized_principals": "2.14", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /ssh-certificate-authority-policies": { @@ -4830,7 +7890,12 @@ "ids": "2.14", "names": "2.14" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -4850,6 +7915,18 @@ "location": "2.14", "realms": "2.19", "context": "2.24" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /ssh-certificate-authority-policies/admins": { @@ -4868,7 +7945,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /ssh-certificate-authority-policies/admins": { "minVersion": "2.14", @@ -4880,7 +7971,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /ssh-certificate-authority-policies/admins": { "minVersion": "2.14", @@ -4892,7 +7991,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /ssh-certificate-authority-policies/arrays": { "minVersion": "2.14", @@ -4910,7 +8017,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /ssh-certificate-authority-policies/arrays": { "minVersion": "2.14", @@ -4922,7 +8043,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /ssh-certificate-authority-policies/arrays": { "minVersion": "2.14", @@ -4934,7 +8063,15 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /ssh-certificate-authority-policies/members": { "minVersion": "2.14", @@ -4952,7 +8089,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /admins": { "minVersion": "2.15", @@ -4967,6 +8118,11 @@ "role": "2.15", "management_access_policies": "2.19", "admin_type": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /admins": { @@ -4977,7 +8133,13 @@ "names": "2.15", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/worm-data-policies": { "minVersion": "2.15", @@ -4995,7 +8157,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /sso/saml2/idps": { "minVersion": "2.15", @@ -5009,7 +8185,17 @@ "offset": "2.15", "sort": "2.15" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /sso/saml2/idps": { "minVersion": "2.15", @@ -5028,6 +8214,13 @@ "services": "2.17", "prn": "2.17", "management": "2.24" + }, + "readOnlyBodyProperties": [ + "prn" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /sso/saml2/idps": { @@ -5037,7 +8230,12 @@ "ids": "2.15", "names": "2.15" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /sso/saml2/idps": { "minVersion": "2.15", @@ -5057,7 +8255,16 @@ "prn": "2.18", "services": "2.18", "management": "2.24" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "prn" + ] }, "GET /worm-data-policies": { "minVersion": "2.15", @@ -5073,7 +8280,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /worm-data-policies": { "minVersion": "2.15", @@ -5096,7 +8315,20 @@ "retention_lock": "2.18", "context": "2.18", "realms": "2.19" - } + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "name", + "policy_type", + "realms" + ] }, "PATCH /worm-data-policies": { "minVersion": "2.15", @@ -5120,7 +8352,21 @@ "retention_lock": "2.18", "context": "2.18", "realms": "2.19" - } + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "name", + "policy_type", + "realms" + ] }, "DELETE /worm-data-policies": { "minVersion": "2.15", @@ -5130,7 +8376,13 @@ "names": "2.15", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /worm-data-policies/members": { "minVersion": "2.15", @@ -5148,7 +8400,21 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/space/storage-classes": { "minVersion": "2.16", @@ -5165,7 +8431,20 @@ "storage_class_names": "2.16", "total_only": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "storage_class_names": "StorageClassNames", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /dns": { "minVersion": "2.16", @@ -5183,6 +8462,11 @@ "sources": "2.16", "ca_certificate": "2.25", "ca_certificate_group": "2.25" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /dns": { @@ -5193,7 +8477,13 @@ "names": "2.16", "context_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-exports": { "minVersion": "2.16", @@ -5211,7 +8501,21 @@ "workload_ids": "2.23", "workload_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + } }, "POST /file-system-exports": { "minVersion": "2.16", @@ -5227,6 +8531,14 @@ "export_name": "2.16", "server": "2.16", "share_policy": "2.16" + }, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "PATCH /file-system-exports": { @@ -5249,6 +8561,20 @@ "status": "2.16", "policy_type": "2.16", "context": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "enabled", + "id", + "name", + "policy_type", + "status" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /file-system-exports": { @@ -5259,7 +8585,13 @@ "names": "2.16", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /maintenance-windows": { "minVersion": "2.16", @@ -5273,7 +8605,17 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /maintenance-windows": { "minVersion": "2.16", @@ -5283,6 +8625,10 @@ }, "bodyProperties": { "timeout": "2.16" + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /maintenance-windows": { @@ -5292,7 +8638,12 @@ "ids": "2.16", "names": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /password-policies": { "minVersion": "2.16", @@ -5306,7 +8657,17 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /password-policies": { "minVersion": "2.16", @@ -5333,6 +8694,17 @@ "enabled": "2.17", "max_password_age": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /sso/saml2/idps/test": { @@ -5345,7 +8717,15 @@ "names": "2.16", "sort": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /sso/saml2/idps/test": { "minVersion": "2.16", @@ -5365,7 +8745,16 @@ "services": "2.18", "sp": "2.18", "management": "2.24" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "prn" + ] }, "GET /servers": { "minVersion": "2.16", @@ -5381,7 +8770,19 @@ "allow_errors": "2.17", "context_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /servers": { "minVersion": "2.16", @@ -5395,6 +8796,12 @@ "directory_services": "2.18", "dns": "2.18", "local_directory_service": "2.24" + }, + "parameterComponents": { + "create_ds": "Create_ds", + "create_local_directory_service": "Create_local_directory_service", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /servers": { @@ -5408,6 +8815,11 @@ "directory_services": "2.18", "dns": "2.18", "local_directory_service": "2.24" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /servers": { @@ -5418,7 +8830,13 @@ "ids": "2.16", "names": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "cascade_delete": "Cascade_delete", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /support-diagnostics": { "minVersion": "2.16", @@ -5432,7 +8850,17 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /support-diagnostics": { "minVersion": "2.16", @@ -5441,7 +8869,12 @@ "analysis_period_start_time": "2.16", "analysis_period_end_time": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "analysis_period_end_time": "Analysis_period_end_time", + "analysis_period_start_time": "Analysis_period_start_time", + "X-Request-ID": "XRequestId" + } }, "GET /support-diagnostics/details": { "minVersion": "2.16", @@ -5455,7 +8888,17 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /software-check": { "minVersion": "2.16", @@ -5470,7 +8913,18 @@ "sort": "2.16", "total_item_count": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "software_names": "Software_names", + "software_versions": "Software_versions", + "sort": "Sort", + "total_item_count": "Total_item_count" + } }, "POST /software-check": { "minVersion": "2.16", @@ -5479,7 +8933,12 @@ "software_versions": "2.16", "software_names": "2.16" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "software_names": "Software_names", + "software_versions": "Software_versions", + "X-Request-ID": "XRequestId" + } }, "GET /qos-policies/file-systems": { "minVersion": "2.17", @@ -5497,7 +8956,21 @@ "allow_errors": "2.23", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /tls-policies/network-interfaces": { "minVersion": "2.17", @@ -5513,7 +8986,19 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /tls-policies/network-interfaces": { "minVersion": "2.17", @@ -5524,7 +9009,14 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /tls-policies/network-interfaces": { "minVersion": "2.17", @@ -5535,7 +9027,14 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /legal-holds": { "minVersion": "2.17", @@ -5549,7 +9048,17 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /legal-holds": { "minVersion": "2.17", @@ -5562,7 +9071,16 @@ "name": "2.18", "description": "2.18", "realms": "2.19" - } + }, + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "realms" + ] }, "DELETE /legal-holds": { "minVersion": "2.17", @@ -5571,7 +9089,12 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /legal-holds": { "minVersion": "2.17", @@ -5585,7 +9108,17 @@ "name": "2.18", "description": "2.18", "realms": "2.19" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "id", + "name", + "realms" + ] }, "GET /fleets/members": { "minVersion": "2.17", @@ -5602,7 +9135,20 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "fleet_ids": "Fleet_ids", + "fleet_names": "Fleet_names", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /fleets/members": { "minVersion": "2.17", @@ -5613,6 +9159,11 @@ }, "bodyProperties": { "members": "2.17" + }, + "parameterComponents": { + "fleet_ids": "Fleet_ids", + "fleet_names": "Fleet_names", + "X-Request-ID": "XRequestId" } }, "DELETE /fleets/members": { @@ -5623,7 +9174,13 @@ "member_names": "2.17", "unreachable": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "unreachable": "Unreachable", + "X-Request-ID": "XRequestId" + } }, "GET /tls-policies": { "minVersion": "2.17", @@ -5639,7 +9196,19 @@ "purity_defined": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "effective": "Effective_tls_policy", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "purity_defined": "Purity_defined", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /tls-policies": { "minVersion": "2.17", @@ -5662,6 +9231,16 @@ "trusted_client_certificate_authority": "2.18", "verify_client_certificate_trust": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /tls-policies": { @@ -5671,7 +9250,12 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /tls-policies": { "minVersion": "2.17", @@ -5695,6 +9279,17 @@ "trusted_client_certificate_authority": "2.18", "verify_client_certificate_trust": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /qos-policies": { @@ -5711,7 +9306,19 @@ "allow_errors": "2.23", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /qos-policies": { "minVersion": "2.17", @@ -5731,6 +9338,18 @@ "max_total_ops_per_sec": "2.17", "realms": "2.19", "context": "2.23" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /qos-policies": { @@ -5741,7 +9360,13 @@ "names": "2.17", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /qos-policies": { "minVersion": "2.17", @@ -5762,6 +9387,19 @@ "max_total_ops_per_sec": "2.17", "realms": "2.19", "context": "2.23" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /fleets/fleet-key": { @@ -5775,14 +9413,26 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /fleets/fleet-key": { "minVersion": "2.17", "parameters": { "X-Request-ID": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /tls-policies/members": { "minVersion": "2.17", @@ -5798,7 +9448,19 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-roles": { "minVersion": "2.17", @@ -5814,7 +9476,19 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-roles": { "minVersion": "2.17", @@ -5825,6 +9499,11 @@ }, "bodyProperties": { "max_session_duration": "2.17" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-roles": { @@ -5835,7 +9514,13 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /object-store-roles": { "minVersion": "2.17", @@ -5854,6 +9539,20 @@ "prn": "2.17", "account": "2.17", "max_session_duration": "2.17" + }, + "readOnlyBodyProperties": [ + "context", + "created", + "id", + "name", + "prn", + "trusted_entities" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /object-store-access-policies/object-store-roles": { @@ -5872,7 +9571,21 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-access-policies/object-store-roles": { "minVersion": "2.17", @@ -5884,7 +9597,15 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /object-store-access-policies/object-store-roles": { "minVersion": "2.17", @@ -5896,7 +9617,15 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/open-files": { "minVersion": "2.17", @@ -5913,7 +9642,20 @@ "session_names": "2.17", "user_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "client_names": "Client_names", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "ids": "Ids", + "limit": "Limit", + "paths": "Open_files_paths", + "protocols": "Protocols_required", + "session_names": "Session_names", + "user_names": "Open_files_user_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/open-files": { "minVersion": "2.17", @@ -5921,7 +9663,11 @@ "X-Request-ID": "2.17", "ids": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "X-Request-ID": "XRequestId" + } }, "GET /remote-arrays": { "minVersion": "2.17", @@ -5937,7 +9683,18 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "PATCH /file-system-replica-links": { "minVersion": "2.17", @@ -5951,7 +9708,17 @@ "remote_names": "2.17", "replicate_now": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "replicate_now": "Replicate_now", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/connectors/performance": { "minVersion": "2.17", @@ -5968,7 +9735,20 @@ "start_time": "2.17", "total_only": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /fleets": { "minVersion": "2.17", @@ -5983,7 +9763,18 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids_single", + "limit": "Limit", + "names": "Names_single", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /fleets": { "minVersion": "2.17", @@ -5991,7 +9782,11 @@ "X-Request-ID": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names_single", + "X-Request-ID": "XRequestId" + } }, "DELETE /fleets": { "minVersion": "2.17", @@ -6000,7 +9795,12 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" + } }, "PATCH /fleets": { "minVersion": "2.17", @@ -6011,6 +9811,11 @@ }, "bodyProperties": { "name": "2.17" + }, + "parameterComponents": { + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" } }, "GET /qos-policies/members": { @@ -6030,7 +9835,22 @@ "allow_errors": "2.23", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Member_types_qos", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/connectors": { "minVersion": "2.17", @@ -6044,7 +9864,17 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /network-interfaces/connectors": { "minVersion": "2.17", @@ -6062,7 +9892,18 @@ "port_speed": "2.18", "transceiver_type": "2.18", "lanes_per_port": "2.20" - } + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "connector_type", + "id", + "name", + "transceiver_type" + ] }, "GET /sso/oidc/idps": { "minVersion": "2.17", @@ -6076,7 +9917,17 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /sso/oidc/idps": { "minVersion": "2.17", @@ -6089,6 +9940,13 @@ "services": "2.17", "prn": "2.17", "enabled": "2.17" + }, + "readOnlyBodyProperties": [ + "prn" + ], + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /sso/oidc/idps": { @@ -6098,7 +9956,12 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /sso/oidc/idps": { "minVersion": "2.17", @@ -6113,6 +9976,14 @@ "prn": "2.17", "enabled": "2.17", "name": "2.17" + }, + "readOnlyBodyProperties": [ + "prn" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /object-store-roles/object-store-access-policies": { @@ -6131,7 +10002,21 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-roles/object-store-access-policies": { "minVersion": "2.17", @@ -6143,7 +10028,15 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /object-store-roles/object-store-access-policies": { "minVersion": "2.17", @@ -6155,7 +10048,15 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -6174,7 +10075,22 @@ "role_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "indices": "Indices", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_names": "Policy_names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -6192,7 +10108,18 @@ "effect": "2.18", "policy": "2.18", "principals": "2.18" - } + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names", + "policy_names": "Policy_names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "effect" + ] }, "DELETE /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -6205,7 +10132,16 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "indices": "Indices", + "names": "Names", + "policy_names": "Policy_names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -6224,7 +10160,19 @@ "effect": "2.18", "policy": "2.18", "principals": "2.18" - } + }, + "parameterComponents": { + "context_names": "Context_names", + "indices": "Indices", + "names": "Names", + "policy_names": "Policy_names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "X-Request-ID": "XRequestId" + }, + "readOnlyBodyProperties": [ + "effect" + ] }, "PATCH /object-store-roles/object-store-trust-policies/upload": { "minVersion": "2.17", @@ -6235,7 +10183,14 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-roles/object-store-trust-policies": { "minVersion": "2.17", @@ -6252,7 +10207,20 @@ "role_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/tls-policies": { "minVersion": "2.17", @@ -6268,7 +10236,19 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /network-interfaces/tls-policies": { "minVersion": "2.17", @@ -6279,7 +10259,14 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /network-interfaces/tls-policies": { "minVersion": "2.17", @@ -6290,7 +10277,14 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-roles/object-store-trust-policies/download": { "minVersion": "2.17", @@ -6300,7 +10294,13 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/connectors/settings": { "minVersion": "2.17", @@ -6314,7 +10314,17 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /legal-holds/held-entities": { "minVersion": "2.17", @@ -6328,7 +10338,17 @@ "names": "2.17", "paths": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "paths": "Paths", + "X-Request-ID": "XRequestId" + } }, "POST /legal-holds/held-entities": { "minVersion": "2.17", @@ -6341,7 +10361,16 @@ "paths": "2.17", "recursive": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "ids": "Ids", + "names": "Names", + "paths": "Paths", + "recursive": "Legal_holds_recursive", + "X-Request-ID": "XRequestId" + } }, "PATCH /legal-holds/held-entities": { "minVersion": "2.17", @@ -6355,7 +10384,17 @@ "recursive": "2.17", "released": "2.17" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "ids": "Ids", + "names": "Names", + "paths": "Paths", + "recursive": "Legal_holds_recursive", + "released": "Legal_holds_release", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/clients/s3-specific-performance": { "minVersion": "2.18", @@ -6367,7 +10406,15 @@ "sort": "2.18", "total_only": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /arrays/erasures": { "minVersion": "2.18", @@ -6377,7 +10424,13 @@ "preserve_configuration_data": "2.18", "skip_phonehome_check": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "eradicate_all_data": "Eradicate_all_data_required", + "preserve_configuration_data": "Preserve_configuration_data_required", + "skip_phonehome_check": "Skip_phonehome_check", + "X-Request-ID": "XRequestId" + } }, "PATCH /arrays/erasures": { "minVersion": "2.18", @@ -6387,21 +10440,33 @@ "eradicate_all_data": "2.18", "finalize": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "delete_sanitization_certificate": "Delete_sanitization_certificate_required", + "eradicate_all_data": "Eradicate_all_data_required", + "finalize": "Finalize_array_erasure_required", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/erasures": { "minVersion": "2.18", "parameters": { "X-Request-ID": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "DELETE /arrays/erasures": { "minVersion": "2.18", "parameters": { "X-Request-ID": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /audit-file-systems-policy-operations": { "minVersion": "2.18", @@ -6416,7 +10481,18 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/space/storage-classes": { "minVersion": "2.18", @@ -6432,7 +10508,19 @@ "storage_class_names": "2.18", "total_only": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "storage_class_names": "StorageClassNames", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /network-interfaces/network-connection-statistics": { "minVersion": "2.18", @@ -6448,7 +10536,19 @@ "remote_port": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "current_state": "NetworkConnectionStatisticsCurrent_state", + "filter": "Filter", + "limit": "Limit", + "local_host": "NetworkConnectionStatisticsLocal_host", + "local_port": "NetworkConnectionStatisticsLocal_port", + "offset": "Offset", + "remote_host": "NetworkConnectionStatisticsRemote_host", + "remote_port": "NetworkConnectionStatisticsRemote_port", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /nodes": { "minVersion": "2.18", @@ -6463,7 +10563,18 @@ "sort": "2.18", "total_only": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "PATCH /nodes": { "minVersion": "2.18", @@ -6485,6 +10596,21 @@ "unique": "2.18", "chassis_serial_number": "2.23", "node_key": "2.27" + }, + "readOnlyBodyProperties": [ + "capacity", + "chassis_serial_number", + "data_addresses", + "details", + "id", + "raw_capacity", + "status", + "unique" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "POST /nodes/batch": { @@ -6493,7 +10619,11 @@ "X-Request-ID": "2.18", "add_to_groups": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "add_to_groups": "Add_to_groups", + "X-Request-ID": "XRequestId" + } }, "GET /node-groups": { "minVersion": "2.18", @@ -6507,7 +10637,17 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /node-groups": { "minVersion": "2.18", @@ -6515,7 +10655,11 @@ "X-Request-ID": "2.18", "names": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /node-groups": { "minVersion": "2.18", @@ -6526,6 +10670,11 @@ }, "bodyProperties": { "name": "2.18" + }, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "DELETE /node-groups": { @@ -6535,7 +10684,12 @@ "ids": "2.18", "names": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /node-groups/nodes": { "minVersion": "2.18", @@ -6551,7 +10705,19 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "node_group_ids": "Node_group_ids", + "node_group_names": "Node_group_names", + "node_ids": "Node_ids", + "node_names": "Node_names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /node-groups/nodes": { "minVersion": "2.18", @@ -6562,7 +10728,14 @@ "node_ids": "2.18", "node_names": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "node_group_ids": "Node_group_ids", + "node_group_names": "Node_group_names", + "node_ids": "Node_ids", + "node_names": "Node_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /node-groups/nodes": { "minVersion": "2.18", @@ -6573,7 +10746,14 @@ "node_ids": "2.18", "node_names": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "node_group_ids": "Node_group_ids", + "node_group_names": "Node_group_names", + "node_ids": "Node_ids", + "node_names": "Node_names", + "X-Request-ID": "XRequestId" + } }, "GET /node-groups/uses": { "minVersion": "2.18", @@ -6587,7 +10767,17 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /storage-class-tiering-policies": { "minVersion": "2.18", @@ -6601,7 +10791,17 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /storage-class-tiering-policies": { "minVersion": "2.18", @@ -6619,6 +10819,16 @@ "archival_rules": "2.18", "retrieval_rules": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /storage-class-tiering-policies": { @@ -6628,7 +10838,12 @@ "ids": "2.18", "names": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /storage-class-tiering-policies": { "minVersion": "2.18", @@ -6647,6 +10862,17 @@ "archival_rules": "2.18", "retrieval_rules": "2.18", "realms": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /storage-class-tiering-policies/members": { @@ -6665,7 +10891,21 @@ "policy_names": "2.18", "sort": "2.18" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /admins/management-access-policies": { "minVersion": "2.19", @@ -6683,7 +10923,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /admins/management-access-policies": { "minVersion": "2.19", @@ -6695,7 +10949,15 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /admins/management-access-policies": { "minVersion": "2.19", @@ -6707,7 +10969,15 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -6723,7 +10993,19 @@ "policy_names": "2.19", "sort": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -6734,7 +11016,14 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -6745,7 +11034,14 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies": { "minVersion": "2.19", @@ -6761,7 +11057,19 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies": { "minVersion": "2.19", @@ -6780,6 +11088,17 @@ "realms": "2.19", "aggregation_strategy": "2.19", "rules": "2.19" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /management-access-policies": { @@ -6790,7 +11109,13 @@ "names": "2.19", "context_names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names_get", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /management-access-policies": { "minVersion": "2.19", @@ -6812,6 +11137,20 @@ "aggregation_strategy": "2.19", "rules": "2.19", "context": "2.24" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /management-access-policies/admins": { @@ -6830,7 +11169,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies/admins": { "minVersion": "2.19", @@ -6842,7 +11195,15 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /management-access-policies/admins": { "minVersion": "2.19", @@ -6854,7 +11215,15 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -6870,7 +11239,19 @@ "policy_names": "2.19", "sort": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -6881,7 +11262,14 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -6892,7 +11280,14 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies/members": { "minVersion": "2.19", @@ -6910,7 +11305,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /qos-policies/buckets": { "minVersion": "2.19", @@ -6928,7 +11337,21 @@ "allow_errors": "2.23", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /realms": { "minVersion": "2.19", @@ -6946,7 +11369,21 @@ "allow_errors": "2.24", "context_names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "POST /realms": { "minVersion": "2.19", @@ -6955,7 +11392,12 @@ "names": "2.19", "without_default_access_list": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "names": "Names_required", + "without_default_access_list": "Without_default_access_list", + "X-Request-ID": "XRequestId" + } }, "DELETE /realms": { "minVersion": "2.19", @@ -6964,7 +11406,12 @@ "ids": "2.19", "names": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /realms": { "minVersion": "2.19", @@ -6978,6 +11425,14 @@ "name": "2.19", "default_inbound_tls_policy": "2.19", "destroyed": "2.19" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /realms/space": { @@ -6996,7 +11451,21 @@ "total_only": "2.19", "type": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "total_only": "Total_only", + "type": "Type" + } }, "GET /realms/space/storage-classes": { "minVersion": "2.19", @@ -7015,7 +11484,22 @@ "storage_class_names": "2.19", "total_only": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "end_time": "End_time", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "resolution": "Resolution", + "sort": "Sort", + "start_time": "Start_time", + "storage_class_names": "StorageClassNames", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /resource-accesses": { "minVersion": "2.19", @@ -7028,7 +11512,16 @@ "offset": "2.19", "sort": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit_scale", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "DELETE /resource-accesses": { "minVersion": "2.19", @@ -7036,14 +11529,21 @@ "X-Request-ID": "2.19", "ids": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "X-Request-ID": "XRequestId" + } }, "POST /resource-accesses/batch": { "minVersion": "2.19", "parameters": { "X-Request-ID": "2.19" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /audit-object-store-policies": { "minVersion": "2.20", @@ -7059,7 +11559,19 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /audit-object-store-policies": { "minVersion": "2.20", @@ -7077,6 +11589,17 @@ "policy_type": "2.20", "realms": "2.20", "log_targets": "2.20" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /audit-object-store-policies": { @@ -7087,7 +11610,13 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /audit-object-store-policies": { "minVersion": "2.20", @@ -7108,6 +11637,18 @@ "log_targets": "2.20", "add_log_targets": "2.20", "remove_log_targets": "2.20" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /audit-object-store-policies/members": { @@ -7126,7 +11667,21 @@ "policy_names": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /audit-object-store-policies/members": { "minVersion": "2.20", @@ -7138,7 +11693,15 @@ "policy_ids": "2.20", "policy_names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /audit-object-store-policies/members": { "minVersion": "2.20", @@ -7150,7 +11713,15 @@ "policy_ids": "2.20", "policy_names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /bucket-audit-filter-actions": { "minVersion": "2.20", @@ -7165,7 +11736,18 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /buckets/audit-filters": { "minVersion": "2.20", @@ -7182,7 +11764,20 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /buckets/audit-filters": { "minVersion": "2.20", @@ -7196,6 +11791,13 @@ "bodyProperties": { "actions": "2.20", "s3_prefixes": "2.20" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /buckets/audit-filters": { @@ -7207,7 +11809,14 @@ "context_names": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /buckets/audit-filters": { "minVersion": "2.20", @@ -7221,6 +11830,13 @@ "bodyProperties": { "actions": "2.20", "s3_prefixes": "2.20" + }, + "parameterComponents": { + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "POST /certificates/certificate-signing-requests": { @@ -7238,6 +11854,9 @@ "organizational_unit": "2.20", "state": "2.20", "subject_alternative_names": "2.20" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /log-targets/file-systems": { @@ -7254,7 +11873,19 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /log-targets/file-systems": { "minVersion": "2.20", @@ -7269,6 +11900,14 @@ "file_system": "2.20", "keep_for": "2.20", "keep_size": "2.20" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /log-targets/file-systems": { @@ -7279,7 +11918,13 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /log-targets/file-systems": { "minVersion": "2.20", @@ -7295,6 +11940,15 @@ "file_system": "2.20", "keep_for": "2.20", "keep_size": "2.20" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /log-targets/object-store": { @@ -7311,7 +11965,19 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /log-targets/object-store": { "minVersion": "2.20", @@ -7326,6 +11992,14 @@ "bucket": "2.20", "log_name_prefix": "2.20", "log_rotate": "2.20" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /log-targets/object-store": { @@ -7336,7 +12010,13 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /log-targets/object-store": { "minVersion": "2.20", @@ -7352,6 +12032,15 @@ "bucket": "2.20", "log_name_prefix": "2.20", "log_rotate": "2.20" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /network-interfaces/neighbors": { @@ -7366,7 +12055,17 @@ "sort": "2.20", "total_item_count": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "local_port_names": "Local_port_names", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "GET /object-store-account-exports": { "minVersion": "2.20", @@ -7382,7 +12081,19 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /object-store-account-exports": { "minVersion": "2.20", @@ -7397,6 +12108,14 @@ "bodyProperties": { "export_enabled": "2.20", "server": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /object-store-account-exports": { @@ -7407,7 +12126,13 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /object-store-account-exports": { "minVersion": "2.20", @@ -7420,6 +12145,12 @@ "bodyProperties": { "export_enabled": "2.20", "policy": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "PATCH /object-store-virtual-hosts": { @@ -7437,6 +12168,15 @@ "attached_servers": "2.20", "hostname": "2.20", "remove_attached_servers": "2.20" + }, + "readOnlyBodyProperties": [ + "id" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "POST /qos-policies/members": { @@ -7450,7 +12190,16 @@ "policy_names": "2.20", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Member_types_qos_no_buckets", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /qos-policies/members": { "minVersion": "2.20", @@ -7463,7 +12212,16 @@ "policy_names": "2.20", "context_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Member_types_qos_no_buckets", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /realms/defaults": { "minVersion": "2.20", @@ -7479,7 +12237,19 @@ "realm_names": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "PATCH /realms/defaults": { "minVersion": "2.20", @@ -7493,6 +12263,16 @@ "context": "2.20", "object_store": "2.20", "realm": "2.20" + }, + "readOnlyBodyProperties": [ + "context", + "realm" + ], + "parameterComponents": { + "context_names": "Context_names", + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "X-Request-ID": "XRequestId" } }, "GET /s3-export-policies": { @@ -7509,7 +12289,19 @@ "offset": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /s3-export-policies": { "minVersion": "2.20", @@ -7521,6 +12313,11 @@ "bodyProperties": { "enabled": "2.20", "rules": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /s3-export-policies": { @@ -7531,7 +12328,13 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /s3-export-policies": { "minVersion": "2.20", @@ -7545,6 +12348,12 @@ "enabled": "2.20", "name": "2.20", "rules": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /s3-export-policies/rules": { @@ -7562,7 +12371,20 @@ "policy_names": "2.20", "sort": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /s3-export-policies/rules": { "minVersion": "2.20", @@ -7577,6 +12399,13 @@ "actions": "2.20", "effect": "2.20", "resources": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /s3-export-policies/rules": { @@ -7588,7 +12417,14 @@ "policy_ids": "2.20", "policy_names": "2.20" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /s3-export-policies/rules": { "minVersion": "2.20", @@ -7603,6 +12439,13 @@ "actions": "2.20", "effect": "2.20", "resources": "2.20" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "GET /data-eviction-policies": { @@ -7619,7 +12462,19 @@ "offset": "2.21", "sort": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /data-eviction-policies": { "minVersion": "2.21", @@ -7637,6 +12492,17 @@ "policy_type": "2.21", "realms": "2.21", "keep_size": "2.21" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /data-eviction-policies": { @@ -7647,7 +12513,13 @@ "ids": "2.21", "names": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /data-eviction-policies": { "minVersion": "2.21", @@ -7667,6 +12539,19 @@ "realms": "2.21", "context": "2.21", "keep_size": "2.21" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /data-eviction-policies/file-systems": { @@ -7685,7 +12570,21 @@ "policy_names": "2.21", "sort": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /data-eviction-policies/file-systems": { "minVersion": "2.21", @@ -7697,7 +12596,15 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /data-eviction-policies/file-systems": { "minVersion": "2.21", @@ -7709,7 +12616,15 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /data-eviction-policies/members": { "minVersion": "2.21", @@ -7727,7 +12642,21 @@ "policy_names": "2.21", "sort": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/data-eviction-policies": { "minVersion": "2.21", @@ -7745,7 +12674,21 @@ "policy_names": "2.21", "sort": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems/data-eviction-policies": { "minVersion": "2.21", @@ -7757,7 +12700,15 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/data-eviction-policies": { "minVersion": "2.21", @@ -7769,7 +12720,15 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /admins/management-authentication-policies": { "minVersion": "2.22", @@ -7787,7 +12746,21 @@ "policy_names": "2.22", "sort": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /admins/management-authentication-policies": { "minVersion": "2.22", @@ -7799,7 +12772,15 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /admins/management-authentication-policies": { "minVersion": "2.22", @@ -7811,7 +12792,15 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /arrays/management-authentication-policies": { "minVersion": "2.22", @@ -7829,7 +12818,21 @@ "policy_names": "2.22", "sort": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /arrays/management-authentication-policies": { "minVersion": "2.22", @@ -7841,7 +12844,15 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /arrays/management-authentication-policies": { "minVersion": "2.22", @@ -7853,7 +12864,15 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /management-authentication-policies": { "minVersion": "2.22", @@ -7869,7 +12888,19 @@ "offset": "2.22", "sort": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-authentication-policies": { "minVersion": "2.22", @@ -7887,6 +12918,17 @@ "policy_type": "2.22", "realms": "2.22", "ssh": "2.22" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /management-authentication-policies": { @@ -7897,7 +12939,13 @@ "ids": "2.22", "names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /management-authentication-policies": { "minVersion": "2.22", @@ -7917,6 +12965,19 @@ "realms": "2.22", "ssh": "2.22", "context": "2.22" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /management-authentication-policies/members": { @@ -7936,7 +12997,22 @@ "policy_names": "2.22", "sort": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Management_access_policies_member_types", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-authentication-policies/members": { "minVersion": "2.22", @@ -7949,7 +13025,16 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Management_access_policies_member_types", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /management-authentication-policies/members": { "minVersion": "2.22", @@ -7962,7 +13047,16 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_types": "Management_access_policies_member_types", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /presets/workload": { "minVersion": "2.23", @@ -7972,7 +13066,13 @@ "ids": "2.23", "names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names_get", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PUT /presets/workload": { "minVersion": "2.23", @@ -8001,6 +13101,18 @@ "volume_configurations": "2.23", "workload_tags": "2.23", "workload_type": "2.23" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "revision" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids_single", + "names": "Names_single", + "skip_verify_deployable": "Preset_workload_skip_verify_deployable", + "X-Request-ID": "XRequestId" } }, "POST /presets/workload": { @@ -8026,6 +13138,15 @@ "volume_configurations": "2.23", "workload_tags": "2.23", "workload_type": "2.23" + }, + "readOnlyBodyProperties": [ + "revision" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_single_required", + "skip_verify_deployable": "Preset_workload_skip_verify_deployable", + "X-Request-ID": "XRequestId" } }, "DELETE /presets/workload": { @@ -8036,7 +13157,13 @@ "ids": "2.23", "names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" + } }, "PATCH /presets/workload": { "minVersion": "2.23", @@ -8048,6 +13175,12 @@ }, "bodyProperties": { "name": "2.23" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" } }, "GET /resiliency-groups": { @@ -8062,7 +13195,17 @@ "offset": "2.23", "sort": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /resiliency-groups/members": { "minVersion": "2.23", @@ -8078,7 +13221,19 @@ "resiliency_group_names": "2.23", "sort": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "resiliency_group_ids": "Resiliency_group_ids", + "resiliency_group_names": "Resiliency_group_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /workloads": { "minVersion": "2.23", @@ -8092,7 +13247,17 @@ "limit": "2.23", "names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "POST /workloads": { "minVersion": "2.23", @@ -8105,6 +13270,13 @@ }, "bodyProperties": { "parameters": "2.23" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_single_required", + "preset_ids": "Preset_ids", + "preset_names": "Preset_names", + "X-Request-ID": "XRequestId" } }, "DELETE /workloads": { @@ -8115,7 +13287,13 @@ "ids": "2.23", "names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" + } }, "PATCH /workloads": { "minVersion": "2.23", @@ -8128,6 +13306,12 @@ "bodyProperties": { "destroyed": "2.23", "name": "2.23" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids_single", + "names": "Names_single", + "X-Request-ID": "XRequestId" } }, "GET /workloads/placement-recommendations": { @@ -8141,7 +13325,16 @@ "limit": "2.23", "names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "POST /workloads/placement-recommendations": { "minVersion": "2.23", @@ -8169,6 +13362,23 @@ "results": "2.23", "results_limit": "2.23", "status": "2.23" + }, + "readOnlyBodyProperties": [ + "context", + "created", + "expires", + "id", + "more_results_available", + "name", + "placement_names", + "progress", + "results", + "status" + ], + "parameterComponents": { + "context_names": "Context_names", + "placement_names": "Placement_names", + "X-Request-ID": "XRequestId" } }, "GET /workloads/tags": { @@ -8181,7 +13391,15 @@ "resource_ids": "2.23", "resource_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "namespaces": "Namespaces", + "resource_ids": "Resource_ids", + "resource_names": "Resource_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /workloads/tags": { "minVersion": "2.23", @@ -8193,7 +13411,15 @@ "resource_ids": "2.23", "resource_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "keys": "Keys", + "namespaces": "Namespaces_delete", + "resource_ids": "Resource_ids", + "resource_names": "Resource_names", + "X-Request-ID": "XRequestId" + } }, "PUT /workloads/tags/batch": { "minVersion": "2.23", @@ -8203,7 +13429,13 @@ "resource_ids": "2.23", "resource_names": "2.23" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "resource_ids": "Resource_ids", + "resource_names": "Resource_names", + "X-Request-ID": "XRequestId" + } }, "GET /directory-services/local/directory-services": { "minVersion": "2.24", @@ -8221,7 +13453,21 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destroyed": "Destroyed", + "filter": "Filter", + "ids": "IdsSemiRequired", + "limit": "Limit", + "names": "NamesSemiRequired", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/local/directory-services": { "minVersion": "2.24", @@ -8232,6 +13478,11 @@ }, "bodyProperties": { "domain": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/local/directory-services": { @@ -8242,7 +13493,13 @@ "ids": "2.24", "names": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "IdsSemiRequired", + "names": "NamesSemiRequired", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services/local/directory-services": { "minVersion": "2.24", @@ -8261,6 +13518,20 @@ "realms": "2.24", "server": "2.24", "domain": "2.24" + }, + "readOnlyBodyProperties": [ + "context", + "destroyed", + "id", + "realms", + "server", + "time_remaining" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "IdsSemiRequired", + "names": "NamesSemiRequired", + "X-Request-ID": "XRequestId" } }, "GET /directory-services/local/groups": { @@ -8280,7 +13551,22 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "gids": "Gids", + "ids": "IdsSemiRequired", + "limit": "Limit", + "names": "NamesSemiRequired", + "offset": "Offset", + "sids": "Sids", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/local/groups": { "minVersion": "2.24", @@ -8294,6 +13580,13 @@ "bodyProperties": { "email": "2.24", "gid": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/local/groups": { @@ -8307,7 +13600,16 @@ "names": "2.24", "sids": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "gids": "Gids", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "NamesGeneral", + "sids": "Sids", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services/local/groups": { "minVersion": "2.24", @@ -8327,6 +13629,20 @@ "gid": "2.24", "name": "2.24", "sid": "2.24" + }, + "readOnlyBodyProperties": [ + "built_in", + "context", + "sid" + ], + "parameterComponents": { + "context_names": "Context_names", + "gids": "Gids", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "NamesGeneral", + "sids": "Sids", + "X-Request-ID": "XRequestId" } }, "GET /directory-services/local/groups/members": { @@ -8349,7 +13665,25 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "group_gids": "Group_gids", + "group_names": "Local_group_names", + "group_sids": "Group_sids", + "limit": "Limit", + "member_ids": "Local_member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "member_types": "LocalMemberTypes", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/local/groups/members": { "minVersion": "2.24", @@ -8364,6 +13698,15 @@ }, "bodyProperties": { "members": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "group_gids": "Group_gids", + "group_names": "Local_group_names", + "group_sids": "Group_sids", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/local/groups/members": { @@ -8381,7 +13724,20 @@ "member_sids": "2.24", "member_types": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "group_gids": "Group_gids", + "group_names": "Local_group_names", + "group_sids": "Group_sids", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "member_ids": "Local_member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "member_types": "LocalMemberTypes", + "X-Request-ID": "XRequestId" + } }, "GET /directory-services/local/users": { "minVersion": "2.24", @@ -8400,7 +13756,22 @@ "total_item_count": "2.24", "uids": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "IdsSemiRequired", + "limit": "Limit", + "names": "NamesSemiRequired", + "offset": "Offset", + "sids": "Sids", + "sort": "Sort", + "total_item_count": "Total_item_count", + "uids": "Uids", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/local/users": { "minVersion": "2.24", @@ -8417,6 +13788,13 @@ "password": "2.24", "primary_group": "2.24", "uid": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/local/users": { @@ -8430,7 +13808,16 @@ "sids": "2.24", "uids": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "NamesGeneral", + "sids": "Sids", + "uids": "Uids", + "X-Request-ID": "XRequestId" + } }, "PATCH /directory-services/local/users": { "minVersion": "2.24", @@ -8450,6 +13837,15 @@ "password": "2.24", "primary_group": "2.24", "uid": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "names": "NamesGeneral", + "sids": "Sids", + "uids": "Uids", + "X-Request-ID": "XRequestId" } }, "GET /directory-services/local/users/members": { @@ -8471,7 +13867,24 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "group_gids": "Group_gids", + "group_names": "Local_group_names", + "group_sids": "Group_sids", + "limit": "Limit", + "member_ids": "Local_member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /directory-services/local/users/members": { "minVersion": "2.24", @@ -8487,6 +13900,15 @@ "bodyProperties": { "groups": "2.24", "is_primary": "2.24" + }, + "parameterComponents": { + "context_names": "Context_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "member_ids": "Local_member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/local/users/members": { @@ -8504,7 +13926,20 @@ "member_sids": "2.24", "member_types": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "group_gids": "Group_gids", + "group_names": "Local_group_names", + "group_sids": "Group_sids", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "member_ids": "Local_member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "member_types": "LocalMemberTypes", + "X-Request-ID": "XRequestId" + } }, "GET /support-diagnostics/settings": { "minVersion": "2.24", @@ -8517,14 +13952,26 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "PATCH /support-diagnostics/settings": { "minVersion": "2.24", "parameters": { "X-Request-ID": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /software-bundle": { "minVersion": "2.24", @@ -8538,7 +13985,17 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /software-bundle": { "minVersion": "2.24", @@ -8547,6 +14004,9 @@ }, "bodyProperties": { "source": "2.24" + }, + "parameterComponents": { + "X-Request-ID": "XRequestId" } }, "GET /software-patches": { @@ -8562,7 +14022,18 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /software-patches": { "minVersion": "2.24", @@ -8571,7 +14042,10 @@ "allow_ha_reduction": "2.24", "name": "2.24" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/user-group-quota-policies": { "minVersion": "2.25", @@ -8589,7 +14063,21 @@ "policy_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-systems/user-group-quota-policies": { "minVersion": "2.25", @@ -8603,7 +14091,17 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "delete_existing_user_group_quota_settings": "Delete_existing_user_group_quota_settings", + "ignore_usage": "Ignore_usage_user_group_quotas", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /file-systems/user-group-quota-policies": { "minVersion": "2.25", @@ -8615,7 +14113,15 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-junctions": { "minVersion": "2.25", @@ -8635,7 +14141,23 @@ "origin_file_system_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "destination_file_system_ids": "Destination_file_system_ids", + "destination_file_system_names": "Destination_file_system_names", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "origin_file_system_ids": "Origin_file_system_ids", + "origin_file_system_names": "Origin_file_system_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /file-system-junctions": { "minVersion": "2.25", @@ -8655,6 +14177,21 @@ "junction_origin_path": "2.25", "origin_file_system": "2.25", "status": "2.25" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "origin_file_system", + "status" + ], + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_single_required", + "origin_file_system_ids": "Origin_file_system_ids_single", + "origin_file_system_names": "Origin_file_system_names_single", + "use_existing_directory": "Use_existing_directory", + "X-Request-ID": "XRequestId" } }, "DELETE /file-system-junctions": { @@ -8665,7 +14202,13 @@ "ids": "2.25", "names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-group-quotas": { "minVersion": "2.25", @@ -8683,7 +14226,21 @@ "offset": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "gids": "Gids", + "group_names": "Group_names", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/groups": { "minVersion": "2.25", @@ -8701,7 +14258,21 @@ "offset": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "gids": "Gids", + "group_names": "Group_names", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /file-system-user-quotas": { "minVersion": "2.25", @@ -8720,7 +14291,22 @@ "user_names": "2.25", "user_sids": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "uids": "Uids", + "user_names": "User_names", + "user_sids": "User_sids", + "X-Request-ID": "XRequestId" + } }, "GET /file-systems/users": { "minVersion": "2.25", @@ -8739,7 +14325,22 @@ "user_names": "2.25", "user_sids": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "uids": "Uids", + "user_names": "User_names", + "user_sids": "User_sids", + "X-Request-ID": "XRequestId" + } }, "GET /realm-connections": { "minVersion": "2.25", @@ -8756,7 +14357,20 @@ "remote_realm_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "local_realm_ids": "Local_realm_ids", + "local_realm_names": "Local_realm_names", + "offset": "Offset", + "remote_realm_ids": "Remote_realm_ids", + "remote_realm_names": "Remote_realm_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /realm-connections": { "minVersion": "2.25", @@ -8773,6 +14387,19 @@ "remote_realm": "2.25", "status": "2.25", "connection_key": "2.25" + }, + "readOnlyBodyProperties": [ + "id", + "local_realm", + "remote_realm", + "status" + ], + "parameterComponents": { + "local_realm_ids": "Local_realm_ids", + "local_realm_names": "Local_realm_names", + "remote_realm_ids": "Remote_realm_ids", + "remote_realm_names": "Remote_realm_names", + "X-Request-ID": "XRequestId" } }, "DELETE /realm-connections": { @@ -8784,7 +14411,14 @@ "remote_realm_ids": "2.25", "remote_realm_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "local_realm_ids": "Local_realm_ids", + "local_realm_names": "Local_realm_names", + "remote_realm_ids": "Remote_realm_ids", + "remote_realm_names": "Remote_realm_names", + "X-Request-ID": "XRequestId" + } }, "GET /realm-connections/connection-key": { "minVersion": "2.25", @@ -8798,7 +14432,17 @@ "realm_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /realm-connections/connection-key": { "minVersion": "2.25", @@ -8807,7 +14451,12 @@ "realm_ids": "2.25", "realm_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /realm-connections/connection-key": { "minVersion": "2.25", @@ -8816,7 +14465,12 @@ "realm_ids": "2.25", "realm_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "X-Request-ID": "XRequestId" + } }, "GET /remote-realms": { "minVersion": "2.25", @@ -8833,7 +14487,20 @@ "sort": "2.25", "total_only": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "on": "On_", + "on_ids": "On_ids", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /user-group-quota-policies": { "minVersion": "2.25", @@ -8849,7 +14516,19 @@ "offset": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /user-group-quota-policies": { "minVersion": "2.25", @@ -8869,6 +14548,19 @@ "location": "2.25", "policy_type": "2.25", "rules": "2.25" + }, + "readOnlyBodyProperties": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "parameterComponents": { + "context_names": "Context_names", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "PATCH /user-group-quota-policies": { @@ -8892,6 +14584,22 @@ "version": "2.25", "context": "2.25", "rules": "2.25" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "ignore_usage": "Ignore_usage_user_group_quotas", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" } }, "DELETE /user-group-quota-policies": { @@ -8903,7 +14611,14 @@ "names": "2.25", "versions": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Versions", + "X-Request-ID": "XRequestId" + } }, "GET /user-group-quota-policies/rules": { "minVersion": "2.25", @@ -8919,7 +14634,19 @@ "offset": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /user-group-quota-policies/rules": { "minVersion": "2.25", @@ -8936,6 +14663,13 @@ "quota_limit": "2.25", "quota_type": "2.25", "subject": "2.25" + }, + "parameterComponents": { + "context_names": "Context_names", + "ignore_usage": "Ignore_usage_user_group_quotas", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" } }, "DELETE /user-group-quota-policies/rules": { @@ -8948,7 +14682,15 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /user-group-quota-policies/rules": { "minVersion": "2.25", @@ -8963,6 +14705,16 @@ "name": "2.25", "notifications": "2.25", "quota_limit": "2.25" + }, + "readOnlyBodyProperties": [ + "id", + "name" + ], + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "ignore_usage": "Ignore_usage_user_group_quotas", + "names": "Names" } }, "GET /user-group-quota-policies/file-systems": { @@ -8981,7 +14733,21 @@ "policy_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /user-group-quota-policies/file-systems": { "minVersion": "2.25", @@ -8995,7 +14761,17 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "delete_existing_user_group_quota_settings": "Delete_existing_user_group_quota_settings", + "ignore_usage": "Ignore_usage_user_group_quotas", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "DELETE /user-group-quota-policies/file-systems": { "minVersion": "2.25", @@ -9007,7 +14783,15 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "X-Request-ID": "XRequestId" + } }, "GET /user-group-quota-policies/members": { "minVersion": "2.25", @@ -9025,7 +14809,21 @@ "policy_names": "2.25", "sort": "2.25" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies/roles": { "minVersion": "2.26", @@ -9041,7 +14839,19 @@ "offset": "2.26", "sort": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies/roles": { "minVersion": "2.26", @@ -9052,6 +14862,11 @@ }, "bodyProperties": { "description": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names_required", + "X-Request-ID": "XRequestId" } }, "DELETE /management-access-policies/roles": { @@ -9062,7 +14877,13 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies/roles/permissions": { "minVersion": "2.26", @@ -9080,7 +14901,21 @@ "role_names": "2.26", "sort": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "role_ids": "Management_access_role_ids", + "role_names": "Management_access_role_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies/roles/permissions": { "minVersion": "2.26", @@ -9093,6 +14928,12 @@ "bodyProperties": { "actions": "2.26", "resource": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "role_ids": "Management_access_role_ids", + "role_names": "Management_access_role_names", + "X-Request-ID": "XRequestId" } }, "DELETE /management-access-policies/roles/permissions": { @@ -9103,7 +14944,13 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "PATCH /management-access-policies/roles/permissions": { "minVersion": "2.26", @@ -9115,6 +14962,12 @@ }, "bodyProperties": { "actions": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "GET /management-access-policies/roles/permissions/supported-resources": { @@ -9130,7 +14983,18 @@ "offset": "2.26", "sort": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "GET /management-access-policies/rules": { "minVersion": "2.26", @@ -9148,7 +15012,21 @@ "policy_names": "2.26", "sort": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "names": "Names", + "offset": "Offset", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "sort": "Sort", + "X-Request-ID": "XRequestId" + } }, "POST /management-access-policies/rules": { "minVersion": "2.26", @@ -9170,6 +15048,22 @@ "index": "2.26", "policy": "2.26", "policy_version": "2.26" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "policy", + "policy_version" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "versions": "Concurrency_versions", + "X-Request-ID": "XRequestId" } }, "DELETE /management-access-policies/rules": { @@ -9181,7 +15075,14 @@ "names": "2.26", "versions": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Concurrency_versions", + "X-Request-ID": "XRequestId" + } }, "PATCH /management-access-policies/rules": { "minVersion": "2.26", @@ -9203,6 +15104,22 @@ "index": "2.26", "policy": "2.26", "policy_version": "2.26" + }, + "readOnlyBodyProperties": [ + "context", + "id", + "name", + "policy", + "policy_version" + ], + "parameterComponents": { + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "versions": "Concurrency_versions", + "X-Request-ID": "XRequestId" } }, "PATCH /remote-arrays": { @@ -9214,7 +15131,14 @@ "to_topology_group_ids": "2.26", "to_topology_group_names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "ids": "Ids", + "names": "Names", + "to_topology_group_ids": "To_topology_group_ids", + "to_topology_group_names": "To_topology_group_names", + "X-Request-ID": "XRequestId" + } }, "GET /support/system-manifest": { "minVersion": "2.26", @@ -9229,7 +15153,18 @@ "sort": "2.26", "total_only": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "allow_errors": "Allow_errors", + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "offset": "Offset", + "sort": "Sort", + "total_only": "Total_only", + "X-Request-ID": "XRequestId" + } }, "GET /topology-groups": { "minVersion": "2.26", @@ -9246,7 +15181,20 @@ "sort": "2.26", "total_item_count": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "ids": "Ids", + "limit": "Limit", + "list_all_parents": "List_all_parents", + "names": "Names", + "offset": "Offset", + "sort": "Sort", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /topology-groups": { "minVersion": "2.26", @@ -9257,7 +15205,14 @@ "parent_topology_group_ids": "2.26", "parent_topology_group_names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "names": "Names", + "parent_topology_group_ids": "Parent_topology_group_ids", + "parent_topology_group_names": "Parent_topology_group_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /topology-groups": { "minVersion": "2.26", @@ -9271,6 +15226,14 @@ }, "bodyProperties": { "topology_group": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "to_parent_topology_group_ids": "To_parent_topology_group_ids", + "to_parent_topology_group_names": "To_parent_topology_group_names", + "X-Request-ID": "XRequestId" } }, "DELETE /topology-groups": { @@ -9281,7 +15244,13 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" + } }, "GET /topology-groups/arrays": { "minVersion": "2.26", @@ -9299,7 +15268,21 @@ "topology_group_names": "2.26", "total_item_count": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "sort": "Sort", + "topology_group_ids": "Topology_group_ids", + "topology_group_names": "Topology_group_names", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "GET /topology-groups/members": { "minVersion": "2.26", @@ -9318,7 +15301,22 @@ "topology_group_names": "2.26", "total_item_count": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names_get", + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "recursive": "Topology_group_members_recursive", + "sort": "Sort", + "topology_group_ids": "Topology_group_ids", + "topology_group_names": "Topology_group_names", + "total_item_count": "Total_item_count", + "X-Request-ID": "XRequestId" + } }, "POST /topology-groups/members": { "minVersion": "2.26", @@ -9330,6 +15328,12 @@ }, "bodyProperties": { "members": "2.26" + }, + "parameterComponents": { + "context_names": "Context_names", + "topology_group_ids": "Topology_group_ids", + "topology_group_names": "Topology_group_names", + "X-Request-ID": "XRequestId" } }, "DELETE /topology-groups/members": { @@ -9342,7 +15346,15 @@ "topology_group_ids": "2.26", "topology_group_names": "2.26" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "context_names": "Context_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "topology_group_ids": "Topology_group_ids", + "topology_group_names": "Topology_group_names", + "X-Request-ID": "XRequestId" + } }, "PATCH /active-directory/test": { "minVersion": "2.27", @@ -9355,6 +15367,12 @@ "bodyProperties": { "ca_certificate": "2.27", "ca_certificate_group": "2.27" + }, + "parameterComponents": { + "context_names": "Context_names", + "ids": "Ids", + "names": "Names", + "X-Request-ID": "XRequestId" } }, "POST /fleets/members/batch": { @@ -9365,7 +15383,13 @@ "fleet_names": "2.27", "validate_target_certificates": "2.27" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "fleet_ids": "Fleet_ids", + "fleet_names": "Fleet_names", + "validate_target_certificates": "Validate_target_certificates", + "X-Request-ID": "XRequestId" + } }, "GET /storage-classes/members": { "minVersion": "2.27", @@ -9380,7 +15404,18 @@ "sort": "2.27", "storage_class_names": "2.27" }, - "bodyProperties": {} + "bodyProperties": {}, + "parameterComponents": { + "continuation_token": "Continuation_token", + "filter": "Filter", + "limit": "Limit", + "member_ids": "Member_ids", + "member_names": "Member_names", + "offset": "Offset", + "sort": "Sort", + "storage_class_names": "Storage_class_names", + "X-Request-ID": "XRequestId" + } } } } diff --git a/Tests/Build-PfbCapabilityMap.Tests.ps1 b/Tests/Build-PfbCapabilityMap.Tests.ps1 index a6dd8f6..879ec18 100644 --- a/Tests/Build-PfbCapabilityMap.Tests.ps1 +++ b/Tests/Build-PfbCapabilityMap.Tests.ps1 @@ -148,6 +148,182 @@ Describe 'Build-PfbCapabilityMap: manifest shape' -Skip:($PSVersionTable.PSVersi } } +Describe 'Build-PfbCapabilityMap: readOnly/deprecated last-seen-wins and parameterComponents' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + New-Item -ItemType Directory -Path 'TestDrive:\roSpecs' -Force | Out-Null + + # v9.0 (older): 'name' is readOnly, 'category' is writable. 'legacy-endpoint' exists + # with a readOnly 'oldFlag' and is REMOVED entirely from v9.1 (tests "endpoint + # disappears from later specs keeps its last-seen readOnly value"). No deprecated + # fields anywhere yet. GET /widgets has a $ref'd 'filter' query parameter. + $specV1 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.0' } + paths = [ordered]@{ + '/api/9.0/widgets' = [ordered]@{ + get = @{ + parameters = @(@{ '$ref' = '#/components/parameters/Widget_filter' }) + } + patch = @{ + requestBody = @{ + content = @{ + 'application/json' = @{ + schema = @{ + type = 'object' + properties = [ordered]@{ + name = @{ type = 'string'; readOnly = $true } + category = @{ type = 'string' } + } + } + } + } + } + } + } + '/api/9.0/legacy-endpoint' = [ordered]@{ + patch = @{ + requestBody = @{ + content = @{ + 'application/json' = @{ + schema = @{ + type = 'object' + properties = [ordered]@{ + oldFlag = @{ type = 'string'; readOnly = $true } + } + } + } + } + } + } + } + } + components = [ordered]@{ + parameters = [ordered]@{ + Widget_filter = [ordered]@{ name = 'filter'; 'in' = 'query'; schema = @{ type = 'string' } } + } + } + } + + # v9.1 (newer): 'name' flips to writable, 'category' flips to readOnly, and a brand + # new 'secretNote' field is deprecated. 'legacy-endpoint' is gone entirely. + $specV2 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.1' } + paths = [ordered]@{ + '/api/9.1/widgets' = [ordered]@{ + get = @{ + parameters = @(@{ '$ref' = '#/components/parameters/Widget_filter' }) + } + patch = @{ + requestBody = @{ + content = @{ + 'application/json' = @{ + schema = @{ + type = 'object' + properties = [ordered]@{ + name = @{ type = 'string' } + category = @{ type = 'string'; readOnly = $true } + secretNote = @{ type = 'string'; deprecated = $true } + } + } + } + } + } + } + } + } + components = [ordered]@{ + parameters = [ordered]@{ + Widget_filter = [ordered]@{ name = 'filter'; 'in' = 'query'; schema = @{ type = 'string' } } + } + } + } + + $specV1 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\roSpecs\fb9.0.json' + $specV2 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\roSpecs\fb9.1.json' + + & $builderScript -SpecsDirectory 'TestDrive:\roSpecs' -OutputPath 'TestDrive:\roOutput\manifest.json' + $script:roManifest = Get-Content -Path 'TestDrive:\roOutput\manifest.json' -Raw | ConvertFrom-Json -Depth 20 + } + + It 'the decision-1 regression: a field readOnly in the older version and writable in the newer ends up ABSENT from readOnlyBodyProperties' { + $roManifest.endpoints.'PATCH /widgets'.readOnlyBodyProperties | Should -Not -Contain 'name' + } + + It 'the mirror case: a field writable in the older version and readOnly in the newer ends up PRESENT in readOnlyBodyProperties' { + $roManifest.endpoints.'PATCH /widgets'.readOnlyBodyProperties | Should -Contain 'category' + } + + It 'an endpoint that disappears from later specs keeps its last-seen readOnlyBodyProperties value' { + $roManifest.endpoints.'PATCH /legacy-endpoint'.readOnlyBodyProperties | Should -Be @('oldFlag') + } + + It 'omits deprecatedBodyProperties entirely when empty' { + $roManifest.endpoints.'PATCH /legacy-endpoint'.PSObject.Properties.Name | Should -Not -Contain 'deprecatedBodyProperties' + } + + It 'includes deprecatedBodyProperties when non-empty' { + $roManifest.endpoints.'PATCH /widgets'.deprecatedBodyProperties | Should -Be @('secretNote') + } + + It 'emits parameterComponents per endpoint with the { paramName: componentName } shape' { + $roManifest.endpoints.'GET /widgets'.parameterComponents.filter | Should -Be 'Widget_filter' + } + + It 'leaves the pre-existing minVersion/parameters/bodyProperties keys unaffected by the new keys' { + $entry = $roManifest.endpoints.'PATCH /widgets' + $entry.minVersion | Should -Be '9.0' + $entry.bodyProperties.name | Should -Be '9.0' + $entry.bodyProperties.category | Should -Be '9.0' + $entry.bodyProperties.secretNote | Should -Be '9.1' + } +} + +Describe 'Build-PfbCapabilityMap: -MaxVersion cap' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + New-Item -ItemType Directory -Path 'TestDrive:\capSpecs' -Force | Out-Null + + $specV1 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.0' } + paths = [ordered]@{ '/api/9.0/widgets' = [ordered]@{ get = @{} } } + } + $specV2 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.1' } + paths = [ordered]@{ '/api/9.1/widgets' = [ordered]@{ get = @{} } } + } + # A newer version that must be excluded by the cap -- adds a brand-new endpoint. + $specV3 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.2' } + paths = [ordered]@{ + '/api/9.2/widgets' = [ordered]@{ get = @{} } + '/api/9.2/newthing' = [ordered]@{ get = @{} } + } + } + + $specV1 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\capSpecs\fb9.0.json' + $specV2 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\capSpecs\fb9.1.json' + $specV3 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\capSpecs\fb9.2.json' + + & $builderScript -SpecsDirectory 'TestDrive:\capSpecs' -OutputPath 'TestDrive:\capOutput\manifest.json' -MaxVersion '9.1' + $script:capManifest = Get-Content -Path 'TestDrive:\capOutput\manifest.json' -Raw | ConvertFrom-Json -Depth 20 + } + + It 'excludes a cached spec newer than -MaxVersion from generatedFrom' { + $capManifest.generatedFrom | Should -Be @('9.0', '9.1') + } + + It 'excludes an endpoint that only exists in a version newer than -MaxVersion' { + $capManifest.endpoints.PSObject.Properties.Name | Should -Not -Contain 'GET /newthing' + } + + It 'still includes endpoints from versions at or below -MaxVersion' { + $capManifest.endpoints.PSObject.Properties.Name | Should -Contain 'GET /widgets' + } +} + Describe 'Real committed capability map (skips gracefully if not yet generated)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { BeforeAll { $repoRoot = Split-Path -Parent $PSScriptRoot diff --git a/tools/Build-PfbCapabilityMap.ps1 b/tools/Build-PfbCapabilityMap.ps1 index 79d81bf..17bb105 100644 --- a/tools/Build-PfbCapabilityMap.ps1 +++ b/tools/Build-PfbCapabilityMap.ps1 @@ -23,14 +23,27 @@ .PARAMETER OutputPath Where to write the manifest. Defaults to Data/PfbCapabilityMap.json relative to the repo root (one level up from tools/). +.PARAMETER MaxVersion + Optional inclusive upper bound on REST version to ingest, e.g. '2.27'. Compared + numerically (Major, then Minor as integers) using the same parsing already used to + sort $specFiles below -- NOT a string compare, since '2.9' sorts above '2.27' as a + string. Defaults to $null, meaning no cap: every cached spec under -SpecsDirectory is + ingested (unchanged default behaviour, so CI is unaffected). Exists so a rebuild can be + pinned to a known spec set without deleting newer files out of tools/specs/ -- + adopting a newly-cached version's data is a separate, deliberate decision, not a side + effect of this script simply seeing a new file on disk. .EXAMPLE ./tools/Build-PfbCapabilityMap.ps1 +.EXAMPLE + ./tools/Build-PfbCapabilityMap.ps1 -MaxVersion 2.27 #> [CmdletBinding()] param( [string]$SpecsDirectory, - [string]$OutputPath + [string]$OutputPath, + + [string]$MaxVersion ) $ErrorActionPreference = 'Stop' @@ -66,6 +79,21 @@ $specFiles = $specFiles | ForEach-Object { } } | Where-Object { $_ } | Sort-Object Major, Minor +if ($MaxVersion) { + if ($MaxVersion -notmatch '^(\d+)\.(\d+)$') { + throw "-MaxVersion must be in 'Major.Minor' form (e.g. '2.27'), got '$MaxVersion'." + } + # Reuse the same Major/Minor int parsing as the sort above -- a string compare would + # wrongly place e.g. '2.9' above '2.27' (this exact bug has been found twice already). + $capMajor = [int]$Matches[1] + $capMinor = [int]$Matches[2] + $beforeCount = @($specFiles).Count + $specFiles = @($specFiles | Where-Object { + $_.Major -lt $capMajor -or ($_.Major -eq $capMajor -and $_.Minor -le $capMinor) + }) + Write-Host "MaxVersion $MaxVersion applied: including $($specFiles.Count) of $beforeCount cached specs." -ForegroundColor Yellow +} + $endpoints = [ordered]@{} $processedVersions = [System.Collections.Generic.List[string]]::new() @@ -98,6 +126,68 @@ foreach ($entry in $specFiles) { $entryRecord.bodyProperties[$propName] = $version } } + + # Decision 1 -- readOnly is NOT monotonic across versions: 58 of 1264 analysed + # (endpoint, body-field) pairs flip their readOnly flag somewhere in fb2.0-2.27, + # and most flips go read-only -> writable. Unlike parameters/bodyProperties above + # (genuinely monotonic "introduced in version X", correctly guarded by first-sight + # above), readOnlyBodyProperties must be assigned UNCONDITIONALLY every iteration + # so the newest-processed spec always wins -- never guarded by "only if not + # already present". Persisting first-sight here would silently suppress + # genuinely settable fields from the actionable gap list -- e.g. + # PATCH /api-clients|max_role, read-only in older specs and writable in 2.27 -- + # and a missing gap is far worse than a noisy one. Because $specFiles is + # processed in ascending version order, "unconditional" is simply "overwrite each + # time"; an endpoint absent from a later spec is simply not visited that + # iteration, so it naturally keeps its last-seen value for free. + # Emitted only when non-empty (same "keep the manifest lean" rule as deprecated + # below): most operations have no read-only body fields at all, and writing + # "readOnlyBodyProperties": [] on all ~520 of them would roughly 14x the actual + # ~15KB growth budget for zero information gain. Absence IS the empty-set here. + if ($cap.ReadOnlyBodyProperties -and @($cap.ReadOnlyBodyProperties).Count -gt 0) { + $entryRecord.readOnlyBodyProperties = @($cap.ReadOnlyBodyProperties | Sort-Object) + } + elseif ($entryRecord.Contains('readOnlyBodyProperties')) { + $entryRecord.Remove('readOnlyBodyProperties') + } + + # deprecated: emit the key only when non-empty (true for zero top-level + # request-body properties across all 28 analysed specs today -- the sole + # "deprecated" occurrence in the whole surface is a nested, readOnly, + # response-only field -- so this key will not appear in today's manifest at all, + # which is correct). Same last-seen-wins reasoning as readOnly: if the + # newest-seen version for this endpoint has no deprecated fields, remove any + # stale key from an earlier version rather than leaving it behind. + if ($cap.DeprecatedBodyProperties -and @($cap.DeprecatedBodyProperties).Count -gt 0) { + $entryRecord.deprecatedBodyProperties = @($cap.DeprecatedBodyProperties | Sort-Object) + } + elseif ($entryRecord.Contains('deprecatedBodyProperties')) { + $entryRecord.Remove('deprecatedBodyProperties') + } + + # parameterComponents: which $ref component backs each parameter (e.g. + # context_names -> Context_names_get). This describes the CURRENT wire shape, not + # "introduced in version X" -- a version number attached to it would be + # meaningless at best -- so it gets the same unconditional last-seen-wins + # treatment as readOnlyBodyProperties, not the first-sight guard. + # $cap.ParameterComponents is a typed Dictionary[string,string] (API parameter + # names as keys) -- .get_Keys() avoids the live Hashtable-shadowing bug elsewhere + # in this codebase (a key literally named "keys"/"count"/"values" hijacking + # member access), and is used defensively even though a typed Dictionary does not + # actually exhibit that shadowing the way a plain Hashtable does. + # Emitted only when non-empty, same lean-manifest reasoning as readOnly above: a + # parameter contributes an entry here only if it was declared via a "$ref" to a + # components/parameters/* component -- plenty of endpoints have none. + $paramComponents = [ordered]@{} + foreach ($paramName in ($cap.ParameterComponents.get_Keys() | Sort-Object)) { + $paramComponents[$paramName] = $cap.ParameterComponents[$paramName] + } + if ($paramComponents.Count -gt 0) { + $entryRecord.parameterComponents = $paramComponents + } + elseif ($entryRecord.Contains('parameterComponents')) { + $entryRecord.Remove('parameterComponents') + } } $processedVersions.Add($version) From 22aedaa3bb845b150c66a652ea5dc22bd7e5c45d Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sat, 25 Jul 2026 19:14:33 -0700 Subject: [PATCH 04/17] fix(tools): deduplicate parameterComponents into defaults + per-endpoint overrides Follow-up to de752d0: that commit's per-endpoint parameterComponents key grew the manifest +186.87 KB against a ~15KB budget (a 12x overshoot), because nearly every parameter is $ref'd to one of a small set of shared components (Filter, Limit, Sort, ...). Measured on the committed manifest: 4102 total (endpoint, parameter) -> component pairs collapse to just 224 distinct pairs and 179 distinct parameter names -- ~90% pure duplication. Replaces the per-endpoint parameterComponents key with a top-level parameterComponentDefaults table ({ paramName: componentName }, the most frequent component per parameter name across all endpoints, ties broken ALPHABETICALLY for determinism regardless of endpoint processing order) plus a per-endpoint parameterComponentOverrides key (emitted only when non-empty) holding just the 299 (endpoint, parameter) pairs that actually differ from their default, across 250 endpoints. Resolution contract (documented in both the script's comment block and tools/README.md): override wins if present, else default, else no known component. The subtle case this design requires and that the round-trip test exists to catch: a parameter declared inline (no "$ref", so genuinely no component) can still share its NAME with some other endpoint's $ref'd component, and would therefore inherit that unrelated default if simply omitted from overrides. The builder emits an explicit JSON null override for these 3 cases (of 4109 total parameter declarations in fb2.0-2.27) so "absent" (check the default) and "explicitly none" (null) stay distinguishable. Verified with a dedicated mutation test: disabling the null-override code path breaks both the null-override assertion and the round-trip assertion. Added a committed round-trip test (Tests/Build-PfbCapabilityMap.Tests.ps1) that reconstructs every (endpoint, param) -> component pair from defaults + overrides against a hand-authored synthetic ground truth and asserts on the reconstructed set, not just counts -- this is the test that would have caught a dropped override; mutation-tested by dropping the null-override loop (2 assertions failed as expected) and separately by dropping the alphabetical tie-break secondary sort (3 assertions failed as expected, since a stable sort without it would return the wrong majority-tie winner and mis-set two endpoints' override/no-override status). Additionally ran an independent, from-scratch verification script (not committed -- ad hoc confidence check) that re-derives the (endpoint, param) -> component ground truth directly from all 28 cached specs without reusing any of the builder's own code, then diffs it against reconstruction from the regenerated manifest: 4109 pairs checked, 0 mismatches. Net result: manifest is 298,693 bytes, +45.82 KB over the pre-Task-3 baseline (251,777 bytes) -- readOnlyBodyProperties/deprecatedBodyProperties unchanged from de752d0 (+13.46 KB, on budget), parameterComponentDefaults (179 entries) + parameterComponentOverrides (302 entries across 250 endpoints, 3 of them explicit null) add the remaining ~32 KB, close to the ~25 KB dedup estimate. generatedFrom still 28 versions ending 2.27, endpointCount still 632, schemaVersion still 1. Determinism reconfirmed: three independent builds (two scratch + the committed file) are SHA256-identical. All 11 negative-canary fields re-verified absent from every readOnlyBodyProperties. GET /file-systems|context_names resolves to Context_names_get via an OVERRIDE; PATCH /file-systems|context_names resolves to Context_names via the DEFAULT -- confirming these two are exactly the default/override pair the brief described. Co-Authored-By: Claude Opus 5 (1M context) --- Data/PfbCapabilityMap.json | 6439 ++++-------------------- Tests/Build-PfbCapabilityMap.Tests.ps1 | 152 +- tools/Build-PfbCapabilityMap.ps1 | 165 +- tools/README.md | 49 + 4 files changed, 1370 insertions(+), 5435 deletions(-) diff --git a/Data/PfbCapabilityMap.json b/Data/PfbCapabilityMap.json index 7c0e161..3ee99be 100644 --- a/Data/PfbCapabilityMap.json +++ b/Data/PfbCapabilityMap.json @@ -31,6 +31,187 @@ "2.27" ], "endpointCount": 632, + "parameterComponentDefaults": { + "add_to_groups": "Add_to_groups", + "admin_ids": "Admin_ids", + "admin_names": "Admin_names", + "allow_errors": "Allow_errors", + "analysis_period_end_time": "Analysis_period_end_time", + "analysis_period_start_time": "Analysis_period_start_time", + "before_rule_id": "Before_rule_id", + "before_rule_name": "Before_rule_name", + "bucket_ids": "Bucket_ids", + "bucket_names": "Bucket_names", + "cancel_in_progress_storage_class_transition": "Cancel_storage_class_transition", + "cancel_in_progress_transfers": "Cancel_in_progress_transfers", + "cascade_delete": "Cascade_delete", + "certificate_group_ids": "Certificate_group_ids", + "certificate_group_names": "Certificate_group_names", + "certificate_ids": "Certificate_ids", + "certificate_names": "Certificate_names", + "client_names": "Client_names", + "component_name": "Ping_trace_component", + "confirm_date": "Confirm_date", + "context_names": "Context_names", + "continuation_token": "Continuation_token", + "count": "Ping_count", + "create_ds": "Create_ds", + "create_local_directory_service": "Create_local_directory_service", + "current_state": "NetworkConnectionStatisticsCurrent_state", + "default_exports": "Default_exports", + "delete_existing_user_group_quota_settings": "Delete_existing_user_group_quota_settings", + "delete_link_on_eradication": "Delete_link_on_eradication", + "delete_sanitization_certificate": "Delete_sanitization_certificate_required", + "destination": "Ping_trace_destination", + "destination_file_system_ids": "Destination_file_system_ids", + "destination_file_system_names": "Destination_file_system_names", + "destroy_snapshots": "Destroy_snapshots", + "destroyed": "Destroyed", + "discard_detailed_permissions": "Discard_detailed_permissions", + "discard_non_snapshotted_data": "Discard_non_snapshotted_data", + "discover_mtu": "Mtu", + "disruptive": "Disruptive", + "effective": "Effective_tls_policy", + "end_time": "End_time", + "enforce_action_restrictions": "Enforce_action_restrictions", + "eradicate_all_data": "Eradicate_all_data_required", + "exclude_rules": "Exclude_rules", + "expose_api_token": "Expose_api_token", + "file_system_ids": "File_system_ids", + "file_system_names": "File_system_names", + "filter": "Filter", + "finalize": "Finalize_array_erasure_required", + "fleet_ids": "Fleet_ids", + "fleet_names": "Fleet_names", + "fragment_packet": "Fragment_packet", + "full_access": "Full_access", + "generate_new_key": "Generate_new_key", + "gids": "Gids", + "group_gids": "Group_gids", + "group_names": "Group_names", + "group_sids": "Group_sids", + "ids": "Ids", + "ignore_usage": "Ignore_usage_user_group_quotas", + "include_snapshot": "Include_snapshot", + "indices": "Indices", + "inodes": "Inodes", + "join_existing_account": "Join_existing_acct_ad", + "keys": "Keys", + "keytab_ids": "Keytab_ids", + "keytab_names": "Keytab_names", + "latest_replica": "Latest_replica", + "limit": "Limit", + "list_all_parents": "List_all_parents", + "local_bucket_ids": "Local_bucket_ids", + "local_bucket_names": "Local_bucket_names", + "local_directory_service_ids": "Local_directory_service_ids", + "local_directory_service_names": "Local_directory_service_names", + "local_file_system_ids": "Local_file_system_ids", + "local_file_system_names": "Local_file_system_names", + "local_host": "NetworkConnectionStatisticsLocal_host", + "local_only": "Local_only_ad", + "local_port": "NetworkConnectionStatisticsLocal_port", + "local_port_names": "Local_port_names", + "local_realm_ids": "Local_realm_ids", + "local_realm_names": "Local_realm_names", + "member_ids": "Member_ids", + "member_names": "Member_names", + "member_sids": "Member_sids", + "member_types": "LocalMemberTypes", + "method": "Method", + "name_prefixes": "Name_prefixes", + "names": "Names", + "names_or_owner_names": "Names_or_owner_names", + "namespaces": "Namespaces", + "node_group_ids": "Node_group_ids", + "node_group_names": "Node_group_names", + "node_ids": "Node_ids", + "node_names": "Node_names", + "offset": "Offset", + "on": "On_", + "on_ids": "On_ids", + "origin_file_system_ids": "Origin_file_system_ids", + "origin_file_system_names": "Origin_file_system_names", + "overwrite": "Overwrite", + "owner_ids": "Owner_ids", + "packet_size": "Packet_size", + "parent_topology_group_ids": "Parent_topology_group_ids", + "parent_topology_group_names": "Parent_topology_group_names", + "paths": "Paths", + "placement_names": "Placement_names", + "policy_ids": "Policy_ids", + "policy_names": "Policy_names", + "port": "Port", + "preserve_configuration_data": "Preserve_configuration_data_required", + "preset_ids": "Preset_ids", + "preset_names": "Preset_names", + "print_latency": "Print_latency", + "protocol": "Protocol", + "protocols": "Protocols", + "purity_defined": "Purity_defined", + "realm_ids": "Realm_ids", + "realm_names": "Realm_names", + "recursive": "Legal_holds_recursive", + "refresh": "Refresh", + "released": "Legal_holds_release", + "remote_bucket_names": "Remote_bucket_names", + "remote_credentials_ids": "Remote_credentials_ids", + "remote_credentials_names": "Remote_credentials_names", + "remote_default_exports": "Remote_default_exports", + "remote_file_system_ids": "Remote_file_system_ids", + "remote_file_system_names": "Remote_file_system_names", + "remote_host": "NetworkConnectionStatisticsRemote_host", + "remote_ids": "Remote_ids", + "remote_names": "Remote_names", + "remote_port": "NetworkConnectionStatisticsRemote_port", + "remote_realm_ids": "Remote_realm_ids", + "remote_realm_names": "Remote_realm_names", + "replicate_now": "Replicate_now", + "resiliency_group_ids": "Resiliency_group_ids", + "resiliency_group_names": "Resiliency_group_names", + "resolution": "Resolution", + "resolve_hostname": "Resolve_hostname", + "resource_ids": "Resource_ids", + "resource_names": "Resource_names", + "role_ids": "Object_store_role_ids", + "role_names": "Object_store_role_names", + "send": "Send", + "session_names": "Session_names", + "sids": "Sids", + "skip_phonehome_check": "Skip_phonehome_check", + "skip_verify_deployable": "Preset_workload_skip_verify_deployable", + "software_names": "Software_names", + "software_versions": "Software_versions", + "sort": "Sort", + "source": "Ping_trace_source", + "source_ids": "Source_ids", + "source_names": "Source_names", + "start_time": "Start_time", + "storage_class_names": "StorageClassNames", + "targets": "Targets", + "test_type": "Test_type", + "timeout": "Timeout", + "to_parent_topology_group_ids": "To_parent_topology_group_ids", + "to_parent_topology_group_names": "To_parent_topology_group_names", + "to_topology_group_ids": "To_topology_group_ids", + "to_topology_group_names": "To_topology_group_names", + "topology_group_ids": "Topology_group_ids", + "topology_group_names": "Topology_group_names", + "total_item_count": "Total_item_count", + "total_only": "Total_only", + "type": "Type", + "uids": "Uids", + "unreachable": "Unreachable", + "use_existing_directory": "Use_existing_directory", + "user_names": "User_names", + "user_sids": "User_sids", + "validate_target_certificates": "Validate_target_certificates", + "versions": "Versions", + "without_default_access_list": "Without_default_access_list", + "workload_ids": "Workload_ids", + "workload_names": "Workload_names", + "X-Request-ID": "XRequestId" + }, "endpoints": { "POST /oauth2/1.0/token": { "minVersion": "2.0", @@ -41,6 +222,9 @@ "grant_type": "2.0", "subject_token": "2.0", "subject_token_type": "2.0" + }, + "parameterComponentOverrides": { + "X-Request-ID": null } }, "GET /api/api_version": { @@ -48,10 +232,7 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /api/login": { "minVersion": "2.0", @@ -62,9 +243,6 @@ "bodyProperties": { "password": "2.26", "username": "2.26" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "POST /api/logout": { @@ -72,20 +250,14 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /api/login-banner": { "minVersion": "2.0", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /active-directory": { "minVersion": "2.0", @@ -99,17 +271,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /active-directory": { "minVersion": "2.0", @@ -119,13 +281,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "local_only": "Local_only_ad", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /active-directory": { "minVersion": "2.0", @@ -144,11 +300,6 @@ "global_catalog_servers": "2.12", "ca_certificate": "2.27", "ca_certificate_group": "2.27" - }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "POST /active-directory": { @@ -172,11 +323,6 @@ "global_catalog_servers": "2.12", "ca_certificate": "2.27", "ca_certificate_group": "2.27" - }, - "parameterComponents": { - "join_existing_account": "Join_existing_acct_ad", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "GET /active-directory/test": { @@ -193,16 +339,8 @@ "continuation_token": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /admins": { @@ -221,18 +359,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "expose_api_token": "Expose_api_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /admins": { @@ -251,12 +379,6 @@ "role": "2.15", "authorization_model": "2.24", "management_access_policies": "2.24" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "GET /admins/api-tokens": { @@ -275,18 +397,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "admin_ids": "Admin_ids", - "admin_names": "Admin_names", - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "expose_api_token": "Expose_api_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /admins/api-tokens": { @@ -298,14 +410,7 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "admin_ids": "Admin_ids", - "admin_names": "Admin_names", - "context_names": "Context_names", - "timeout": "Timeout", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /admins/api-tokens": { "minVersion": "2.0", @@ -315,13 +420,7 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "admin_ids": "Admin_ids", - "admin_names": "Admin_names", - "context_names": "Context_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /admins/cache": { "minVersion": "2.0", @@ -339,18 +438,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "refresh": "Refresh", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /admins/cache": { @@ -361,13 +450,7 @@ "X-Request-ID": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /alerts": { "minVersion": "2.0", @@ -381,17 +464,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /alerts": { "minVersion": "2.0", @@ -438,12 +511,7 @@ "summary", "updated", "variables" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /alert-watchers": { "minVersion": "2.0", @@ -457,17 +525,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /alert-watchers": { "minVersion": "2.0", @@ -478,9 +536,8 @@ "bodyProperties": { "minimum_notification_severity": "2.0" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /alert-watchers": { @@ -499,12 +556,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /alert-watchers": { "minVersion": "2.0", @@ -513,12 +565,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /alert-watchers/test": { "minVersion": "2.0", @@ -529,14 +576,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "ids": "Ids", - "names": "Names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /api-clients": { "minVersion": "2.0", @@ -550,17 +590,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /api-clients": { "minVersion": "2.0", @@ -574,10 +604,6 @@ "public_key": "2.0", "access_token_ttl_in_ms": "2.0", "access_policies": "2.19" - }, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" } }, "PATCH /api-clients": { @@ -606,12 +632,7 @@ "key_id", "name", "public_key" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /api-clients": { "minVersion": "2.0", @@ -620,12 +641,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /arrays": { "minVersion": "2.0", @@ -640,15 +656,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /arrays": { @@ -687,10 +696,7 @@ "security_update", "smb_mode", "version" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /arrays/clients/performance": { "minVersion": "2.0", @@ -704,14 +710,8 @@ "protocol": "2.18" }, "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "protocol": "Protocol_clients", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "protocol": "Protocol_clients" } }, "GET /arrays/eula": { @@ -724,15 +724,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /arrays/eula": { "minVersion": "2.0", @@ -745,10 +737,7 @@ }, "readOnlyBodyProperties": [ "agreement" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /array-connections": { "minVersion": "2.0", @@ -766,18 +755,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "offset": "Offset", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /array-connections": { @@ -811,12 +790,9 @@ "type", "version" ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", + "parameterComponentOverrides": { "remote_ids": "Remote_ids_deprecated", - "remote_names": "Remote_names_deprecated", - "X-Request-ID": "XRequestId" + "remote_names": "Remote_names_deprecated" } }, "POST /array-connections": { @@ -847,11 +823,7 @@ "status", "type", "version" - ], - "parameterComponents": { - "context_names": "Context_names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /array-connections": { "minVersion": "2.0", @@ -863,12 +835,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", + "parameterComponentOverrides": { "remote_ids": "Remote_ids_deprecated", - "remote_names": "Remote_names_deprecated", - "X-Request-ID": "XRequestId" + "remote_names": "Remote_names_deprecated" } }, "GET /array-connections/connection-key": { @@ -883,27 +852,14 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /array-connections/connection-key": { "minVersion": "2.0", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /array-connections/path": { "minVersion": "2.0", @@ -921,18 +877,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "offset": "Offset", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /array-connections/performance/replication": { @@ -954,21 +900,8 @@ "X-Request-ID": "2.14" }, "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "offset": "Offset", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "type": "Type_for_performance", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "type": "Type_for_performance" } }, "GET /arrays/http-specific-performance": { @@ -982,13 +915,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "end_time": "End_time", - "resolution": "Resolution", - "start_time": "Start_time", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/nfs-specific-performance": { @@ -1002,13 +930,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "end_time": "End_time", - "resolution": "Resolution", - "start_time": "Start_time", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/performance": { @@ -1023,14 +946,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "end_time": "End_time", - "protocol": "Protocol", - "resolution": "Resolution", - "start_time": "Start_time", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/performance/replication": { @@ -1045,14 +962,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "end_time": "End_time", - "resolution": "Resolution", - "start_time": "Start_time", - "type": "Type_for_performance", - "X-Request-ID": "XRequestId" + "type": "Type_for_performance" } }, "GET /arrays/s3-specific-performance": { @@ -1066,13 +978,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "end_time": "End_time", - "resolution": "Resolution", - "start_time": "Start_time", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/space": { @@ -1087,14 +994,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "end_time": "End_time", - "resolution": "Resolution", - "start_time": "Start_time", - "type": "Type", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/supported-time-zones": { @@ -1108,16 +1009,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /audits": { "minVersion": "2.0", @@ -1131,17 +1023,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /blades": { "minVersion": "2.0", @@ -1156,18 +1038,7 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets": { "minVersion": "2.0", @@ -1186,19 +1057,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets": { @@ -1217,10 +1077,8 @@ "retention_lock": "2.8", "eradication_config": "2.13" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /buckets": { @@ -1253,13 +1111,8 @@ "storage_class": "2.19", "qos_policy": "2.20" }, - "parameterComponents": { - "cancel_in_progress_storage_class_transition": "Cancel_storage_class_transition", - "context_names": "Context_names", - "ids": "Ids", - "ignore_usage": "Ignore_usage", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "ignore_usage": "Ignore_usage" } }, "DELETE /buckets": { @@ -1270,13 +1123,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/performance": { "minVersion": "2.0", @@ -1294,21 +1141,7 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/s3-specific-performance": { "minVersion": "2.0", @@ -1326,21 +1159,7 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /bucket-replica-links": { "minVersion": "2.0", @@ -1362,22 +1181,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "local_bucket_ids": "Local_bucket_ids", - "local_bucket_names": "Local_bucket_names", - "offset": "Offset", - "remote_bucket_names": "Remote_bucket_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /bucket-replica-links": { @@ -1394,15 +1199,6 @@ "bodyProperties": { "paused": "2.0", "cascading_enabled": "2.2" - }, - "parameterComponents": { - "context_names": "Context_names", - "local_bucket_ids": "Local_bucket_ids", - "local_bucket_names": "Local_bucket_names", - "remote_bucket_names": "Remote_bucket_names", - "remote_credentials_ids": "Remote_credentials_ids", - "remote_credentials_names": "Remote_credentials_names", - "X-Request-ID": "XRequestId" } }, "PATCH /bucket-replica-links": { @@ -1441,17 +1237,7 @@ "recovery_point", "status", "status_details" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "local_bucket_ids": "Local_bucket_ids", - "local_bucket_names": "Local_bucket_names", - "remote_bucket_names": "Remote_bucket_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /bucket-replica-links": { "minVersion": "2.0", @@ -1465,17 +1251,7 @@ "X-Request-ID": "2.17", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "local_bucket_ids": "Local_bucket_ids", - "local_bucket_names": "Local_bucket_names", - "remote_bucket_names": "Remote_bucket_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificates": { "minVersion": "2.0", @@ -1489,17 +1265,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /certificates": { "minVersion": "2.0", @@ -1539,11 +1305,7 @@ "status", "valid_from", "valid_to" - ], - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "PATCH /certificates": { "minVersion": "2.0", @@ -1586,13 +1348,7 @@ "status", "valid_from", "valid_to" - ], - "parameterComponents": { - "generate_new_key": "Generate_new_key", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /certificates": { "minVersion": "2.0", @@ -1601,12 +1357,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificates/certificate-groups": { "minVersion": "2.0", @@ -1622,19 +1373,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /certificates/certificate-groups": { "minVersion": "2.0", @@ -1645,14 +1384,7 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /certificates/certificate-groups": { "minVersion": "2.0", @@ -1663,14 +1395,7 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificates/uses": { "minVersion": "2.0", @@ -1684,17 +1409,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificate-groups": { "minVersion": "2.0", @@ -1708,17 +1423,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /certificate-groups": { "minVersion": "2.0", @@ -1726,11 +1431,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /certificate-groups": { "minVersion": "2.0", @@ -1739,12 +1440,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificate-groups/certificates": { "minVersion": "2.0", @@ -1760,19 +1456,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /certificate-groups/certificates": { "minVersion": "2.0", @@ -1783,14 +1467,7 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /certificate-groups/certificates": { "minVersion": "2.0", @@ -1801,14 +1478,7 @@ "certificate_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "certificate_group_ids": "Certificate_group_ids", - "certificate_group_names": "Certificate_group_names", - "certificate_ids": "Certificate_ids", - "certificate_names": "Certificate_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /certificate-groups/uses": { "minVersion": "2.0", @@ -1822,17 +1492,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /directory-services": { "minVersion": "2.0", @@ -1846,17 +1506,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /directory-services": { "minVersion": "2.0", @@ -1884,12 +1534,7 @@ "id", "name", "services" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /directory-services/roles": { "minVersion": "2.0", @@ -1906,17 +1551,11 @@ "names": "2.14" }, "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", + "parameterComponentOverrides": { "ids": "Ids_for_directory_service_roles", - "limit": "Limit", "names": "Names_for_directory_service_roles", - "offset": "Offset", "role_ids": "Role_ids", - "role_names": "Role_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "role_names": "Role_names" } }, "PATCH /directory-services/roles": { @@ -1936,18 +1575,17 @@ "name": "2.18", "management_access_policies": "2.19" }, - "parameterComponents": { - "ids": "Ids_for_directory_service_roles", - "names": "Names_for_directory_service_roles", - "role_ids": "Role_ids", - "role_names": "Role_names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "management_access_policies", "name" - ] + ], + "parameterComponentOverrides": { + "ids": "Ids_for_directory_service_roles", + "names": "Names_for_directory_service_roles", + "role_ids": "Role_ids", + "role_names": "Role_names" + } }, "GET /directory-services/test": { "minVersion": "2.0", @@ -1963,16 +1601,8 @@ "continuation_token": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /directory-services/test": { @@ -2007,18 +1637,7 @@ "id", "name", "services" - ], - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + ] }, "GET /dns": { "minVersion": "2.0", @@ -2035,17 +1654,8 @@ "context_names": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /dns": { @@ -2072,13 +1682,7 @@ "context", "id", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /file-systems": { "minVersion": "2.0", @@ -2099,21 +1703,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems": { @@ -2151,18 +1742,7 @@ }, "readOnlyBodyProperties": [ "requested_promotion_state" - ], - "parameterComponents": { - "context_names": "Context_names", - "default_exports": "Default_exports", - "discard_non_snapshotted_data": "Discard_non_snapshotted_data", - "include_snapshot": "Include_snapshot", - "names": "Names", - "overwrite": "Overwrite", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /file-systems": { "minVersion": "2.0", @@ -2172,13 +1752,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /file-systems": { "minVersion": "2.0", @@ -2225,16 +1799,8 @@ "promotion_status", "time_remaining" ], - "parameterComponents": { - "cancel_in_progress_storage_class_transition": "Cancel_storage_class_transition", - "context_names": "Context_names", - "delete_link_on_eradication": "Delete_link_on_eradication", - "discard_detailed_permissions": "Discard_detailed_permissions", - "discard_non_snapshotted_data": "Discard_non_snapshotted_data", - "ids": "Ids", - "ignore_usage": "Ignore_usage", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "ignore_usage": "Ignore_usage" } }, "GET /file-systems/groups/performance": { @@ -2252,17 +1818,9 @@ "X-Request-ID": "2.14" }, "bodyProperties": {}, - "parameterComponents": { - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", + "parameterComponentOverrides": { "gids": "Gids_not_strict", - "group_names": "Group_names_not_strict", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "group_names": "Group_names_not_strict" } }, "GET /file-systems/performance": { @@ -2282,22 +1840,7 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "protocol": "Protocol", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/policies": { "minVersion": "2.0", @@ -2316,19 +1859,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems/policies": { @@ -2341,15 +1873,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /file-systems/policies": { "minVersion": "2.0", @@ -2361,15 +1885,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/users/performance": { "minVersion": "2.0", @@ -2386,17 +1902,9 @@ "X-Request-ID": "2.14" }, "bodyProperties": {}, - "parameterComponents": { - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "total_only": "Total_only", + "parameterComponentOverrides": { "uids": "Uids_not_strict", - "user_names": "User_names_not_strict", - "X-Request-ID": "XRequestId" + "user_names": "User_names_not_strict" } }, "GET /file-system-replica-links": { @@ -2419,22 +1927,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "offset": "Offset", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-system-replica-links": { @@ -2471,18 +1965,7 @@ "recovery_point", "status", "status_details" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "remote_default_exports": "Remote_default_exports", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /file-system-replica-links/policies": { "minVersion": "2.0", @@ -2506,24 +1989,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-system-replica-links/policies": { @@ -2539,18 +2006,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /file-system-replica-links/policies": { "minVersion": "2.0", @@ -2565,18 +2021,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-system-replica-links/transfer": { "minVersion": "2.0", @@ -2596,20 +2041,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names_or_owner_names": "Names_or_owner_names", - "offset": "Offset", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-system-snapshots": { @@ -2630,20 +2063,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names_or_owner_names": "Names_or_owner_names", - "offset": "Offset", - "owner_ids": "Owner_ids", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-system-snapshots": { @@ -2658,14 +2079,6 @@ }, "bodyProperties": { "suffix": "2.0" - }, - "parameterComponents": { - "context_names": "Context_names", - "send": "Send", - "source_ids": "Source_ids", - "source_names": "Source_names", - "targets": "Targets", - "X-Request-ID": "XRequestId" } }, "DELETE /file-system-snapshots": { @@ -2676,13 +2089,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /file-system-snapshots": { "minVersion": "2.0", @@ -2716,14 +2123,7 @@ "policies", "suffix", "time_remaining" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "latest_replica": "Latest_replica", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /file-system-snapshots/policies": { "minVersion": "2.0", @@ -2742,19 +2142,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /file-system-snapshots/policies": { @@ -2767,15 +2156,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-system-snapshots/transfer": { "minVersion": "2.0", @@ -2793,18 +2174,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names_or_owner_names": "Names_or_owner_names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /file-system-snapshots/transfer": { @@ -2817,15 +2188,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /hardware": { "minVersion": "2.0", @@ -2839,17 +2202,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /hardware": { "minVersion": "2.0", @@ -2892,12 +2245,7 @@ "status", "temperature", "type" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /hardware-connectors": { "minVersion": "2.0", @@ -2911,17 +2259,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /hardware-connectors": { "minVersion": "2.0", @@ -2940,11 +2278,6 @@ "port_speed": "2.15", "lanes_per_port": "2.20" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "connector_type", "id", @@ -2964,17 +2297,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /keytabs": { "minVersion": "2.0", @@ -2983,12 +2306,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /keytabs": { "minVersion": "2.0", @@ -2998,10 +2316,6 @@ }, "bodyProperties": { "source": "2.0" - }, - "parameterComponents": { - "name_prefixes": "Name_prefixes", - "X-Request-ID": "XRequestId" } }, "GET /keytabs/download": { @@ -3011,12 +2325,7 @@ "keytab_names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "keytab_ids": "Keytab_ids", - "keytab_names": "Keytab_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /keytabs/upload": { "minVersion": "2.0", @@ -3026,10 +2335,6 @@ }, "bodyProperties": { "keytab_file": "2.16" - }, - "parameterComponents": { - "name_prefixes": "Name_prefixes", - "X-Request-ID": "XRequestId" } }, "GET /lifecycle-rules": { @@ -3049,19 +2354,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /lifecycle-rules": { @@ -3079,11 +2373,6 @@ "abort_incomplete_multipart_uploads_after": "2.1", "keep_current_version_for": "2.1", "keep_current_version_until": "2.1" - }, - "parameterComponents": { - "confirm_date": "Confirm_date", - "context_names": "Context_names", - "X-Request-ID": "XRequestId" } }, "PATCH /lifecycle-rules": { @@ -3104,15 +2393,6 @@ "abort_incomplete_multipart_uploads_after": "2.1", "keep_current_version_for": "2.1", "keep_current_version_until": "2.1" - }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "confirm_date": "Confirm_date", - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /lifecycle-rules": { @@ -3125,15 +2405,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /link-aggregation-groups": { "minVersion": "2.0", @@ -3147,17 +2419,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /link-aggregation-groups": { "minVersion": "2.0", @@ -3182,9 +2444,8 @@ "port_speed", "status" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /link-aggregation-groups": { @@ -3198,11 +2459,6 @@ "ports": "2.0", "add_ports": "2.0", "remove_ports": "2.0" - }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /link-aggregation-groups": { @@ -3212,12 +2468,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /logs": { "minVersion": "2.0", @@ -3226,12 +2477,7 @@ "start_time": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "end_time": "End_time", - "start_time": "Start_time", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces": { "minVersion": "2.0", @@ -3245,17 +2491,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /network-interfaces": { "minVersion": "2.0", @@ -3289,9 +2525,8 @@ "realms", "vlan" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /network-interfaces": { @@ -3306,11 +2541,6 @@ "services": "2.0", "server": "2.16", "attached_servers": "2.20" - }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /network-interfaces": { @@ -3320,12 +2550,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-access-keys": { "minVersion": "2.0", @@ -3341,16 +2566,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-access-keys": { @@ -3364,10 +2581,8 @@ "user": "2.0", "secret_access_key": "2.0" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Access_key_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Access_key_names" } }, "PATCH /object-store-access-keys": { @@ -3394,10 +2609,8 @@ "secret_access_key", "user" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /object-store-access-keys": { @@ -3408,10 +2621,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "GET /object-store-access-policies": { @@ -3430,18 +2641,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "exclude_rules": "Exclude_rules", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /object-store-access-policies/object-store-users": { @@ -3461,19 +2662,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-access-policies/object-store-users": { @@ -3486,15 +2676,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /object-store-access-policies/object-store-users": { "minVersion": "2.0", @@ -3506,15 +2688,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-accounts": { "minVersion": "2.0", @@ -3532,18 +2706,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-accounts": { @@ -3559,10 +2723,8 @@ "quota_limit": "2.8", "account_exports": "2.20" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /object-store-accounts": { @@ -3573,13 +2735,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-remote-credentials": { "minVersion": "2.0", @@ -3596,17 +2752,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-remote-credentials": { @@ -3620,10 +2767,8 @@ "access_key_id": "2.0", "secret_access_key": "2.0" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /object-store-remote-credentials": { @@ -3647,13 +2792,7 @@ "context", "id", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /object-store-remote-credentials": { "minVersion": "2.0", @@ -3663,13 +2802,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-users": { "minVersion": "2.0", @@ -3686,17 +2819,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-users": { @@ -3708,11 +2832,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "full_access": "Full_access", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /object-store-users": { @@ -3723,13 +2844,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-users/object-store-access-policies": { "minVersion": "2.0", @@ -3748,19 +2863,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-users/object-store-access-policies": { @@ -3773,15 +2877,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /object-store-users/object-store-access-policies": { "minVersion": "2.0", @@ -3793,15 +2889,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-virtual-hosts": { "minVersion": "2.0", @@ -3818,17 +2906,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-virtual-hosts": { @@ -3846,17 +2925,15 @@ "hostname": "2.20", "realms": "2.20" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "context", "id", "name", "realms" - ] + ], + "parameterComponentOverrides": { + "names": "Names_required" + } }, "DELETE /object-store-virtual-hosts": { "minVersion": "2.0", @@ -3866,13 +2943,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /policies": { "minVersion": "2.0", @@ -3891,19 +2962,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /policies": { @@ -3932,10 +2992,8 @@ "realms", "retention_lock" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /policies": { @@ -3946,13 +3004,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /policies": { "minVersion": "2.0", @@ -3984,14 +3036,7 @@ "policy_type", "realms", "retention_lock" - ], - "parameterComponents": { - "context_names": "Context_names", - "destroy_snapshots": "Destroy_snapshots", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /policies/file-systems": { "minVersion": "2.0", @@ -4010,19 +3055,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /policies/file-systems": { @@ -4035,15 +3069,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /policies/file-systems": { "minVersion": "2.0", @@ -4055,15 +3081,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /policies/file-system-snapshots": { "minVersion": "2.0", @@ -4082,19 +3100,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /policies/file-system-snapshots": { @@ -4107,15 +3114,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /policies/members": { "minVersion": "2.0", @@ -4141,26 +3140,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Member_types", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "member_types": "Member_types" } }, "GET /policies/file-system-replica-links": { @@ -4185,24 +3167,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /policies/file-system-replica-links": { @@ -4218,18 +3184,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /policies/file-system-replica-links": { "minVersion": "2.0", @@ -4244,18 +3199,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /quotas/groups": { "minVersion": "2.0", @@ -4275,20 +3219,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "gids": "Group_quota_gids", - "group_names": "Group_names", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "gids": "Group_quota_gids" } }, "POST /quotas/groups": { @@ -4308,13 +3241,8 @@ "readOnlyBodyProperties": [ "name" ], - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "gids": "Group_quota_gids", - "group_names": "Group_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "gids": "Group_quota_gids" } }, "DELETE /quotas/groups": { @@ -4329,14 +3257,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "gids": "Group_quota_gids", - "group_names": "Group_names", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "gids": "Group_quota_gids" } }, "PATCH /quotas/groups": { @@ -4357,14 +3279,8 @@ "readOnlyBodyProperties": [ "name" ], - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "gids": "Group_quota_gids", - "group_names": "Group_names", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "gids": "Group_quota_gids" } }, "GET /quotas/settings": { @@ -4374,12 +3290,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /quotas/settings": { "minVersion": "2.0", @@ -4395,10 +3306,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /quotas/users": { "minVersion": "2.0", @@ -4418,20 +3326,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "uids": "User_quota_uids", - "user_names": "User_names", - "X-Request-ID": "XRequestId" + "uids": "User_quota_uids" } }, "POST /quotas/users": { @@ -4451,13 +3348,8 @@ "readOnlyBodyProperties": [ "name" ], - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "uids": "User_quota_uids", - "user_names": "User_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "uids": "User_quota_uids" } }, "DELETE /quotas/users": { @@ -4472,14 +3364,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "names": "Names", - "uids": "User_quota_uids", - "user_names": "User_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "uids": "User_quota_uids" } }, "PATCH /quotas/users": { @@ -4500,14 +3386,8 @@ "readOnlyBodyProperties": [ "name" ], - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "names": "Names", - "uids": "User_quota_uids", - "user_names": "User_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "uids": "User_quota_uids" } }, "GET /roles": { @@ -4522,17 +3402,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /smtp-servers": { "minVersion": "2.0", @@ -4546,17 +3416,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /smtp-servers": { "minVersion": "2.0", @@ -4573,10 +3433,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /snmp-agents": { "minVersion": "2.0", @@ -4590,17 +3447,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /snmp-agents": { "minVersion": "2.0", @@ -4619,20 +3466,14 @@ "engine_id", "id", "name" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /snmp-agents/mib": { "minVersion": "2.0", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /snmp-managers": { "minVersion": "2.0", @@ -4646,17 +3487,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /snmp-managers": { "minVersion": "2.0", @@ -4671,9 +3502,8 @@ "v2c": "2.0", "v3": "2.0" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /snmp-managers": { @@ -4694,12 +3524,7 @@ }, "readOnlyBodyProperties": [ "id" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /snmp-managers": { "minVersion": "2.0", @@ -4708,12 +3533,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /snmp-managers/test": { "minVersion": "2.0", @@ -4727,17 +3547,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /subnets": { "minVersion": "2.0", @@ -4751,17 +3561,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /subnets": { "minVersion": "2.0", @@ -4781,17 +3581,16 @@ "services": "2.18", "vlan": "2.18" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "enabled", "id", "interfaces", "name", "services" - ] + ], + "parameterComponentOverrides": { + "names": "Names_required" + } }, "PATCH /subnets": { "minVersion": "2.0", @@ -4812,11 +3611,6 @@ "services": "2.18", "vlan": "2.18" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "enabled", "id", @@ -4832,12 +3626,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /support": { "minVersion": "2.0", @@ -4846,12 +3635,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /support": { "minVersion": "2.0", @@ -4879,10 +3663,7 @@ "remote_assist_opened", "remote_assist_paths", "remote_assist_status" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /support/test": { "minVersion": "2.0", @@ -4892,13 +3673,7 @@ "test_type": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "sort": "Sort", - "test_type": "Test_type", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /syslog-servers": { "minVersion": "2.0", @@ -4915,17 +3690,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names_for_syslog", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "names": "Names_for_syslog" } }, "POST /syslog-servers": { @@ -4939,9 +3706,8 @@ "services": "2.14", "sources": "2.20" }, - "parameterComponents": { - "names": "Names_for_syslog", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_for_syslog" } }, "PATCH /syslog-servers": { @@ -4956,10 +3722,8 @@ "services": "2.14", "sources": "2.20" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names_for_syslog", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_for_syslog" } }, "DELETE /syslog-servers": { @@ -4970,10 +3734,8 @@ "X-Request-ID": "2.14" }, "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names_for_syslog", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_for_syslog" } }, "GET /syslog-servers/settings": { @@ -4988,17 +3750,7 @@ "sort": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /syslog-servers/settings": { "minVersion": "2.0", @@ -5016,12 +3768,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /syslog-servers/test": { "minVersion": "2.0", @@ -5029,11 +3776,7 @@ "continuation_token": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /targets": { "minVersion": "2.0", @@ -5050,17 +3793,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /targets": { @@ -5072,9 +3806,8 @@ "bodyProperties": { "address": "2.0" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /targets": { @@ -5096,12 +3829,7 @@ "id", "status", "status_details" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /targets": { "minVersion": "2.0", @@ -5110,12 +3838,7 @@ "names": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /targets/performance/replication": { "minVersion": "2.0", @@ -5133,21 +3856,7 @@ "total_only": "2.0", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /usage/groups": { "minVersion": "2.0", @@ -5166,19 +3875,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "gids": "Group_quota_gids", - "group_names": "Group_names", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "gids": "Group_quota_gids" } }, "GET /usage/users": { @@ -5198,19 +3897,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "uids": "User_quota_uids", - "user_names": "User_names", - "X-Request-ID": "XRequestId" + "uids": "User_quota_uids" } }, "GET /arrays/factory-reset-token": { @@ -5223,35 +3912,21 @@ "sort": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /arrays/factory-reset-token": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /arrays/factory-reset-token": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /kmip": { "minVersion": "2.1", @@ -5265,17 +3940,7 @@ "continuation_token": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /kmip": { "minVersion": "2.1", @@ -5290,10 +3955,6 @@ "ca_certificate_group": "2.18", "uris": "2.18" }, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "name" @@ -5313,11 +3974,6 @@ "ca_certificate_group": "2.18", "uris": "2.18" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "name" @@ -5330,12 +3986,7 @@ "ids": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /kmip/test": { "minVersion": "2.1", @@ -5344,22 +3995,14 @@ "ids": "2.1", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /rapid-data-locking": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /rapid-data-locking": { "minVersion": "2.1", @@ -5369,9 +4012,6 @@ "bodyProperties": { "enabled": "2.1", "kmip_server": "2.1" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "GET /rapid-data-locking/test": { @@ -5379,20 +4019,14 @@ "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /rapid-data-locking/rotate": { "minVersion": "2.1", "parameters": { "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /object-store-access-policies": { "minVersion": "2.2", @@ -5406,11 +4040,8 @@ "rules": "2.2", "description": "2.2" }, - "parameterComponents": { - "context_names": "Context_names", - "enforce_action_restrictions": "Enforce_action_restrictions", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /object-store-access-policies": { @@ -5424,13 +4055,6 @@ }, "bodyProperties": { "rules": "2.2" - }, - "parameterComponents": { - "context_names": "Context_names", - "enforce_action_restrictions": "Enforce_action_restrictions", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /object-store-access-policies": { @@ -5441,13 +4065,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-access-policies/rules": { "minVersion": "2.2", @@ -5465,18 +4083,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-access-policies/rules": { @@ -5495,13 +4103,8 @@ "resources": "2.2", "effect": "2.18" }, - "parameterComponents": { - "context_names": "Context_names", - "enforce_action_restrictions": "Enforce_action_restrictions", - "names": "Names_required", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /object-store-access-policies/rules": { @@ -5521,14 +4124,6 @@ "effect": "2.2", "policy": "2.2", "resources": "2.2" - }, - "parameterComponents": { - "context_names": "Context_names", - "enforce_action_restrictions": "Enforce_action_restrictions", - "names": "Names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" } }, "DELETE /object-store-access-policies/rules": { @@ -5540,14 +4135,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-access-policy-actions": { "minVersion": "2.2", @@ -5563,16 +4151,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /policies-all": { @@ -5590,17 +4170,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /policies-all/members": { @@ -5627,26 +4198,9 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Member_types", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "member_types": "Member_types" } }, "GET /admins/settings": { @@ -5659,15 +4213,7 @@ "sort": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /admins/settings": { "minVersion": "2.3", @@ -5678,9 +4224,6 @@ "lockout_duration": "2.3", "max_login_attempts": "2.3", "min_password_length": "2.3" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "GET /file-systems/policies-all": { @@ -5700,19 +4243,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /hardware-connectors/performance": { @@ -5730,20 +4262,7 @@ "total_only": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /nfs-export-policies": { "minVersion": "2.3", @@ -5762,19 +4281,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /nfs-export-policies": { @@ -5801,10 +4309,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /nfs-export-policies": { @@ -5834,14 +4340,7 @@ "policy_type", "realms", "version" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /nfs-export-policies": { "minVersion": "2.3", @@ -5852,14 +4351,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /nfs-export-policies/rules": { "minVersion": "2.3", @@ -5878,19 +4370,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /nfs-export-policies/rules": { @@ -5922,15 +4403,6 @@ "index": "2.18", "context": "2.18" }, - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "context", "id", @@ -5947,14 +4419,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /nfs-export-policies/rules": { "minVersion": "2.3", @@ -5985,15 +4450,6 @@ "index": "2.18", "context": "2.18" }, - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "name" @@ -6011,17 +4467,7 @@ "sort": "2.3", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /drives": { "minVersion": "2.4", @@ -6036,18 +4482,7 @@ "total_only": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /logs-async": { "minVersion": "2.4", @@ -6061,17 +4496,7 @@ "sort": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /logs-async": { "minVersion": "2.4", @@ -6096,10 +4521,7 @@ "name", "processing", "progress" - ], - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + ] }, "GET /logs-async/download": { "minVersion": "2.4", @@ -6107,11 +4529,7 @@ "names": "2.4", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces/ping": { "minVersion": "2.6", @@ -6125,17 +4543,7 @@ "resolve_hostname": "2.6", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "component_name": "Ping_trace_component", - "count": "Ping_count", - "destination": "Ping_trace_destination", - "packet_size": "Packet_size", - "print_latency": "Print_latency", - "resolve_hostname": "Resolve_hostname", - "source": "Ping_trace_source", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces/trace": { "minVersion": "2.6", @@ -6150,18 +4558,7 @@ "resolve_hostname": "2.6", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "component_name": "Ping_trace_component", - "destination": "Ping_trace_destination", - "discover_mtu": "Mtu", - "fragment_packet": "Fragment_packet", - "method": "Method", - "port": "Port", - "resolve_hostname": "Resolve_hostname", - "source": "Ping_trace_source", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /support/verification-keys": { "minVersion": "2.7", @@ -6173,15 +4570,7 @@ "sort": "2.7", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /support/verification-keys": { "minVersion": "2.7", @@ -6190,9 +4579,6 @@ }, "bodyProperties": { "signed_verification_key": "2.7" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "GET /file-systems/locks": { @@ -6212,19 +4598,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "client_names": "Client_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "inodes": "Inodes", - "limit": "Limit", - "names": "Names", - "paths": "Paths", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /file-systems/locks": { @@ -6241,16 +4616,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "client_names": "Client_names", - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "inodes": "Inodes", - "names": "Names", - "paths": "Paths", - "recursive": "Recursive", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "recursive": "Recursive" } }, "GET /file-systems/locks/clients": { @@ -6264,13 +4631,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems/locks/nlm-reclamations": { @@ -6279,11 +4641,7 @@ "X-Request-ID": "2.14", "context_names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /object-store-accounts": { "minVersion": "2.8", @@ -6300,12 +4658,8 @@ "quota_limit": "2.8", "public_access_config": "2.12" }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "ignore_usage": "Ignore_usage", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "ignore_usage": "Ignore_usage" } }, "DELETE /file-system-replica-links": { @@ -6322,19 +4676,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "cancel_in_progress_transfers": "Cancel_in_progress_transfers", - "context_names": "Context_names", - "ids": "Ids", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "remote_file_system_ids": "Remote_file_system_ids", - "remote_file_system_names": "Remote_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/sessions": { "minVersion": "2.10", @@ -6350,16 +4692,9 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "client_names": "Client_names", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "limit": "Limit", - "names": "Names", - "protocols": "Protocols", - "user_names": "Sessions_user_names", - "X-Request-ID": "XRequestId" + "user_names": "Sessions_user_names" } }, "DELETE /file-systems/sessions": { @@ -6374,14 +4709,8 @@ "context_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "client_names": "Client_names", - "context_names": "Context_names", - "disruptive": "Disruptive", - "names": "Names", - "protocols": "Protocols", - "user_names": "Sessions_user_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "user_names": "Sessions_user_names" } }, "GET /smb-client-policies": { @@ -6401,19 +4730,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /smb-client-policies": { @@ -6440,10 +4758,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /smb-client-policies": { @@ -6473,13 +4789,7 @@ "policy_type", "realms", "version" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /smb-client-policies": { "minVersion": "2.10", @@ -6489,13 +4799,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /smb-client-policies/rules": { "minVersion": "2.10", @@ -6514,19 +4818,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /smb-client-policies/rules": { @@ -6551,16 +4844,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "PATCH /smb-client-policies/rules": { "minVersion": "2.10", @@ -6589,16 +4873,7 @@ "id", "name", "policy_version" - ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /smb-client-policies/rules": { "minVersion": "2.10", @@ -6609,14 +4884,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /smb-share-policies": { "minVersion": "2.10", @@ -6635,19 +4903,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /smb-share-policies": { @@ -6673,10 +4930,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /smb-share-policies": { @@ -6703,13 +4958,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /smb-share-policies": { "minVersion": "2.10", @@ -6719,13 +4968,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /smb-share-policies/rules": { "minVersion": "2.10", @@ -6744,19 +4987,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /smb-share-policies/rules": { @@ -6778,13 +5010,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "context_names": "Context_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + ] }, "PATCH /smb-share-policies/rules": { "minVersion": "2.10", @@ -6808,15 +5034,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /smb-share-policies/rules": { "minVersion": "2.10", @@ -6828,15 +5046,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/cross-origin-resource-sharing-policies": { "minVersion": "2.12", @@ -6854,18 +5064,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets/cross-origin-resource-sharing-policies": { @@ -6878,12 +5078,6 @@ }, "bodyProperties": { "rules": "2.12" - }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "X-Request-ID": "XRequestId" } }, "DELETE /buckets/cross-origin-resource-sharing-policies": { @@ -6895,14 +5089,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/cross-origin-resource-sharing-policies/rules": { "minVersion": "2.12", @@ -6921,19 +5108,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets/cross-origin-resource-sharing-policies/rules": { @@ -6951,13 +5127,8 @@ "allowed_methods": "2.12", "allowed_origins": "2.12" }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names_required", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /buckets/cross-origin-resource-sharing-policies/rules": { @@ -6970,15 +5141,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/bucket-access-policies": { "minVersion": "2.12", @@ -6996,18 +5159,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets/bucket-access-policies": { @@ -7020,12 +5173,6 @@ }, "bodyProperties": { "rules": "2.12" - }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "X-Request-ID": "XRequestId" } }, "DELETE /buckets/bucket-access-policies": { @@ -7037,14 +5184,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /buckets/bucket-access-policies/rules": { "minVersion": "2.12", @@ -7063,19 +5203,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets/bucket-access-policies/rules": { @@ -7097,13 +5226,8 @@ "readOnlyBodyProperties": [ "effect" ], - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names_required", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /buckets/bucket-access-policies/rules": { @@ -7116,15 +5240,7 @@ "X-Request-ID": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-access-policies": { "minVersion": "2.13", @@ -7138,17 +5254,7 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /network-access-policies": { "minVersion": "2.13", @@ -7175,13 +5281,7 @@ "policy_type", "realms", "version" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "GET /network-access-policies/members": { "minVersion": "2.13", @@ -7197,19 +5297,7 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-access-policies/rules": { "minVersion": "2.13", @@ -7225,19 +5313,7 @@ "sort": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /network-access-policies/rules": { "minVersion": "2.13", @@ -7260,15 +5336,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "PATCH /network-access-policies/rules": { "minVersion": "2.13", @@ -7294,15 +5362,7 @@ "id", "name", "policy_version" - ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /network-access-policies/rules": { "minVersion": "2.13", @@ -7312,13 +5372,7 @@ "versions": "2.13", "X-Request-ID": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /admins/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7337,19 +5391,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /admins/ssh-certificate-authority-policies": { @@ -7362,15 +5405,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /admins/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7382,15 +5417,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /arrays/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7409,19 +5436,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /arrays/ssh-certificate-authority-policies": { @@ -7434,15 +5450,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /arrays/ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7454,15 +5462,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /audit-file-systems-policies": { "minVersion": "2.14", @@ -7479,17 +5479,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /audit-file-systems-policies": { @@ -7517,10 +5508,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /audit-file-systems-policies": { @@ -7550,13 +5539,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /audit-file-systems-policies": { "minVersion": "2.14", @@ -7566,13 +5549,7 @@ "names": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /audit-file-systems-policies/members": { "minVersion": "2.14", @@ -7591,19 +5568,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /audit-file-systems-policies/members": { @@ -7616,15 +5582,7 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /audit-file-systems-policies/members": { "minVersion": "2.14", @@ -7636,15 +5594,7 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /directory-services/roles": { "minVersion": "2.14", @@ -7659,10 +5609,6 @@ "name": "2.18", "role": "2.18", "management_access_policies": "2.19" - }, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /directory-services/roles": { @@ -7672,12 +5618,7 @@ "names": "2.14", "ids": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/audit-policies": { "minVersion": "2.14", @@ -7696,19 +5637,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems/audit-policies": { @@ -7721,15 +5651,7 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /file-systems/audit-policies": { "minVersion": "2.14", @@ -7741,15 +5663,7 @@ "policy_names": "2.14", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /public-keys": { "minVersion": "2.14", @@ -7763,17 +5677,7 @@ "offset": "2.14", "sort": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /public-keys": { "minVersion": "2.14", @@ -7784,9 +5688,8 @@ "bodyProperties": { "public_key": "2.14" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /public-keys": { @@ -7796,12 +5699,7 @@ "ids": "2.14", "names": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /public-keys/uses": { "minVersion": "2.14", @@ -7815,17 +5713,7 @@ "offset": "2.14", "sort": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7842,17 +5730,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /ssh-certificate-authority-policies": { @@ -7878,9 +5757,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /ssh-certificate-authority-policies": { @@ -7890,12 +5768,7 @@ "ids": "2.14", "names": "2.14" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /ssh-certificate-authority-policies": { "minVersion": "2.14", @@ -7922,12 +5795,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /ssh-certificate-authority-policies/admins": { "minVersion": "2.14", @@ -7946,19 +5814,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /ssh-certificate-authority-policies/admins": { @@ -7971,15 +5828,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /ssh-certificate-authority-policies/admins": { "minVersion": "2.14", @@ -7991,15 +5840,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /ssh-certificate-authority-policies/arrays": { "minVersion": "2.14", @@ -8018,19 +5859,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /ssh-certificate-authority-policies/arrays": { @@ -8043,15 +5873,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /ssh-certificate-authority-policies/arrays": { "minVersion": "2.14", @@ -8063,15 +5885,7 @@ "policy_names": "2.14", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /ssh-certificate-authority-policies/members": { "minVersion": "2.14", @@ -8090,19 +5904,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /admins": { @@ -8118,11 +5921,6 @@ "role": "2.15", "management_access_policies": "2.19", "admin_type": "2.26" - }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /admins": { @@ -8133,13 +5931,7 @@ "names": "2.15", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/worm-data-policies": { "minVersion": "2.15", @@ -8158,19 +5950,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /sso/saml2/idps": { @@ -8185,17 +5966,7 @@ "offset": "2.15", "sort": "2.15" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /sso/saml2/idps": { "minVersion": "2.15", @@ -8218,9 +5989,8 @@ "readOnlyBodyProperties": [ "prn" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /sso/saml2/idps": { @@ -8230,12 +6000,7 @@ "ids": "2.15", "names": "2.15" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /sso/saml2/idps": { "minVersion": "2.15", @@ -8256,11 +6021,6 @@ "services": "2.18", "management": "2.24" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "prn" @@ -8281,17 +6041,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /worm-data-policies": { @@ -8316,11 +6067,6 @@ "context": "2.18", "realms": "2.19" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "context", "id", @@ -8328,7 +6074,10 @@ "name", "policy_type", "realms" - ] + ], + "parameterComponentOverrides": { + "names": "Names_required" + } }, "PATCH /worm-data-policies": { "minVersion": "2.15", @@ -8353,12 +6102,6 @@ "context": "2.18", "realms": "2.19" }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "context", "id", @@ -8376,13 +6119,7 @@ "names": "2.15", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /worm-data-policies/members": { "minVersion": "2.15", @@ -8401,19 +6138,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /arrays/space/storage-classes": { @@ -8431,20 +6157,7 @@ "storage_class_names": "2.16", "total_only": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "storage_class_names": "StorageClassNames", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /dns": { "minVersion": "2.16", @@ -8463,10 +6176,8 @@ "ca_certificate": "2.25", "ca_certificate_group": "2.25" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /dns": { @@ -8477,13 +6188,7 @@ "names": "2.16", "context_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-system-exports": { "minVersion": "2.16", @@ -8502,19 +6207,8 @@ "workload_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "workload_ids": "Workload_ids", - "workload_names": "Workload_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-system-exports": { @@ -8531,14 +6225,6 @@ "export_name": "2.16", "server": "2.16", "share_policy": "2.16" - }, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" } }, "PATCH /file-system-exports": { @@ -8569,13 +6255,7 @@ "name", "policy_type", "status" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /file-system-exports": { "minVersion": "2.16", @@ -8585,13 +6265,7 @@ "names": "2.16", "context_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /maintenance-windows": { "minVersion": "2.16", @@ -8605,17 +6279,7 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /maintenance-windows": { "minVersion": "2.16", @@ -8626,9 +6290,8 @@ "bodyProperties": { "timeout": "2.16" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /maintenance-windows": { @@ -8638,12 +6301,7 @@ "ids": "2.16", "names": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /password-policies": { "minVersion": "2.16", @@ -8657,17 +6315,7 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /password-policies": { "minVersion": "2.16", @@ -8700,12 +6348,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /sso/saml2/idps/test": { "minVersion": "2.16", @@ -8717,15 +6360,7 @@ "names": "2.16", "sort": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /sso/saml2/idps/test": { "minVersion": "2.16", @@ -8746,11 +6381,6 @@ "sp": "2.18", "management": "2.24" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "prn" @@ -8771,17 +6401,8 @@ "context_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /servers": { @@ -8797,11 +6418,8 @@ "dns": "2.18", "local_directory_service": "2.24" }, - "parameterComponents": { - "create_ds": "Create_ds", - "create_local_directory_service": "Create_local_directory_service", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /servers": { @@ -8815,11 +6433,6 @@ "directory_services": "2.18", "dns": "2.18", "local_directory_service": "2.24" - }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /servers": { @@ -8830,13 +6443,7 @@ "ids": "2.16", "names": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "cascade_delete": "Cascade_delete", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /support-diagnostics": { "minVersion": "2.16", @@ -8850,17 +6457,7 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /support-diagnostics": { "minVersion": "2.16", @@ -8869,12 +6466,7 @@ "analysis_period_start_time": "2.16", "analysis_period_end_time": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "analysis_period_end_time": "Analysis_period_end_time", - "analysis_period_start_time": "Analysis_period_start_time", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /support-diagnostics/details": { "minVersion": "2.16", @@ -8888,17 +6480,7 @@ "offset": "2.16", "sort": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /software-check": { "minVersion": "2.16", @@ -8913,18 +6495,7 @@ "sort": "2.16", "total_item_count": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "software_names": "Software_names", - "software_versions": "Software_versions", - "sort": "Sort", - "total_item_count": "Total_item_count" - } + "bodyProperties": {} }, "POST /software-check": { "minVersion": "2.16", @@ -8933,12 +6504,7 @@ "software_versions": "2.16", "software_names": "2.16" }, - "bodyProperties": {}, - "parameterComponents": { - "software_names": "Software_names", - "software_versions": "Software_versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /qos-policies/file-systems": { "minVersion": "2.17", @@ -8957,19 +6523,8 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /tls-policies/network-interfaces": { @@ -8986,19 +6541,7 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /tls-policies/network-interfaces": { "minVersion": "2.17", @@ -9009,14 +6552,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /tls-policies/network-interfaces": { "minVersion": "2.17", @@ -9027,14 +6563,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /legal-holds": { "minVersion": "2.17", @@ -9048,17 +6577,7 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /legal-holds": { "minVersion": "2.17", @@ -9072,15 +6591,14 @@ "description": "2.18", "realms": "2.19" }, - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "name", "realms" - ] + ], + "parameterComponentOverrides": { + "names": "Names_required" + } }, "DELETE /legal-holds": { "minVersion": "2.17", @@ -9089,12 +6607,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /legal-holds": { "minVersion": "2.17", @@ -9109,11 +6622,6 @@ "description": "2.18", "realms": "2.19" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "id", "name", @@ -9135,20 +6643,7 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "fleet_ids": "Fleet_ids", - "fleet_names": "Fleet_names", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /fleets/members": { "minVersion": "2.17", @@ -9159,11 +6654,6 @@ }, "bodyProperties": { "members": "2.17" - }, - "parameterComponents": { - "fleet_ids": "Fleet_ids", - "fleet_names": "Fleet_names", - "X-Request-ID": "XRequestId" } }, "DELETE /fleets/members": { @@ -9174,13 +6664,7 @@ "member_names": "2.17", "unreachable": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "unreachable": "Unreachable", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /tls-policies": { "minVersion": "2.17", @@ -9196,19 +6680,7 @@ "purity_defined": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "effective": "Effective_tls_policy", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "purity_defined": "Purity_defined", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /tls-policies": { "minVersion": "2.17", @@ -9238,9 +6710,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /tls-policies": { @@ -9250,12 +6721,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /tls-policies": { "minVersion": "2.17", @@ -9285,12 +6751,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /qos-policies": { "minVersion": "2.17", @@ -9307,17 +6768,8 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /qos-policies": { @@ -9346,10 +6798,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /qos-policies": { @@ -9360,13 +6810,7 @@ "names": "2.17", "context_names": "2.23" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /qos-policies": { "minVersion": "2.17", @@ -9394,13 +6838,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /fleets/fleet-key": { "minVersion": "2.17", @@ -9413,26 +6851,14 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /fleets/fleet-key": { "minVersion": "2.17", "parameters": { "X-Request-ID": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /tls-policies/members": { "minVersion": "2.17", @@ -9448,19 +6874,7 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-roles": { "minVersion": "2.17", @@ -9477,17 +6891,8 @@ "sort": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-roles": { @@ -9500,10 +6905,8 @@ "bodyProperties": { "max_session_duration": "2.17" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /object-store-roles": { @@ -9514,13 +6917,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /object-store-roles": { "minVersion": "2.17", @@ -9547,13 +6944,7 @@ "name", "prn", "trusted_entities" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /object-store-access-policies/object-store-roles": { "minVersion": "2.17", @@ -9572,19 +6963,8 @@ "sort": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-access-policies/object-store-roles": { @@ -9597,15 +6977,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /object-store-access-policies/object-store-roles": { "minVersion": "2.17", @@ -9617,15 +6989,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/open-files": { "minVersion": "2.17", @@ -9643,18 +7007,10 @@ "user_names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "client_names": "Client_names", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "ids": "Ids", - "limit": "Limit", + "parameterComponentOverrides": { "paths": "Open_files_paths", "protocols": "Protocols_required", - "session_names": "Session_names", - "user_names": "Open_files_user_names", - "X-Request-ID": "XRequestId" + "user_names": "Open_files_user_names" } }, "DELETE /file-systems/open-files": { @@ -9663,11 +7019,7 @@ "X-Request-ID": "2.17", "ids": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /remote-arrays": { "minVersion": "2.17", @@ -9683,18 +7035,7 @@ "sort": "2.17", "total_only": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /file-system-replica-links": { "minVersion": "2.17", @@ -9708,17 +7049,7 @@ "remote_names": "2.17", "replicate_now": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "local_file_system_ids": "Local_file_system_ids", - "local_file_system_names": "Local_file_system_names", - "remote_ids": "Remote_ids", - "remote_names": "Remote_names", - "replicate_now": "Replicate_now", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces/connectors/performance": { "minVersion": "2.17", @@ -9735,20 +7066,7 @@ "start_time": "2.17", "total_only": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /fleets": { "minVersion": "2.17", @@ -9764,16 +7082,9 @@ "total_only": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", + "parameterComponentOverrides": { "ids": "Ids_single", - "limit": "Limit", - "names": "Names_single", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "POST /fleets": { @@ -9783,9 +7094,8 @@ "names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "names": "Names_single", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_single" } }, "DELETE /fleets": { @@ -9796,10 +7106,9 @@ "names": "2.17" }, "bodyProperties": {}, - "parameterComponents": { + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "PATCH /fleets": { @@ -9812,10 +7121,9 @@ "bodyProperties": { "name": "2.17" }, - "parameterComponents": { + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "GET /qos-policies/members": { @@ -9836,20 +7144,9 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Member_types_qos", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "member_types": "Member_types_qos" } }, "GET /network-interfaces/connectors": { @@ -9864,17 +7161,7 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /network-interfaces/connectors": { "minVersion": "2.17", @@ -9893,11 +7180,6 @@ "transceiver_type": "2.18", "lanes_per_port": "2.20" }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "connector_type", "id", @@ -9917,17 +7199,7 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /sso/oidc/idps": { "minVersion": "2.17", @@ -9943,11 +7215,7 @@ }, "readOnlyBodyProperties": [ "prn" - ], - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /sso/oidc/idps": { "minVersion": "2.17", @@ -9956,12 +7224,7 @@ "ids": "2.17", "names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /sso/oidc/idps": { "minVersion": "2.17", @@ -9979,12 +7242,7 @@ }, "readOnlyBodyProperties": [ "prn" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /object-store-roles/object-store-access-policies": { "minVersion": "2.17", @@ -10003,19 +7261,8 @@ "sort": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-roles/object-store-access-policies": { @@ -10028,15 +7275,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /object-store-roles/object-store-access-policies": { "minVersion": "2.17", @@ -10048,15 +7287,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -10076,20 +7307,8 @@ "sort": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "indices": "Indices", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_names": "Policy_names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-roles/object-store-trust-policies/rules": { @@ -10109,14 +7328,6 @@ "policy": "2.18", "principals": "2.18" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names", - "policy_names": "Policy_names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "effect" ] @@ -10132,16 +7343,7 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "indices": "Indices", - "names": "Names", - "policy_names": "Policy_names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /object-store-roles/object-store-trust-policies/rules": { "minVersion": "2.17", @@ -10161,15 +7363,6 @@ "policy": "2.18", "principals": "2.18" }, - "parameterComponents": { - "context_names": "Context_names", - "indices": "Indices", - "names": "Names", - "policy_names": "Policy_names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "X-Request-ID": "XRequestId" - }, "readOnlyBodyProperties": [ "effect" ] @@ -10183,14 +7376,7 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-roles/object-store-trust-policies": { "minVersion": "2.17", @@ -10208,18 +7394,8 @@ "sort": "2.17" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /network-interfaces/tls-policies": { @@ -10236,19 +7412,7 @@ "policy_names": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /network-interfaces/tls-policies": { "minVersion": "2.17", @@ -10259,14 +7423,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /network-interfaces/tls-policies": { "minVersion": "2.17", @@ -10277,14 +7434,7 @@ "policy_ids": "2.17", "policy_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-roles/object-store-trust-policies/download": { "minVersion": "2.17", @@ -10294,13 +7444,7 @@ "role_ids": "2.17", "role_names": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "names": "Names", - "role_ids": "Object_store_role_ids", - "role_names": "Object_store_role_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces/connectors/settings": { "minVersion": "2.17", @@ -10314,17 +7458,7 @@ "offset": "2.17", "sort": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /legal-holds/held-entities": { "minVersion": "2.17", @@ -10338,17 +7472,7 @@ "names": "2.17", "paths": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "paths": "Paths", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /legal-holds/held-entities": { "minVersion": "2.17", @@ -10361,16 +7485,7 @@ "paths": "2.17", "recursive": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "ids": "Ids", - "names": "Names", - "paths": "Paths", - "recursive": "Legal_holds_recursive", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /legal-holds/held-entities": { "minVersion": "2.17", @@ -10384,17 +7499,7 @@ "recursive": "2.17", "released": "2.17" }, - "bodyProperties": {}, - "parameterComponents": { - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "ids": "Ids", - "names": "Names", - "paths": "Paths", - "recursive": "Legal_holds_recursive", - "released": "Legal_holds_release", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /arrays/clients/s3-specific-performance": { "minVersion": "2.18", @@ -10406,15 +7511,7 @@ "sort": "2.18", "total_only": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /arrays/erasures": { "minVersion": "2.18", @@ -10424,13 +7521,7 @@ "preserve_configuration_data": "2.18", "skip_phonehome_check": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "eradicate_all_data": "Eradicate_all_data_required", - "preserve_configuration_data": "Preserve_configuration_data_required", - "skip_phonehome_check": "Skip_phonehome_check", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /arrays/erasures": { "minVersion": "2.18", @@ -10440,33 +7531,21 @@ "eradicate_all_data": "2.18", "finalize": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "delete_sanitization_certificate": "Delete_sanitization_certificate_required", - "eradicate_all_data": "Eradicate_all_data_required", - "finalize": "Finalize_array_erasure_required", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /arrays/erasures": { "minVersion": "2.18", "parameters": { "X-Request-ID": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /arrays/erasures": { "minVersion": "2.18", "parameters": { "X-Request-ID": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /audit-file-systems-policy-operations": { "minVersion": "2.18", @@ -10482,16 +7561,8 @@ "sort": "2.18" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-systems/space/storage-classes": { @@ -10508,19 +7579,7 @@ "storage_class_names": "2.18", "total_only": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "storage_class_names": "StorageClassNames", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /network-interfaces/network-connection-statistics": { "minVersion": "2.18", @@ -10536,19 +7595,7 @@ "remote_port": "2.18", "sort": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "current_state": "NetworkConnectionStatisticsCurrent_state", - "filter": "Filter", - "limit": "Limit", - "local_host": "NetworkConnectionStatisticsLocal_host", - "local_port": "NetworkConnectionStatisticsLocal_port", - "offset": "Offset", - "remote_host": "NetworkConnectionStatisticsRemote_host", - "remote_port": "NetworkConnectionStatisticsRemote_port", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /nodes": { "minVersion": "2.18", @@ -10563,18 +7610,7 @@ "sort": "2.18", "total_only": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /nodes": { "minVersion": "2.18", @@ -10606,12 +7642,7 @@ "raw_capacity", "status", "unique" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "POST /nodes/batch": { "minVersion": "2.18", @@ -10619,11 +7650,7 @@ "X-Request-ID": "2.18", "add_to_groups": "2.23" }, - "bodyProperties": {}, - "parameterComponents": { - "add_to_groups": "Add_to_groups", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /node-groups": { "minVersion": "2.18", @@ -10637,17 +7664,7 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /node-groups": { "minVersion": "2.18", @@ -10655,11 +7672,7 @@ "X-Request-ID": "2.18", "names": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /node-groups": { "minVersion": "2.18", @@ -10670,11 +7683,6 @@ }, "bodyProperties": { "name": "2.18" - }, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "DELETE /node-groups": { @@ -10684,12 +7692,7 @@ "ids": "2.18", "names": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /node-groups/nodes": { "minVersion": "2.18", @@ -10705,19 +7708,7 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "node_group_ids": "Node_group_ids", - "node_group_names": "Node_group_names", - "node_ids": "Node_ids", - "node_names": "Node_names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /node-groups/nodes": { "minVersion": "2.18", @@ -10728,14 +7719,7 @@ "node_ids": "2.18", "node_names": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "node_group_ids": "Node_group_ids", - "node_group_names": "Node_group_names", - "node_ids": "Node_ids", - "node_names": "Node_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /node-groups/nodes": { "minVersion": "2.18", @@ -10746,14 +7730,7 @@ "node_ids": "2.18", "node_names": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "node_group_ids": "Node_group_ids", - "node_group_names": "Node_group_names", - "node_ids": "Node_ids", - "node_names": "Node_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /node-groups/uses": { "minVersion": "2.18", @@ -10767,17 +7744,7 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /storage-class-tiering-policies": { "minVersion": "2.18", @@ -10791,17 +7758,7 @@ "offset": "2.18", "sort": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /storage-class-tiering-policies": { "minVersion": "2.18", @@ -10826,9 +7783,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /storage-class-tiering-policies": { @@ -10838,12 +7794,7 @@ "ids": "2.18", "names": "2.18" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /storage-class-tiering-policies": { "minVersion": "2.18", @@ -10868,12 +7819,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /storage-class-tiering-policies/members": { "minVersion": "2.18", @@ -10892,19 +7838,8 @@ "sort": "2.18" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /admins/management-access-policies": { @@ -10924,19 +7859,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /admins/management-access-policies": { @@ -10949,15 +7873,7 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /admins/management-access-policies": { "minVersion": "2.19", @@ -10969,15 +7885,7 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -10993,19 +7901,7 @@ "policy_names": "2.19", "sort": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -11016,14 +7912,7 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /directory-services/roles/management-access-policies": { "minVersion": "2.19", @@ -11034,14 +7923,7 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /management-access-policies": { "minVersion": "2.19", @@ -11058,17 +7940,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /management-access-policies": { @@ -11095,10 +7968,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /management-access-policies": { @@ -11110,11 +7981,8 @@ "context_names": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names_get", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /management-access-policies": { @@ -11145,13 +8013,7 @@ "policy_type", "realms", "version" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /management-access-policies/admins": { "minVersion": "2.19", @@ -11170,19 +8032,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /management-access-policies/admins": { @@ -11195,15 +8046,7 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /management-access-policies/admins": { "minVersion": "2.19", @@ -11215,15 +8058,7 @@ "policy_names": "2.19", "context_names": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -11239,19 +8074,7 @@ "policy_names": "2.19", "sort": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -11262,14 +8085,7 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /management-access-policies/directory-services/roles": { "minVersion": "2.19", @@ -11280,14 +8096,7 @@ "policy_ids": "2.19", "policy_names": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /management-access-policies/members": { "minVersion": "2.19", @@ -11306,19 +8115,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /qos-policies/buckets": { @@ -11338,19 +8136,8 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /realms": { @@ -11370,19 +8157,8 @@ "context_names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /realms": { @@ -11393,10 +8169,8 @@ "without_default_access_list": "2.19" }, "bodyProperties": {}, - "parameterComponents": { - "names": "Names_required", - "without_default_access_list": "Without_default_access_list", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /realms": { @@ -11406,12 +8180,7 @@ "ids": "2.19", "names": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /realms": { "minVersion": "2.19", @@ -11428,12 +8197,7 @@ }, "readOnlyBodyProperties": [ "id" - ], - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /realms/space": { "minVersion": "2.19", @@ -11451,21 +8215,7 @@ "total_only": "2.19", "type": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "total_only": "Total_only", - "type": "Type" - } + "bodyProperties": {} }, "GET /realms/space/storage-classes": { "minVersion": "2.19", @@ -11484,22 +8234,7 @@ "storage_class_names": "2.19", "total_only": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "end_time": "End_time", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "resolution": "Resolution", - "sort": "Sort", - "start_time": "Start_time", - "storage_class_names": "StorageClassNames", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /resource-accesses": { "minVersion": "2.19", @@ -11513,14 +8248,8 @@ "sort": "2.19" }, "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit_scale", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "limit": "Limit_scale" } }, "DELETE /resource-accesses": { @@ -11529,21 +8258,14 @@ "X-Request-ID": "2.19", "ids": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /resource-accesses/batch": { "minVersion": "2.19", "parameters": { "X-Request-ID": "2.19" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /audit-object-store-policies": { "minVersion": "2.20", @@ -11560,17 +8282,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /audit-object-store-policies": { @@ -11596,10 +8309,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /audit-object-store-policies": { @@ -11610,13 +8321,7 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /audit-object-store-policies": { "minVersion": "2.20", @@ -11643,13 +8348,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /audit-object-store-policies/members": { "minVersion": "2.20", @@ -11668,19 +8367,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /audit-object-store-policies/members": { @@ -11693,15 +8381,7 @@ "policy_ids": "2.20", "policy_names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /audit-object-store-policies/members": { "minVersion": "2.20", @@ -11713,15 +8393,7 @@ "policy_ids": "2.20", "policy_names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /bucket-audit-filter-actions": { "minVersion": "2.20", @@ -11737,16 +8409,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /buckets/audit-filters": { @@ -11765,18 +8429,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /buckets/audit-filters": { @@ -11792,12 +8446,8 @@ "actions": "2.20", "s3_prefixes": "2.20" }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /buckets/audit-filters": { @@ -11809,14 +8459,7 @@ "context_names": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /buckets/audit-filters": { "minVersion": "2.20", @@ -11831,12 +8474,8 @@ "actions": "2.20", "s3_prefixes": "2.20" }, - "parameterComponents": { - "bucket_ids": "Bucket_ids", - "bucket_names": "Bucket_names", - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "POST /certificates/certificate-signing-requests": { @@ -11854,9 +8493,6 @@ "organizational_unit": "2.20", "state": "2.20", "subject_alternative_names": "2.20" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "GET /log-targets/file-systems": { @@ -11874,17 +8510,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /log-targets/file-systems": { @@ -11904,10 +8531,8 @@ "readOnlyBodyProperties": [ "id" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /log-targets/file-systems": { @@ -11918,13 +8543,7 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /log-targets/file-systems": { "minVersion": "2.20", @@ -11943,13 +8562,7 @@ }, "readOnlyBodyProperties": [ "id" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /log-targets/object-store": { "minVersion": "2.20", @@ -11966,17 +8579,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /log-targets/object-store": { @@ -11996,10 +8600,8 @@ "readOnlyBodyProperties": [ "id" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /log-targets/object-store": { @@ -12010,13 +8612,7 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /log-targets/object-store": { "minVersion": "2.20", @@ -12035,13 +8631,7 @@ }, "readOnlyBodyProperties": [ "id" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /network-interfaces/neighbors": { "minVersion": "2.20", @@ -12055,17 +8645,7 @@ "sort": "2.20", "total_item_count": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "local_port_names": "Local_port_names", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /object-store-account-exports": { "minVersion": "2.20", @@ -12082,17 +8662,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /object-store-account-exports": { @@ -12108,14 +8679,6 @@ "bodyProperties": { "export_enabled": "2.20", "server": "2.20" - }, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" } }, "DELETE /object-store-account-exports": { @@ -12126,13 +8689,7 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /object-store-account-exports": { "minVersion": "2.20", @@ -12145,12 +8702,6 @@ "bodyProperties": { "export_enabled": "2.20", "policy": "2.20" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "PATCH /object-store-virtual-hosts": { @@ -12171,13 +8722,7 @@ }, "readOnlyBodyProperties": [ "id" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "POST /qos-policies/members": { "minVersion": "2.20", @@ -12191,14 +8736,8 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Member_types_qos_no_buckets", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "member_types": "Member_types_qos_no_buckets" } }, "DELETE /qos-policies/members": { @@ -12213,14 +8752,8 @@ "context_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Member_types_qos_no_buckets", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "member_types": "Member_types_qos_no_buckets" } }, "GET /realms/defaults": { @@ -12238,17 +8771,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "realm_ids": "Realm_ids", - "realm_names": "Realm_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PATCH /realms/defaults": { @@ -12267,13 +8791,7 @@ "readOnlyBodyProperties": [ "context", "realm" - ], - "parameterComponents": { - "context_names": "Context_names", - "realm_ids": "Realm_ids", - "realm_names": "Realm_names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /s3-export-policies": { "minVersion": "2.20", @@ -12290,17 +8808,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /s3-export-policies": { @@ -12314,10 +8823,8 @@ "enabled": "2.20", "rules": "2.20" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /s3-export-policies": { @@ -12328,13 +8835,7 @@ "ids": "2.20", "names": "2.20" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /s3-export-policies": { "minVersion": "2.20", @@ -12348,12 +8849,6 @@ "enabled": "2.20", "name": "2.20", "rules": "2.20" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "GET /s3-export-policies/rules": { @@ -12372,18 +8867,8 @@ "sort": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /s3-export-policies/rules": { @@ -12400,12 +8885,8 @@ "effect": "2.20", "resources": "2.20" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /s3-export-policies/rules": { @@ -12418,12 +8899,8 @@ "policy_names": "2.20" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /s3-export-policies/rules": { @@ -12440,12 +8917,8 @@ "effect": "2.20", "resources": "2.20" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "GET /data-eviction-policies": { @@ -12463,17 +8936,8 @@ "sort": "2.21" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /data-eviction-policies": { @@ -12499,10 +8963,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /data-eviction-policies": { @@ -12513,13 +8975,7 @@ "ids": "2.21", "names": "2.21" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /data-eviction-policies": { "minVersion": "2.21", @@ -12546,13 +9002,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /data-eviction-policies/file-systems": { "minVersion": "2.21", @@ -12571,19 +9021,8 @@ "sort": "2.21" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /data-eviction-policies/file-systems": { @@ -12596,15 +9035,7 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /data-eviction-policies/file-systems": { "minVersion": "2.21", @@ -12616,15 +9047,7 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /data-eviction-policies/members": { "minVersion": "2.21", @@ -12643,19 +9066,8 @@ "sort": "2.21" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-systems/data-eviction-policies": { @@ -12675,19 +9087,8 @@ "sort": "2.21" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems/data-eviction-policies": { @@ -12700,15 +9101,7 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /file-systems/data-eviction-policies": { "minVersion": "2.21", @@ -12720,15 +9113,7 @@ "policy_ids": "2.21", "policy_names": "2.21" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /admins/management-authentication-policies": { "minVersion": "2.22", @@ -12747,19 +9132,8 @@ "sort": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /admins/management-authentication-policies": { @@ -12772,15 +9146,7 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /admins/management-authentication-policies": { "minVersion": "2.22", @@ -12792,15 +9158,7 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /arrays/management-authentication-policies": { "minVersion": "2.22", @@ -12819,19 +9177,8 @@ "sort": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /arrays/management-authentication-policies": { @@ -12844,15 +9191,7 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /arrays/management-authentication-policies": { "minVersion": "2.22", @@ -12864,15 +9203,7 @@ "policy_ids": "2.22", "policy_names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /management-authentication-policies": { "minVersion": "2.22", @@ -12889,17 +9220,8 @@ "sort": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /management-authentication-policies": { @@ -12925,10 +9247,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /management-authentication-policies": { @@ -12939,13 +9259,7 @@ "ids": "2.22", "names": "2.22" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /management-authentication-policies": { "minVersion": "2.22", @@ -12972,13 +9286,7 @@ "is_local", "policy_type", "realms" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + ] }, "GET /management-authentication-policies/members": { "minVersion": "2.22", @@ -12998,20 +9306,9 @@ "sort": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Management_access_policies_member_types", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "member_types": "Management_access_policies_member_types" } }, "POST /management-authentication-policies/members": { @@ -13026,14 +9323,8 @@ "policy_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Management_access_policies_member_types", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "member_types": "Management_access_policies_member_types" } }, "DELETE /management-authentication-policies/members": { @@ -13048,14 +9339,8 @@ "policy_names": "2.22" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "member_types": "Management_access_policies_member_types", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "member_types": "Management_access_policies_member_types" } }, "GET /presets/workload": { @@ -13067,11 +9352,8 @@ "names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names_get", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "PUT /presets/workload": { @@ -13107,12 +9389,9 @@ "id", "revision" ], - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "skip_verify_deployable": "Preset_workload_skip_verify_deployable", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "POST /presets/workload": { @@ -13142,11 +9421,8 @@ "readOnlyBodyProperties": [ "revision" ], - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_single_required", - "skip_verify_deployable": "Preset_workload_skip_verify_deployable", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_single_required" } }, "DELETE /presets/workload": { @@ -13158,11 +9434,9 @@ "names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "PATCH /presets/workload": { @@ -13176,11 +9450,9 @@ "bodyProperties": { "name": "2.23" }, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "GET /resiliency-groups": { @@ -13195,17 +9467,7 @@ "offset": "2.23", "sort": "2.23" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /resiliency-groups/members": { "minVersion": "2.23", @@ -13221,19 +9483,7 @@ "resiliency_group_names": "2.23", "sort": "2.23" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "resiliency_group_ids": "Resiliency_group_ids", - "resiliency_group_names": "Resiliency_group_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /workloads": { "minVersion": "2.23", @@ -13248,15 +9498,8 @@ "names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /workloads": { @@ -13271,12 +9514,8 @@ "bodyProperties": { "parameters": "2.23" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_single_required", - "preset_ids": "Preset_ids", - "preset_names": "Preset_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_single_required" } }, "DELETE /workloads": { @@ -13288,11 +9527,9 @@ "names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "PATCH /workloads": { @@ -13307,11 +9544,9 @@ "destroyed": "2.23", "name": "2.23" }, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "Ids_single", - "names": "Names_single", - "X-Request-ID": "XRequestId" + "names": "Names_single" } }, "GET /workloads/placement-recommendations": { @@ -13326,14 +9561,8 @@ "names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /workloads/placement-recommendations": { @@ -13375,10 +9604,9 @@ "results", "status" ], - "parameterComponents": { - "context_names": "Context_names", - "placement_names": "Placement_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "preset_ids": null, + "preset_names": null } }, "GET /workloads/tags": { @@ -13392,13 +9620,8 @@ "resource_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "namespaces": "Namespaces", - "resource_ids": "Resource_ids", - "resource_names": "Resource_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "DELETE /workloads/tags": { @@ -13412,13 +9635,8 @@ "resource_names": "2.23" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "keys": "Keys", - "namespaces": "Namespaces_delete", - "resource_ids": "Resource_ids", - "resource_names": "Resource_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "namespaces": "Namespaces_delete" } }, "PUT /workloads/tags/batch": { @@ -13429,13 +9647,7 @@ "resource_ids": "2.23", "resource_names": "2.23" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "resource_ids": "Resource_ids", - "resource_names": "Resource_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /directory-services/local/directory-services": { "minVersion": "2.24", @@ -13454,19 +9666,10 @@ "total_item_count": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destroyed": "Destroyed", - "filter": "Filter", "ids": "IdsSemiRequired", - "limit": "Limit", - "names": "NamesSemiRequired", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "names": "NamesSemiRequired" } }, "POST /directory-services/local/directory-services": { @@ -13479,10 +9682,8 @@ "bodyProperties": { "domain": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /directory-services/local/directory-services": { @@ -13494,11 +9695,9 @@ "names": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "IdsSemiRequired", - "names": "NamesSemiRequired", - "X-Request-ID": "XRequestId" + "names": "NamesSemiRequired" } }, "PATCH /directory-services/local/directory-services": { @@ -13527,11 +9726,9 @@ "server", "time_remaining" ], - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "ids": "IdsSemiRequired", - "names": "NamesSemiRequired", - "X-Request-ID": "XRequestId" + "names": "NamesSemiRequired" } }, "GET /directory-services/local/groups": { @@ -13552,20 +9749,10 @@ "total_item_count": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "gids": "Gids", "ids": "IdsSemiRequired", - "limit": "Limit", - "names": "NamesSemiRequired", - "offset": "Offset", - "sids": "Sids", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "names": "NamesSemiRequired" } }, "POST /directory-services/local/groups": { @@ -13581,12 +9768,8 @@ "email": "2.24", "gid": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /directory-services/local/groups": { @@ -13601,14 +9784,8 @@ "sids": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "gids": "Gids", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "NamesGeneral", - "sids": "Sids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "NamesGeneral" } }, "PATCH /directory-services/local/groups": { @@ -13635,14 +9812,8 @@ "context", "sid" ], - "parameterComponents": { - "context_names": "Context_names", - "gids": "Gids", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "NamesGeneral", - "sids": "Sids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "NamesGeneral" } }, "GET /directory-services/local/groups/members": { @@ -13666,23 +9837,10 @@ "total_item_count": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "group_gids": "Group_gids", "group_names": "Local_group_names", - "group_sids": "Group_sids", - "limit": "Limit", - "member_ids": "Local_member_ids", - "member_names": "Member_names", - "member_sids": "Member_sids", - "member_types": "LocalMemberTypes", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "member_ids": "Local_member_ids" } }, "POST /directory-services/local/groups/members": { @@ -13699,14 +9857,8 @@ "bodyProperties": { "members": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "group_gids": "Group_gids", - "group_names": "Local_group_names", - "group_sids": "Group_sids", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "group_names": "Local_group_names" } }, "DELETE /directory-services/local/groups/members": { @@ -13725,18 +9877,9 @@ "member_types": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "group_gids": "Group_gids", + "parameterComponentOverrides": { "group_names": "Local_group_names", - "group_sids": "Group_sids", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "member_ids": "Local_member_ids", - "member_names": "Member_names", - "member_sids": "Member_sids", - "member_types": "LocalMemberTypes", - "X-Request-ID": "XRequestId" + "member_ids": "Local_member_ids" } }, "GET /directory-services/local/users": { @@ -13757,20 +9900,10 @@ "uids": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", "ids": "IdsSemiRequired", - "limit": "Limit", - "names": "NamesSemiRequired", - "offset": "Offset", - "sids": "Sids", - "sort": "Sort", - "total_item_count": "Total_item_count", - "uids": "Uids", - "X-Request-ID": "XRequestId" + "names": "NamesSemiRequired" } }, "POST /directory-services/local/users": { @@ -13789,12 +9922,8 @@ "primary_group": "2.24", "uid": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /directory-services/local/users": { @@ -13809,14 +9938,8 @@ "uids": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "NamesGeneral", - "sids": "Sids", - "uids": "Uids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "NamesGeneral" } }, "PATCH /directory-services/local/users": { @@ -13838,14 +9961,8 @@ "primary_group": "2.24", "uid": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "names": "NamesGeneral", - "sids": "Sids", - "uids": "Uids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "NamesGeneral" } }, "GET /directory-services/local/users/members": { @@ -13868,22 +9985,10 @@ "total_item_count": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "group_gids": "Group_gids", "group_names": "Local_group_names", - "group_sids": "Group_sids", - "limit": "Limit", - "member_ids": "Local_member_ids", - "member_names": "Member_names", - "member_sids": "Member_sids", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "member_ids": "Local_member_ids" } }, "POST /directory-services/local/users/members": { @@ -13901,14 +10006,8 @@ "groups": "2.24", "is_primary": "2.24" }, - "parameterComponents": { - "context_names": "Context_names", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "member_ids": "Local_member_ids", - "member_names": "Member_names", - "member_sids": "Member_sids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "member_ids": "Local_member_ids" } }, "DELETE /directory-services/local/users/members": { @@ -13927,18 +10026,9 @@ "member_types": "2.24" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "group_gids": "Group_gids", + "parameterComponentOverrides": { "group_names": "Local_group_names", - "group_sids": "Group_sids", - "local_directory_service_ids": "Local_directory_service_ids", - "local_directory_service_names": "Local_directory_service_names", - "member_ids": "Local_member_ids", - "member_names": "Member_names", - "member_sids": "Member_sids", - "member_types": "LocalMemberTypes", - "X-Request-ID": "XRequestId" + "member_ids": "Local_member_ids" } }, "GET /support-diagnostics/settings": { @@ -13952,26 +10042,14 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /support-diagnostics/settings": { "minVersion": "2.24", "parameters": { "X-Request-ID": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /software-bundle": { "minVersion": "2.24", @@ -13985,17 +10063,7 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /software-bundle": { "minVersion": "2.24", @@ -14004,9 +10072,6 @@ }, "bodyProperties": { "source": "2.24" - }, - "parameterComponents": { - "X-Request-ID": "XRequestId" } }, "GET /software-patches": { @@ -14022,18 +10087,7 @@ "sort": "2.24", "total_item_count": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /software-patches": { "minVersion": "2.24", @@ -14042,10 +10096,7 @@ "allow_ha_reduction": "2.24", "name": "2.24" }, - "bodyProperties": {}, - "parameterComponents": { - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-systems/user-group-quota-policies": { "minVersion": "2.25", @@ -14064,19 +10115,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-systems/user-group-quota-policies": { @@ -14091,17 +10131,7 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "delete_existing_user_group_quota_settings": "Delete_existing_user_group_quota_settings", - "ignore_usage": "Ignore_usage_user_group_quotas", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /file-systems/user-group-quota-policies": { "minVersion": "2.25", @@ -14113,15 +10143,7 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-system-junctions": { "minVersion": "2.25", @@ -14142,21 +10164,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "destination_file_system_ids": "Destination_file_system_ids", - "destination_file_system_names": "Destination_file_system_names", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "origin_file_system_ids": "Origin_file_system_ids", - "origin_file_system_names": "Origin_file_system_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /file-system-junctions": { @@ -14185,13 +10194,10 @@ "origin_file_system", "status" ], - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "names": "Names_single_required", "origin_file_system_ids": "Origin_file_system_ids_single", - "origin_file_system_names": "Origin_file_system_names_single", - "use_existing_directory": "Use_existing_directory", - "X-Request-ID": "XRequestId" + "origin_file_system_names": "Origin_file_system_names_single" } }, "DELETE /file-system-junctions": { @@ -14202,13 +10208,7 @@ "ids": "2.25", "names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /file-system-group-quotas": { "minVersion": "2.25", @@ -14227,19 +10227,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "gids": "Gids", - "group_names": "Group_names", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-systems/groups": { @@ -14259,19 +10248,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "gids": "Gids", - "group_names": "Group_names", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-system-user-quotas": { @@ -14292,20 +10270,8 @@ "user_sids": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "uids": "Uids", - "user_names": "User_names", - "user_sids": "User_sids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /file-systems/users": { @@ -14326,20 +10292,8 @@ "user_sids": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "uids": "Uids", - "user_names": "User_names", - "user_sids": "User_sids", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /realm-connections": { @@ -14357,20 +10311,7 @@ "remote_realm_names": "2.25", "sort": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "local_realm_ids": "Local_realm_ids", - "local_realm_names": "Local_realm_names", - "offset": "Offset", - "remote_realm_ids": "Remote_realm_ids", - "remote_realm_names": "Remote_realm_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /realm-connections": { "minVersion": "2.25", @@ -14393,14 +10334,7 @@ "local_realm", "remote_realm", "status" - ], - "parameterComponents": { - "local_realm_ids": "Local_realm_ids", - "local_realm_names": "Local_realm_names", - "remote_realm_ids": "Remote_realm_ids", - "remote_realm_names": "Remote_realm_names", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /realm-connections": { "minVersion": "2.25", @@ -14411,14 +10345,7 @@ "remote_realm_ids": "2.25", "remote_realm_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "local_realm_ids": "Local_realm_ids", - "local_realm_names": "Local_realm_names", - "remote_realm_ids": "Remote_realm_ids", - "remote_realm_names": "Remote_realm_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /realm-connections/connection-key": { "minVersion": "2.25", @@ -14432,17 +10359,7 @@ "realm_names": "2.25", "sort": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "realm_ids": "Realm_ids", - "realm_names": "Realm_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "POST /realm-connections/connection-key": { "minVersion": "2.25", @@ -14451,12 +10368,7 @@ "realm_ids": "2.25", "realm_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "realm_ids": "Realm_ids", - "realm_names": "Realm_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /realm-connections/connection-key": { "minVersion": "2.25", @@ -14465,12 +10377,7 @@ "realm_ids": "2.25", "realm_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "realm_ids": "Realm_ids", - "realm_names": "Realm_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /remote-realms": { "minVersion": "2.25", @@ -14487,20 +10394,7 @@ "sort": "2.25", "total_only": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "on": "On_", - "on_ids": "On_ids", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /user-group-quota-policies": { "minVersion": "2.25", @@ -14517,17 +10411,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /user-group-quota-policies": { @@ -14555,12 +10440,8 @@ "policy_type", "realms" ], - "parameterComponents": { - "context_names": "Context_names", - "file_system_ids": "File_system_ids", - "file_system_names": "File_system_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "PATCH /user-group-quota-policies": { @@ -14592,15 +10473,7 @@ "policy_type", "realms", "version" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "ignore_usage": "Ignore_usage_user_group_quotas", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + ] }, "DELETE /user-group-quota-policies": { "minVersion": "2.25", @@ -14611,14 +10484,7 @@ "names": "2.25", "versions": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Versions", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /user-group-quota-policies/rules": { "minVersion": "2.25", @@ -14635,17 +10501,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /user-group-quota-policies/rules": { @@ -14663,13 +10520,6 @@ "quota_limit": "2.25", "quota_type": "2.25", "subject": "2.25" - }, - "parameterComponents": { - "context_names": "Context_names", - "ignore_usage": "Ignore_usage_user_group_quotas", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" } }, "DELETE /user-group-quota-policies/rules": { @@ -14682,15 +10532,7 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /user-group-quota-policies/rules": { "minVersion": "2.25", @@ -14709,13 +10551,7 @@ "readOnlyBodyProperties": [ "id", "name" - ], - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "ignore_usage": "Ignore_usage_user_group_quotas", - "names": "Names" - } + ] }, "GET /user-group-quota-policies/file-systems": { "minVersion": "2.25", @@ -14734,19 +10570,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /user-group-quota-policies/file-systems": { @@ -14761,17 +10586,7 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "delete_existing_user_group_quota_settings": "Delete_existing_user_group_quota_settings", - "ignore_usage": "Ignore_usage_user_group_quotas", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "DELETE /user-group-quota-policies/file-systems": { "minVersion": "2.25", @@ -14783,15 +10598,7 @@ "policy_ids": "2.25", "policy_names": "2.25" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /user-group-quota-policies/members": { "minVersion": "2.25", @@ -14810,19 +10617,8 @@ "sort": "2.25" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /management-access-policies/roles": { @@ -14840,17 +10636,8 @@ "sort": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /management-access-policies/roles": { @@ -14863,10 +10650,8 @@ "bodyProperties": { "description": "2.26" }, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names_required", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "names": "Names_required" } }, "DELETE /management-access-policies/roles": { @@ -14877,13 +10662,7 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /management-access-policies/roles/permissions": { "minVersion": "2.26", @@ -14902,19 +10681,10 @@ "sort": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", "role_ids": "Management_access_role_ids", - "role_names": "Management_access_role_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "role_names": "Management_access_role_names" } }, "POST /management-access-policies/roles/permissions": { @@ -14929,11 +10699,9 @@ "actions": "2.26", "resource": "2.26" }, - "parameterComponents": { - "context_names": "Context_names", + "parameterComponentOverrides": { "role_ids": "Management_access_role_ids", - "role_names": "Management_access_role_names", - "X-Request-ID": "XRequestId" + "role_names": "Management_access_role_names" } }, "DELETE /management-access-policies/roles/permissions": { @@ -14944,13 +10712,7 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /management-access-policies/roles/permissions": { "minVersion": "2.26", @@ -14962,12 +10724,6 @@ }, "bodyProperties": { "actions": "2.26" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "GET /management-access-policies/roles/permissions/supported-resources": { @@ -14984,16 +10740,8 @@ "sort": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /management-access-policies/rules": { @@ -15013,19 +10761,8 @@ "sort": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "names": "Names", - "offset": "Offset", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "sort": "Sort", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /management-access-policies/rules": { @@ -15056,14 +10793,8 @@ "policy", "policy_version" ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "policy_ids": "Policy_ids", - "policy_names": "Policy_names", - "versions": "Concurrency_versions", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "versions": "Concurrency_versions" } }, "DELETE /management-access-policies/rules": { @@ -15076,12 +10807,8 @@ "versions": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Concurrency_versions", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "versions": "Concurrency_versions" } }, "PATCH /management-access-policies/rules": { @@ -15112,14 +10839,8 @@ "policy", "policy_version" ], - "parameterComponents": { - "before_rule_id": "Before_rule_id", - "before_rule_name": "Before_rule_name", - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "versions": "Concurrency_versions", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "versions": "Concurrency_versions" } }, "PATCH /remote-arrays": { @@ -15131,14 +10852,7 @@ "to_topology_group_ids": "2.26", "to_topology_group_names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "ids": "Ids", - "names": "Names", - "to_topology_group_ids": "To_topology_group_ids", - "to_topology_group_names": "To_topology_group_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /support/system-manifest": { "minVersion": "2.26", @@ -15154,16 +10868,8 @@ "total_only": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "allow_errors": "Allow_errors", - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "offset": "Offset", - "sort": "Sort", - "total_only": "Total_only", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /topology-groups": { @@ -15182,18 +10888,8 @@ "total_item_count": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "ids": "Ids", - "limit": "Limit", - "list_all_parents": "List_all_parents", - "names": "Names", - "offset": "Offset", - "sort": "Sort", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "POST /topology-groups": { @@ -15205,14 +10901,7 @@ "parent_topology_group_ids": "2.26", "parent_topology_group_names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "names": "Names", - "parent_topology_group_ids": "Parent_topology_group_ids", - "parent_topology_group_names": "Parent_topology_group_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /topology-groups": { "minVersion": "2.26", @@ -15226,14 +10915,6 @@ }, "bodyProperties": { "topology_group": "2.26" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "to_parent_topology_group_ids": "To_parent_topology_group_ids", - "to_parent_topology_group_names": "To_parent_topology_group_names", - "X-Request-ID": "XRequestId" } }, "DELETE /topology-groups": { @@ -15244,13 +10925,7 @@ "ids": "2.26", "names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /topology-groups/arrays": { "minVersion": "2.26", @@ -15269,19 +10944,8 @@ "total_item_count": "2.26" }, "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "sort": "Sort", - "topology_group_ids": "Topology_group_ids", - "topology_group_names": "Topology_group_names", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "context_names": "Context_names_get" } }, "GET /topology-groups/members": { @@ -15302,20 +10966,9 @@ "total_item_count": "2.26" }, "bodyProperties": {}, - "parameterComponents": { + "parameterComponentOverrides": { "context_names": "Context_names_get", - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "recursive": "Topology_group_members_recursive", - "sort": "Sort", - "topology_group_ids": "Topology_group_ids", - "topology_group_names": "Topology_group_names", - "total_item_count": "Total_item_count", - "X-Request-ID": "XRequestId" + "recursive": "Topology_group_members_recursive" } }, "POST /topology-groups/members": { @@ -15328,12 +10981,6 @@ }, "bodyProperties": { "members": "2.26" - }, - "parameterComponents": { - "context_names": "Context_names", - "topology_group_ids": "Topology_group_ids", - "topology_group_names": "Topology_group_names", - "X-Request-ID": "XRequestId" } }, "DELETE /topology-groups/members": { @@ -15346,15 +10993,7 @@ "topology_group_ids": "2.26", "topology_group_names": "2.26" }, - "bodyProperties": {}, - "parameterComponents": { - "context_names": "Context_names", - "member_ids": "Member_ids", - "member_names": "Member_names", - "topology_group_ids": "Topology_group_ids", - "topology_group_names": "Topology_group_names", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "PATCH /active-directory/test": { "minVersion": "2.27", @@ -15367,12 +11006,6 @@ "bodyProperties": { "ca_certificate": "2.27", "ca_certificate_group": "2.27" - }, - "parameterComponents": { - "context_names": "Context_names", - "ids": "Ids", - "names": "Names", - "X-Request-ID": "XRequestId" } }, "POST /fleets/members/batch": { @@ -15383,13 +11016,7 @@ "fleet_names": "2.27", "validate_target_certificates": "2.27" }, - "bodyProperties": {}, - "parameterComponents": { - "fleet_ids": "Fleet_ids", - "fleet_names": "Fleet_names", - "validate_target_certificates": "Validate_target_certificates", - "X-Request-ID": "XRequestId" - } + "bodyProperties": {} }, "GET /storage-classes/members": { "minVersion": "2.27", @@ -15405,16 +11032,8 @@ "storage_class_names": "2.27" }, "bodyProperties": {}, - "parameterComponents": { - "continuation_token": "Continuation_token", - "filter": "Filter", - "limit": "Limit", - "member_ids": "Member_ids", - "member_names": "Member_names", - "offset": "Offset", - "sort": "Sort", - "storage_class_names": "Storage_class_names", - "X-Request-ID": "XRequestId" + "parameterComponentOverrides": { + "storage_class_names": "Storage_class_names" } } } diff --git a/Tests/Build-PfbCapabilityMap.Tests.ps1 b/Tests/Build-PfbCapabilityMap.Tests.ps1 index 879ec18..11f3cf9 100644 --- a/Tests/Build-PfbCapabilityMap.Tests.ps1 +++ b/Tests/Build-PfbCapabilityMap.Tests.ps1 @@ -148,7 +148,7 @@ Describe 'Build-PfbCapabilityMap: manifest shape' -Skip:($PSVersionTable.PSVersi } } -Describe 'Build-PfbCapabilityMap: readOnly/deprecated last-seen-wins and parameterComponents' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { +Describe 'Build-PfbCapabilityMap: readOnly/deprecated last-seen-wins' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { BeforeAll { New-Item -ItemType Directory -Path 'TestDrive:\roSpecs' -Force | Out-Null @@ -266,8 +266,12 @@ Describe 'Build-PfbCapabilityMap: readOnly/deprecated last-seen-wins and paramet $roManifest.endpoints.'PATCH /widgets'.deprecatedBodyProperties | Should -Be @('secretNote') } - It 'emits parameterComponents per endpoint with the { paramName: componentName } shape' { - $roManifest.endpoints.'GET /widgets'.parameterComponents.filter | Should -Be 'Widget_filter' + It 'resolves a $ref-backed parameter to its component via the new parameterComponentDefaults table (single-component case: default is trivially that one component)' { + $roManifest.parameterComponentDefaults.filter | Should -Be 'Widget_filter' + } + + It 'does NOT emit the old (pre-dedup) per-endpoint parameterComponents key' { + $roManifest.endpoints.'GET /widgets'.PSObject.Properties.Name | Should -Not -Contain 'parameterComponents' } It 'leaves the pre-existing minVersion/parameters/bodyProperties keys unaffected by the new keys' { @@ -279,6 +283,148 @@ Describe 'Build-PfbCapabilityMap: readOnly/deprecated last-seen-wins and paramet } } +Describe 'Build-PfbCapabilityMap: parameterComponentDefaults/Overrides' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + New-Item -ItemType Directory -Path 'TestDrive:\pcSpecs' -Force | Out-Null + + # Single-version fixture (the dedup/defaults/overrides logic is a pure + # post-processing pass over each endpoint's already-resolved CURRENT + # parameterComponents state, which the readOnly/deprecated Describe block above + # already separately proves is last-seen-wins across versions -- no need to + # duplicate that here). + # + # 'region' is declared via $ref on 3 endpoints (majority component 'Region' on + # alpha+bravo, minority 'RegionAlt' on charlie -- NOT a tie, so this proves plain + # frequency-based selection) and declared INLINE (no $ref at all) on 'delta' -- + # this is the explicit-null-override case: 'region' has a global default from + # other endpoints, so delta's inline (component-less) 'region' must get an + # explicit null override, or it would silently inherit that unrelated default. + # + # 'sortkey' is declared via $ref on exactly 2 endpoints with two DIFFERENT + # components used exactly once each (alpha -> component 'SortKeyBeta', echo -> + # component 'SortKeyAlpha') -- an exact 1-1 tie, proving the alphabetical + # tie-break ('SortKeyAlpha' < 'SortKeyBeta'). + $spec = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.0' } + paths = [ordered]@{ + '/api/9.0/alpha' = [ordered]@{ + get = @{ + parameters = @( + @{ '$ref' = '#/components/parameters/Region' } + @{ '$ref' = '#/components/parameters/SortKeyBeta' } + ) + } + } + '/api/9.0/bravo' = [ordered]@{ + get = @{ parameters = @(@{ '$ref' = '#/components/parameters/Region' }) } + } + '/api/9.0/charlie' = [ordered]@{ + get = @{ parameters = @(@{ '$ref' = '#/components/parameters/RegionAlt' }) } + } + '/api/9.0/delta' = [ordered]@{ + # 'region' declared INLINE -- no "$ref", so no component at all. + get = @{ + parameters = @(@{ name = 'region'; 'in' = 'query'; schema = @{ type = 'string' } }) + } + } + '/api/9.0/echo' = [ordered]@{ + get = @{ parameters = @(@{ '$ref' = '#/components/parameters/SortKeyAlpha' }) } + } + } + components = [ordered]@{ + parameters = [ordered]@{ + Region = [ordered]@{ name = 'region'; 'in' = 'query'; schema = @{ type = 'string' } } + RegionAlt = [ordered]@{ name = 'region'; 'in' = 'query'; schema = @{ type = 'string' } } + SortKeyBeta = [ordered]@{ name = 'sortkey'; 'in' = 'query'; schema = @{ type = 'string' } } + SortKeyAlpha = [ordered]@{ name = 'sortkey'; 'in' = 'query'; schema = @{ type = 'string' } } + } + } + } + $spec | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\pcSpecs\fb9.0.json' + + & $builderScript -SpecsDirectory 'TestDrive:\pcSpecs' -OutputPath 'TestDrive:\pcOutput\manifest.json' + $script:pcManifest = Get-Content -Path 'TestDrive:\pcOutput\manifest.json' -Raw | ConvertFrom-Json -Depth 20 + + # The known-correct (endpoint, param) -> component ground truth, from the fixture + # above, used by the round-trip test. $null means "no component" (delta/region). + $script:pcExpectedPairs = [ordered]@{ + 'GET /alpha|region' = 'Region' + 'GET /alpha|sortkey' = 'SortKeyBeta' + 'GET /bravo|region' = 'Region' + 'GET /charlie|region' = 'RegionAlt' + 'GET /delta|region' = $null + 'GET /echo|sortkey' = 'SortKeyAlpha' + } + } + + It 'picks the most frequent component as the default (region: 2x Region vs 1x RegionAlt)' { + $pcManifest.parameterComponentDefaults.region | Should -Be 'Region' + } + + It 'breaks an exact frequency tie alphabetically (sortkey: 1x SortKeyAlpha vs 1x SortKeyBeta)' { + $pcManifest.parameterComponentDefaults.sortkey | Should -Be 'SortKeyAlpha' + } + + It 'sorts parameterComponentDefaults keys' { + $keys = $pcManifest.parameterComponentDefaults.PSObject.Properties.Name + $keys | Should -Be ($keys | Sort-Object) + } + + It 'omits an endpoint from parameterComponentOverrides when its component matches the default' { + $pcManifest.endpoints.'GET /bravo'.PSObject.Properties.Name | Should -Not -Contain 'parameterComponentOverrides' + $pcManifest.endpoints.'GET /echo'.PSObject.Properties.Name | Should -Not -Contain 'parameterComponentOverrides' + } + + It 'records a non-default component as an override' { + $pcManifest.endpoints.'GET /charlie'.parameterComponentOverrides.region | Should -Be 'RegionAlt' + $pcManifest.endpoints.'GET /alpha'.parameterComponentOverrides.sortkey | Should -Be 'SortKeyBeta' + } + + It 'does NOT override alpha''s region (it matches the default, only its sortkey differs)' { + $pcManifest.endpoints.'GET /alpha'.parameterComponentOverrides.PSObject.Properties.Name | Should -Not -Contain 'region' + } + + It 'the decision-1-style regression: an inline (no $ref) parameter whose name has a global default gets an explicit JSON null override, not silence' { + $entry = $pcManifest.endpoints.'GET /delta' + $entry.PSObject.Properties.Name | Should -Contain 'parameterComponentOverrides' + $entry.parameterComponentOverrides.PSObject.Properties.Name | Should -Contain 'region' + $entry.parameterComponentOverrides.region | Should -BeNullOrEmpty + } + + It 'round-trips: reconstructing every (endpoint, param) -> component from defaults + overrides reproduces the fixture exactly (same pairs, same values, no additions, no losses)' { + $reconstructed = [ordered]@{} + foreach ($epName in $pcManifest.endpoints.PSObject.Properties.Name) { + $ep = $pcManifest.endpoints.$epName + $overrides = $ep.parameterComponentOverrides + $paramNames = $ep.parameters.PSObject.Properties.Name + foreach ($paramName in $paramNames) { + $key = "$epName|$paramName" + if ($overrides -and ($overrides.PSObject.Properties.Name -contains $paramName)) { + # An explicit override -- which may itself be JSON null, meaning "no + # component" -- always wins over the default. + $reconstructed[$key] = $overrides.$paramName + } + elseif ($pcManifest.parameterComponentDefaults.PSObject.Properties.Name -contains $paramName) { + $reconstructed[$key] = $pcManifest.parameterComponentDefaults.$paramName + } + else { + $reconstructed[$key] = $null + } + } + } + + # Only compare the pairs this fixture actually declares a component-bearing + # parameter for (pcExpectedPairs) -- every one must reconstruct to the exact same + # value, with no extra keys and no missing keys. + foreach ($key in $pcExpectedPairs.Keys) { + $reconstructed.Contains($key) | Should -BeTrue -Because "reconstructed set is missing '$key'" + $reconstructed[$key] | Should -Be $pcExpectedPairs[$key] -Because "'$key' should reconstruct to '$($pcExpectedPairs[$key])'" + } + ($reconstructed.Keys | Sort-Object) | Should -Be ($pcExpectedPairs.Keys | Sort-Object) -Because 'no additional or missing (endpoint, param) pairs vs. the fixture ground truth' + } +} + Describe 'Build-PfbCapabilityMap: -MaxVersion cap' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { BeforeAll { New-Item -ItemType Directory -Path 'TestDrive:\capSpecs' -Force | Out-Null diff --git a/tools/Build-PfbCapabilityMap.ps1 b/tools/Build-PfbCapabilityMap.ps1 index 17bb105..767fb39 100644 --- a/tools/Build-PfbCapabilityMap.ps1 +++ b/tools/Build-PfbCapabilityMap.ps1 @@ -18,6 +18,30 @@ Also NOT included (deferred, see plan): endpoint/field deprecation or removal tracking, and hardware-model (//S vs //E) capability — that is a separate axis from REST version and is handled in a later phase from a different data source. + + Each endpoint also carries, where non-empty, readOnlyBodyProperties and + deprecatedBodyProperties (string arrays) -- both last-seen-wins (the newest spec that + mentions the endpoint always wins), NOT first-sight like minVersion/parameters/ + bodyProperties, because readOnly is not monotonic across versions (a field can go + read-only -> writable, and about half the observed flips in fb2.0-2.27 do exactly + that; persisting first-sight would silently hide genuinely settable fields). + + parameterComponentDefaults/parameterComponentOverrides resolution contract (also + documented in tools/README.md): the component backing a given (endpoint, parameter) + is looked up as (1) the endpoint's parameterComponentOverrides value for that + parameter name if present -- which may be JSON null, meaning "this endpoint's + parameter has no component" -- otherwise (2) the top-level parameterComponentDefaults + value for that parameter name if present, otherwise (3) no known component. Split + into a global table plus per-endpoint overrides (rather than one full map per + endpoint) because the vast majority of parameters share a small set of common + components: measured across fb2.0-2.27, 4102 total (endpoint, parameter) -> component + pairs collapse to just 224 distinct pairs and 179 distinct parameter names. Defaults + are chosen by frequency (most common component per parameter name across all + endpoints), ties broken ALPHABETICALLY by component name for determinism regardless + of endpoint processing order. The explicit-null-override case matters: a parameter + declared inline (no "$ref", so no component) whose NAME happens to coincide with a + $ref'd component elsewhere must get an explicit null override, or "absent from + overrides" would wrongly make it inherit that unrelated default. .PARAMETER SpecsDirectory Where cached spec JSON files live. Defaults to tools/specs relative to this script. .PARAMETER OutputPath @@ -165,39 +189,136 @@ foreach ($entry in $specFiles) { $entryRecord.Remove('deprecatedBodyProperties') } - # parameterComponents: which $ref component backs each parameter (e.g. - # context_names -> Context_names_get). This describes the CURRENT wire shape, not - # "introduced in version X" -- a version number attached to it would be - # meaningless at best -- so it gets the same unconditional last-seen-wins - # treatment as readOnlyBodyProperties, not the first-sight guard. + # parameterComponents bookkeeping -- which $ref component backs each parameter + # (e.g. context_names -> Context_names_get) for the CURRENT (last-seen) version of + # this endpoint, plus which of this endpoint's CURRENT parameters have NO + # component at all (declared inline, no "$ref"). This describes the CURRENT wire + # shape, not "introduced in version X" -- a version number attached to it would be + # meaningless at best -- so both are overwritten UNCONDITIONALLY every iteration, + # same last-seen-wins treatment as readOnlyBodyProperties above, not the + # first-sight guard. + # + # These two "_current*" keys are TEMPORARY per-build bookkeeping, not part of the + # manifest's public shape: a full per-endpoint component map would be ~90% pure + # duplication (measured: 4102 total (parameter, component) pairs across fb2.0-2.27 + # but only 224 distinct pairs and 179 distinct parameter names -- most endpoints + # just reuse the same shared "Filter"/"Limit"/"Sort"/etc. components), which blew + # the manifest's lean-growth budget ~12x when first tried. The second pass below + # (after every spec is processed) deduplicates this into a single + # parameterComponentDefaults table plus minimal per-endpoint + # parameterComponentOverrides, then strips these bookkeeping keys back out. + # # $cap.ParameterComponents is a typed Dictionary[string,string] (API parameter # names as keys) -- .get_Keys() avoids the live Hashtable-shadowing bug elsewhere - # in this codebase (a key literally named "keys"/"count"/"values" hijacking - # member access), and is used defensively even though a typed Dictionary does not - # actually exhibit that shadowing the way a plain Hashtable does. - # Emitted only when non-empty, same lean-manifest reasoning as readOnly above: a - # parameter contributes an entry here only if it was declared via a "$ref" to a - # components/parameters/* component -- plenty of endpoints have none. - $paramComponents = [ordered]@{} + # in this codebase (a key literally named "keys"/"count"/"values" hijacking member + # access), used defensively even though a typed Dictionary does not actually + # exhibit that shadowing the way a plain Hashtable/OrderedDictionary does. + $currentParamComponents = [System.Collections.Generic.Dictionary[string, string]]::new() foreach ($paramName in ($cap.ParameterComponents.get_Keys() | Sort-Object)) { - $paramComponents[$paramName] = $cap.ParameterComponents[$paramName] - } - if ($paramComponents.Count -gt 0) { - $entryRecord.parameterComponents = $paramComponents + $currentParamComponents[$paramName] = $cap.ParameterComponents[$paramName] } - elseif ($entryRecord.Contains('parameterComponents')) { - $entryRecord.Remove('parameterComponents') + $entryRecord['_currentParamComponents'] = $currentParamComponents + + $currentParamsWithoutComponent = [System.Collections.Generic.HashSet[string]]::new() + foreach ($paramName in ($cap.Parameters | Select-Object -Unique)) { + if (-not $currentParamComponents.ContainsKey($paramName)) { + [void]$currentParamsWithoutComponent.Add($paramName) + } } + $entryRecord['_currentParamsWithoutComponent'] = $currentParamsWithoutComponent } $processedVersions.Add($version) } +# ---- Second pass: deduplicate parameterComponents into a global defaults table plus +# minimal per-endpoint overrides ---- +# +# Resolution contract (also documented in tools/README.md): for a given (endpoint, +# parameter), the effective component is: +# 1. If the endpoint's parameterComponentOverrides contains the parameter name, use +# that value -- which may be JSON null, meaning "this endpoint's parameter has no +# component" (see below). This takes precedence over the default. +# 2. Otherwise, if parameterComponentDefaults contains the parameter name, use that +# value. +# 3. Otherwise, the parameter has no known component. +# +# Deterministic default selection: for each parameter name, count how often each +# component name occurs across every endpoint's CURRENT (last-seen) mapping, and pick +# the MOST FREQUENT; ties are broken ALPHABETICALLY by component name. This must be +# fully deterministic across builds regardless of endpoint processing order -- frequency +# counting alone is not enough when two components are equally common for a parameter +# name (this happens; do not assume it can't). +$componentCountsByParam = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.Dictionary[string, int]]]::new() +foreach ($epKey in $endpoints.get_Keys()) { + $paramComponents = $endpoints[$epKey]['_currentParamComponents'] + foreach ($paramName in $paramComponents.get_Keys()) { + if (-not $componentCountsByParam.ContainsKey($paramName)) { + $componentCountsByParam[$paramName] = [System.Collections.Generic.Dictionary[string, int]]::new() + } + $componentName = $paramComponents[$paramName] + $counts = $componentCountsByParam[$paramName] + if (-not $counts.ContainsKey($componentName)) { $counts[$componentName] = 0 } + $counts[$componentName]++ + } +} + +$parameterComponentDefaults = [ordered]@{} +foreach ($paramName in ($componentCountsByParam.get_Keys() | Sort-Object)) { + $counts = $componentCountsByParam[$paramName] + $best = $counts.get_Keys() | + Sort-Object @{ Expression = { $counts[$_] }; Descending = $true }, @{ Expression = { $_ }; Descending = $false } | + Select-Object -First 1 + $parameterComponentDefaults[$paramName] = $best +} + +# Per-endpoint overrides: emitted only where this endpoint's CURRENT value differs from +# the global default for that parameter name, OR where this endpoint's parameter +# currently has NO component (inline, no "$ref") but the parameter NAME does have a +# global default from some other endpoint -- an explicit JSON null override records "no +# component here", distinguishing it from "absent", which would otherwise silently +# resolve to the (wrong) default under the lookup contract above. This is the subtle +# case: only 7 of 4109 parameter declarations in fb2.27 are inline/no-$ref, but every one +# whose name collides with a global default MUST get a null override or it would +# misreport a component it does not actually have. +foreach ($epKey in $endpoints.get_Keys()) { + $rec = $endpoints[$epKey] + $paramComponents = $rec['_currentParamComponents'] + $paramsWithoutComponent = $rec['_currentParamsWithoutComponent'] + + $overrides = [ordered]@{} + foreach ($paramName in $paramComponents.get_Keys()) { + $componentName = $paramComponents[$paramName] + if ($componentName -ne $parameterComponentDefaults[$paramName]) { + $overrides[$paramName] = $componentName + } + } + foreach ($paramName in $paramsWithoutComponent) { + if ($parameterComponentDefaults.Contains($paramName)) { + $overrides[$paramName] = $null + } + } + + if ($overrides.Count -gt 0) { + # Re-sort: the two loops above each insert in their own sorted order, but their + # combination is not necessarily sorted overall. + $sortedOverrides = [ordered]@{} + foreach ($paramName in ($overrides.get_Keys() | Sort-Object)) { + $sortedOverrides[$paramName] = $overrides[$paramName] + } + $rec.parameterComponentOverrides = $sortedOverrides + } + + $rec.Remove('_currentParamComponents') + $rec.Remove('_currentParamsWithoutComponent') +} + $manifest = [ordered]@{ - schemaVersion = 1 - generatedFrom = $processedVersions - endpointCount = $endpoints.Count - endpoints = $endpoints + schemaVersion = 1 + generatedFrom = $processedVersions + endpointCount = $endpoints.Count + parameterComponentDefaults = $parameterComponentDefaults + endpoints = $endpoints } $outputDir = Split-Path -Parent $OutputPath diff --git a/tools/README.md b/tools/README.md index 1dba831..296d25b 100644 --- a/tools/README.md +++ b/tools/README.md @@ -42,6 +42,55 @@ Run in this order: ./tools/Build-PfbCapabilityMap.ps1 ``` + Accepts `-MaxVersion '2.27'` to cap ingestion at a numerically-compared REST version + (`Major`/`Minor` as integers, never a string compare — `'2.9'` sorts above `'2.27'` as + a string) even if `tools/specs/` has newer cached files on disk. Defaults to `$null` + (no cap, ingest everything cached). Use this when a newer spec has been fetched but not + yet deliberately adopted — every acceptance number this toolchain's plan work is + calibrated against assumes a specific version ceiling, and an uncapped rebuild would + silently move those numbers. + + Besides `minVersion`/`parameters`/`bodyProperties` (each `{ name: introducedInVersion }`, + monotonic first-sight), each endpoint also carries, where non-empty: + - `readOnlyBodyProperties` / `deprecatedBodyProperties` (string arrays) — **last-seen-wins**, + not first-sight: unlike "introduced in version X", `readOnly` is not monotonic (a + field can go from read-only to writable across versions, and about half of the flips + in fb2.0-2.27 do exactly that), so these always reflect the newest spec that mentions + the endpoint, never the oldest. + - `parameterComponentOverrides` (`{ paramName: componentName }`, sorted by key) — see + below. + + **`parameterComponentDefaults`/`parameterComponentOverrides` resolution contract:** + which named OpenAPI `components/parameters/*` component backs a given + `(endpoint, parameter)` pair is recorded across two places instead of once per + endpoint, because the vast majority of parameters share one of a small set of common + components (`Filter`, `Limit`, `Sort`, …) — measured on fb2.0-2.27: 4102 total + `(endpoint, parameter) -> component` pairs, but only 224 distinct pairs and 179 + distinct parameter names, so a naive full per-endpoint map is ~90% duplication. To + resolve the component for a given `(endpoint, parameter)`: + 1. If the endpoint's `parameterComponentOverrides` contains the parameter name, use + that value — which **may be a JSON `null`**, meaning "this endpoint's parameter has + no component" (see below). An override, `null` or not, always wins over the default. + 2. Otherwise, if the manifest's top-level `parameterComponentDefaults` contains the + parameter name, use that value. + 3. Otherwise, the parameter has no known component at all. + + `parameterComponentDefaults` is built once, globally: for each parameter name, the + most frequently associated component name across every endpoint's current mapping, + ties broken **alphabetically** by component name (deterministic regardless of endpoint + processing order — required, since the weekly CI job opens a PR on any diff and an + unstable tie-break would spuriously fire it). `parameterComponentOverrides` then holds + only the endpoints where the current component differs from that default. + + The explicit-`null`-override case is the one to know about: a parameter declared + **inline** (no `$ref`) has no component at all — rare (7 of 4109 parameter + declarations in fb2.27), but if that parameter's *name* happens to also be a `$ref`'d + component elsewhere (and so has a global default), silently omitting it from + `parameterComponentOverrides` would make it wrongly inherit that default under the + resolution contract above. The builder emits an explicit `null` override for exactly + this case so "absent" (→ check the default) and "explicitly none" (→ `null`) stay + distinguishable. + 3. **`Update-PfbVersionMap.ps1`** — builds `Data/PfbVersionMap.json`, the REST-version to Purity//FB-version pairing, from a single internal SSOT (Single Source of Truth) API call that returns the full REST<->Purity//FB mapping table for every version in one From 7288239d9f4b822b2feb0ce4ed463e2706baa5c9 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 19:09:53 -0700 Subject: [PATCH 05/17] fix(tools): use get_Count() to dodge hashtable-count-key shadowing, add MaxVersion numeric-compare regression The parameterComponentOverrides emission check at line 302 read $overrides.Count, but $overrides is an [ordered]@{} keyed by literal API query-parameter names -- and "count" is a real parameter name in this API (parameterComponentDefaults.count = "Ping_count" in the committed manifest). A hashtable key literally named count/keys/values shadows the matching .Count/.Keys/.Values *member*, silently returning that key's value instead. This is a known, previously-hit bug class in this exact codebase (it's why neighbouring code in this same function already uses get_Keys()/get_Count() defensively) -- line 302 was the one holdout, inconsistent with line 306 three lines below it. It was dormant only because "count" has exactly one component occurrence today, so no endpoint's override set could yet contain a "count" key; a future spec revision that gives "count" a second, divergent component would silently drop that endpoint's entire parameterComponentOverrides block. Fixed proactively before it could bite, mirroring the rest of the function. Added a synthetic regression test forcing exactly this shape (a "count" parameter with a global default plus one endpoint overriding it via an inline, no-$ref declaration -- the null-override case, the worst case for the bug since `$null -gt 0` is False). Mutation-tested: reverting to bare .Count fails exactly the 2 assertions exercising this scenario; restoring the fix passes all 38 tests in the file again. Also closed a gap in the existing -MaxVersion cap test: it only used single-digit-minor versions (9.0/9.1/9.2), which sort identically whether compared as strings or as parsed integers, so it could not have caught a regression to string comparison. '2.9' vs '2.10' do disagree ('2.9' sorts above '2.10' as a string but below it numerically) -- this exact string- vs-numeric mistake has already cost real time twice in this effort. Added a dedicated 2.9/2.10 case; mutation-tested by swapping the cap filter to a string comparison, which fails the new test (2 assertions) while leaving the original 9.0/9.1/9.2 test green, proving that test alone was not sufficient coverage. Restored the numeric comparison; all tests pass again. No functional/output change: both bugs were dormant on real data. Verified by regenerating Data/PfbCapabilityMap.json (via -MaxVersion 2.27) to a scratch path and confirming its SHA256 is byte-identical to the committed file, so the manifest itself is untouched by this commit. Co-Authored-By: Claude Sonnet 5 --- Tests/Build-PfbCapabilityMap.Tests.ps1 | 113 +++++++++++++++++++++++++ tools/Build-PfbCapabilityMap.ps1 | 2 +- 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/Tests/Build-PfbCapabilityMap.Tests.ps1 b/Tests/Build-PfbCapabilityMap.Tests.ps1 index 11f3cf9..fd0843d 100644 --- a/Tests/Build-PfbCapabilityMap.Tests.ps1 +++ b/Tests/Build-PfbCapabilityMap.Tests.ps1 @@ -423,6 +423,67 @@ Describe 'Build-PfbCapabilityMap: parameterComponentDefaults/Overrides' -Skip:($ } ($reconstructed.Keys | Sort-Object) | Should -Be ($pcExpectedPairs.Keys | Sort-Object) -Because 'no additional or missing (endpoint, param) pairs vs. the fixture ground truth' } + + # Regression for the hashtable .Count-shadowing bug class: 'count' is a REAL + # query-parameter name in this API (parameterComponentDefaults.count = 'Ping_count' in + # the committed manifest). A key literally named 'count' inside the per-endpoint + # $overrides ordered hashtable shadows the .Count MEMBER -- it returns that key's + # VALUE instead of the number of entries -- which is exactly why the script uses + # get_Count()/get_Keys() defensively elsewhere in this same function. This fixture + # forces that shape directly: 'alpha'/'bravo' establish 'Count' as the global default + # component for parameter name 'count', and 'charlie' declares 'count' INLINE (no + # $ref, so no component) -- so charlie's ONLY override entry is { count = $null }, + # the worst case for the shadowing bug: $null -gt 0 is False, so a buggy + # `$overrides.Count -gt 0` guard would silently skip attaching + # parameterComponentOverrides to charlie at all, even though a real override exists. + Context 'hashtable .Count shadowing regression (override key literally "count")' { + BeforeAll { + New-Item -ItemType Directory -Path 'TestDrive:\pcSpecsCount' -Force | Out-Null + + $specCount = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '9.0' } + paths = [ordered]@{ + '/api/9.0/alpha' = [ordered]@{ + get = @{ parameters = @(@{ '$ref' = '#/components/parameters/Count' }) } + } + '/api/9.0/bravo' = [ordered]@{ + get = @{ parameters = @(@{ '$ref' = '#/components/parameters/Count' }) } + } + '/api/9.0/charlie' = [ordered]@{ + # 'count' declared INLINE -- no "$ref", so no component at all. + get = @{ + parameters = @(@{ name = 'count'; 'in' = 'query'; schema = @{ type = 'integer' } }) + } + } + } + components = [ordered]@{ + parameters = [ordered]@{ + Count = [ordered]@{ name = 'count'; 'in' = 'query'; schema = @{ type = 'integer' } } + } + } + } + $specCount | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\pcSpecsCount\fb9.0.json' + + & $builderScript -SpecsDirectory 'TestDrive:\pcSpecsCount' -OutputPath 'TestDrive:\pcOutputCount\manifest.json' + $script:pcCountManifest = Get-Content -Path 'TestDrive:\pcOutputCount\manifest.json' -Raw | ConvertFrom-Json -Depth 20 + } + + It 'establishes Count as the global default for parameter name "count"' { + $pcCountManifest.parameterComponentDefaults.count | Should -Be 'Count' + } + + It 'does NOT silently drop parameterComponentOverrides on the endpoint whose only override key is literally "count"' { + $entry = $pcCountManifest.endpoints.'GET /charlie' + $entry.PSObject.Properties.Name | Should -Contain 'parameterComponentOverrides' + } + + It 'records an explicit null override for the inline "count" parameter, not silence' { + $entry = $pcCountManifest.endpoints.'GET /charlie' + $entry.parameterComponentOverrides.PSObject.Properties.Name | Should -Contain 'count' + $entry.parameterComponentOverrides.count | Should -BeNullOrEmpty + } + } } Describe 'Build-PfbCapabilityMap: -MaxVersion cap' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { @@ -468,6 +529,58 @@ Describe 'Build-PfbCapabilityMap: -MaxVersion cap' -Skip:($PSVersionTable.PSVers It 'still includes endpoints from versions at or below -MaxVersion' { $capManifest.endpoints.PSObject.Properties.Name | Should -Contain 'GET /widgets' } + + # The 9.0/9.1/9.2 fixture above cannot distinguish a correct numeric Major/Minor + # comparison from a buggy string comparison, because single-digit minors sort + # identically either way. '2.9' vs '2.10' do NOT: '2.9' sorts ABOVE '2.10' as a + # string (since '9' > '1' lexically) but numerically 2.9 < 2.10. This exact string- + # vs-numeric confusion has bitten this effort twice already (see the script's own + # -MaxVersion parameter help), so it needs its own regression case distinct from the + # coarser 9.0/9.1/9.2 test above. + Context 'numeric vs. string comparison (2.9 vs 2.10)' { + BeforeAll { + New-Item -ItemType Directory -Path 'TestDrive:\capSpecsNumeric' -Force | Out-Null + + $specNumericV1 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '2.9' } + paths = [ordered]@{ '/api/2.9/alpha' = [ordered]@{ get = @{} } } + } + # A newer minor version that a string compare would wrongly treat as OLDER + # than 2.9 (because '2.10' < '2.9' lexically) and therefore wrongly include + # under -MaxVersion '2.9'. A correct numeric compare must exclude it. + $specNumericV2 = [ordered]@{ + openapi = '3.0.1' + info = @{ version = '2.10' } + paths = [ordered]@{ + '/api/2.10/alpha' = [ordered]@{ get = @{} } + '/api/2.10/newnumeric' = [ordered]@{ get = @{} } + } + } + + $specNumericV1 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\capSpecsNumeric\fb2.9.json' + $specNumericV2 | ConvertTo-Json -Depth 20 | Set-Content -Path 'TestDrive:\capSpecsNumeric\fb2.10.json' + + & $builderScript -SpecsDirectory 'TestDrive:\capSpecsNumeric' -OutputPath 'TestDrive:\capOutputNumeric\manifest.json' -MaxVersion '2.9' + $script:capManifestNumeric = Get-Content -Path 'TestDrive:\capOutputNumeric\manifest.json' -Raw | ConvertFrom-Json -Depth 20 + } + + It 'includes 2.9 in generatedFrom' { + $capManifestNumeric.generatedFrom | Should -Contain '2.9' + } + + It 'excludes 2.10 from generatedFrom even though it sorts below "2.9" as a string' { + $capManifestNumeric.generatedFrom | Should -Not -Contain '2.10' + } + + It 'excludes an endpoint that only exists in 2.10' { + $capManifestNumeric.endpoints.PSObject.Properties.Name | Should -Not -Contain 'GET /newnumeric' + } + + It 'still includes an endpoint present at or below the 2.9 cap' { + $capManifestNumeric.endpoints.PSObject.Properties.Name | Should -Contain 'GET /alpha' + } + } } Describe 'Real committed capability map (skips gracefully if not yet generated)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { diff --git a/tools/Build-PfbCapabilityMap.ps1 b/tools/Build-PfbCapabilityMap.ps1 index 767fb39..b5c10bd 100644 --- a/tools/Build-PfbCapabilityMap.ps1 +++ b/tools/Build-PfbCapabilityMap.ps1 @@ -299,7 +299,7 @@ foreach ($epKey in $endpoints.get_Keys()) { } } - if ($overrides.Count -gt 0) { + if ($overrides.get_Count() -gt 0) { # Re-sort: the two loops above each insert in their own sorted order, but their # combination is not necessarily sorted overall. $sortedOverrides = [ordered]@{} From a7eacd5e39132e1a91a1747cfbd419231256aa76 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 19:36:55 -0700 Subject: [PATCH 06/17] feat(tools): add OwnerSchema to the schema-details walker for Task 5's enum join Task 5 needs to join each addable body-property gap to its documented enum values (Reports/PfbValueEnumMap.json, keyed .) via Resolve-PfbFieldValueEnum. The existing cmdlet-name-derived resource hint (Get-PfbResourceHint) only reaches 14 of the expected 33 matches against fb2.27, because cmdlet names and declaring schema names diverge (e.g. Update-PfbNfsExportRule -> hint "NfsExportRule", but the real schema is NfsExportPolicyRuleBase*, which the prefix match never finds). Reaching 33 requires the actual declaring schema, which can only be recovered by walking the request body's allOf/$ref chain -- exactly what Get-PfbSchemaPropertyDetails already does. Rather than add a second schema walker for Task 5 (rejected per this plan's "one walker, not two"), thread owner tracking through the existing Add-PfbSchemaPropertyNodes recursion: each property now also carries OwnerSchema, the nearest enclosing named component ($ref'd from #/components/schemas/) whose own "properties" block declares it, inherited across anonymous/inline allOf branches and resolved outermost-wins on the rare multi-owner collision (2 of ~3960 schema/property pairs in fb2.27: POST /array-connections' "encrypted" and "throttle"). $null (never '') marks "no named owner" so downstream code can tell that apart from a bug. The PIN (never follow a property's own $ref) still holds -- owner comes from the chain being walked into, not from dereferencing the property's own ref -- verified against POST /file-system-replica-links/direction (ReadOnly=false, OwnerSchema _replicaLinkBuiltIn) and the full Pester suite. Every existing field (Name, ReadOnly, Deprecated, Type, Format, Required) and BodyProperties' traversal order are unchanged; this is purely additive. Co-Authored-By: Claude Sonnet 5 --- Tests/PfbSpecTools.Tests.ps1 | 125 ++++++++++++++++++++++++++++++++ tools/lib/PfbSpecTools.ps1 | 135 +++++++++++++++++++++++++++++------ 2 files changed, 239 insertions(+), 21 deletions(-) diff --git a/Tests/PfbSpecTools.Tests.ps1 b/Tests/PfbSpecTools.Tests.ps1 index 3dd3f73..0a613aa 100644 --- a/Tests/PfbSpecTools.Tests.ps1 +++ b/Tests/PfbSpecTools.Tests.ps1 @@ -211,6 +211,69 @@ Describe 'Get-PfbSchemaPropertyDetails' { } ) } + + # OwnerSchema fixture, shaped like the brief's worked example: + # CertificatePatch = allOf[ _certificateBase, {inline: days,...} ] + # _certificateBase = allOf[ _realmsReference, {inline: certificate_type,...} ] + # Three tiers -> three different expected owners. + _realmsReference = [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ realms = [PSCustomObject]@{ type = 'array' } } + } + _certificateBase = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ '$ref' = '#/components/schemas/_realmsReference' } + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ + certificate_type = [PSCustomObject]@{ type = 'string' } + issued_by = [PSCustomObject]@{ type = 'string' } + } + } + ) + } + CertificatePatch = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ '$ref' = '#/components/schemas/_certificateBase' } + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ + days = [PSCustomObject]@{ type = 'integer' } + passphrase = [PSCustomObject]@{ type = 'string' } + } + } + ) + } + + # Outermost-wins fixture: 'dup' declared directly by TWO different named + # components in the same chain -- OwnerSchema must pick the shallower one + # (OuterOwner, declared inline directly under OuterOwner's own allOf), not + # the deeper one reached through a further nested $ref (InnerOwner). The + # inline (OuterOwner-owned) branch is listed FIRST in the allOf array so + # this is unambiguous under the "first-seen in traversal order" tie-break + # documented on Add-PfbSchemaPropertyNodes (own/inherited-owner properties + # are always recorded before a sibling branch's nested named $ref is + # walked into). + InnerOwner = [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ dup = [PSCustomObject]@{ type = 'string' } } + } + OuterOwner = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ dup = [PSCustomObject]@{ type = 'string' } } + } + [PSCustomObject]@{ '$ref' = '#/components/schemas/InnerOwner' } + ) + } + + # Fully inline fixture: no $ref anywhere in the chain -- OwnerSchema must + # come out $null (explicitly, not ''). + FullyInline = [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ freeform = [PSCustomObject]@{ type = 'string' } } + } } } } @@ -241,6 +304,68 @@ Describe 'Get-PfbSchemaPropertyDetails' { ($details | Where-Object Name -eq 'ref_only').ReadOnly | Should -Be $false } + It 'PIN regression: ref_only still resolves ReadOnly=$false AND now also carries its correct OwnerSchema' { + # Adding OwnerSchema tracking touches the same ref-resolution code path as the PIN + # above -- this is exactly where a regression would hide. Re-assert both facts + # together: the owner is recorded from the CHAIN being walked into (the allOf + # branch of ResourcePatch that declares ref_only), never from resolving ref_only's + # own '$ref' value (which would incorrectly suggest an owner of '_readOnlyLeaf'). + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/ResourcePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + $refOnly = $details | Where-Object Name -eq 'ref_only' + $refOnly.ReadOnly | Should -Be $false + $refOnly.OwnerSchema | Should -Be 'ResourcePatch' + } + + It 'OwnerSchema resolves to the nearest named component through an allOf + $ref chain (three tiers)' { + # Mirrors the brief's PATCH /certificates worked example exactly: + # CertificatePatch = allOf[ _certificateBase, {inline: days, passphrase} ] + # _certificateBase = allOf[ _realmsReference, {inline: certificate_type, issued_by} ] + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/CertificatePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'days').OwnerSchema | Should -Be 'CertificatePatch' + ($details | Where-Object Name -eq 'passphrase').OwnerSchema | Should -Be 'CertificatePatch' + ($details | Where-Object Name -eq 'certificate_type').OwnerSchema | Should -Be '_certificateBase' + ($details | Where-Object Name -eq 'issued_by').OwnerSchema | Should -Be '_certificateBase' + ($details | Where-Object Name -eq 'realms').OwnerSchema | Should -Be '_realmsReference' + } + + It 'attributes a property declared in an anonymous inline branch to the nearest NAMED ancestor, not the branch itself' { + # 'days' is declared in CertificatePatch's own anonymous inline allOf branch -- + # there is no schema named after that branch; the only correct owner is the + # nearest enclosing NAMED component, CertificatePatch itself. + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/CertificatePatch' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'days').OwnerSchema | Should -Be 'CertificatePatch' + ($details | Where-Object Name -eq 'days').OwnerSchema | Should -Not -Be $null + } + + It 'a fully inline body with no $ref anywhere yields OwnerSchema $null, explicitly (not '''')' { + # Deliberately pass the schema NODE ITSELF, not a '$ref' wrapper around it -- this + # simulates an operation whose request body is written fully inline in the spec + # (no $ref anywhere in its chain), the only case where OwnerSchema is $null. + $schema = $testSpec.components.schemas.FullyInline + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + $freeform = $details | Where-Object Name -eq 'freeform' + $freeform.OwnerSchema | Should -BeNullOrEmpty + $null -eq $freeform.OwnerSchema | Should -Be $true + $freeform.OwnerSchema -eq '' | Should -Be $false + } + + It 'outermost-wins: when two named schemas declare the same property, the shallower one wins' { + # OuterOwner = allOf[ {inline: dup}, InnerOwner ] -- 'dup' is declared both directly + # (inline, owned by OuterOwner itself) and via a nested named $ref to InnerOwner. + # The outer (closer to the operation's own body schema) declaration must win. + $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/OuterOwner' } + $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec + + ($details | Where-Object Name -eq 'dup').OwnerSchema | Should -Be 'OuterOwner' + } + It 'populates Type and Format from the property''s own node' { $schema = [PSCustomObject]@{ '$ref' = '#/components/schemas/BaseResource' } $details = Get-PfbSchemaPropertyDetails -Schema $schema -Spec $testSpec diff --git a/tools/lib/PfbSpecTools.ps1 b/tools/lib/PfbSpecTools.ps1 index 8ade653..a7c8007 100644 --- a/tools/lib/PfbSpecTools.ps1 +++ b/tools/lib/PfbSpecTools.ps1 @@ -193,17 +193,39 @@ function Add-PfbSchemaPropertyNodes { .SYNOPSIS Internal recursive helper for Get-PfbSchemaPropertyWalkAccumulators. Not intended to be called directly. (Uses the "Add" verb, not "Get", because it returns nothing -- - it mutates its two accumulator arguments in place.) + it mutates its three accumulator arguments in place.) .DESCRIPTION Resolves $ref/allOf chains at the *schema* level (exactly like the old Get-PfbSchemaPropertyNames did) and accumulates, per property name, the list of raw (NOT further $ref-resolved) property schema nodes seen for it, plus the union - of every visited schema node's own "required" array. Mutates the two accumulator - arguments in place; both are reference types (Dictionary/HashSet) so no [ref] is + of every visited schema node's own "required" array. Mutates the three accumulator + arguments in place; all are reference types (Dictionary/HashSet) so no [ref] is needed. $PropertyNodesByName's key ENUMERATION ORDER is first-seen/traversal order (insertion order on a Dictionary[TKey,TValue] with no removals) -- callers that care about ordering (Get-PfbSchemaPropertyNames does; Get-PfbSchemaPropertyDetails deliberately re-sorts instead) rely on that. + + Owner tracking (feeds Get-PfbSchemaPropertyDetails's OwnerSchema field): as the + walk descends, -OwnerName carries "the nearest named component ($ref'd from + #/components/schemas/) enclosing the node currently being visited", + inherited unmodified across anonymous/inline allOf branches. Each call re-derives + its OWN local owner from $Node's OWN raw "$ref" (the ref this specific recursive + call was reached through) -- NOT from $resolved, and NOT by following anything + inside the resolved node's properties (that would revisit the PIN below at the + schema level instead of the property level, but the principle is the same: owner + comes from the chain being walked INTO, never from dereferencing further once + there). If $Node has no own "$ref", the inherited -OwnerName passes through + unchanged -- this is exactly "an anonymous inline branch is not an owner; its + properties belong to the nearest enclosing NAMED ancestor". Every property added + to $PropertyNodesByName at this call site is paired 1:1 (same list index) with the + local owner in $PropertyOwnersByName, a $null entry meaning "no named component + enclosed this declaration" (e.g. the operation's entire body schema is written + fully inline with no $ref anywhere in its chain). Because a node's own direct + "properties" are recorded before recursing into its "allOf" branches, and allOf + branches are visited in array order, the FIRST entry appended for a given property + name is always the OUTERMOST (closest-to-the-operation) declaration -- this is the + tie-break Get-PfbSchemaPropertyDetails uses for the rare case where more than one + named component in the chain declares the same property name. #> [CmdletBinding()] param( @@ -221,11 +243,35 @@ function Add-PfbSchemaPropertyNodes { [Parameter(Mandatory)] [AllowEmptyCollection()] - [System.Collections.Generic.HashSet[string]]$RequiredNames + [System.Collections.Generic.HashSet[string]]$RequiredNames, + + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]$PropertyOwnersByName, + + # Deliberately UNTYPED (not [string]) -- PowerShell's [string] type converter + # coerces a $null argument to '' on parameter binding even under [AllowNull()], + # which would silently destroy the null-vs-"" distinction this walk depends on + # (a bare `[AllowNull()][string]$OwnerName = $null` parameter is NEVER actually + # $null inside the function body; it is always at least ''). Leaving this + # untyped preserves a real $null all the way through the recursion. + [AllowNull()] + $OwnerName = $null ) if ($null -eq $Node -or $MaxDepth -le 0) { return } + # The owner for THIS call's own directly-declared properties (and, unless overridden + # again deeper down, everything reached through its "allOf" branches): if $Node + # itself is a $ref to a named component (#/components/schemas/), that name + # wins; otherwise the owner inherited from the caller passes through unchanged. + # Deliberately inspects $Node (the raw, pre-resolution argument), never $resolved -- + # see the .DESCRIPTION above and the PIN in Get-PfbSchemaPropertyDetails's help. + $ownerForThis = $OwnerName + if ($Node.PSObject.Properties.Name -contains '$ref' -and $Node.'$ref' -match '^#/components/schemas/(.+)$') { + $ownerForThis = $Matches[1] + } + $resolved = Resolve-PfbRef -Node $Node -Spec $Spec if ($null -eq $resolved) { return } @@ -237,17 +283,20 @@ function Add-PfbSchemaPropertyNodes { foreach ($propName in $resolved.properties.PSObject.Properties.Name) { if (-not $PropertyNodesByName.ContainsKey($propName)) { $PropertyNodesByName[$propName] = [System.Collections.Generic.List[object]]::new() + $PropertyOwnersByName[$propName] = [System.Collections.Generic.List[object]]::new() } # Deliberately store the RAW property node (no Resolve-PfbRef here) -- see # the PIN in Get-PfbSchemaPropertyDetails's help for why. $PropertyNodesByName[$propName].Add($resolved.properties.$propName) + $PropertyOwnersByName[$propName].Add($ownerForThis) } } if ($resolved.PSObject.Properties.Name -contains 'allOf' -and $resolved.allOf) { foreach ($branch in $resolved.allOf) { Add-PfbSchemaPropertyNodes -Node $branch -Spec $Spec -MaxDepth ($MaxDepth - 1) ` - -PropertyNodesByName $PropertyNodesByName -RequiredNames $RequiredNames + -PropertyNodesByName $PropertyNodesByName -RequiredNames $RequiredNames ` + -PropertyOwnersByName $PropertyOwnersByName -OwnerName $ownerForThis } } } @@ -255,7 +304,7 @@ function Add-PfbSchemaPropertyNodes { function Get-PfbSchemaPropertyWalkAccumulators { <# .SYNOPSIS - Internal: runs Add-PfbSchemaPropertyNodes once over $Schema and returns its two + Internal: runs Add-PfbSchemaPropertyNodes once over $Schema and returns its three accumulators. Not intended to be called directly. .DESCRIPTION Shared setup for both Get-PfbSchemaPropertyDetails (reports property DETAILS, sorted @@ -266,8 +315,14 @@ function Get-PfbSchemaPropertyWalkAccumulators { two callers. .OUTPUTS [PSCustomObject]@{ - PropertyNodesByName = Dictionary[string, List[object]] # traversal order - RequiredNames = HashSet[string] + PropertyNodesByName = Dictionary[string, List[object]] # traversal order + RequiredNames = HashSet[string] + PropertyOwnersByName = Dictionary[string, List[object]] # parallel to + # PropertyNodesByName; + # each entry is a + # nullable owner-name + # string, same index + # per occurrence. } #> [CmdletBinding()] @@ -287,15 +342,18 @@ function Get-PfbSchemaPropertyWalkAccumulators { # shadow real member access on a Hashtable (a live bug elsewhere in this codebase). $propertyNodesByName = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]::new() $requiredNames = [System.Collections.Generic.HashSet[string]]::new() + $propertyOwnersByName = [System.Collections.Generic.Dictionary[string, System.Collections.Generic.List[object]]]::new() if ($null -ne $Schema -and $MaxDepth -gt 0) { Add-PfbSchemaPropertyNodes -Node $Schema -Spec $Spec -MaxDepth $MaxDepth ` - -PropertyNodesByName $propertyNodesByName -RequiredNames $requiredNames + -PropertyNodesByName $propertyNodesByName -RequiredNames $requiredNames ` + -PropertyOwnersByName $propertyOwnersByName } return [PSCustomObject]@{ - PropertyNodesByName = $propertyNodesByName - RequiredNames = $requiredNames + PropertyNodesByName = $propertyNodesByName + RequiredNames = $requiredNames + PropertyOwnersByName = $propertyOwnersByName } } @@ -303,7 +361,7 @@ function Get-PfbSchemaPropertyDetails { <# .SYNOPSIS Returns per-top-level-property schema details (ReadOnly, Deprecated, Type, Format, - Required) for a (possibly $ref'd / allOf'd) request-body schema. + Required, OwnerSchema) for a (possibly $ref'd / allOf'd) request-body schema. .DESCRIPTION Walks the same $ref/allOf resolution Get-PfbSchemaPropertyNames always has (the common "Patch: allOf [BaseResource, {extra properties}]" pattern in these @@ -332,9 +390,29 @@ function Get-PfbSchemaPropertyDetails { every visited node's own `required: [...]` array. Type/Format use the first non-null value encountered in traversal order. Verified: 0 real name collisions across allOf branches in all of fb2.27, so this only matters for a future spec. + + OwnerSchema: the name of the nearest enclosing NAMED component -- a schema reached + via "#/components/schemas/" -- whose own "properties" block directly + declares this property. An anonymous/inline allOf branch is never itself an + owner: a property declared there is attributed to the nearest named ancestor + enclosing that branch (tracked via Add-PfbSchemaPropertyNodes's -OwnerName + inheritance). If no named component encloses the declaration anywhere in the + chain (the operation's entire body schema is written fully inline with no $ref + at all), OwnerSchema is explicitly $null -- never ''. The two are NOT + interchangeable: $null means "no named owner exists", '' would be indistinguishable + from a bug that failed to populate the field, so this function never emits ''. + Multi-owner rule: if more than one named component in the chain directly declares + the same property name (0 occurrences measured across all of fb2.27 -- see the + real-spec verification in this repo's task notes; the rule is close to academic + today but is a real, reachable case for a future spec), the OUTERMOST one wins, + i.e. the declaration closest to the operation's own body schema. Because a node's + own direct properties are recorded before its allOf branches are recursed into, + and siblings are visited in array order, "outermost" is simply "first-seen" in + Add-PfbSchemaPropertyNodes's traversal order -- consistent with how Type/Format + already resolve ties in this same function. .OUTPUTS - [PSCustomObject]@{ Name; ReadOnly; Deprecated; Type; Format; Required } per - top-level property, sorted by Name for deterministic OUTPUT ordering (this is + [PSCustomObject]@{ Name; ReadOnly; Deprecated; Type; Format; Required; OwnerSchema } + per top-level property, sorted by Name for deterministic OUTPUT ordering (this is distinct from Get-PfbSchemaPropertyNames, which intentionally preserves traversal order instead -- see that function's help). #> @@ -353,6 +431,7 @@ function Get-PfbSchemaPropertyDetails { $walk = Get-PfbSchemaPropertyWalkAccumulators -Schema $Schema -Spec $Spec -MaxDepth $MaxDepth $propertyNodesByName = $walk.PropertyNodesByName $requiredNames = $walk.RequiredNames + $propertyOwnersByName = $walk.PropertyOwnersByName $details = [System.Collections.Generic.List[object]]::new() foreach ($name in $propertyNodesByName.get_Keys()) { @@ -377,13 +456,26 @@ function Get-PfbSchemaPropertyDetails { if ($null -eq $format -and $node.PSObject.Properties.Name -contains 'format') { $format = $node.format } } + # Outermost-wins: the first entry recorded for this property name is always the + # shallowest (closest to the operation's own body schema) -- see the ordering + # guarantee documented on Add-PfbSchemaPropertyNodes. $null here is a legitimate + # value (no named component enclosed the declaration), never coerced to ''. + # NOTE: deliberately `$null -ne $owners`, NOT the bare-truthy `$owners`/`if ($owners)` + # -- a single-element collection whose only element is itself $null (exactly the + # "fully inline, no owner" case) evaluates as FALSE under PowerShell's + # single-item-array boolean coercion, which would take this down the wrong branch + # for the right-looking-by-coincidence reason. + $owners = $propertyOwnersByName[$name] + $ownerSchema = if ($null -ne $owners -and $owners.Count -gt 0) { $owners[0] } else { $null } + $details.Add([PSCustomObject]@{ - Name = $name - ReadOnly = $readOnly - Deprecated = $deprecated - Type = $type - Format = $format - Required = $requiredNames.Contains($name) + Name = $name + ReadOnly = $readOnly + Deprecated = $deprecated + Type = $type + Format = $format + Required = $requiredNames.Contains($name) + OwnerSchema = $ownerSchema }) } @@ -441,7 +533,8 @@ function Get-PfbSpecCapabilities { Additive outputs alongside the original Parameters/BodyProperties (unchanged in name, type, and contents): - BodyPropertyDetails: the full per-property detail records (Name, ReadOnly, - Deprecated, Type, Format, Required) from Get-PfbSchemaPropertyDetails. + Deprecated, Type, Format, Required, OwnerSchema) from + Get-PfbSchemaPropertyDetails. - ReadOnlyBodyProperties / DeprecatedBodyProperties: string[] convenience projections of the above, sorted for determinism. - ParameterComponents: a { paramName: componentName } map From 3da1f62757118ade29ef5541e7de3b3a2e44a3a1 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 19:50:26 -0700 Subject: [PATCH 07/17] =?UTF-8?q?docs(tools):=20correct=20OwnerSchema=20mu?= =?UTF-8?q?lti-owner=20count=20in=20doc=20comment=20(0=20=E2=86=92=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Get-PfbSchemaPropertyDetails doc comment incorrectly stated 0 occurrences of multi-owner properties (where two named schemas both declare the same property name) across the fb2.27 spec. The task's own real-spec verification measured exactly 2 occurrences: POST /array-connections' encrypted and throttle properties, each with candidate owners ArrayConnection and ArrayConnectionPost. Updated the doc comment to reflect the real measurement and concrete examples. This fixes a contradiction where a shipped doc comment contradicted the task's own verification report. Co-Authored-By: Claude Sonnet 5 --- tools/lib/PfbSpecTools.ps1 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/lib/PfbSpecTools.ps1 b/tools/lib/PfbSpecTools.ps1 index a7c8007..037403a 100644 --- a/tools/lib/PfbSpecTools.ps1 +++ b/tools/lib/PfbSpecTools.ps1 @@ -402,9 +402,11 @@ function Get-PfbSchemaPropertyDetails { interchangeable: $null means "no named owner exists", '' would be indistinguishable from a bug that failed to populate the field, so this function never emits ''. Multi-owner rule: if more than one named component in the chain directly declares - the same property name (0 occurrences measured across all of fb2.27 -- see the - real-spec verification in this repo's task notes; the rule is close to academic - today but is a real, reachable case for a future spec), the OUTERMOST one wins, + the same property name (2 occurrences measured across all of fb2.27: `POST + /array-connections`' `encrypted` and `throttle` properties, each with candidate + owners `ArrayConnection` and `ArrayConnectionPost` -- see the real-spec + verification in this repo's task notes; the rule is close to academic today but is + a real, reachable case for a future spec), the OUTERMOST one wins, i.e. the declaration closest to the operation's own body schema. Because a node's own direct properties are recorded before its allOf branches are recursed into, and siblings are visited in array order, "outermost" is simply "first-seen" in From c43a3ea70b44dd81181648b9cbc2edb982693ae8 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 20:46:40 -0700 Subject: [PATCH 08/17] feat(tools): carry each parameter's declaration line through the cmdlet inventory Get-PfbCmdletParameterInventory now records Line ($p.Extent.StartLineNumber) alongside the File it already carried. Needed so Get-PfbParameterCoverageGaps's upcoming per-parameter confidence annotation can point a reader at an exact file:line for every unresolved parameter, instead of just a filename to search. Co-Authored-By: Claude Sonnet 5 --- Tests/PfbCmdletParamTools.Tests.ps1 | 10 ++++++++++ tools/lib/PfbCmdletParamTools.ps1 | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Tests/PfbCmdletParamTools.Tests.ps1 b/Tests/PfbCmdletParamTools.Tests.ps1 index bc0272c..f0d6cb7 100644 --- a/Tests/PfbCmdletParamTools.Tests.ps1 +++ b/Tests/PfbCmdletParamTools.Tests.ps1 @@ -431,6 +431,16 @@ Describe 'Get-PfbCmdletParameterInventory' { $rec.Surface | Should -Be 'Typed' } + It 'carries each parameter''s own declaration line ($p.Extent.StartLineNumber), alongside its File, so a caveat is a click-through' { + # New-PfbFixtureAlertWatcher.ps1 is written verbatim from the here-string above (see + # BeforeAll): line 1 is 'function ...', and -MinimumSeverity's own declaration -- + # attributes included, since ParameterAst.Extent spans the whole parameter, not just + # the bare variable -- starts at line 7 ('[Parameter()]'). + $rec = $inventory | Where-Object { $_.Cmdlet -eq 'New-PfbFixtureAlertWatcher' -and $_.Parameter -eq 'MinimumSeverity' } + $rec.File | Should -Be (Join-Path $fixtureDir 'New-PfbFixtureAlertWatcher.ps1') + $rec.Line | Should -Be 7 + } + It 'resolves a simple $queryParams[wire_name] = $Param assignment' { $rec = $inventory | Where-Object { $_.Cmdlet -eq 'Get-PfbFixtureArrayPerformance' -and $_.Parameter -eq 'Protocol' } $rec.WireName | Should -Be 'protocol' diff --git a/tools/lib/PfbCmdletParamTools.ps1 b/tools/lib/PfbCmdletParamTools.ps1 index 7385302..4c3ca34 100644 --- a/tools/lib/PfbCmdletParamTools.ps1 +++ b/tools/lib/PfbCmdletParamTools.ps1 @@ -734,12 +734,18 @@ function Get-PfbCmdletParameterInventory { Inventories every typed parameter (excluding -Array/-Attributes themselves) across every function defined under -PublicDirectory. .OUTPUTS - [PSCustomObject]@{ File; Cmdlet; Parameter; HasValidateSet; ValidateSetValues; + [PSCustomObject]@{ File; Line; Cmdlet; Parameter; HasValidateSet; ValidateSetValues; WireName; Surface; Endpoint; Method } Endpoint/Method are $null unless the parameter's wire-name assignment resolved to exactly one Invoke-PfbApiRequest call's endpoint (see Get-PfbEndpointForVariable) -- never guessed. + + Line is the parameter's own declaration line ($p.Extent.StartLineNumber), + alongside the File it already carried -- so a consumer reporting on a + non-'Typed' Surface (Get-PfbParameterCoverageGaps's `confidence.unresolvedParameters` + in tools/lib/PfbApiDriftTools.ps1) can point a reader at an exact file:line rather + than making them search the whole file for the parameter name. #> [CmdletBinding()] param( @@ -792,6 +798,7 @@ function Get-PfbCmdletParameterInventory { $results.Add([PSCustomObject]@{ File = $file.FullName + Line = $p.Extent.StartLineNumber Cmdlet = $funcAst.Name Parameter = $paramName HasValidateSet = [bool]$validateSetValues From 880114b8f34aab97a66f1bf560120921fe84bab2 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 20:47:11 -0700 Subject: [PATCH 09/17] feat(tools): replace the parameter-gap silence gate with per-parameter confidence Get-PfbParameterCoverageGaps used to gate an ENTIRE endpoint on one boolean: any cmdlet parameter with a non-Typed (AttributesOnly/TypedUnresolved) surface discarded the whole endpoint into a notVerified bucket, throwing away every gap -- including the ones on parameters that resolved cleanly. Measured on this repo's own Public/ tree, ~70% of those non-Typed classifications turned out to be tool blindness (three since-fixed parser gaps), not real gaps, and the failure mode was silence: the report just got quieter, and quieter read as better. Per-parameter confidence replaces the gate. Gaps are now ALWAYS computed; uncertainty is carried per-endpoint as `confidence` (level high/ partial, unresolvedParameters with file:line, escapeHatchOnly, a caveat). Verified against the real Public/ tree: the 56 endpoints this newly surfaces account for 454 previously-invisible fields, while the pre-existing 376-endpoint/897-query/402-body/226-read-only population is reproduced byte-for-byte once isolated back out by confidence level. Output is also split three ways instead of one flat MissingParameters list: MissingQueryParameters, MissingBodyProperties (addable), and ReadOnlyFields (body fields read-only in the newest ANALYSED spec, i.e. the capability map's own generatedFrom[-1] -- never whichever spec happens to be newest on disk, which can be ahead of the map). The newest analysed spec is re-parsed once (Get-PfbSpecCapabilities) and passed in as -CurrentSpecCapabilities purely to exclude "phantom" fields: the capability map's parameters/bodyProperties dictionaries accumulate every field ever seen and never record removal, so a field withdrawn from the API in a later version still lingers there forever. 13 real (endpoint, field) pairs hit this on fb2.27 today, e.g. PATCH /certificates|id (read-only 2.0-2.19, removed 2.20+) -- without this check they would misreport as addable body gaps for a field that no longer exists to add. Also fixes a keys/count/values-shadowing bug: a plain Hashtable's .Keys property is shadowed by a KEY literally named "keys" (PowerShell's dictionary-key-as-member adapter resolves .Keys to that key's VALUE instead of the real key collection). This is the fifth known instance of this bug class in this codebase. It corrupted DELETE /workloads/tags two ways at once: fabricating a phantom "2.23" field (the literal value of its "keys" parameter) while silently losing the endpoint's one genuine gap, context_names. Fixed generally, not just at that one call site: both the query and body field-name collections are now typed Dictionary[string,string] (immune to the adapter trick) accessed via .get_Keys(), with a regression test covering a field literally named "keys" on both the query and body side. tools/Build-PfbApiDriftReport.ps1's consumption of Get-PfbParameterCoverageGaps is updated to match: no more notVerifiedEndpoints, the new three-way split plus confidence block is serialized into the manifest, and the newest analysed spec is loaded once and threaded through as -CurrentSpecCapabilities. Co-Authored-By: Claude Sonnet 5 --- Tests/Build-PfbApiDriftReport.Tests.ps1 | 31 ++- Tests/PfbApiDriftTools.Tests.ps1 | 295 ++++++++++++++++++++---- tools/Build-PfbApiDriftReport.ps1 | 57 ++++- tools/lib/PfbApiDriftTools.ps1 | 242 ++++++++++++++----- 4 files changed, 508 insertions(+), 117 deletions(-) diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index 9738b2c..f7b913b 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -31,7 +31,12 @@ function Get-PfbFixtureArrayPerformance { } '@ - # v1: Protocol has 4 values, matching the fixture cmdlet's ValidateSet exactly. + # v1: Protocol has 4 values, matching the fixture cmdlet's ValidateSet exactly. Also + # declares 'region' (matching the capability map's claim it's introduced at 9.0) so + # Build-PfbApiDriftReport.ps1's phantom-field cross-check (against the SINGLE newest + # analysed spec -- see Get-PfbParameterCoverageGaps's -CurrentSpecCapabilities) doesn't + # treat it as withdrawn-from-the-API just because this fixture spec's JSON and the + # hand-written capability map fixture would otherwise disagree. $specV1 = [ordered]@{ openapi = '3.0.1'; info = @{ version = '9.0' } paths = [ordered]@{ @@ -39,13 +44,17 @@ function Get-PfbFixtureArrayPerformance { get = [ordered]@{ parameters = @( [ordered]@{ name = 'protocol'; 'in' = 'query'; schema = [ordered]@{ type = 'string' }; description = 'Valid values are `nfs`, `smb`, `http`, and `s3`.' } + [ordered]@{ name = 'region'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } ) } } } components = [ordered]@{ schemas = [ordered]@{} } } - # v2: spec adds 'all' -- the real Get-PfbArrayPerformance -Protocol bug shape. + # v2: spec adds 'all' -- the real Get-PfbArrayPerformance -Protocol bug shape. Also + # carries 'region' and 'timezone' forward (see specV1's note above) -- this is the + # NEWEST analysed spec (capability map's generatedFrom ends at 9.1), so it's the one + # Build-PfbApiDriftReport.ps1 actually re-parses for phantom-field exclusion. $specV2 = [ordered]@{ openapi = '3.0.1'; info = @{ version = '9.1' } paths = [ordered]@{ @@ -53,6 +62,8 @@ function Get-PfbFixtureArrayPerformance { get = [ordered]@{ parameters = @( [ordered]@{ name = 'protocol'; 'in' = 'query'; schema = [ordered]@{ type = 'string' }; description = 'Valid values are `all`, `nfs`, `smb`, `http`, and `s3`.' } + [ordered]@{ name = 'region'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + [ordered]@{ name = 'timezone'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } ) } } @@ -125,17 +136,17 @@ Describe 'Build-PfbApiDriftReport' -Skip:($PSVersionTable.PSVersion.Major -lt 7) ($manifest.uncoveredEndpoints | Where-Object { $_.endpoint -eq 'GET /widgets' }) | Should -Not -BeNullOrEmpty } - It 'never reports X-Request-ID as a missing parameter, even though the fixture endpoint has it' { + It 'never reports X-Request-ID as a missing query parameter, even though the fixture endpoint has it' { $gap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /arrays/performance' } - $gap.missingParameters | Should -Not -Contain 'X-Request-ID' - $gap.missingParameters | Should -Contain 'region' + $gap.missingQueryParameters | Should -Not -Contain 'X-Request-ID' + $gap.missingQueryParameters | Should -Contain 'region' } - It 'never reports continuation_token or offset as a missing parameter, even though the fixture endpoint has both' { + It 'never reports continuation_token or offset as a missing query parameter, even though the fixture endpoint has both' { $gap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /arrays/performance' } - $gap.missingParameters | Should -Not -Contain 'continuation_token' - $gap.missingParameters | Should -Not -Contain 'offset' - $gap.missingParameters | Should -Contain 'region' + $gap.missingQueryParameters | Should -Not -Contain 'continuation_token' + $gap.missingQueryParameters | Should -Not -Contain 'offset' + $gap.missingQueryParameters | Should -Contain 'region' } } @@ -164,7 +175,7 @@ Describe 'Build-PfbApiDriftReport -SinceVersion filter' -Skip:($PSVersionTable.P It 'filters a parameter gap down to only fields introduced after -SinceVersion' { $gap = $filteredManifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /arrays/performance' } - $gap.missingParameters | Should -Be @('timezone') + $gap.missingQueryParameters | Should -Be @('timezone') } It 'notes the SinceVersion filter in the Markdown report' { diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index c239be0..7bb1f12 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -61,11 +61,23 @@ function Invoke-PfbFixtureInternalHelper { }) $script:fullyMappedInventory = @( - [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureArraySpace'; Parameter = 'Type'; Surface = 'Typed'; WireName = 'type'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'arrays/space'; Method = 'GET' } + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureArraySpace'; Parameter = 'Type'; Surface = 'Typed'; WireName = 'type'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'arrays/space'; Method = 'GET'; File = 'Public/Fixture/Get-PfbFixtureArraySpace.ps1'; Line = 5 } + ) + # A non-empty inventory containing only an UNRELATED cmdlet -- for tests that need to + # exercise "this endpoint's cmdlet has no inventory rows at all" without passing a + # literally empty array. Group-Object -AsHashTable returns $null for a whole-hashtable + # MISS on an empty input array (not merely for one absent key on an otherwise-populated + # one), and indexing into that null hashtable is itself a non-terminating error -- + # noisy in test output even though functionally harmless. A single unrelated row keeps + # the hashtable itself real, so a miss on the cmdlet actually under test stays a clean, + # silent $null (the "vacuous mapping" case Get-PfbParameterCoverageGaps is built to + # tolerate), not a null-hashtable index error. + $script:noopInventory = @( + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureUnrelated'; Parameter = 'Unused'; Surface = 'Typed'; WireName = 'unused'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = $null; Method = $null; File = 'x'; Line = 1 } ) $script:notFullyMappedInventory = @( - [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'name'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'widgets'; Method = 'GET' } - [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Attributes'; Surface = 'AttributesOnly'; WireName = $null; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = $null; Method = $null } + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'name'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'widgets'; Method = 'GET'; File = 'Public/Fixture/Get-PfbFixtureWidget.ps1'; Line = 3 } + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Attributes'; Surface = 'AttributesOnly'; WireName = $null; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = $null; Method = $null; File = 'Public/Fixture/Get-PfbFixtureWidget.ps1'; Line = 4 } ) $script:driftHistory = [ordered]@{ @@ -148,47 +160,69 @@ Describe 'Non-actionable parameter allowlist (X-Request-ID: no functional effect } Describe 'Get-PfbParameterCoverageGaps' { - It 'flags a missing parameter on a fully-mapped cmdlet''s endpoint' { + It 'flags a missing query parameter on a fully-mapped cmdlet''s endpoint, with high confidence' { $endpoints = @([PSCustomObject]@{ Key = 'GET /arrays/space'; Method = 'GET'; Endpoint = '/arrays/space'; Resolved = $true; Cmdlet = 'Get-PfbFixtureArraySpace'; File = 'x' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $endpoints - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } - $gap.MissingParameters | Should -Contain 'new_field' + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } + $gap.MissingQueryParameters | Should -Contain 'new_field' + $gap.MissingBodyProperties | Should -BeNullOrEmpty + $gap.ReadOnlyFields | Should -BeNullOrEmpty + $gap.Confidence.Level | Should -Be 'high' + $gap.Confidence.UnresolvedParameters | Should -BeNullOrEmpty + $gap.Confidence.EscapeHatchOnly | Should -BeNullOrEmpty + $gap.Confidence.Caveat | Should -BeNullOrEmpty } - It 'produces not-verified instead of a guessed gap for a cmdlet with an AttributesOnly parameter' { + It 'never gates an endpoint out entirely for an AttributesOnly parameter -- still reports its resolved gaps, with partial confidence and an escape-hatch annotation' { $endpoints = @([PSCustomObject]@{ Key = 'GET /widgets'; Method = 'GET'; Endpoint = '/widgets'; Resolved = $true; Cmdlet = 'Get-PfbFixtureWidget'; File = 'x' }) - $capMapWithWidgets = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ 'GET /widgets' = [PSCustomObject]@{ minVersion = '2.0'; parameters = [PSCustomObject]@{ name = '2.0' }; bodyProperties = [PSCustomObject]@{} } } } + $capMapWithWidgets = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ 'GET /widgets' = [PSCustomObject]@{ minVersion = '2.0'; parameters = [PSCustomObject]@{ name = '2.0'; kind = '2.0' }; bodyProperties = [PSCustomObject]@{} } } } $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMapWithWidgets -CmdletInventory $notFullyMappedInventory -CalledEndpoints $endpoints - $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /widgets' } | Should -BeNullOrEmpty - ($result.NotVerified | Where-Object { $_.Endpoint -eq 'GET /widgets' }).Reason | Should -Be 'has attributes/unresolved surface' + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /widgets' } + $gap | Should -Not -BeNullOrEmpty + $gap.MissingQueryParameters | Should -Be @('kind') + $gap.Confidence.Level | Should -Be 'partial' + $gap.Confidence.UnresolvedParameters.Parameter | Should -Contain 'Attributes' + ($gap.Confidence.UnresolvedParameters | Where-Object Parameter -eq 'Attributes').Surface | Should -Be 'AttributesOnly' + ($gap.Confidence.UnresolvedParameters | Where-Object Parameter -eq 'Attributes').Line | Should -Be 4 + $gap.Confidence.EscapeHatchOnly | Should -Be @('Attributes') + $gap.Confidence.Caveat | Should -Not -BeNullOrEmpty } - It 'with -SinceVersion, keeps a missing parameter introduced after that version' { + It 'with -SinceVersion, keeps a missing query parameter introduced after that version' { $endpoints = @([PSCustomObject]@{ Key = 'GET /arrays/space'; Method = 'GET'; Endpoint = '/arrays/space'; Resolved = $true; Cmdlet = 'Get-PfbFixtureArraySpace'; File = 'x' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $endpoints -SinceVersion '2.0' - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } - $gap.MissingParameters | Should -Contain 'new_field' + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } + $gap.MissingQueryParameters | Should -Contain 'new_field' } - It 'with -SinceVersion, drops a gap whose only missing parameter was introduced at or before that version' { + It 'with -SinceVersion, drops a gap whose only missing field was introduced at or before that version' { $endpoints = @([PSCustomObject]@{ Key = 'GET /arrays/space'; Method = 'GET'; Endpoint = '/arrays/space'; Resolved = $true; Cmdlet = 'Get-PfbFixtureArraySpace'; File = 'x' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $endpoints -SinceVersion '2.27' - $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } | Should -BeNullOrEmpty + $result | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } | Should -BeNullOrEmpty } - It 'flags X-Request-ID as a missing parameter when -ExcludedFields is not given' { + It 'flags X-Request-ID as a missing query parameter when -ExcludedFields is not given' { $endpoints = @([PSCustomObject]@{ Key = 'GET /arrays/space'; Method = 'GET'; Endpoint = '/arrays/space'; Resolved = $true; Cmdlet = 'Get-PfbFixtureArraySpace'; File = 'x' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $endpoints - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } - $gap.MissingParameters | Should -Contain 'X-Request-ID' + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } + $gap.MissingQueryParameters | Should -Contain 'X-Request-ID' } It 'with -ExcludedFields, excludes a named field but keeps other real gaps on the same endpoint' { $endpoints = @([PSCustomObject]@{ Key = 'GET /arrays/space'; Method = 'GET'; Endpoint = '/arrays/space'; Resolved = $true; Cmdlet = 'Get-PfbFixtureArraySpace'; File = 'x' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $endpoints -ExcludedFields @('X-Request-ID') - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } - $gap.MissingParameters | Should -Not -Contain 'X-Request-ID' - $gap.MissingParameters | Should -Contain 'new_field' + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /arrays/space' } + $gap.MissingQueryParameters | Should -Not -Contain 'X-Request-ID' + $gap.MissingQueryParameters | Should -Contain 'new_field' + } + + It 'with -ExcludedFields, excludes a named BODY field too -- the filter is not query-only' { + $endpoints = @([PSCustomObject]@{ Key = 'PATCH /excl'; Method = 'PATCH'; Endpoint = '/excl'; Resolved = $true; Cmdlet = 'Update-PfbFixtureExcl'; File = 'x' }) + $capMap = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ 'PATCH /excl' = [PSCustomObject]@{ minVersion = '2.0'; parameters = [PSCustomObject]@{}; bodyProperties = [PSCustomObject]@{ banner = '2.0'; internal_only = '2.0' } } } } + $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMap -CmdletInventory $noopInventory -CalledEndpoints $endpoints -ExcludedFields @('internal_only') + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /excl' } + $gap.MissingBodyProperties | Should -Be @('banner') + $gap.MissingBodyProperties | Should -Not -Contain 'internal_only' } It 'with -ExcludedFields, drops a gap entirely when every missing field is excluded' { @@ -196,16 +230,18 @@ Describe 'Get-PfbParameterCoverageGaps' { $capMapOnlyXRid = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ 'GET /widgets' = [PSCustomObject]@{ minVersion = '2.0'; parameters = [PSCustomObject]@{ 'X-Request-ID' = '2.12' }; bodyProperties = [PSCustomObject]@{} } } } $inventory = @([PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'name'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'widgets'; Method = 'GET' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMapOnlyXRid -CmdletInventory $inventory -CalledEndpoints $endpoints -ExcludedFields @('X-Request-ID') - $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /widgets' } | Should -BeNullOrEmpty + $result | Where-Object { $_.Endpoint -eq 'GET /widgets' } | Should -BeNullOrEmpty } - It 'returns MissingParameters in deterministic alphabetical order regardless of capability-map field order' { - # Field names deliberately declared in reverse/scrambled order below -- MissingParameters - # is internally staged through a plain Hashtable (not [ordered]), whose .Keys enumeration - # order depends on .NET's per-process-randomized string hash codes, so without an explicit - # sort this list's order silently varies run-to-run on identical input (confirmed live: - # regenerating Reports/PfbApiDriftReport.md twice produced two byte-different files for the - # exact same drift content). The fix must sort regardless of insertion order, so this test + It 'returns MissingQueryParameters in deterministic alphabetical order regardless of capability-map field order' { + # Field names deliberately declared in reverse/scrambled order below -- the field-name + # collections are staged through a Dictionary[string,string] whose insertion order + # traces back to JSON property order, which is not a documented contract for + # PSCustomObject.PSObject.Properties enumeration, so without an explicit sort this + # list's order is not guaranteed to be stable (confirmed live in an earlier version of + # this function, staged through a plain Hashtable instead: regenerating + # Reports/PfbApiDriftReport.md twice produced two byte-different files for the exact + # same drift content). The fix must sort regardless of insertion order, so this test # deliberately supplies fields already out of alphabetical order. $capMapScrambled = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ @@ -219,19 +255,185 @@ Describe 'Get-PfbParameterCoverageGaps' { $endpoints = @([PSCustomObject]@{ Key = 'GET /widgets'; Method = 'GET'; Endpoint = '/widgets'; Resolved = $true; Cmdlet = 'Get-PfbFixtureWidget'; File = 'x' }) $inventory = @([PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureWidget'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'name'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'widgets'; Method = 'GET' }) $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMapScrambled -CmdletInventory $inventory -CalledEndpoints $endpoints - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'GET /widgets' } - $gap.MissingParameters | Should -Be @('apple', 'mango', 'zebra') + $gap = $result | Where-Object { $_.Endpoint -eq 'GET /widgets' } + $gap.MissingQueryParameters | Should -Be @('apple', 'mango', 'zebra') + } + + It 'returns MissingBodyProperties and ReadOnlyFields in deterministic alphabetical order too' { + $capMapScrambled = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /widgets' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{} + bodyProperties = [PSCustomObject]@{ zebra = '2.0'; apple = '2.0'; mango = '2.0'; yak = '2.0'; banana = '2.0' } + readOnlyBodyProperties = @('zebra', 'yak') + } + } + } + $endpoints = @([PSCustomObject]@{ Key = 'PATCH /widgets'; Method = 'PATCH'; Endpoint = '/widgets'; Resolved = $true; Cmdlet = 'Update-PfbFixtureWidget'; File = 'x' }) + $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMapScrambled -CmdletInventory $noopInventory -CalledEndpoints $endpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } + $gap.MissingBodyProperties | Should -Be @('apple', 'banana', 'mango') + $gap.ReadOnlyFields | Should -Be @('yak', 'zebra') + } + + Context 'body fields read-only in the newest analysed spec are split into ReadOnlyFields, never MissingBodyProperties' { + BeforeAll { + $script:roCapMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /ro-fixture' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{} + bodyProperties = [PSCustomObject]@{ name = '2.0'; owner = '2.0' } + readOnlyBodyProperties = @('owner') + } + } + } + $script:roEndpoints = @([PSCustomObject]@{ Key = 'PATCH /ro-fixture'; Method = 'PATCH'; Endpoint = '/ro-fixture'; Resolved = $true; Cmdlet = 'Update-PfbFixtureRo'; File = 'x' }) + } + + It 'puts the addable field in MissingBodyProperties and the read-only one in ReadOnlyFields, never both' { + $result = Get-PfbParameterCoverageGaps -CapabilityMap $roCapMap -CmdletInventory $noopInventory -CalledEndpoints $roEndpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /ro-fixture' } + $gap.MissingBodyProperties | Should -Be @('name') + $gap.ReadOnlyFields | Should -Be @('owner') + $gap.MissingBodyProperties | Should -Not -Contain 'owner' + $gap.ReadOnlyFields | Should -Not -Contain 'name' + } + + It 'still emits the endpoint when the only gap is a read-only field (an endpoint is emitted if ANY list is non-empty)' { + $roOnlyCapMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /ro-fixture' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{} + bodyProperties = [PSCustomObject]@{ owner = '2.0' } + readOnlyBodyProperties = @('owner') + } + } + } + $result = Get-PfbParameterCoverageGaps -CapabilityMap $roOnlyCapMap -CmdletInventory $noopInventory -CalledEndpoints $roEndpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /ro-fixture' } + $gap | Should -Not -BeNullOrEmpty + $gap.MissingBodyProperties | Should -BeNullOrEmpty + $gap.ReadOnlyFields | Should -Be @('owner') + } + } + + Context 'the keys/count/values-shadowing bug -- a field literally named "keys" must not corrupt or swallow other fields' { + # Regression test for the bug fixed by this task: `$hashtable.Keys` on a plain + # Hashtable/PSCustomObject-backed IDictionary is shadowed by a KEY literally named + # "keys" (PowerShell's dictionary-key-as-member adapter resolves ".Keys" to that + # key's VALUE instead of the real key collection). The real-world instance was + # DELETE /workloads/tags, whose capability-map parameters are keys/namespaces/ + # resource_ids/resource_names/context_names -- the "keys" key's value ("2.23") + # was fabricated as a missing field, and every genuine key (context_names, the + # one real gap) was silently lost. Reproduced here with a body property named + # "keys" so both the query and body code paths are covered by this same trap. + It 'reports a query parameter literally named "keys" as a real gap, not a fabricated version string' { + $capMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'DELETE /fixture-tags' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{ keys = '2.23'; namespaces = '2.23'; resource_ids = '2.23'; resource_names = '2.23'; context_names = '2.23' } + bodyProperties = [PSCustomObject]@{} + } + } + } + $endpoints = @([PSCustomObject]@{ Key = 'DELETE /fixture-tags'; Method = 'DELETE'; Endpoint = '/fixture-tags'; Resolved = $true; Cmdlet = 'Remove-PfbFixtureTag'; File = 'x' }) + $inventory = @( + [PSCustomObject]@{ Cmdlet = 'Remove-PfbFixtureTag'; Parameter = 'Key'; Surface = 'Typed'; WireName = 'keys'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'fixture-tags'; Method = 'DELETE' } + [PSCustomObject]@{ Cmdlet = 'Remove-PfbFixtureTag'; Parameter = 'Namespace'; Surface = 'Typed'; WireName = 'namespaces'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'fixture-tags'; Method = 'DELETE' } + [PSCustomObject]@{ Cmdlet = 'Remove-PfbFixtureTag'; Parameter = 'ResourceId'; Surface = 'Typed'; WireName = 'resource_ids'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'fixture-tags'; Method = 'DELETE' } + [PSCustomObject]@{ Cmdlet = 'Remove-PfbFixtureTag'; Parameter = 'ResourceName'; Surface = 'Typed'; WireName = 'resource_names'; HasValidateSet = $false; ValidateSetValues = $null; Endpoint = 'fixture-tags'; Method = 'DELETE' } + ) + $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMap -CmdletInventory $inventory -CalledEndpoints $endpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'DELETE /fixture-tags' } + $gap.MissingQueryParameters | Should -Be @('context_names') + $gap.MissingQueryParameters | Should -Not -Contain '2.23' + } + + It 'reports a BODY property literally named "keys" as a real gap too (the trap generalises to the new split code)' { + $capMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /fixture-keys-body' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{} + bodyProperties = [PSCustomObject]@{ keys = '2.0'; count = '2.0'; values = '2.0'; other_field = '2.0' } + } + } + } + $endpoints = @([PSCustomObject]@{ Key = 'PATCH /fixture-keys-body'; Method = 'PATCH'; Endpoint = '/fixture-keys-body'; Resolved = $true; Cmdlet = 'Update-PfbFixtureKeysBody'; File = 'x' }) + $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMap -CmdletInventory $noopInventory -CalledEndpoints $endpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /fixture-keys-body' } + $gap.MissingBodyProperties | Should -Be @('count', 'keys', 'other_field', 'values') + } } - Context 'a cmdlet contributing zero inventory rows is vacuously fully mapped' { + Context '-CurrentSpecCapabilities excludes phantom fields (present in the accumulated capability map but absent from the newest analysed spec)' { + BeforeAll { + $script:phantomCapMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /phantom-fixture' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{ old_query = '2.0'; live_query = '2.0' } + bodyProperties = [PSCustomObject]@{ old_body = '2.0'; live_body = '2.0' } + } + } + } + $script:phantomEndpoints = @([PSCustomObject]@{ Key = 'PATCH /phantom-fixture'; Method = 'PATCH'; Endpoint = '/phantom-fixture'; Resolved = $true; Cmdlet = 'Update-PfbFixturePhantom'; File = 'x' }) + # Only live_query/live_body still exist in the "current" (newest analysed) spec -- + # old_query/old_body were withdrawn from the API after 2.0 but still linger in the + # capability map's accumulated (first-sight, never-removed) parameters/bodyProperties. + $script:currentSpecCaps = @([PSCustomObject]@{ Method = 'PATCH'; Path = '/phantom-fixture'; Parameters = @('live_query'); BodyProperties = @('live_body') }) + } + + It 'drops a phantom query/body field from every list when -CurrentSpecCapabilities is supplied' { + $result = Get-PfbParameterCoverageGaps -CapabilityMap $phantomCapMap -CmdletInventory $noopInventory -CalledEndpoints $phantomEndpoints -CurrentSpecCapabilities $currentSpecCaps + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /phantom-fixture' } + $gap.MissingQueryParameters | Should -Be @('live_query') + $gap.MissingQueryParameters | Should -Not -Contain 'old_query' + $gap.MissingBodyProperties | Should -Be @('live_body') + $gap.MissingBodyProperties | Should -Not -Contain 'old_body' + } + + It 'does NOT filter phantom fields when -CurrentSpecCapabilities is omitted (safe no-op default)' { + $result = Get-PfbParameterCoverageGaps -CapabilityMap $phantomCapMap -CmdletInventory $noopInventory -CalledEndpoints $phantomEndpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /phantom-fixture' } + $gap.MissingQueryParameters | Should -Contain 'old_query' + $gap.MissingBodyProperties | Should -Contain 'old_body' + } + } + + It 'reports the same field name in both MissingQueryParameters and MissingBodyProperties without deduping (the real placement_names shape)' { + # Only 1 of 632 real endpoints has a field name declared as both a query parameter + # and a body property (POST /workloads/placement-recommendations|placement_names) -- + # this proves that when neither side is covered, both lists legitimately carry it, + # with no dedup machinery collapsing one away. + $capMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'POST /fixture-dual' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{ dual_name = '2.0' } + bodyProperties = [PSCustomObject]@{ dual_name = '2.0' } + } + } + } + $endpoints = @([PSCustomObject]@{ Key = 'POST /fixture-dual'; Method = 'POST'; Endpoint = '/fixture-dual'; Resolved = $true; Cmdlet = 'New-PfbFixtureDual'; File = 'x' }) + $result = Get-PfbParameterCoverageGaps -CapabilityMap $capMap -CmdletInventory $noopInventory -CalledEndpoints $endpoints + $gap = $result | Where-Object { $_.Endpoint -eq 'POST /fixture-dual' } + $gap.MissingQueryParameters | Should -Contain 'dual_name' + $gap.MissingBodyProperties | Should -Contain 'dual_name' + } + + Context 'a cmdlet contributing zero inventory rows leaves nothing unresolved for it' { # Regression guard for the null-vs-empty conflation: the per-cmdlet lookup is a # Group-Object -AsHashTable, which returns $null for an absent key, and @($null) is # a ONE-element array whose element is $null -- so the surface loop used to run once - # with $row = $null, read $null.Surface -ne 'Typed' as true, and discard the whole - # endpoint into NotVerified. The real shape is the -Attributes-only write cmdlet - # (Update-PfbArray, Update-PfbPasswordPolicy, Update-PfbSupport): every parameter it - # declares is -Array or -Attributes, both inventory-exempt, so the inventory holds no - # row for it at all -- nothing contradicts full mapping. + # with $row = $null and throw evaluating $null.Surface. The real shape is the + # -Attributes-only write cmdlet (Update-PfbArray, Update-PfbPasswordPolicy, + # Update-PfbSupport): every parameter it declares is -Array or -Attributes, both + # inventory-exempt, so the inventory holds no row for it at all. BeforeAll { $script:attributesOnlyCapMap = [PSCustomObject]@{ endpoints = [PSCustomObject]@{ @@ -247,26 +449,29 @@ Describe 'Get-PfbParameterCoverageGaps' { ) } - It 'reports gaps rather than NotVerified when the inventory holds no row for the cmdlet' { + It 'reports gaps with high confidence when the inventory holds no row for the cmdlet' { # Inventory deliberately non-empty but for a DIFFERENT cmdlet, so the hashtable # lookup for Update-PfbFixtureWidget misses and yields $null. $result = Get-PfbParameterCoverageGaps -CapabilityMap $attributesOnlyCapMap -CmdletInventory $fullyMappedInventory -CalledEndpoints $attributesOnlyEndpoints - $result.NotVerified | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } | Should -BeNullOrEmpty - $gap = $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } $gap | Should -Not -BeNullOrEmpty - $gap.MissingParameters | Should -Be @('banner', 'ntp_servers') + $gap.MissingBodyProperties | Should -Be @('banner', 'ntp_servers') + $gap.Confidence.Level | Should -Be 'high' } - It 'still reports NotVerified when a second cmdlet on the same endpoint has an unresolved surface' { + It 'still surfaces the real gaps AND partial confidence when a second cmdlet on the same endpoint has an unresolved surface' { # The vacuous-mapping rule must not become a blanket amnesty: a real - # AttributesOnly/TypedUnresolved row anywhere on the endpoint still gates it. + # AttributesOnly/TypedUnresolved row anywhere on the endpoint still lowers + # confidence -- but (unlike the old $fullyMapped gate) never discards the gap. $twoCmdletEndpoints = @( $attributesOnlyEndpoints[0] [PSCustomObject]@{ Key = 'PATCH /widgets'; Method = 'PATCH'; Endpoint = '/widgets'; Resolved = $true; Cmdlet = 'Get-PfbFixtureWidget'; File = 'x' } ) $result = Get-PfbParameterCoverageGaps -CapabilityMap $attributesOnlyCapMap -CmdletInventory $notFullyMappedInventory -CalledEndpoints $twoCmdletEndpoints - $result.ParameterGaps | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } | Should -BeNullOrEmpty - ($result.NotVerified | Where-Object { $_.Endpoint -eq 'PATCH /widgets' }).Reason | Should -Be 'has attributes/unresolved surface' + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /widgets' } + $gap | Should -Not -BeNullOrEmpty + $gap.MissingBodyProperties | Should -Be @('banner', 'ntp_servers') + $gap.Confidence.Level | Should -Be 'partial' } } } diff --git a/tools/Build-PfbApiDriftReport.ps1 b/tools/Build-PfbApiDriftReport.ps1 index b7957b8..5f1d125 100644 --- a/tools/Build-PfbApiDriftReport.ps1 +++ b/tools/Build-PfbApiDriftReport.ps1 @@ -75,6 +75,26 @@ $fieldCmdletMap = Get-Content -Path $FieldCmdletMapPath -Raw | ConvertFrom-Json $inventory = Get-PfbCmdletParameterInventory -PublicDirectory $PublicDirectory $calledEndpoints = Get-PfbModuleCalledEndpoints -PublicDirectory $PublicDirectory -PrivateDirectory $PrivateDirectory +# "Newest spec" for read-only/phantom resolution is pinned to the capability map's OWN +# analysed set ($capabilityMap.generatedFrom[-1]), never whatever file happens to be +# newest under -SpecsDirectory -- the two diverge as soon as specs are refreshed without +# rebuilding the map (see this repo's drift-report-actionable plan, Task 7's +# generatedFrom item, for the verified case: specs at 2.28, map at 2.27). Only this ONE +# spec is re-parsed here, purely to give Get-PfbParameterCoverageGaps the CURRENT +# (phantom-free) parameter/body-property set per endpoint -- see that function's +# -CurrentSpecCapabilities help for why the capability map's own accumulated +# parameters/bodyProperties dictionaries can't answer that question by themselves. +$newestAnalysedVersion = $capabilityMap.generatedFrom | Select-Object -Last 1 +$currentSpecCapabilities = @() +if ($newestAnalysedVersion) { + $newestSpecPath = Join-Path $SpecsDirectory "fb$newestAnalysedVersion.json" + if (-not (Test-Path $newestSpecPath)) { + throw "Newest analysed spec 'fb$newestAnalysedVersion.json' (per capability map's generatedFrom) not found under '$SpecsDirectory'. Run Update-PfbApiSpecs.ps1 first, or rebuild the capability map against the specs on disk." + } + $newestSpec = Get-Content -Path $newestSpecPath -Raw | ConvertFrom-Json -Depth 64 + $currentSpecCapabilities = @(Get-PfbSpecCapabilities -Spec $newestSpec) +} + # --- Category 1 --- # The outer @(...) wraps the WHOLE pipeline (input AND ForEach-Object projection), not # just the input side -- assigning a pipeline's output straight to a variable silently @@ -89,9 +109,26 @@ $uncoveredEndpoints = @(Get-PfbEndpointCoverageGaps -CapabilityMap $capabilityMa ForEach-Object { [ordered]@{ endpoint = $_.Endpoint; minVersion = $_.MinVersion } }) # --- Category 2 --- -$category2 = Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $script:PfbNonActionableParameters -$parameterGaps = @($category2.ParameterGaps | ForEach-Object { [ordered]@{ endpoint = $_.Endpoint; cmdlets = @($_.Cmdlets); missingParameters = @($_.MissingParameters) } }) -$notVerifiedEndpoints = @($category2.NotVerified | ForEach-Object { [ordered]@{ endpoint = $_.Endpoint; cmdlets = @($_.Cmdlets); reason = $_.Reason } }) +# No more notVerifiedEndpoints bucket: Get-PfbParameterCoverageGaps always computes +# gaps now and carries per-parameter confidence on each row instead (design decision 5). +$parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $script:PfbNonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities | + ForEach-Object { + [ordered]@{ + endpoint = $_.Endpoint + cmdlets = @($_.Cmdlets) + missingQueryParameters = @($_.MissingQueryParameters) + missingBodyProperties = @($_.MissingBodyProperties) + readOnlyFields = @($_.ReadOnlyFields) + confidence = [ordered]@{ + level = $_.Confidence.Level + unresolvedParameters = @($_.Confidence.UnresolvedParameters | ForEach-Object { + [ordered]@{ parameter = $_.Parameter; surface = $_.Surface; file = $_.File; line = $_.Line } + }) + escapeHatchOnly = @($_.Confidence.EscapeHatchOnly) + caveat = $_.Confidence.Caveat + } + } + }) # --- Category 3 --- $historyResult = Get-PfbValueEnumHistory -SpecsDirectory $SpecsDirectory @@ -117,7 +154,6 @@ $manifest = [ordered]@{ sinceVersion = if ($SinceVersion) { $SinceVersion } else { $null } uncoveredEndpoints = $uncoveredEndpoints parameterGaps = $parameterGaps - notVerifiedEndpoints = $notVerifiedEndpoints validateSetDrift = $validateSetDrift newValidateSetCandidates = $newValidateSetCandidates } @@ -137,11 +173,16 @@ if ($SinceVersion) { $mdLines.Add("Uncovered endpoints and parameter gaps are filtered to items introduced after REST $SinceVersion. ValidateSet drift and new ValidateSet candidates are not filtered (no per-value introduced-version data to filter on).") $mdLines.Add('') } +$partialConfidenceCount = @($parameterGaps | Where-Object { $_.confidence.level -eq 'partial' }).Count + $mdLines.Add('## Summary') $mdLines.Add('') $mdLines.Add("- Uncovered endpoints: $($uncoveredEndpoints.Count)") -$mdLines.Add("- Parameter gaps: $($parameterGaps.Count)") -$mdLines.Add("- Not-verified endpoints (has attributes/unresolved surface): $($notVerifiedEndpoints.Count)") +$mdLines.Add("- Endpoints with parameter gaps: $($parameterGaps.Count)") +$mdLines.Add("- Missing query parameters: $((@($parameterGaps.missingQueryParameters) | Measure-Object).Count)") +$mdLines.Add("- Missing body properties (addable): $((@($parameterGaps.missingBodyProperties) | Measure-Object).Count)") +$mdLines.Add("- Read-only body fields (not addable): $((@($parameterGaps.readOnlyFields) | Measure-Object).Count)") +$mdLines.Add("- Partial-confidence endpoints (has attributes/unresolved surface -- see each row's ``confidence``): $partialConfidenceCount") $mdLines.Add("- ValidateSet drift: $($validateSetDrift.Count)") $mdLines.Add("- New ValidateSet candidates: $($newValidateSetCandidates.Count)") @@ -152,8 +193,8 @@ if ($uncoveredEndpoints.Count -gt 0) { } if ($parameterGaps.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## Parameter gaps'); $mdLines.Add('') - $mdLines.Add('| Endpoint | Cmdlets | Missing parameters |'); $mdLines.Add('|---|---|---|') - foreach ($g in $parameterGaps) { $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingParameters -join ', ') |") } + $mdLines.Add('| Endpoint | Cmdlets | Missing query parameters | Missing body properties | Read-only fields | Confidence |'); $mdLines.Add('|---|---|---|---|---|---|') + foreach ($g in $parameterGaps) { $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingQueryParameters -join ', ') | $($g.missingBodyProperties -join ', ') | $($g.readOnlyFields -join ', ') | $($g.confidence.level) |") } } if ($validateSetDrift.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## ValidateSet drift'); $mdLines.Add('') diff --git a/tools/lib/PfbApiDriftTools.ps1 b/tools/lib/PfbApiDriftTools.ps1 index 1df435f..169685f 100644 --- a/tools/lib/PfbApiDriftTools.ps1 +++ b/tools/lib/PfbApiDriftTools.ps1 @@ -192,31 +192,76 @@ function Get-PfbEndpointCoverageGaps { function Get-PfbParameterCoverageGaps { <# .SYNOPSIS - Category 2: for each endpoint an existing cmdlet already calls, flags a - capability-map-known parameter/body-field the cmdlet doesn't expose as a typed - parameter -- but ONLY for "fully mapped" cmdlets (every Public/ parameter on - every cmdlet calling this endpoint resolved Surface -eq 'Typed'; zero - AttributesOnly/TypedUnresolved anywhere). A cmdlet with any AttributesOnly/ - TypedUnresolved parameter may already expose a "new" field through a path this - AST-only inventory can't see, so its endpoint gets a not-verified entry instead - of a guessed gap. + Category 2: for each endpoint an existing cmdlet already calls, flags + capability-map-known query parameters and request-body properties the cmdlet + doesn't expose as a typed parameter. Gaps are ALWAYS computed -- there is no + longer an all-or-nothing gate that discards an endpoint's real gaps just because + ONE parameter on it has an unresolved surface (design decision 5: the old + `$fullyMapped` gate's failure mode was silence -- ~70% of its non-Typed + classifications turned out to be tool blindness, not real gaps, and none of it + was visible because the report simply got quieter). Uncertainty from an + unresolved (AttributesOnly/TypedUnresolved) parameter is instead carried + per-endpoint as `Confidence` (see .OUTPUTS): such a parameter may already cover + an apparent gap through a path this AST-only inventory can't see, so the gap + lists can contain false positives on a 'partial'-confidence endpoint -- but they + are never silently emptied because of that uncertainty. + + Output is split three ways instead of one flat list: + - MissingQueryParameters: capability-map `parameters` the cmdlet doesn't expose. + - MissingBodyProperties: capability-map `bodyProperties` the cmdlet doesn't + expose AND that are NOT read-only in the newest ANALYSED spec (addable). + - ReadOnlyFields: the same source, but read-only in the newest ANALYSED spec + (not addable -- reported separately, never merged into MissingBodyProperties). + Only 1 of 632 real endpoints has the same field name land in both the query and + body lists (POST /workloads/placement-recommendations|placement_names) -- no + dedup machinery is applied between them. .PARAMETER SinceVersion - When given, a gap's MissingParameters is filtered down to only fields whose + When given, a gap's missing-field lists are filtered down to only fields whose capability-map version is strictly newer than this REST version -- e.g. -SinceVersion '2.26' isolates fields introduced by 2.27 only. An endpoint whose - every missing field predates -SinceVersion is dropped from ParameterGaps - entirely (not emitted with an empty MissingParameters list). + every missing field predates -SinceVersion is dropped entirely (not emitted with + empty lists). .PARAMETER ExcludedFields Field names never reported as a missing parameter, regardless of version -- - e.g. $script:PfbNonActionableParameters. For fields with no functional gap worth - reporting (request-tracing headers, pagination internals already handled by - -AutoPaginate, etc.) that would otherwise appear on nearly every gap and drown out - real ones. An endpoint whose every missing field is excluded is dropped from - ParameterGaps entirely (not emitted with an empty MissingParameters list). + e.g. $script:PfbNonActionableParameters. Applied to BOTH + MissingQueryParameters and MissingBodyProperties: every field in that allowlist + happens to be query-side today, but nothing about the mechanism is query-only, + so a future body-side addition is not silently ignored. An endpoint whose every + missing field is excluded is dropped entirely (not emitted with empty lists). + .PARAMETER CurrentSpecCapabilities + Optional. Get-PfbSpecCapabilities's output for ONLY the single newest ANALYSED + spec -- i.e. tools/specs/fb.json where is + $CapabilityMap.generatedFrom[-1] -- never whatever happens to be newest on disk + under tools/specs/, which can be ahead of the map (e.g. specs refreshed to 2.28 + without rebuilding a 2.27 map produces annotations that can't be reconciled with + the gaps they sit next to). $CapabilityMap's own `parameters`/`bodyProperties` + dictionaries accumulate every field ever seen across every ingested version and + never record removal (Build-PfbCapabilityMap.ps1 is first-sight for both), so a + field withdrawn from the API in a later spec still lingers there forever -- a + "phantom". Without this parameter phantom fields are NOT filtered (a safe no-op + default so unit tests built on synthetic capability maps, never cross-checked + against a real spec, are unaffected); with it, a candidate missing field absent + from the endpoint's CURRENT parameter/body-property set is dropped from every + list rather than reported as an addable/read-only/query gap it does not actually + exist to be. 13 real (endpoint, field) pairs hit this against fb2.27 today, all + body-side (e.g. `PATCH /certificates|id` -- read-only 2.0-2.19, removed 2.20+). .OUTPUTS - [PSCustomObject]@{ ParameterGaps; NotVerified }. ParameterGaps is - [PSCustomObject]@{ Endpoint; Cmdlets; MissingParameters }[]. NotVerified is - [PSCustomObject]@{ Endpoint; Cmdlets; Reason }[]. + [PSCustomObject]@{ Endpoint; Cmdlets; MissingQueryParameters; MissingBodyProperties; + ReadOnlyFields; Confidence }[], one entry per endpoint where at least one of the + three field lists is non-empty. `notVerified` no longer exists anywhere in this + shape -- not as a field, not as a bucket. Confidence is + [PSCustomObject]@{ Level; UnresolvedParameters; EscapeHatchOnly; Caveat }: + - Level is 'high' iff UnresolvedParameters is empty, else 'partial'. + - UnresolvedParameters is [PSCustomObject]@{ Parameter; Surface; File; Line }[] + -- every non-Typed (AttributesOnly or TypedUnresolved) parameter on any + cmdlet calling this endpoint, Line coming from + Get-PfbCmdletParameterInventory's Line field + ($p.Extent.StartLineNumber) so every caveat is a click-through. + - EscapeHatchOnly is the subset of UnresolvedParameters' Parameter names whose + Surface is 'AttributesOnly' (a real -Attributes escape hatch exists -- + 'TypedUnresolved' has none at all). + - Caveat is a human-readable summary of what the confidence gap means for this + endpoint's lists, or '' when Level is 'high'. #> [CmdletBinding()] param( @@ -224,14 +269,26 @@ function Get-PfbParameterCoverageGaps { [Parameter(Mandatory)] [object[]]$CmdletInventory, [Parameter(Mandatory)] [object[]]$CalledEndpoints, [string]$SinceVersion, - [string[]]$ExcludedFields = @() + [string[]]$ExcludedFields = @(), + [object[]]$CurrentSpecCapabilities = @() ) $inventoryByCmdlet = $CmdletInventory | Group-Object -Property Cmdlet -AsHashTable -AsString $endpointGroups = @($CalledEndpoints | Where-Object { $_.Resolved } | Group-Object -Property Key) - $parameterGaps = [System.Collections.Generic.List[object]]::new() - $notVerified = [System.Collections.Generic.List[object]]::new() + # Endpoint key (" /", matching Data/PfbCapabilityMap.json's own key + # format) -> the Get-PfbSpecCapabilities record for that endpoint in the single + # newest ANALYSED spec, used only for phantom-field exclusion (see + # -CurrentSpecCapabilities above). A typed Dictionary, not a Hashtable: endpoint keys + # are not API field names so this one specifically isn't exposed to the + # .Keys-shadowing bug this function is otherwise built around avoiding, but nothing + # in this task trusts that reasoning per-callsite. + $currentByEndpoint = [System.Collections.Generic.Dictionary[string, object]]::new() + foreach ($cap in $CurrentSpecCapabilities) { + $currentByEndpoint["$($cap.Method) $($cap.Path)"] = $cap + } + + $gaps = [System.Collections.Generic.List[object]]::new() foreach ($group in $endpointGroups) { $key = $group.Name @@ -240,57 +297,134 @@ function Get-PfbParameterCoverageGaps { $cmdlets = @($group.Group.Cmdlet | Select-Object -Unique) - $fullyMapped = $true $exposedWireNames = [System.Collections.Generic.HashSet[string]]::new() + $unresolved = [System.Collections.Generic.List[object]]::new() foreach ($cmdletName in $cmdlets) { # The Where-Object is load-bearing, not defensive noise: Group-Object # -AsHashTable yields $null for an absent key, and @($null) is a ONE-element - # array whose single element is $null -- not the empty array it reads as. The - # loop below therefore used to run once with $row = $null, evaluate - # $null.Surface -ne 'Typed' as TRUE, and discard the endpoint into $notVerified. - # A cmdlet contributes zero inventory rows when every parameter it declares is - # inventory-exempt (-Array/-Attributes are plumbing, never inventoried -- see - # Get-PfbCmdletParameterInventory), which is exactly the shape of the - # -Attributes-only write cmdlets (Update-PfbArray, Update-PfbPasswordPolicy, - # Update-PfbSupport, ...). No rows means nothing contradicts full mapping, so - # such a cmdlet is VACUOUSLY fully mapped, not unmappable. + # array whose single element is $null -- not the empty array it reads as. + # Without it, this loop would run once with $row = $null and throw evaluating + # $null.Surface. A cmdlet contributes zero inventory rows when every + # parameter it declares is inventory-exempt (-Array/-Attributes are + # plumbing, never inventoried -- see Get-PfbCmdletParameterInventory), which + # is exactly the shape of the -Attributes-only write cmdlets (Update-PfbArray, + # Update-PfbPasswordPolicy, Update-PfbSupport, ...). No rows means nothing to + # report as unresolved for that cmdlet. $rows = @($inventoryByCmdlet[$cmdletName] | Where-Object { $null -ne $_ }) foreach ($row in $rows) { - if ($row.Surface -ne 'Typed') { $fullyMapped = $false; continue } + if ($row.Surface -ne 'Typed') { + $unresolved.Add([PSCustomObject]@{ + Parameter = $row.Parameter + Surface = $row.Surface + File = $row.File + Line = $row.Line + }) + continue + } if ($row.WireName) { [void]$exposedWireNames.Add($row.WireName) } } } - if (-not $fullyMapped) { - $notVerified.Add([PSCustomObject]@{ Endpoint = $key; Cmdlets = $cmdlets; Reason = 'has attributes/unresolved surface' }) - continue + $currentCap = $null + if ($currentByEndpoint.ContainsKey($key)) { $currentCap = $currentByEndpoint[$key] } + $currentQueryNames = if ($currentCap) { [System.Collections.Generic.HashSet[string]]::new([string[]]@($currentCap.Parameters)) } else { $null } + $currentBodyNames = if ($currentCap) { [System.Collections.Generic.HashSet[string]]::new([string[]]@($currentCap.BodyProperties)) } else { $null } + + # Typed Dictionary[string,string] for each of query/body, NOT a plain Hashtable -- + # this is the generalised fix for the keys-shadowing bug (a field literally named + # "keys"/"count"/"values" hijacking .Keys/.Count/.Values member access on a + # Hashtable/PSCustomObject-backed IDictionary). A real field named "keys" exists + # today (DELETE /workloads/tags), and .get_Keys() below is real-member access on a + # typed generic Dictionary, immune to that adapter trick (verified: a Hashtable + # key literally named "keys" shadows .Keys and returns the key's VALUE instead of + # the key collection; a Dictionary[string,string] with the same key does not). + $queryFieldVersions = [System.Collections.Generic.Dictionary[string, string]]::new() + if ($entry.parameters) { foreach ($p in $entry.parameters.PSObject.Properties) { $queryFieldVersions[$p.Name] = $p.Value } } + $bodyFieldVersions = [System.Collections.Generic.Dictionary[string, string]]::new() + if ($entry.bodyProperties) { foreach ($p in $entry.bodyProperties.PSObject.Properties) { $bodyFieldVersions[$p.Name] = $p.Value } } + + # @(...) wraps the WHOLE if/else, not just its true branch -- assigning an + # if/else expression straight to a variable collapses an EMPTY array result + # (the else branch, on every endpoint with no read-only body fields) to a bare + # $null instead of an empty array (confirmed live: `$x = if ($false) {@(1)} + # else {@()}` leaves $x -eq $null, not an empty array) -- the same family of + # "assigning a statement's output straight to a variable silently unwraps it" + # hazard already documented in tools/Build-PfbApiDriftReport.ps1 for a + # single-element ForEach-Object result, just the zero-element counterpart here. + $readOnlyList = @(if ($entry.readOnlyBodyProperties) { $entry.readOnlyBodyProperties } else { @() }) + $readOnlyNames = [System.Collections.Generic.HashSet[string]]::new([string[]]$readOnlyList) + + # Sort-Object on all three emitted lists below is load-bearing, not cosmetic: the + # Dictionary[string,string]s above preserve insertion order, but that order comes + # from $entry.parameters/$entry.bodyProperties, which were themselves deserialized + # from JSON -- .NET's JSON property enumeration is documented as insertion order + # for System.Text.Json but PSCustomObject's own PSObject.Properties enumeration is + # NOT guaranteed to match it, and (independent of that) two Hashtable-staged + # candidate sets built earlier in this file's history silently reordered + # run-to-run on identical input purely from .NET's per-process-randomized string + # hash codes (confirmed live: regenerating the drift report twice produced two + # byte-different files for the same underlying content). Sorting explicitly here + # is what makes MissingQueryParameters/MissingBodyProperties/ReadOnlyFields + # deterministic regardless of any of that. + $missingQuery = @($queryFieldVersions.get_Keys() | + Where-Object { -not $exposedWireNames.Contains($_) } | + Where-Object { -not $currentQueryNames -or $currentQueryNames.Contains($_) }) + if ($SinceVersion) { + $missingQuery = @($missingQuery | Where-Object { Test-PfbApiVersionNewerThan -Version $queryFieldVersions[$_] -Baseline $SinceVersion }) } + if ($ExcludedFields) { + $missingQuery = @($missingQuery | Where-Object { $ExcludedFields -notcontains $_ }) + } + $missingQuery = @($missingQuery | Sort-Object) - $fieldVersions = @{} - if ($entry.parameters) { foreach ($p in $entry.parameters.PSObject.Properties) { $fieldVersions[$p.Name] = $p.Value } } - if ($entry.bodyProperties) { foreach ($p in $entry.bodyProperties.PSObject.Properties) { $fieldVersions[$p.Name] = $p.Value } } - - $knownFieldNames = [System.Collections.Generic.List[string]]::new() - $knownFieldNames.AddRange([string[]]@($fieldVersions.Keys)) - - # Sort-Object here is load-bearing, not cosmetic: $fieldVersions above is a plain - # Hashtable, whose .Keys enumeration order depends on .NET's per-process-randomized - # string hash codes -- without this sort, MissingParameters silently reorders itself - # run-to-run on identical input (confirmed live: regenerating the drift report twice - # produced two byte-different files for the same underlying content). - $missing = @($knownFieldNames | Select-Object -Unique | Where-Object { -not $exposedWireNames.Contains($_) } | Sort-Object) + $missingBodyCandidates = @($bodyFieldVersions.get_Keys() | + Where-Object { -not $exposedWireNames.Contains($_) } | + Where-Object { -not $currentBodyNames -or $currentBodyNames.Contains($_) }) if ($SinceVersion) { - $missing = @($missing | Where-Object { Test-PfbApiVersionNewerThan -Version $fieldVersions[$_] -Baseline $SinceVersion }) + $missingBodyCandidates = @($missingBodyCandidates | Where-Object { Test-PfbApiVersionNewerThan -Version $bodyFieldVersions[$_] -Baseline $SinceVersion }) } if ($ExcludedFields) { - $missing = @($missing | Where-Object { $ExcludedFields -notcontains $_ }) + $missingBodyCandidates = @($missingBodyCandidates | Where-Object { $ExcludedFields -notcontains $_ }) } - if ($missing.Count -gt 0) { - $parameterGaps.Add([PSCustomObject]@{ Endpoint = $key; Cmdlets = $cmdlets; MissingParameters = $missing }) + + $readOnlyFields = @($missingBodyCandidates | Where-Object { $readOnlyNames.Contains($_) } | Sort-Object) + $missingBody = @($missingBodyCandidates | Where-Object { -not $readOnlyNames.Contains($_) } | Sort-Object) + + if ($missingQuery.Count -eq 0 -and $missingBody.Count -eq 0 -and $readOnlyFields.Count -eq 0) { continue } + + $escapeHatchOnly = @($unresolved | Where-Object { $_.Surface -eq 'AttributesOnly' } | ForEach-Object { $_.Parameter } | Sort-Object -Unique) + $hasBareUnresolved = [bool]($unresolved | Where-Object { $_.Surface -eq 'TypedUnresolved' }) + $level = if ($unresolved.Count -eq 0) { 'high' } else { 'partial' } + $caveat = + if ($level -eq 'high') { '' } + elseif ($escapeHatchOnly.Count -gt 0 -and -not $hasBareUnresolved) { + 'body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability' + } + elseif ($escapeHatchOnly.Count -eq 0 -and $hasBareUnresolved) { + 'one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability' } + else { + 'body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability' + } + + $confidence = [PSCustomObject]@{ + Level = $level + UnresolvedParameters = @($unresolved | Sort-Object Parameter, File, Line) + EscapeHatchOnly = $escapeHatchOnly + Caveat = $caveat + } + + $gaps.Add([PSCustomObject]@{ + Endpoint = $key + Cmdlets = $cmdlets + MissingQueryParameters = $missingQuery + MissingBodyProperties = $missingBody + ReadOnlyFields = $readOnlyFields + Confidence = $confidence + }) } - return [PSCustomObject]@{ ParameterGaps = $parameterGaps.ToArray(); NotVerified = $notVerified.ToArray() } + return $gaps.ToArray() } function Get-PfbValidateSetDrift { From 9e4db6031c512031ae0ed2701108095b6451e1d2 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 22:16:04 -0700 Subject: [PATCH 10/17] feat(tools): enrich addable body-property gaps with type/synopsis/enum/target Task 5 of the drift-report-actionable plan: turns each of the 402 addable (high-confidence) missing-body-property gaps from a bare field name into a record a human can act on without re-deriving spec facts by hand -- {name, type, format, specRequired, synopsis, suggestedPowerShellType, enumValues, enumStatus, target}. The enum join goes through Resolve-PfbFieldValueEnum, never a bare wire-name lookup, keyed by the field's OwnerSchema (Task 2b) as -ResourceHint -- the old cmdlet-name-derived Get-PfbResourceHint only reaches 14 of 33 real matches. Reproduces the pinned oracle exactly: 33 matched / 43 not-found-in-resource / 326 no-spec-enum-found over the 402 addable gaps, including PATCH /certificates|certificate_type -> [appliance,external] and POST /nfs-export-policies/rules|access -> [root-squash,all-squash,no-squash]. suggestedPowerShellType exists specifically because the int64-vs-int32 distinction is real and silent: 37 of the 402 fields are type:integer, format:int64, and mapping bare "type":"integer" to [int] without checking format would silently clip/overflow every one of them the first time a caller passed a value above 2^31-1. Raw type/format are always emitted alongside so a human can override the suggestion. Two deliberate asymmetries, both documented in the script's own .NOTES, tools/README.md, and each function's doc comment: - missingQueryParameters/readOnlyFields stay bare strings -- ~896 enriched query-gap records would roughly double the artifact for no consumer. - Enrichment itself is gated on confidence.level -eq 'high'. A partial-confidence endpoint's gap list can contain false positives, and attaching a fully-worked-out type/synopsis/enum/target to a field that might not even be a real gap would overstate a confidence the endpoint's own caveat is telling the reader not to have -- every field name still appears unchanged, only the extra metadata is withheld. This gating is also why the real numbers land at exactly 402/33/43/326: the same join over all addable gaps regardless of confidence (605) gives a different, non-oracle split. target carries insertion-point COORDINATES ONLY, never a diff (decision 12): {file, paramBlockLine, payloadVariable, assignmentStyle, hasAttributes}, via the new Get-PfbCmdletBodyInsertionTarget (tools/lib/PfbCmdletParamTools.ps1). assignmentStyle reflects the target cmdlet's OWN dominant convention ('index'/'literal'/'attributesOnly'/'unknown') so a human adding a field matches the file's existing pattern rather than inventing a new one. specRequired is spec metadata only and must never be read as [Parameter(Mandatory)] -- stated explicitly per the repo's recorded Should-Throw/Mandatory-prompt hazard. Two real-data-only bugs found and fixed during verification (both would have shipped invisibly against synthetic fixtures alone): - $missingBodyProperties = if (...) {...} else {...} wrapped @() inside each branch instead of around the whole if/else -- the classic assign-a-statement's-output hazard already flagged elsewhere in this codebase. An empty result read as 0 elements in-memory but round-tripped through JSON into a phantom one-element array with a blank name, inflating the real high-confidence addable total from 402 to 682. - OwnerSchema is usually itself allOf-composed with no properties at its own top level (_certificateBase, NfsExportPolicyRuleBase, ActiveDirectoryPatch, SmbSharePolicyRule all measured this way against fb2.27) -- a naive single-hop schema.properties.field lookup returned $null for nearly every real synopsis/array-item-type. Fixed with a bounded helper that searches the owner's own inline allOf branches (never crossing into a $ref'd branch, never a second decision-3 walker). Tests: 61 new/rewritten cases across the three touched Describe files, each new invariant mutation-tested (confidence-gating, int64 branch, resource-hint sentinel, empty-hashtable-literal-bootstrap, allOf-owner recursion, and the if/else array-collapse fix) -- every mutation broke its specific assertion, confirmed, then reverted. Full suite: 559 passed / 1 known pre-existing failure (Build-PfbValueEnumMap fb2.28-vs-2.27 mismatch, not in scope) / 2 skipped. Co-Authored-By: Claude Sonnet 5 --- Tests/Build-PfbApiDriftReport.Tests.ps1 | 169 ++++++++++- Tests/PfbApiDriftTools.Tests.ps1 | 260 +++++++++++++++++ Tests/PfbCmdletParamTools.Tests.ps1 | 131 +++++++++ tools/Build-PfbApiDriftReport.ps1 | 277 +++++++++++++++++- tools/README.md | 80 ++++++ tools/lib/PfbApiDriftTools.ps1 | 363 ++++++++++++++++++++++++ tools/lib/PfbCmdletParamTools.ps1 | 128 +++++++++ 7 files changed, 1395 insertions(+), 13 deletions(-) diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index f7b913b..4631641 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -29,6 +29,43 @@ function Get-PfbFixtureArrayPerformance { if ($Protocol) { $queryParams['protocol'] = $Protocol } Invoke-PfbApiRequest -Array $Array -Method GET -Endpoint 'arrays/performance' -QueryParams $queryParams -AutoPaginate } +'@ + + # Task 5 fixture: a fully-typed (high-confidence) write cmdlet whose endpoint has real + # addable body-property gaps (color/count/tags) enriched with type/synopsis/enum/target. + # -Label IS resolved (index-form `$body['label'] = $Label`), establishing 'index' as + # this cmdlet's own dominant AssignmentStyle for Task 5's target coordinates. + Set-Content -Path (Join-Path $publicDir 'Update-PfbFixtureWidget.ps1') -Value @' +function Update-PfbFixtureWidget { + [CmdletBinding()] + param( + [Parameter()] [PSCustomObject]$Array, + [Parameter(Mandatory)] [string]$Name, + [Parameter()] [string]$Label + ) + $queryParams = @{} + $queryParams['names'] = $Name + $body = @{} + if ($Label) { $body['label'] = $Label } + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'widgets' -Body $body -QueryParams $queryParams +} +'@ + + # Task 5 fixture: a PARTIAL-confidence write cmdlet (an unresolved -Tags parameter with + # a real -Attributes escape hatch) whose endpoint ALSO has an addable body-property gap + # ('label') -- this gap must stay a bare string, never enriched, per this task's + # confidence-gating design (see Build-PfbApiDriftReport.ps1's own .NOTES). + Set-Content -Path (Join-Path $publicDir 'Update-PfbFixtureGizmo.ps1') -Value @' +function Update-PfbFixtureGizmo { + [CmdletBinding()] + param( + [Parameter()] [PSCustomObject]$Array, + [Parameter()] [string[]]$Tags, + [Parameter(Mandatory)] [hashtable]$Attributes + ) + if ($Tags) { Write-Verbose ($Tags -join ',') } + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'gizmos' -Body $Attributes +} '@ # v1: Protocol has 4 values, matching the fixture cmdlet's ValidateSet exactly. Also @@ -54,7 +91,9 @@ function Get-PfbFixtureArrayPerformance { # v2: spec adds 'all' -- the real Get-PfbArrayPerformance -Protocol bug shape. Also # carries 'region' and 'timezone' forward (see specV1's note above) -- this is the # NEWEST analysed spec (capability map's generatedFrom ends at 9.1), so it's the one - # Build-PfbApiDriftReport.ps1 actually re-parses for phantom-field exclusion. + # Build-PfbApiDriftReport.ps1 actually re-parses for phantom-field exclusion AND (Task + # 5) for enrichment's synopsis/type/array-item lookups and the enum join's schema-kind + # history. $specV2 = [ordered]@{ openapi = '3.0.1'; info = @{ version = '9.1' } paths = [ordered]@{ @@ -68,8 +107,45 @@ function Get-PfbFixtureArrayPerformance { } } '/gadgets' = [ordered]@{ get = [ordered]@{ parameters = @() } } + '/widgets' = [ordered]@{ + patch = [ordered]@{ + requestBody = [ordered]@{ + content = [ordered]@{ + 'application/json' = [ordered]@{ schema = [ordered]@{ '$ref' = '#/components/schemas/WidgetPatch' } } + } + } + } + } + '/gizmos' = [ordered]@{ + patch = [ordered]@{ + # Deliberately fully INLINE (no $ref anywhere in the chain) -- exercises + # OwnerSchema = $null (Task 5's Get-PfbBodyPropertySynopsis/array-item + # lookups both return $null for this field, by design). + requestBody = [ordered]@{ + content = [ordered]@{ + 'application/json' = [ordered]@{ + schema = [ordered]@{ + type = 'object' + properties = [ordered]@{ label = [ordered]@{ type = 'string'; description = 'The gizmo label.' } } + } + } + } + } + } + } + } + components = [ordered]@{ + schemas = [ordered]@{ + WidgetPatch = [ordered]@{ + type = 'object' + properties = [ordered]@{ + color = [ordered]@{ type = 'string'; description = 'The fixture widget color. Valid values are `red`, `blue`, and `green`.' } + count = [ordered]@{ type = 'integer'; format = 'int64'; description = 'Number of fixture widgets.' } + tags = [ordered]@{ type = 'array'; items = [ordered]@{ type = 'string' }; description = 'Fixture widget tags.' } + } + } + } } - components = [ordered]@{ schemas = [ordered]@{} } } $specV1 | ConvertTo-Json -Depth 20 | Set-Content -Path (Join-Path $specsDir 'fb9.0.json') $specV2 | ConvertTo-Json -Depth 20 | Set-Content -Path (Join-Path $specsDir 'fb9.1.json') @@ -82,6 +158,8 @@ function Get-PfbFixtureArrayPerformance { 'GET /arrays/performance' = [ordered]@{ minVersion = '9.0'; parameters = [ordered]@{ protocol = '9.0'; region = '9.0'; timezone = '9.1'; 'X-Request-ID' = '9.0'; continuation_token = '9.0'; offset = '9.0' }; bodyProperties = [ordered]@{} } 'GET /gadgets' = [ordered]@{ minVersion = '9.1'; parameters = [ordered]@{}; bodyProperties = [ordered]@{} } 'GET /widgets' = [ordered]@{ minVersion = '9.0'; parameters = [ordered]@{}; bodyProperties = [ordered]@{} } + 'PATCH /widgets' = [ordered]@{ minVersion = '9.0'; parameters = [ordered]@{}; bodyProperties = [ordered]@{ color = '9.0'; count = '9.0'; tags = '9.0' } } + 'PATCH /gizmos' = [ordered]@{ minVersion = '9.1'; parameters = [ordered]@{}; bodyProperties = [ordered]@{ label = '9.1' } } } } | ConvertTo-Json -Depth 20 | Set-Content -Path $capabilityMapPath @@ -148,6 +226,93 @@ Describe 'Build-PfbApiDriftReport' -Skip:($PSVersionTable.PSVersion.Major -lt 7) $gap.missingQueryParameters | Should -Not -Contain 'offset' $gap.missingQueryParameters | Should -Contain 'region' } + + Context 'Task 5: enrichment + enum join on a high-confidence endpoint (PATCH /widgets)' { + BeforeAll { + $script:widgetGap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /widgets' } + $script:colorRecord = $widgetGap.missingBodyProperties | Where-Object { $_.name -eq 'color' } + $script:countRecord = $widgetGap.missingBodyProperties | Where-Object { $_.name -eq 'count' } + $script:tagsRecord = $widgetGap.missingBodyProperties | Where-Object { $_.name -eq 'tags' } + } + + It 'is high-confidence (fully typed cmdlet, no unresolved surface)' { + $widgetGap.confidence.level | Should -Be 'high' + } + + It 'turns each addable body-property gap into a RECORD, not a bare string' { + $colorRecord | Should -Not -BeNullOrEmpty + $colorRecord.name | Should -Be 'color' + $colorRecord.type | Should -Be 'string' + } + + It 'resolves enumStatus matched and enumValues via the real Resolve-PfbFieldValueEnum join (not a bare-name lookup)' { + $colorRecord.enumStatus | Should -Be 'matched' + $colorRecord.enumValues | Should -Be @('red', 'blue', 'green') + } + + It 'extracts synopsis as the first sentence only, newline-normalised' { + $colorRecord.synopsis | Should -Be 'The fixture widget color.' + } + + It 'maps type:integer,format:int64 to suggestedPowerShellType [long], never the truncating [int]' { + $countRecord.format | Should -Be 'int64' + $countRecord.suggestedPowerShellType | Should -Be '[long]' + } + + It 'maps type:array with inline items.type:string to suggestedPowerShellType [string[]]' { + $tagsRecord.type | Should -Be 'array' + $tagsRecord.suggestedPowerShellType | Should -Be '[string[]]' + } + + It 'never maps specRequired to [Parameter(Mandatory)] -- specRequired is present as plain metadata only' { + $colorRecord.PSObject.Properties.Name | Should -Contain 'specRequired' + $colorRecord.specRequired | Should -Be $false + } + + It 'carries target insertion-point coordinates matching this cmdlet''s own dominant (index) assignment style' { + $colorRecord.target.file | Should -Match 'Update-PfbFixtureWidget\.ps1$' + $colorRecord.target.payloadVariable | Should -Be 'body' + $colorRecord.target.assignmentStyle | Should -Be 'index' + $colorRecord.target.hasAttributes | Should -BeFalse + $colorRecord.target.paramBlockLine | Should -BeGreaterThan 0 + } + } + + It 'REGRESSION: a high-confidence endpoint with an EMPTY MissingBodyProperties serializes as [] in JSON, never a phantom one-element array with a blank name' { + # Real-data-only bug, invisible to any in-memory-only check: a query-only + # high-confidence gap (GET /arrays/performance has body-property gaps at all here) + # -- `$missingBodyProperties = if (...) {...} else {...}` (missing an outer @() + # around the WHOLE if/else, only wrapping each branch's own content) let an empty + # result collapse to a value that read as 0 elements in-memory but round-tripped + # through ConvertTo-Json/ConvertFrom-Json into a 1-element array containing a + # single $null -- inflating the high-confidence addable-gap total from 402 to 682 + # on the real capability map. $manifest here is loaded from the actual JSON FILE + # this script wrote (see BeforeAll), not the in-memory array, so this test would + # NOT have caught the bug if it only inspected pre-serialization objects. + $perfGap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /arrays/performance' } + $perfGap.confidence.level | Should -Be 'high' + @($perfGap.missingBodyProperties).Count | Should -Be 0 + } + + Context 'Task 5: the query-vs-body vs. confidence-level enrichment asymmetry' { + BeforeAll { + $script:gizmoGap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /gizmos' } + } + + It 'PATCH /gizmos is partial-confidence (an unresolved -Tags parameter with an -Attributes escape hatch)' { + $gizmoGap.confidence.level | Should -Be 'partial' + } + + It 'leaves a partial-confidence endpoint''s missingBodyProperties as BARE STRINGS, never enriched records' { + $gizmoGap.missingBodyProperties | Should -Contain 'label' + ($gizmoGap.missingBodyProperties | Where-Object { $_ -is [string] }) | Should -Be @('label') + } + + It 'leaves missingQueryParameters as bare strings on a high-confidence endpoint too (query gaps are never enriched, regardless of confidence)' { + $arraysPerfGap = $manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /arrays/performance' } + ($arraysPerfGap.missingQueryParameters | ForEach-Object { $_ -is [string] }) | Should -Not -Contain $false + } + } } Describe 'Build-PfbApiDriftReport -SinceVersion filter' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index 7bb1f12..7729492 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -508,3 +508,263 @@ Describe 'Get-PfbValidateSetDrift' { $drift | Should -BeNullOrEmpty } } + +Describe 'Get-PfbSuggestedPowerShellType (Task 5 suggestedPowerShellType mapping)' { + It 'maps integer + format int64 to [long] -- the 37-real-field truncation-risk case' { + Get-PfbSuggestedPowerShellType -Type 'integer' -Format 'int64' | Should -Be '[long]' + } + + It 'maps integer + format int32 to [int]' { + Get-PfbSuggestedPowerShellType -Type 'integer' -Format 'int32' | Should -Be '[int]' + } + + It 'maps integer + format uint32 to [int]' { + Get-PfbSuggestedPowerShellType -Type 'integer' -Format 'uint32' | Should -Be '[int]' + } + + It 'maps a bare integer with no format to [int], never silently to [long]' { + Get-PfbSuggestedPowerShellType -Type 'integer' -Format $null | Should -Be '[int]' + } + + It 'maps number (any format) to [double]' { + Get-PfbSuggestedPowerShellType -Type 'number' -Format 'double' | Should -Be '[double]' + Get-PfbSuggestedPowerShellType -Type 'number' -Format 'float' | Should -Be '[double]' + Get-PfbSuggestedPowerShellType -Type 'number' -Format $null | Should -Be '[double]' + } + + It 'maps string to [string]' { + Get-PfbSuggestedPowerShellType -Type 'string' | Should -Be '[string]' + } + + It 'maps boolean to [bool]' { + Get-PfbSuggestedPowerShellType -Type 'boolean' | Should -Be '[bool]' + } + + It 'maps array of string to [string[]]' { + Get-PfbSuggestedPowerShellType -Type 'array' -ItemType 'string' | Should -Be '[string[]]' + } + + It 'maps array of integer/int64 to [long[]]' { + Get-PfbSuggestedPowerShellType -Type 'array' -ItemType 'integer' -ItemFormat 'int64' | Should -Be '[long[]]' + } + + It 'falls back to [object[]] for an array whose element type could not be resolved' { + Get-PfbSuggestedPowerShellType -Type 'array' -ItemType $null | Should -Be '[object[]]' + } + + It 'falls back to [object] for $null/unrecognised/object types, never a guessed scalar type' { + Get-PfbSuggestedPowerShellType -Type $null | Should -Be '[object]' + Get-PfbSuggestedPowerShellType -Type '' | Should -Be '[object]' + Get-PfbSuggestedPowerShellType -Type 'object' | Should -Be '[object]' + } +} + +Describe 'Get-PfbBodyPropertyArrayItemType / Get-PfbBodyPropertySynopsis (direct, non-recursive schema lookups)' { + BeforeAll { + $script:enrichmentSpec = [PSCustomObject]@{ + components = [PSCustomObject]@{ + schemas = [PSCustomObject]@{ + Widget = [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ + color = [PSCustomObject]@{ type = 'string'; description = 'The widget color. Valid values are `red`, `blue`, and `green`.' } + count = [PSCustomObject]@{ type = 'integer'; format = 'int64'; description = "Count of widgets available`nin this pool. Additional prose about counting follows here." } + tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ type = 'string' }; description = 'Tag list. Additional prose about tags follows this first sentence.' } + ref_tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ '$ref' = '#/components/schemas/_tagRef' } } + linked = [PSCustomObject]@{ '$ref' = '#/components/schemas/_linkedRef' } + bare = [PSCustomObject]@{ type = 'string' } + } + } + _linkedRef = [PSCustomObject]@{ type = 'string'; description = 'Should never be read directly off Widget.linked (PIN: this function reads only the OWNER schema''s own declared property node, never following the property''s own $ref).' } + } + } + } + } + + It 'Get-PfbBodyPropertyArrayItemType resolves an inline items.type/format' { + $result = Get-PfbBodyPropertyArrayItemType -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'tags' + $result.Type | Should -Be 'string' + } + + It 'Get-PfbBodyPropertyArrayItemType returns $null when items is itself an unresolved $ref with no inline type (never follows it -- one walker, not two)' { + $result = Get-PfbBodyPropertyArrayItemType -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'ref_tags' + $result | Should -BeNullOrEmpty + } + + It 'Get-PfbBodyPropertyArrayItemType returns $null for a non-array field' { + Get-PfbBodyPropertyArrayItemType -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'color' | Should -BeNullOrEmpty + } + + It 'Get-PfbBodyPropertyArrayItemType returns $null when -OwnerSchema is $null (no named owner to look up)' { + Get-PfbBodyPropertyArrayItemType -Spec $enrichmentSpec -OwnerSchema $null -FieldName 'tags' | Should -BeNullOrEmpty + } + + It 'Get-PfbBodyPropertySynopsis returns only the FIRST sentence, not the trailing enum sentence' { + Get-PfbBodyPropertySynopsis -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'color' | Should -Be 'The widget color.' + } + + It 'Get-PfbBodyPropertySynopsis newline-normalises an embedded line wrap before extracting the first sentence' { + # The raw description wraps mid-SENTENCE ("...available\nin this pool.") -- real + # spec prose does this (e.g. "...`all-squash`, and\n`no-root-squash`."). The + # newline must become a space BEFORE the first-sentence regex runs, and only that + # first sentence is returned -- the second sentence ("Additional prose...") must + # NOT appear in the result. + Get-PfbBodyPropertySynopsis -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'count' | Should -Be 'Count of widgets available in this pool.' + } + + It 'Get-PfbBodyPropertySynopsis returns the whole (short) description when it has no sentence terminator at all' { + # 'bare' has type=string but a description with no trigger sentence -- add one with + # no terminating punctuation to prove the regex-miss fallback path (whole normalised + # string) rather than throwing or returning $null. + $specWithNoTerminator = [PSCustomObject]@{ + components = [PSCustomObject]@{ + schemas = [PSCustomObject]@{ + Widget = [PSCustomObject]@{ + properties = [PSCustomObject]@{ + untamed = [PSCustomObject]@{ type = 'string'; description = 'no terminator here' } + } + } + } + } + } + Get-PfbBodyPropertySynopsis -Spec $specWithNoTerminator -OwnerSchema 'Widget' -FieldName 'untamed' | Should -Be 'no terminator here' + } + + It 'Get-PfbBodyPropertySynopsis returns $null when -OwnerSchema is $null (fully inline body, no named owner -- never re-walks to find one)' { + Get-PfbBodyPropertySynopsis -Spec $enrichmentSpec -OwnerSchema $null -FieldName 'color' | Should -BeNullOrEmpty + } + + It 'Get-PfbBodyPropertySynopsis returns $null when the named owner schema does not declare the field' { + Get-PfbBodyPropertySynopsis -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'nonexistent' | Should -BeNullOrEmpty + } + + It 'Get-PfbBodyPropertySynopsis returns $null when the property has no description at all' { + Get-PfbBodyPropertySynopsis -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'ref_tags' | Should -BeNullOrEmpty + } +} + +Describe 'Find-PfbOwnSchemaPropertyNode / Get-PfbOwnerSchemaPropertyNode (REGRESSION: OwnerSchema is usually allOf-composed on real data)' { + BeforeAll { + # Real-data shape (measured against fb2.27, 2026-07-26): _certificateBase, + # NfsExportPolicyRuleBase, ActiveDirectoryPatch, and SmbSharePolicyRule -- 4 of 4 + # sampled real OwnerSchema values -- carry NO "properties" directly at their own + # top level; the field lives one level down inside an ANONYMOUS allOf branch. A + # naive single-hop `schema.properties.$FieldName` lookup returns $null for nearly + # every real match. This fixture reproduces that exact shape. + $script:allOfOwnerSpec = [PSCustomObject]@{ + components = [PSCustomObject]@{ + schemas = [PSCustomObject]@{ + _certificateBase = [PSCustomObject]@{ + allOf = @( + [PSCustomObject]@{ '$ref' = '#/components/schemas/_wrongOwner' } + [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ + certificate_type = [PSCustomObject]@{ type = 'string'; description = 'The type of the certificate. Valid values are `appliance` and `external`.' } + tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ type = 'string' }; description = 'Certificate tags.' } + } + } + ) + } + _wrongOwner = [PSCustomObject]@{ + properties = [PSCustomObject]@{ + certificate_type = [PSCustomObject]@{ type = 'string'; description = 'WRONG -- this is a different schema''s field of the same name and must never be read.' } + } + } + } + } + } + } + + It 'finds a field declared inside an ANONYMOUS allOf branch of the owner, not just the owner''s own top-level properties' { + $node = Get-PfbOwnerSchemaPropertyNode -Spec $allOfOwnerSpec -OwnerSchema '_certificateBase' -FieldName 'certificate_type' + $node | Should -Not -BeNullOrEmpty + $node.description | Should -Match '^The type of the certificate\.' + } + + It 'never crosses into a $ref-branch of the owner to find the field (that branch belongs to a DIFFERENT named schema)' { + # _certificateBase's allOf[0] is a $ref to _wrongOwner, which ALSO declares + # certificate_type (with a description that would be an obvious tell if read). The + # real field must resolve to the allOf[1] (anonymous) branch's description, never + # _wrongOwner's. + $node = Get-PfbOwnerSchemaPropertyNode -Spec $allOfOwnerSpec -OwnerSchema '_certificateBase' -FieldName 'certificate_type' + $node.description | Should -Not -Match 'WRONG' + } + + It 'Get-PfbBodyPropertySynopsis resolves through the allOf-composed owner correctly' { + Get-PfbBodyPropertySynopsis -Spec $allOfOwnerSpec -OwnerSchema '_certificateBase' -FieldName 'certificate_type' | Should -Be 'The type of the certificate.' + } + + It 'Get-PfbBodyPropertyArrayItemType resolves an array field declared inside an allOf-composed owner' { + $result = Get-PfbBodyPropertyArrayItemType -Spec $allOfOwnerSpec -OwnerSchema '_certificateBase' -FieldName 'tags' + $result.Type | Should -Be 'string' + } + + It 'returns $null for a field the owner (searched through its own allOf) never declares at all' { + Get-PfbOwnerSchemaPropertyNode -Spec $allOfOwnerSpec -OwnerSchema '_certificateBase' -FieldName 'nonexistent' | Should -BeNullOrEmpty + } +} + +Describe 'Get-PfbBodyPropertyEnrichment (Task 5: composed enum join + type + synopsis)' { + BeforeAll { + $script:enrichmentHistory = [ordered]@{ + 'Widget.color' = [ordered]@{ Name = 'color'; Kind = 'schema'; MinVersion = '2.0'; CurrentValues = @('red', 'blue', 'green'); DistinctValueSets = [System.Collections.Generic.HashSet[string]]::new([string[]]@('blue,green,red')) } + 'OtherSchema.color' = [ordered]@{ Name = 'color'; Kind = 'schema'; MinVersion = '2.0'; CurrentValues = @('x', 'y'); DistinctValueSets = [System.Collections.Generic.HashSet[string]]::new([string[]]@('x,y')) } + } + } + + It 'resolves EnumStatus matched and EnumValues via OwnerSchema as the resource hint' { + $result = Get-PfbBodyPropertyEnrichment -FieldName 'color' -Type 'string' -Format $null -OwnerSchema 'Widget' ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $result.EnumStatus | Should -Be 'matched' + $result.EnumValues | Should -Be @('red', 'blue', 'green') + $result.Synopsis | Should -Be 'The widget color.' + $result.SuggestedPowerShellType | Should -Be '[string]' + } + + It 'never lets a $null OwnerSchema wildcard-match every same-named schema-kind history entry -- resolves not-found-in-resource, not a false matched/collision' { + # WireName 'color' exists in history under TWO different owners with DIFFERENT + # value sets (Widget.color, OtherSchema.color). With OwnerSchema $null (this + # specific gap has no named owner), the sentinel resource hint must prefix-match + # NEITHER of them -- proving '' is never substituted for the sentinel (a '' hint + # would wildcard-match both and yield 'collision' instead). + $result = Get-PfbBodyPropertyEnrichment -FieldName 'color' -Type 'string' -Format $null -OwnerSchema $null ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $result.EnumStatus | Should -Be 'not-found-in-resource' + $result.EnumValues | Should -BeNullOrEmpty + $result.Synopsis | Should -BeNullOrEmpty + } + + It 'resolves EnumStatus no-spec-enum-found for a field absent from History entirely' { + $result = Get-PfbBodyPropertyEnrichment -FieldName 'nonexistent_field' -Type 'string' -Format $null -OwnerSchema 'Widget' ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $result.EnumStatus | Should -Be 'no-spec-enum-found' + $result.EnumValues | Should -BeNullOrEmpty + } + + It 'derives SuggestedPowerShellType for an array field via the array-item-type lookup' { + $result = Get-PfbBodyPropertyEnrichment -FieldName 'tags' -Type 'array' -Format $null -OwnerSchema 'Widget' ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $result.SuggestedPowerShellType | Should -Be '[string[]]' + } + + It 'derives SuggestedPowerShellType [long] for an int64 field, never the truncating [int]' { + $result = Get-PfbBodyPropertyEnrichment -FieldName 'count' -Type 'integer' -Format 'int64' -OwnerSchema 'Widget' ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $result.SuggestedPowerShellType | Should -Be '[long]' + } + + It 'EnumValues is always an array, never $null, even when EnumStatus is not matched' { + # Deliberately NOT `$result.EnumValues | Should -BeOfType ...` -- piping a + # genuinely EMPTY array to Should never invokes the assertion with a real value at + # all (Pester's pipeline binding sees zero objects go by and reports $null), which + # would make this test pass or fail for the wrong reason regardless of the actual + # array-vs-$null distinction it exists to check. Capture into a scalar first. + $result = Get-PfbBodyPropertyEnrichment -FieldName 'nonexistent_field' -Type 'string' -Format $null -OwnerSchema 'Widget' ` + -Spec $enrichmentSpec -Endpoint 'widgets' -Method 'PATCH' -History $enrichmentHistory -OldestVersion '2.0' + $isNull = ($null -eq $result.EnumValues) + $isNull | Should -BeFalse + $countIsZero = (@($result.EnumValues).Count -eq 0) + $countIsZero | Should -BeTrue + } +} diff --git a/Tests/PfbCmdletParamTools.Tests.ps1 b/Tests/PfbCmdletParamTools.Tests.ps1 index f0d6cb7..33c45e0 100644 --- a/Tests/PfbCmdletParamTools.Tests.ps1 +++ b/Tests/PfbCmdletParamTools.Tests.ps1 @@ -881,3 +881,134 @@ Describe 'Find-PfbAccumulatorVariable' { Find-PfbAccumulatorVariable -FunctionAst $funcAst -ParameterName 'Name' | Should -Be 'names' } } + +Describe 'Get-PfbCmdletBodyInsertionTarget (Task 5 -- insertion-point coordinates, decision 12)' { + BeforeAll { + function script:Get-PfbTestFunctionAst { + param([string]$Source) + $tokens = $null; $errs = $null + $ast = [System.Management.Automation.Language.Parser]::ParseInput($Source, [ref]$tokens, [ref]$errs) + return $ast.FindAll({ param($n) $n -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) | Select-Object -First 1 + } + } + + It 'returns $null for a function with no param() block at all' { + $funcAst = Get-PfbTestFunctionAst 'function Test-Fixture { Write-Host "no params" }' + Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst | Should -BeNullOrEmpty + } + + It 'detects the index-assignment style ($body[''key''] = ...) as the dominant AssignmentStyle' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureIndex { + param([Parameter()] [PSCustomObject]$Array, [Parameter()] [string]$Name) + $body = @{} + if ($Name) { $body['name'] = $Name } + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.PayloadVariable | Should -Be 'body' + $result.AssignmentStyle | Should -Be 'index' + $result.HasAttributes | Should -BeFalse + } + + It 'detects the hashtable-literal-initializer style as the dominant AssignmentStyle when it has more key/value pairs than index-form assignments' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureLiteral { + param([Parameter()] [PSCustomObject]$Array, [Parameter()] [string]$Name, [Parameter()] [string]$Kind) + $body = @{ name = $Name; kind = $Kind } + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.PayloadVariable | Should -Be 'body' + $result.AssignmentStyle | Should -Be 'literal' + } + + It 'reports AssignmentStyle ''attributesOnly'' when -Body is fed directly by the cmdlet''s own -Attributes parameter' { + $funcAst = Get-PfbTestFunctionAst @' +function Update-FixtureCertificate { + param([Parameter(Mandatory)] [string]$Name, [Parameter(Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array) + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fixtures' -Body $Attributes +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.PayloadVariable | Should -Be 'Attributes' + $result.AssignmentStyle | Should -Be 'attributesOnly' + $result.HasAttributes | Should -BeTrue + } + + It 'reports AssignmentStyle ''unknown'' when PayloadVariable resolves but nothing in this function assigns into it' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureHelperBuilt { + param([Parameter()] [PSCustomObject]$Array, [Parameter()] [string]$Name) + $body = Get-FixtureBodyFromHelper -Name $Name + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.PayloadVariable | Should -Be 'body' + $result.AssignmentStyle | Should -Be 'unknown' + } + + It 'leaves PayloadVariable/AssignmentStyle $null when two Invoke-PfbApiRequest calls disagree on the -Body variable (never guesses)' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureAmbiguousBody { + param([Parameter()] [PSCustomObject]$Array, [Parameter()] [string]$Name) + $body = @{} + $altBody = @{} + if ($Name) { + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fixtures' -Body $body + } else { + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fixtures' -Body $altBody + } +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.PayloadVariable | Should -BeNullOrEmpty + $result.AssignmentStyle | Should -BeNullOrEmpty + } + + It 'computes ParamBlockLine as the line of the LAST declared parameter' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureParamLine { + param( + [Parameter()] [PSCustomObject]$Array, + [Parameter()] [string]$Name, + [Parameter()] [string]$Kind + ) + $body = @{} + if ($Name) { $body['name'] = $Name } + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + # Line 1 is 'function ...', line 2 'param(', 3 Array, 4 Name, 5 Kind, 6 ')'. + $result.ParamBlockLine | Should -Be 5 + } + + It 'falls back to the param block''s own opening line when it declares zero parameters' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureNoParams { + param() + $body = @{} + Invoke-PfbApiRequest -Method GET -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.ParamBlockLine | Should -Be 2 + } + + It 'reports HasAttributes $false when the cmdlet declares no -Attributes parameter at all' { + $funcAst = Get-PfbTestFunctionAst @' +function Test-FixtureNoAttributes { + param([Parameter()] [PSCustomObject]$Array, [Parameter()] [string]$Name) + $body = @{} + if ($Name) { $body['name'] = $Name } + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fixtures' -Body $body +} +'@ + $result = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + $result.HasAttributes | Should -BeFalse + } +} diff --git a/tools/Build-PfbApiDriftReport.ps1 b/tools/Build-PfbApiDriftReport.ps1 index 5f1d125..fc89135 100644 --- a/tools/Build-PfbApiDriftReport.ps1 +++ b/tools/Build-PfbApiDriftReport.ps1 @@ -36,6 +36,70 @@ are not filtered: the capability map doesn't track a per-value introduced-version for either category, only per-field/per-endpoint, so there's no "since" signal to filter on there yet. + +.NOTES + Task 5 (enrichment + enum join) record shape for `parameterGaps[].missingBodyProperties`: + + - **Only enriched on a 'high'-confidence endpoint** (`confidence.level -eq 'high'`). + On a 'partial'-confidence endpoint the entries stay bare strings, exactly as before -- + see the comment above `Get-PfbBodyPropertyEnrichment` in tools/lib/PfbApiDriftTools.ps1 + for why (short version: a partial-confidence endpoint's list can contain false + positives, and attaching a fully-worked-out type/synopsis/enum/target to a field that + might not even be a real gap would overstate a confidence the endpoint's own + `confidence.caveat` is explicitly telling the reader not to have -- NOT a suppression, + every field name still appears unchanged either way). This gating is also what makes + this task's pinned acceptance numbers (33 matched / 43 not-found-in-resource / 326 + no-spec-enum-found, over 402 addable gaps) reproducible: they hold only over the + 'high'-confidence population (402), not over all addable gaps regardless of + confidence (605) -- verified 2026-07-26. + - **`missingQueryParameters` and `readOnlyFields` are deliberately NEVER enriched this + way, regardless of confidence** -- `readOnlyFields` are not addable at all (there is + nothing actionable to enrich), and query-parameter gaps stay bare name strings on + purpose: ~896 query-gap records would roughly double this artifact's size for no + current consumer (nothing downstream reads enriched query-gap detail today). This is a + deliberate, documented asymmetry, not an inconsistency -- revisit only if a consumer + for enriched query-gap detail actually appears. + - Enriched shape: `{ name, type, format, specRequired, synopsis, suggestedPowerShellType, + enumValues, enumStatus, target }`. + - `type`/`format` are the raw OpenAPI values from the newest ANALYSED spec (may be + `$null` when the property's own schema node carries no `type` -- e.g. the property + is itself an unresolved `$ref`, per Get-PfbSchemaPropertyDetails's PIN). + - `specRequired` is `Required` from Get-PfbSchemaPropertyDetails -- **this is + informational metadata about the OpenAPI spec's own `required:` array, and must + NEVER be treated as an instruction to make the corresponding PowerShell parameter + `[Parameter(Mandatory)]`.** This repo has a recorded hazard: a `Mandatory` + parameter tested via `Should -Throw` hangs the terminal on PowerShell's own + "Supply values for parameters" interactive prompt -- the convention here is an + optional parameter with an explicit `throw`. A human adding a parameter for a + `specRequired: true` field should keep it optional and validate/throw in the + function body, exactly like every other parameter in this module. + - `suggestedPowerShellType` comes from a fixed table (`int64`->`[long]`, + `int32`/`uint32`/no-format->`[int]`, `number`->`[double]`, `string`->`[string]`, + `boolean`->`[bool]`, `array`->`[[]]`, anything else->`[object]`) -- see + `Get-PfbSuggestedPowerShellType` in tools/lib/PfbApiDriftTools.ps1. It exists + specifically because the `int64`-vs-`int32` distinction is real and silent: 37 of + the 402 real high-confidence addable fields are `type: integer, format: int64`, + and eyeballing bare `"type": "integer"` while ignoring `format` would silently + truncate every one of them by writing `[int]`. The raw `type`/`format` are ALWAYS + emitted alongside so a human can override this suggestion. + - `enumValues`/`enumStatus` come from `Resolve-PfbFieldValueEnum` (never a bare + wire-name lookup), keyed by the field's own `OwnerSchema` as `-ResourceHint` (NOT + the older cmdlet-name-derived `Get-PfbResourceHint`, which only reaches 14 of 33 + real matches). `enumStatus` is always one of that function's own literal values + (`matched`/`collision`/`not-found-in-resource`/`no-spec-enum-found`) -- never + silently coerced to `null`. `enumValues` is always an array (empty unless + `enumStatus` is `matched`). + - `target` carries insertion-point COORDINATES ONLY -- `{ file, paramBlockLine, + payloadVariable, assignmentStyle, hasAttributes }` -- never a diff/patch (decision + 12): a patch goes stale the moment the file is next touched and cannot see + mutual-exclusivity/parameter-set constraints a human editing by hand must respect. + `file` is a repo-relative path (forward slashes). See + `Get-PfbCmdletBodyInsertionTarget` in tools/lib/PfbCmdletParamTools.ps1 for exactly + how `paramBlockLine`/`payloadVariable`/`assignmentStyle`/`hasAttributes` are + derived, and this script's own `Get-PfbGapTarget` helper for how the ONE primary + cmdlet is picked when an endpoint has more than one (alphabetically first, for + determinism -- a human should still check for sibling cmdlets on the same + endpoint). #> [CmdletBinding()] param( @@ -95,6 +159,120 @@ if ($newestAnalysedVersion) { $currentSpecCapabilities = @(Get-PfbSpecCapabilities -Spec $newestSpec) } +# Endpoint key (" /") -> the newest-analysed-spec BodyPropertyDetails record +# set for that endpoint, reused by Task 5's enrichment below (Get-PfbParameterCoverageGaps +# builds an equivalent dictionary internally for its OWN phantom-filtering purposes, but +# does not expose BodyPropertyDetails on its output -- this is a second, small, INTENTIONAL +# lookup built directly from $currentSpecCapabilities already computed above, not a second +# spec parse). +$currentByEndpoint = [System.Collections.Generic.Dictionary[string, object]]::new() +foreach ($cap in $currentSpecCapabilities) { $currentByEndpoint["$($cap.Method) $($cap.Path)"] = $cap } + +# Value-enum history, computed ONCE and reused by two logically SEPARATE report +# categories: category 3 (Get-PfbValidateSetDrift, existing-ValidateSet drift -- unrelated +# to this task) below, and Task 5's own MissingBodyProperties enum-join enrichment inside +# category 2's own assembly further down. Moved up from its old position (immediately +# before category 3) so category 2 can consume it too, per this task's brief: "reuse the +# same $historyResult.History/$historyResult.OldestVersion rather than recomputing it." +$historyResult = Get-PfbValueEnumHistory -SpecsDirectory $SpecsDirectory + +# Cmdlet name -> the absolute .ps1 file it's defined in, sourced from +# Get-PfbModuleCalledEndpoints's own scan (every Public/Private *.ps1 already parsed once +# for its literal Invoke-PfbApiRequest -Method/-Endpoint) rather than re-scanning +# -PublicDirectory again per gap -- avoids re-parsing potentially hundreds of files once +# per addable body-property gap (402 on the real tree). +$cmdletFile = [System.Collections.Generic.Dictionary[string, string]]::new() +foreach ($c in $calledEndpoints) { + if ($c.Resolved -and -not $cmdletFile.ContainsKey($c.Cmdlet)) { $cmdletFile[$c.Cmdlet] = $c.File } +} + +# File path -> Dictionary[cmdletName, FunctionDefinitionAst], parsed LAZILY and cached per +# FILE (not per cmdlet), so a file defining more than one function is only ever parsed once +# even if more than one of its cmdlets needs a target this run. +$fileFunctionAsts = [System.Collections.Generic.Dictionary[string, object]]::new() +function Get-PfbCmdletFunctionAst { + <# + .SYNOPSIS + Returns -Cmdlet's own FunctionDefinitionAst, parsing (and caching) its file on + first use. $null if -Cmdlet isn't in $cmdletFile or its file defines no function of + that exact name. + #> + param([string]$Cmdlet) + if (-not $cmdletFile.ContainsKey($Cmdlet)) { return $null } + $file = $cmdletFile[$Cmdlet] + if (-not $fileFunctionAsts.ContainsKey($file)) { + $tokens = $null; $parseErrors = $null + $ast = [System.Management.Automation.Language.Parser]::ParseFile($file, [ref]$tokens, [ref]$parseErrors) + $funcs = [System.Collections.Generic.Dictionary[string, object]]::new() + foreach ($f in $ast.FindAll({ param($n) $n -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true)) { + if (-not $funcs.ContainsKey($f.Name)) { $funcs[$f.Name] = $f } + } + $fileFunctionAsts[$file] = $funcs + } + $funcsForFile = $fileFunctionAsts[$file] + if ($funcsForFile.ContainsKey($Cmdlet)) { return $funcsForFile[$Cmdlet] } + return $null +} + +function Get-PfbGapTarget { + <# + .SYNOPSIS + Builds the `target` insertion-point-coordinates record (decision 12) for one + addable missing-body-property gap, given the endpoint's -Cmdlets list. + .DESCRIPTION + When more than one cmdlet already calls the same endpoint (5 real cases today: GET + /arrays, GET /blades, PATCH /buckets, PATCH /file-systems, PATCH /realms), the + ALPHABETICALLY FIRST cmdlet name is picked as the single primary target, + deterministically -- `target` is one set of coordinates, not a list, per the + brief's shape, and alphabetical order needs no external state to reproduce. A human + should still check for sibling cmdlets on the same endpoint before assuming this is + the only place the field could be added. + Every field degrades gracefully (never throws) if the primary cmdlet's file can't + be located or its function can't be found -- both should be unreachable in practice + since -Cmdlets is sourced from the same Get-PfbModuleCalledEndpoints scan + $cmdletFile is built from, but a missing coordinate is far cheaper to hand a human + than a failed report generation. + .OUTPUTS + [ordered]@{ file; paramBlockLine; payloadVariable; assignmentStyle; hasAttributes } + #> + param([string[]]$Cmdlets) + + $primaryCmdlet = @($Cmdlets | Sort-Object)[0] + $file = if ($cmdletFile.ContainsKey($primaryCmdlet)) { $cmdletFile[$primaryCmdlet] } else { $null } + if (-not $file) { + return [ordered]@{ file = $null; paramBlockLine = $null; payloadVariable = $null; assignmentStyle = $null; hasAttributes = $null } + } + + # Relative-to-$repoRoot when the cmdlet file is actually under it (the real Public/ + # tree, and this task's own repo-relative-path convention for `target.file`) -- + # otherwise (e.g. a test's -PublicDirectory pointed at a synthetic fixture tree + # entirely outside $repoRoot) falls back to the file's own absolute path rather than + # throwing a Substring range error. + $relativeFile = if ($file.StartsWith($repoRoot, [System.StringComparison]::OrdinalIgnoreCase)) { + ($file.Substring($repoRoot.Length + 1)) -replace '\\', '/' + } + else { + $file -replace '\\', '/' + } + $funcAst = Get-PfbCmdletFunctionAst -Cmdlet $primaryCmdlet + if (-not $funcAst) { + return [ordered]@{ file = $relativeFile; paramBlockLine = $null; payloadVariable = $null; assignmentStyle = $null; hasAttributes = $null } + } + + $insertion = Get-PfbCmdletBodyInsertionTarget -FunctionAst $funcAst + if (-not $insertion) { + return [ordered]@{ file = $relativeFile; paramBlockLine = $null; payloadVariable = $null; assignmentStyle = $null; hasAttributes = $null } + } + + return [ordered]@{ + file = $relativeFile + paramBlockLine = $insertion.ParamBlockLine + payloadVariable = $insertion.PayloadVariable + assignmentStyle = $insertion.AssignmentStyle + hasAttributes = $insertion.HasAttributes + } +} + # --- Category 1 --- # The outer @(...) wraps the WHOLE pipeline (input AND ForEach-Object projection), not # just the input side -- assigning a pipeline's output straight to a variable silently @@ -111,27 +289,96 @@ $uncoveredEndpoints = @(Get-PfbEndpointCoverageGaps -CapabilityMap $capabilityMa # --- Category 2 --- # No more notVerifiedEndpoints bucket: Get-PfbParameterCoverageGaps always computes # gaps now and carries per-parameter confidence on each row instead (design decision 5). +# +# Task 5: a 'high'-confidence endpoint's MissingBodyProperties entries are enriched into +# full records (name/type/format/specRequired/synopsis/suggestedPowerShellType/enumValues/ +# enumStatus/target) -- see this script's own .NOTES above and the comment above +# Get-PfbBodyPropertyEnrichment in tools/lib/PfbApiDriftTools.ps1 for why 'partial'- +# confidence endpoints are deliberately left as bare strings instead. $canEnrichBodyProperties +# is false only when the capability map carries no analysed spec version at all (no +# $newestSpec loaded above) -- an edge case that shouldn't occur on a real capability map, +# but degrading to the pre-enrichment bare-string shape is safer than throwing. +$canEnrichBodyProperties = [bool]$newestSpec + $parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $script:PfbNonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities | ForEach-Object { + $gapRaw = $_ + $endpointParts = $gapRaw.Endpoint -split ' ', 2 + $method = $endpointParts[0] + $bareEndpoint = $endpointParts[1].TrimStart('/') + + $currentCap = $null + if ($currentByEndpoint.ContainsKey($gapRaw.Endpoint)) { $currentCap = $currentByEndpoint[$gapRaw.Endpoint] } + + # @(...) wraps the WHOLE if/else, not just each branch's own inner @(...) -- the + # same "assigning a statement's output straight to a variable silently unwraps an + # EMPTY result to something that behaves like neither a real $null nor a real + # empty array" hazard already documented elsewhere in this file (see + # tools/lib/PfbApiDriftTools.ps1's $readOnlyList comment). Confirmed live: without + # this outer wrap, a 'high'-confidence endpoint with an EMPTY MissingBodyProperties + # (e.g. a query-only gap like DELETE /active-directory) produced a per-endpoint + # value that read as 0 elements in-memory but round-tripped through + # ConvertTo-Json/ConvertFrom-Json into a ONE-element array containing a single + # $null (a phantom "field" with every property blank) -- silently inflating the + # real 402-gap high-confidence addable total to 682 in the committed JSON, entirely + # invisible to a same-process check that never serializes. Caught only by + # serializing the real manifest and re-counting from the JSON on disk, exactly like + # a real consumer would read it -- an in-memory-only check would have missed it. + $missingBodyProperties = @( + if ($gapRaw.Confidence.Level -eq 'high' -and $canEnrichBodyProperties) { + $gapRaw.MissingBodyProperties | ForEach-Object { + $fieldName = $_ + $detail = $null + if ($currentCap) { $detail = @($currentCap.BodyPropertyDetails) | Where-Object { $_.Name -eq $fieldName } | Select-Object -First 1 } + + $type = if ($detail) { $detail.Type } else { $null } + $format = if ($detail) { $detail.Format } else { $null } + $specRequired = if ($detail) { [bool]$detail.Required } else { $false } + $ownerSchema = if ($detail) { $detail.OwnerSchema } else { $null } + + $enrichment = Get-PfbBodyPropertyEnrichment -FieldName $fieldName -Type $type -Format $format -OwnerSchema $ownerSchema ` + -Spec $newestSpec -Endpoint $bareEndpoint -Method $method -History $historyResult.History -OldestVersion $historyResult.OldestVersion + + [ordered]@{ + name = $fieldName + type = $type + format = $format + specRequired = $specRequired + synopsis = $enrichment.Synopsis + suggestedPowerShellType = $enrichment.SuggestedPowerShellType + enumValues = @($enrichment.EnumValues) + enumStatus = $enrichment.EnumStatus + target = (Get-PfbGapTarget -Cmdlets $gapRaw.Cmdlets) + } + } + } + else { + $gapRaw.MissingBodyProperties + } + ) + [ordered]@{ - endpoint = $_.Endpoint - cmdlets = @($_.Cmdlets) - missingQueryParameters = @($_.MissingQueryParameters) - missingBodyProperties = @($_.MissingBodyProperties) - readOnlyFields = @($_.ReadOnlyFields) + endpoint = $gapRaw.Endpoint + cmdlets = @($gapRaw.Cmdlets) + missingQueryParameters = @($gapRaw.MissingQueryParameters) + missingBodyProperties = $missingBodyProperties + readOnlyFields = @($gapRaw.ReadOnlyFields) confidence = [ordered]@{ - level = $_.Confidence.Level - unresolvedParameters = @($_.Confidence.UnresolvedParameters | ForEach-Object { + level = $gapRaw.Confidence.Level + unresolvedParameters = @($gapRaw.Confidence.UnresolvedParameters | ForEach-Object { [ordered]@{ parameter = $_.Parameter; surface = $_.Surface; file = $_.File; line = $_.Line } }) - escapeHatchOnly = @($_.Confidence.EscapeHatchOnly) - caveat = $_.Confidence.Caveat + escapeHatchOnly = @($gapRaw.Confidence.EscapeHatchOnly) + caveat = $gapRaw.Confidence.Caveat } } }) # --- Category 3 --- -$historyResult = Get-PfbValueEnumHistory -SpecsDirectory $SpecsDirectory +# $historyResult was computed earlier (before category 1) so category 2's enrichment above +# and this category both reuse the SAME Get-PfbValueEnumHistory result -- two logically +# separate report categories (existing-ValidateSet drift here vs. this task's new enum +# join above), never merged or confused, just sharing one expensive spec re-scan. $validateSetDrift = @(Get-PfbValidateSetDrift -CmdletInventory $inventory -History $historyResult.History -OldestVersion $historyResult.OldestVersion | ForEach-Object { [ordered]@{ @@ -194,7 +441,15 @@ if ($uncoveredEndpoints.Count -gt 0) { if ($parameterGaps.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## Parameter gaps'); $mdLines.Add('') $mdLines.Add('| Endpoint | Cmdlets | Missing query parameters | Missing body properties | Read-only fields | Confidence |'); $mdLines.Add('|---|---|---|---|---|---|') - foreach ($g in $parameterGaps) { $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingQueryParameters -join ', ') | $($g.missingBodyProperties -join ', ') | $($g.readOnlyFields -join ', ') | $($g.confidence.level) |") } + foreach ($g in $parameterGaps) { + # missingBodyProperties is a MIX of bare strings (partial-confidence endpoints, + # unchanged from before this task) and enriched [ordered]@{} records (high-confidence + # endpoints, this task) -- $_.name on a bare string returns $null, so the ?? falls + # back to the string itself; on an enriched record it reads the 'name' key. Either + # way the Markdown table shows just the field name, never a stringified hashtable. + $bodyPropNames = ($g.missingBodyProperties | ForEach-Object { if ($_ -is [string]) { $_ } else { $_.name } }) -join ', ' + $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingQueryParameters -join ', ') | $bodyPropNames | $($g.readOnlyFields -join ', ') | $($g.confidence.level) |") + } } if ($validateSetDrift.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## ValidateSet drift'); $mdLines.Add('') diff --git a/tools/README.md b/tools/README.md index 296d25b..97b72dc 100644 --- a/tools/README.md +++ b/tools/README.md @@ -144,6 +144,86 @@ Run in this order: `X-Request-ID`, `continuation_token`, `offset`) -- these are declared on nearly every endpoint and would otherwise drown out real gaps. + **`missingBodyProperties` enrichment (addable body-property gaps only).** On an + endpoint whose `confidence.level` is `'high'`, each `missingBodyProperties` entry is a + record, not a bare string: + + ```jsonc + { "name": "certificate_type", "type": "string", "format": null, "specRequired": false, + "synopsis": "The type of the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": ["appliance", "external"], "enumStatus": "matched", + "target": { "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } + ``` + + - **`missingQueryParameters` and `readOnlyFields` are NEVER enriched this way, and + never will be for the same reason on both** -- `readOnlyFields` are not addable at + all (nothing to build type/target coordinates FOR), and query-parameter gaps stay + bare name strings on purpose: ~896 enriched query-gap records would roughly double + this artifact's size for no consumer today (nothing downstream reads enriched + query-gap detail). Deliberate, documented asymmetry -- not an inconsistency. + - **Enrichment itself is gated on `confidence.level -eq 'high'`.** A + `'partial'`-confidence endpoint's `missingBodyProperties` stays bare strings, exactly + like before this feature existed. This is NOT a suppression -- every field name still + appears, unchanged -- it only withholds the extra metadata layer. Reason: a + partial-confidence endpoint's gap list can contain false positives (an unresolved + parameter may already cover the field through a path the AST-only inventory can't + see), and handing a human a fully-worked-out type/synopsis/enum/target for a field + that might not even be a real gap would overstate a confidence the endpoint's own + `confidence.caveat` is explicitly telling them not to have. Measured against the real + capability map + specs (2026-07-26): 402 addable gaps on high-confidence endpoints vs. + 605 across both confidence levels combined -- the two populations produce genuinely + different enum-join results (see below), confirming the gate is intentional scope, + not an oversight. + - **`suggestedPowerShellType`** comes from a fixed table: `integer`+`int64` -> `[long]`; + `integer`+`int32`/`uint32`/no format -> `[int]`; `number` (any format) -> `[double]`; + `string` -> `[string]`; `boolean` -> `[bool]`; `array` -> `[[]]` (element + mapped recursively, falling back to `[object[]]` when the element type can't be + resolved); anything else -> `[object]`. This branches on `format`, not just `type`, + because the failure mode is silent: **37 of the 402** real high-confidence addable + fields are `type: integer, format: int64` (measured 2026-07-26 -- NOT the 230 once + speculated for this figure; that number was investigated and could not be reproduced + against any of six candidate populations tried). Mapping bare `"type": "integer"` to + `[int]` without checking `format` would silently truncate every one of those 37 + fields. The raw `type`/`format` are always emitted alongside so a human can override. + - **`specRequired` is the OpenAPI spec's own `required:` flag for that field -- it must + NEVER be read as "make this a `[Parameter(Mandatory)]`".** This module has a recorded + hazard: a `Mandatory` parameter tested via `Should -Throw` hangs the terminal on + PowerShell's own "Supply values for parameters" interactive prompt; the convention + here is an optional parameter with an explicit `throw`. Keep it that way even for a + `specRequired: true` field. + - **`enumValues`/`enumStatus`** come from `Resolve-PfbFieldValueEnum` + (`tools/lib/PfbValueEnumTools.ps1`), never a bare wire-name lookup, keyed by the + field's `OwnerSchema` (from `Get-PfbSchemaPropertyDetails`, + `tools/lib/PfbSpecTools.ps1`) as `-ResourceHint` -- not the older cmdlet-name-derived + `Get-PfbResourceHint`, which only reaches 14 of the 33 real matches (e.g. + `Update-PfbNfsExportRule`'s derived hint `NfsExportRule` does not prefix-match the + real owning schema `NfsExportPolicyRuleBase` at all). `enumStatus` is always one of + that function's own literal values (`matched`/`collision`/`not-found-in-resource`/ + `no-spec-enum-found`), passed through verbatim. Measured over the 402 real + high-confidence addable gaps: **33 matched / 43 not-found-in-resource / 326 + no-spec-enum-found** (0 real `collision` results in this dataset, though the status + itself is never hardcoded away). + - **`target`** carries insertion-point COORDINATES ONLY -- `{ file, paramBlockLine, + payloadVariable, assignmentStyle, hasAttributes }` -- never a diff/patch: a patch goes + stale the moment the file is next touched and cannot see mutual-exclusivity/ + parameter-set constraints a human editing by hand must respect. + `payloadVariable`/`assignmentStyle`/`hasAttributes` describe what the target cmdlet's + OWN function body already does for its other body fields (see + `Get-PfbCmdletBodyInsertionTarget` in `tools/lib/PfbCmdletParamTools.ps1`), so a human + adding one more field matches the file's existing convention: `assignmentStyle` is + `'index'` for `$body['x'] = ...`, `'literal'` for a hashtable-literal initializer that + declares at least one key, `'attributesOnly'` when the request body is fed directly + by the cmdlet's own `-Attributes` parameter (there is no per-field line to imitate -- + adding a typed parameter here means introducing the first one), or `'unknown'` when + the payload variable resolves but this AST-only inspector can't find any assignment + into it at all (e.g. built by a private helper). When more than one cmdlet already + calls the same endpoint (5 real cases today), the alphabetically first cmdlet name is + picked as the one target, deterministically -- a human should still check for sibling + cmdlets on the same endpoint. + ## What's deliberately NOT in the capability map The FlashBlade OpenAPI spec has no structural JSON Schema `enum` anywhere — verified diff --git a/tools/lib/PfbApiDriftTools.ps1 b/tools/lib/PfbApiDriftTools.ps1 index 169685f..87146c8 100644 --- a/tools/lib/PfbApiDriftTools.ps1 +++ b/tools/lib/PfbApiDriftTools.ps1 @@ -474,3 +474,366 @@ function Get-PfbValidateSetDrift { } } } + +# --- Task 5: per-field enrichment + enum join for MissingBodyProperties ----------------- +# +# Consumed by tools/Build-PfbApiDriftReport.ps1, which ONLY calls this enrichment path for +# an endpoint whose Confidence.Level is 'high' -- a 'partial'-confidence endpoint's +# MissingBodyProperties list can contain false positives (see Get-PfbParameterCoverageGaps's +# own .OUTPUTS help: an unresolved parameter may already cover an apparent gap through a +# path this AST-only inventory cannot see), and handing a human a fully-worked-out +# suggestedPowerShellType/target/enumValues for a field that might not even be a real gap +# would overstate the confidence the endpoint's own `confidence.caveat` is explicitly +# telling them NOT to have. This is NOT a suppression (design decision 5 still holds -- +# every field name still appears, unchanged, in a partial-confidence endpoint's list): it +# only withholds this task's EXTRA metadata layer, never the gap itself. +# +# This gating is not a guess -- it is what makes this task's own pinned acceptance numbers +# reproducible. Measured against the real capability map + specs (2026-07-26): 402 addable +# MissingBodyProperties entries on 'high'-confidence endpoints vs. 605 across BOTH +# confidence levels. The enum-join split this task's acceptance is pinned to -- 33 matched / +# 43 not-found-in-resource / 326 no-spec-enum-found -- reproduces EXACTLY over the +# high-confidence-only 402, and does NOT reproduce over the combined 605 (which instead +# gives 43 matched / 66 not-found-in-resource / 496 no-spec-enum-found) -- confirming the +# gate is the intended scope, not an afterthought. + +# Sentinel -ResourceHint passed to Resolve-PfbFieldValueEnum when a body property's +# OwnerSchema is $null (no named component encloses its declaration -- see +# Get-PfbSchemaPropertyDetails's OwnerSchema doc in tools/lib/PfbSpecTools.ps1). +# Resolve-PfbFieldValueEnum matches -ResourceHint with "-like `"$ResourceHint*`"" against +# schema-kind history keys, so passing '' would degrade to a bare '*' wildcard that matches +# EVERY schema-kind entry in the whole history -- exactly wrong for "there is no owner to +# hint at". This sentinel starts with a character ('(') no real OpenAPI schema name in this +# spec uses, so it is guaranteed to prefix-match zero real history keys, correctly forcing +# the hinted-schema candidate set to stay empty rather than accidentally matching +# everything. Only 1 of the 402 real high-confidence addable body-property gaps hits this +# (POST /keytabs/upload|keytab_file -- a fully inline request body with no named schema +# anywhere in its chain) -- confirmed by real-data verification. +$script:PfbNoOwnerSchemaResourceHint = '(no-owner-schema)' + +function Get-PfbSuggestedPowerShellType { + <# + .SYNOPSIS + Maps an OpenAPI {type, format} pair (plus, for an array, its element {type, format}) + to a suggested PowerShell parameter type literal, e.g. '[string]', '[long]', + '[string[]]'. + .DESCRIPTION + Table (verbatim from the drift-report-actionable-plan brief): + integer + format 'int64' -> [long] + integer + format 'int32'/'uint32'/'' -> [int] (also the fallback for any OTHER + unrecognised integer format, + since [int]/Int32 is the + OpenAPI/JSON-Schema default + width for "integer" when format + is absent) + number (any format, incl. 'double'/'float'/none) -> [double] + string (any format) -> [string] + boolean -> [bool] + array -> "[[]]", element mapped by a + RECURSIVE call against -ItemType/ + -ItemFormat (falls back to [object] if + the item type could not be resolved -- + e.g. OwnerSchema was $null, or the + array's own "items" node is itself an + unresolved $ref with no inline "type", + which this function deliberately does + NOT follow -- see + Get-PfbBodyPropertyArrayItemType) + anything else ($null, '', 'object', or an unrecognised type string) -> [object], + a deliberately honest fallback, never a guessed scalar type. This function's + caller always ALSO emits the raw type/format alongside this suggestion (see + Build-PfbApiDriftReport.ps1), so a human overriding a wrong/absent guess has + the real spec facts to work from, not just this function's guess. + + Branches on FORMAT, not just TYPE, for integers specifically because silently is + the dangerous failure mode here: 37 of the 402 real high-confidence addable + body-property fields are `type: integer, format: int64` (measured against the real + capability map + fb2.27 spec, 2026-07-26 -- NOT the 230 the original brief + speculated; that figure was investigated and could not be reproduced against any of + six candidate populations, see tools/README.md). Mapping bare `"type": "integer"` + to `[int]` (Int32) without checking `format` would silently truncate every one of + those 37 real fields the first time a caller supplied a value above 2^31-1. + .OUTPUTS + String, e.g. '[string]', '[long]', '[string[]]'. Never $null or ''. + #> + [CmdletBinding()] + param( + [AllowNull()] [string]$Type, + [AllowNull()] [string]$Format, + [AllowNull()] [string]$ItemType, + [AllowNull()] [string]$ItemFormat + ) + + switch ($Type) { + 'integer' { + if ($Format -eq 'int64') { return '[long]' } + return '[int]' + } + 'number' { return '[double]' } + 'string' { return '[string]' } + 'boolean' { return '[bool]' } + 'array' { + $inner = Get-PfbSuggestedPowerShellType -Type $ItemType -Format $ItemFormat + # Strip exactly the OUTERMOST leading '[' / trailing ']' via anchored regex + # (never Trim(), which strips every matching char from each end and would + # over-strip a nested array-of-array's inner brackets too, e.g. Trim('[',']') + # on '[string[]]' yields 'string', not the intended 'string[]'). + $innerBare = $inner -replace '^\[', '' -replace '\]$', '' + return "[$innerBare[]]" + } + default { return '[object]' } + } +} + +function Find-PfbOwnSchemaPropertyNode { + <# + .SYNOPSIS + Internal helper for Get-PfbBodyPropertyArrayItemType/Get-PfbBodyPropertySynopsis: + finds -FieldName's own (raw, un-resolved-further) property node within ONE already- + identified named schema (-SchemaNode), searching its OWN inline "allOf" branches + but never crossing into a "$ref" branch. + .DESCRIPTION + Real-data correction (measured against fb2.27, 2026-07-26): the majority of real + OwnerSchema values -- e.g. `_certificateBase`, `NfsExportPolicyRuleBase`, + `ActiveDirectoryPatch`, `SmbSharePolicyRule` -- carry NO "properties" key directly + at their own top level; the schema is `{ allOf: [ {$ref: ...}, {properties: {...}} ] }` + and the field lives in the anonymous SECOND branch's own "properties". This is + exactly the shape Get-PfbSchemaPropertyDetails's OwnerSchema attribution already + anticipates ("OwnerSchema is the nearest enclosing NAMED component whose properties + block directly declares this property" -- an ANONYMOUS inline allOf branch is never + itself an owner, so its declared properties are attributed to the nearest NAMED + ancestor, i.e. THIS schema, even though they physically live one level down inside + its own allOf). A single-hop `schema.properties.$FieldName` lookup (the original, + too-naive implementation) therefore returned $null for nearly every real match, + silently defeating both `synopsis` and the array-item-type lookup. + + This is still NOT "a second schema walker" in the decision-3 sense: it only + descends into -SchemaNode's OWN anonymous ("allOf" with no "$ref") branches -- + never crosses into a "$ref" branch (that branch's properties belong to a DIFFERENT + named schema, whatever OwnerSchema attribution assigned it there -- searching into + it here would either find the wrong owner's field, or, worse, silently succeed for + the wrong reason if two schemas happen to share a field name) -- and never resolves + a property's OWN "$ref" or descends into ITS body (same top-level-only boundary + Get-PfbSchemaPropertyDetails's PIN already establishes). The recursion is bounded + and terminates naturally: it can only ever re-enter THIS one schema's own inline + branches, never a different named schema. + .OUTPUTS + The raw property node (PSCustomObject), or $null. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowNull()] + $SchemaNode, + + [Parameter(Mandatory)] + [string]$FieldName + ) + + if ($null -eq $SchemaNode) { return $null } + + if ($SchemaNode.PSObject.Properties.Name -contains 'properties' -and $SchemaNode.properties -and + $SchemaNode.properties.PSObject.Properties.Name -contains $FieldName) { + return $SchemaNode.properties.$FieldName + } + + if ($SchemaNode.PSObject.Properties.Name -contains 'allOf' -and $SchemaNode.allOf) { + foreach ($branch in $SchemaNode.allOf) { + if ($branch.PSObject.Properties.Name -contains '$ref') { continue } + $found = Find-PfbOwnSchemaPropertyNode -SchemaNode $branch -FieldName $FieldName + if ($null -ne $found) { return $found } + } + } + + return $null +} + +function Get-PfbOwnerSchemaPropertyNode { + <# + .SYNOPSIS + Resolves -FieldName's own raw property node under -OwnerSchema in -Spec, or $null. + Shared by Get-PfbBodyPropertyArrayItemType and Get-PfbBodyPropertySynopsis so both + apply the exact same "which named schema, which branch" resolution -- see + Find-PfbOwnSchemaPropertyNode for why a single top-level dictionary hop is not + enough on real data. + .OUTPUTS + The raw property node (PSCustomObject), or $null. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] $Spec, + [AllowNull()] [string]$OwnerSchema, + [Parameter(Mandatory)] [string]$FieldName + ) + + if (-not $OwnerSchema) { return $null } + if (-not $Spec.components -or -not $Spec.components.schemas) { return $null } + if ($Spec.components.schemas.PSObject.Properties.Name -notcontains $OwnerSchema) { return $null } + + $schema = $Spec.components.schemas.$OwnerSchema + return Find-PfbOwnSchemaPropertyNode -SchemaNode $schema -FieldName $FieldName +} + +function Get-PfbBodyPropertyArrayItemType { + <# + .SYNOPSIS + For an array-typed body property, returns its element {Type, Format} via a DIRECT + lookup of the property's own node under -OwnerSchema (see + Get-PfbOwnerSchemaPropertyNode/Find-PfbOwnSchemaPropertyNode) -- never a second + schema walker in the decision-3 sense (it never crosses into a DIFFERENT named + schema or resolves any "$ref"). Reads exactly one property hop beyond that node: + its own "items" sibling key (see Get-PfbSchemaPropertyDetails's PIN: it never + follows a property's own "$ref" or descends further, and this respects the same + boundary for "items"). + .DESCRIPTION + $null when -OwnerSchema is $null (no named component encloses the property's + declaration -- this function does not attempt to re-derive one by walking the + operation's own inline body schema), when the named schema (searched through its + own inline allOf branches, never a $ref'd one) doesn't declare -FieldName at all, + or when the property has no "items" node (not actually an array, or "items" is + itself an unresolved $ref with no inline "type"/"format" sibling -- deliberately + not resolved, same "top-level only" rule Get-PfbSchemaPropertyDetails already + applies one level up). + .OUTPUTS + [PSCustomObject]@{ Type; Format }, or $null. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] $Spec, + [AllowNull()] [string]$OwnerSchema, + [Parameter(Mandatory)] [string]$FieldName + ) + + $propNode = Get-PfbOwnerSchemaPropertyNode -Spec $Spec -OwnerSchema $OwnerSchema -FieldName $FieldName + if ($null -eq $propNode) { return $null } + if ($propNode.PSObject.Properties.Name -notcontains 'items' -or -not $propNode.items) { return $null } + + $itemsNode = $propNode.items + $itemType = if ($itemsNode.PSObject.Properties.Name -contains 'type') { $itemsNode.type } else { $null } + $itemFormat = if ($itemsNode.PSObject.Properties.Name -contains 'format') { $itemsNode.format } else { $null } + + # An "items" node that is itself an unresolved $ref (e.g. { "$ref": "#/components/schemas/_tagRef" }) + # carries neither -- deliberately NOT followed (would be resolving one level further + # than this function's own direct-lookup contract allows). Return $null overall in + # that case, same as "no items node at all", rather than a half-populated record with + # both fields $null -- the caller (Get-PfbBodyPropertyEnrichment) only ever checks + # truthiness of this function's result before reading .Type/.Format. + if (-not $itemType -and -not $itemFormat) { return $null } + + return [PSCustomObject]@{ Type = $itemType; Format = $itemFormat } +} + +function Get-PfbBodyPropertySynopsis { + <# + .SYNOPSIS + First sentence of a body property's own `description`, newline-normalised -- a + DIRECT lookup of the property's own node under -OwnerSchema (see + Get-PfbOwnerSchemaPropertyNode), never a second schema walker in the decision-3 + sense (never crosses into a different named schema or resolves a "$ref"). + Get-PfbSchemaPropertyDetails (tools/lib/PfbSpecTools.ps1) already did the hard part + -- resolving the property's OWNING named schema through the allOf/$ref chain across + MULTIPLE schemas; finding that one field's own node inside the schema already + identified as its owner is a bounded, much smaller problem, so it does not earn a + second walker. + .DESCRIPTION + $null when -OwnerSchema is $null (no named component encloses the property's + declaration -- the operation's entire body schema was written fully inline with no + $ref anywhere in its chain). This function does NOT attempt to re-derive an owner by + re-walking the operation's own inline body schema (that would be a second walker). + Also $null when the named schema (searched through its own inline allOf branches, + never a $ref'd one -- see Find-PfbOwnSchemaPropertyNode) doesn't declare -FieldName + at all, or declares it with no (or empty) "description" -- surfaced as $null rather + than a wrong guess in every case, never a silently-empty string standing in for "no + synopsis available". + "First sentence": newlines are first replaced with a single space (these + descriptions wrap mid-sentence in the raw spec text), then the result up to and + including the first '.', '!', or '?' that is followed by whitespace or the end of + the string is taken. Sampled real fb2.27 descriptions do not use a + sentence-ending-like abbreviation before the field's own first true sentence break, + so this simple split is not a compromise for that data -- but it IS naive prose + parsing, not a guarantee for arbitrary future spec text. + .OUTPUTS + String, or $null. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] $Spec, + [AllowNull()] [string]$OwnerSchema, + [Parameter(Mandatory)] [string]$FieldName + ) + + $propNode = Get-PfbOwnerSchemaPropertyNode -Spec $Spec -OwnerSchema $OwnerSchema -FieldName $FieldName + if ($null -eq $propNode) { return $null } + if ($propNode.PSObject.Properties.Name -notcontains 'description' -or -not $propNode.description) { return $null } + + $normalised = ($propNode.description -replace '\r?\n', ' ').Trim() + $m = [regex]::Match($normalised, '^.*?[.!?](?=\s|$)') + if ($m.Success) { return $m.Value.Trim() } + return $normalised +} + +function Get-PfbBodyPropertyEnrichment { + <# + .SYNOPSIS + Composes every per-field enrichment fact Task 5 adds for ONE addable + missing-body-property gap: synopsis, suggested PowerShell type, and the + Resolve-PfbFieldValueEnum join. + .DESCRIPTION + The enum join always goes through Resolve-PfbFieldValueEnum, NEVER a bare wire-name + lookup -- bare-name lookup is exactly the collision class (43 of the 402 real + high-confidence addable gaps) this function exists to resolve correctly instead of + guessing. -OwnerSchema (from Get-PfbSchemaPropertyDetails, via the caller's own + BodyPropertyDetails lookup) is passed as -ResourceHint -- NOT the older + cmdlet-name-derived Get-PfbResourceHint, which only reaches 14 of the 33 real + matches (verified: Update-PfbNfsExportRule's derived hint 'NfsExportRule' does not + prefix-match the real owning schema 'NfsExportPolicyRuleBase' at all). When + -OwnerSchema is $null, $script:PfbNoOwnerSchemaResourceHint is substituted so the + hint can never accidentally wildcard-match every schema-kind entry (see that + variable's own comment). + .OUTPUTS + [PSCustomObject]@{ Synopsis; SuggestedPowerShellType; EnumValues; EnumStatus }. + EnumStatus is always one of Resolve-PfbFieldValueEnum's own literal values -- + 'matched' / 'collision' / 'not-found-in-resource' / 'no-spec-enum-found' -- passed + through VERBATIM, never renamed or coerced. (Note for anyone cross-referencing the + drift-report-actionable-plan's decisions register: its prose invents a 'collision' + bucket meaning "collision-class", but the real function returns + 'not-found-in-resource' for that entire population in real data -- 0 real + 'collision' results occur among the 402 high-confidence addable gaps. This function + still passes 'collision' through unchanged on the rare/future occasion + Resolve-PfbFieldValueEnum actually returns it, rather than hardcoding it away.) + EnumValues is always an array, empty (never $null) unless EnumStatus is 'matched'. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] [string]$FieldName, + [AllowNull()] [string]$Type, + [AllowNull()] [string]$Format, + [AllowNull()] [string]$OwnerSchema, + [Parameter(Mandatory)] $Spec, + [string]$Endpoint, + [string]$Method, + [Parameter(Mandatory)] $History, + [Parameter(Mandatory)] [string]$OldestVersion + ) + + $synopsis = Get-PfbBodyPropertySynopsis -Spec $Spec -OwnerSchema $OwnerSchema -FieldName $FieldName + + $itemType = $null + $itemFormat = $null + if ($Type -eq 'array') { + $items = Get-PfbBodyPropertyArrayItemType -Spec $Spec -OwnerSchema $OwnerSchema -FieldName $FieldName + if ($items) { $itemType = $items.Type; $itemFormat = $items.Format } + } + $suggestedType = Get-PfbSuggestedPowerShellType -Type $Type -Format $Format -ItemType $itemType -ItemFormat $itemFormat + + $hint = if ($OwnerSchema) { $OwnerSchema } else { $script:PfbNoOwnerSchemaResourceHint } + $resolution = Resolve-PfbFieldValueEnum -WireName $FieldName -ResourceHint $hint -Endpoint $Endpoint -Method $Method -History $History -OldestVersion $OldestVersion + $enumValues = @(if ($resolution.Status -eq 'matched') { $resolution.SpecValues } else { @() }) + + return [PSCustomObject]@{ + Synopsis = $synopsis + SuggestedPowerShellType = $suggestedType + EnumValues = $enumValues + EnumStatus = $resolution.Status + } +} diff --git a/tools/lib/PfbCmdletParamTools.ps1 b/tools/lib/PfbCmdletParamTools.ps1 index 4c3ca34..467307d 100644 --- a/tools/lib/PfbCmdletParamTools.ps1 +++ b/tools/lib/PfbCmdletParamTools.ps1 @@ -728,6 +728,134 @@ function Get-PfbEndpointForVariable { return [PSCustomObject]@{ Method = $parts[0]; Endpoint = $parts[1] } } +function Get-PfbCmdletBodyInsertionTarget { + <# + .SYNOPSIS + Insertion-point coordinates (drift-report-actionable-plan decision 12) for adding a + typed parameter to -FunctionAst for a currently-missing body-property gap -- NEVER + a diff/patch: a patch goes stale the moment the file is next touched and cannot see + mutual-exclusivity/parameter-set constraints a human editing by hand must respect. + .DESCRIPTION + PayloadVariable/AssignmentStyle describe what THIS cmdlet's function body already + does for its OTHER body fields, so a human adding one more matches the file's own + convention instead of inventing a new one: + - PayloadVariable is the literal variable name every `-Body ` argument on + this function's Invoke-PfbApiRequest call(s) agrees on (never guessed when + calls disagree, or an argument isn't a plain variable -- same "only ever ADD a + resolution, never guess" discipline as every other function in this file). + - If PayloadVariable is this cmdlet's OWN -Attributes parameter (the common + "-Body $Attributes" shape for write cmdlets with no typed body parameters at + all, e.g. Update-PfbCertificate), AssignmentStyle is 'attributesOnly': there is + no existing per-field assignment line to imitate, because the caller supplies + the whole hashtable directly -- adding a typed parameter here means introducing + the FIRST one, not extending an established pattern. + - Otherwise AssignmentStyle counts existing assignments INTO PayloadVariable using + the same two literal-assignment idioms Get-PfbWireNameForParameter already + recognizes: `$var['key'] = ...` (index form) vs. `$var = @{ 'key' = ... }` + (hashtable-literal-initializer form, counted only when it declares at least ONE + key/value pair -- an EMPTY `$var = @{}` bootstrap is the standard first line of + the INDEX idiom too and must not be miscounted as 'literal'). Whichever has MORE + occurrences in this function wins; a single non-empty literal initializer (even + with zero further index-form assignments after it) still counts as 'literal', + since it establishes every key at once. 'unknown' when PayloadVariable resolved + but this function contains no assignment into it at all (e.g. populated by a + private helper this AST-only inspector does not trace) -- surfaced rather than + guessed, per this file's "never guess" convention. + ParamBlockLine is the line of the LAST existing parameter in the param() block (or + the block's own opening line if it declares none) -- inserting a new parameter + after that line keeps it inside the existing block, below whatever + identity/ParameterSet parameters the cmdlet already declares, matching every + hand-written cmdlet in this module. + HasAttributes reuses the exact detection Get-PfbCmdletParameterInventory already + uses (`$_.Name.VariablePath.UserPath -eq 'Attributes'`), so this never disagrees + with the cmdlet-inventory's own AttributesOnly/EscapeHatchOnly classification. + .OUTPUTS + [PSCustomObject]@{ ParamBlockLine; PayloadVariable; AssignmentStyle; HasAttributes } + -- $null if -FunctionAst has no param() block at all (a function with no + parameters cannot be an Invoke-PfbApiRequest-calling cmdlet in this module, so this + should not occur for any cmdlet name sourced from Get-PfbModuleCalledEndpoints). + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [System.Management.Automation.Language.FunctionDefinitionAst]$FunctionAst + ) + + $paramBlock = $FunctionAst.Body.ParamBlock + if (-not $paramBlock) { return $null } + + $hasAttributesParam = [bool]($paramBlock.Parameters | Where-Object { $_.Name.VariablePath.UserPath -eq 'Attributes' }) + + $paramBlockLine = if ($paramBlock.Parameters.Count -gt 0) { + ($paramBlock.Parameters | Select-Object -Last 1).Extent.EndLineNumber + } + else { + $paramBlock.Extent.StartLineNumber + } + + $bodyCalls = @($FunctionAst.FindAll({ + param($n) + $n -is [System.Management.Automation.Language.CommandAst] -and + $n.GetCommandName() -eq 'Invoke-PfbApiRequest' + }, $true)) + + $bodyVarNames = [System.Collections.Generic.List[string]]::new() + foreach ($cmd in $bodyCalls) { + $elements = $cmd.CommandElements + for ($i = 0; $i -lt $elements.Count; $i++) { + $el = $elements[$i] + if ($el -isnot [System.Management.Automation.Language.CommandParameterAst]) { continue } + if ($el.ParameterName -ne 'Body') { continue } + $argExpr = if ($el.Argument) { $el.Argument } elseif ($i + 1 -lt $elements.Count) { $elements[$i + 1] } else { $null } + $argVar = $argExpr -as [System.Management.Automation.Language.VariableExpressionAst] + if ($argVar) { $bodyVarNames.Add($argVar.VariablePath.UserPath) } + } + } + $distinctBodyVars = @($bodyVarNames | Select-Object -Unique) + $payloadVariable = if ($distinctBodyVars.Count -eq 1) { $distinctBodyVars[0] } else { $null } + + $assignmentStyle = $null + if ($payloadVariable -eq 'Attributes') { + $assignmentStyle = 'attributesOnly' + } + elseif ($payloadVariable) { + $indexAssignments = @($FunctionAst.FindAll({ + param($n) + $n -is [System.Management.Automation.Language.AssignmentStatementAst] -and + $n.Left -is [System.Management.Automation.Language.IndexExpressionAst] -and + ($n.Left.Target -as [System.Management.Automation.Language.VariableExpressionAst]) -and + ($n.Left.Target).VariablePath.UserPath -eq $payloadVariable + }, $true)) + + $literalCandidates = @($FunctionAst.FindAll({ + param($n) + $n -is [System.Management.Automation.Language.AssignmentStatementAst] -and + $n.Left -is [System.Management.Automation.Language.VariableExpressionAst] -and + $n.Left.VariablePath.UserPath -eq $payloadVariable + }, $true)) + # An EMPTY hashtable-literal bootstrap (`$body = @{}`) does not count as 'literal' + # style -- it establishes zero keys and is the standard first line of the 'index' + # idiom too (`$body = @{}` followed by `$body['x'] = ...`). Only a literal that + # actually declares at least one key/value pair reflects the "establish every key + # at once" convention this style name describes. + $literalAssignments = @($literalCandidates | Where-Object { + $hash = (Resolve-PfbSingleExpression -Ast $_.Right) -as [System.Management.Automation.Language.HashtableAst] + $hash -and $hash.KeyValuePairs.Count -gt 0 + }) + + if ($indexAssignments.Count -gt $literalAssignments.Count) { $assignmentStyle = 'index' } + elseif ($literalAssignments.Count -gt 0) { $assignmentStyle = 'literal' } + else { $assignmentStyle = 'unknown' } + } + + return [PSCustomObject]@{ + ParamBlockLine = $paramBlockLine + PayloadVariable = $payloadVariable + AssignmentStyle = $assignmentStyle + HasAttributes = $hasAttributesParam + } +} + function Get-PfbCmdletParameterInventory { <# .SYNOPSIS From 1c4d9c158816d4bb6dfcb1897b1e1e9412d08722 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Sun, 26 Jul 2026 23:46:10 -0700 Subject: [PATCH 11/17] feat(tools): aggregate systemic gaps, rank convention strength, add annotations + injection detection (Task 6) Task 6 of the drift-report-actionable plan (issue #31): turns the per-endpoint parameter/body-property gap lists into actionable, decision-ready output. - Get-PfbSystemicGaps collapses MissingQueryParameters/MissingBodyProperties across every endpoint into one finding per distinct wire name, with a deduplicated EndpointCount (an endpoint hitting the same name in both lists, e.g. POST /workloads/placement-recommendations|placement_names, counts once). - Get-PfbConventionStrength ranks each missing name by how many distinct cmdlets already expose it as a resolved ('Typed') parameter -- a mechanical batch fix (names=306, ids=218) vs. an architectural decision (context_names=0). - docs/drift-annotations.json is a small checked-in annotation channel (design decisions, prior conclusions, live-testing hazards), loaded via Get-PfbDriftAnnotations/Find-PfbDriftAnnotation. - Get-PfbCentralInjectionSites ASTs Private/*.ps1 for the same `$var['key'] = ` shape already used for Public/ wire-name resolution, classifying each site as parameter-sourced or server-or-internal-derived. Get-PfbDerivedNonActionableParameters/Get-PfbNonActionableParameters reduce that to a per-key verdict: continuation_token is now DERIVED (Strength 'structural', since Private/Invoke-PfbApiRequest.ps1 line 227 sources it from $response, never a parameter) instead of hand-written, while X-Request-ID/ offset stay hardcoded (no Private/ injection site exists for either). The six Add-PfbCommonQueryParams-injected keys (filter/sort/limit/total_only/names/ids) are confirmed parameter-sourced and never enter the exclusion list. - tools/Build-PfbApiDriftReport.ps1 wires Get-PfbNonActionableParameters in place of the old hardcoded $script:PfbNonActionableParameters reference for -ExcludedFields -- the only report-script change; no Task 7 output work (no manifest keys, no Markdown section) is included here. Investigated the 253-vs-252 discrepancy between this task's real-data measurement and the plan's corrected ledger figure: DELETE /workloads/tags has a real capability-map parameter literally named `keys` alongside `context_names`. The old (pre-Task-4) Get-PfbParameterCoverageGaps merged parameters/bodyProperties into a plain `@{}` Hashtable and read `.Keys` on it -- which a literal `keys` entry silently shadows, returning that entry's VALUE (a version string) instead of the real key collection, corrupting this one endpoint's entire missing-field computation and hiding its real context_names gap. Task 4's typed-Dictionary/get_Keys() rewrite eliminated that bug class as a side effect, so this endpoint is now correctly counted -- 253 is the honest, reproducible figure; 252 was an undercounted artifact of a bug that predates this task. Confirmed empirically (Hashtable.Keys shadowing repro) and by diffing old-code-real-data vs new-code-real-data endpoint sets, which converge on exactly this one endpoint. This finishes work a prior agent started in this same worktree (background process died mid-task before verification/commit) -- the ~1023 lines of lib/test diff and docs/drift-annotations.json are substantially that agent's work, reviewed, verified against real data, and completed here (the 253 investigation, final full-suite run, and mutation testing were done in this session). Tests: full suite 597 passed / 1 known pre-existing failure (Build-PfbValueEnumMap fb2.28-vs-2.27 mismatch, out of scope) / 2 skipped. Three new invariants mutation-tested live (systemic-gaps EndpointCount dedup, ContainsKey-guard classification, any-parameter-sourced exclusion rule) -- each mutation broke its target assertion, confirmed, then reverted. Co-Authored-By: Claude Sonnet 5 --- Tests/PfbApiDriftTools.Tests.ps1 | 434 +++++++++++++++++++++- docs/drift-annotations.json | 27 ++ tools/Build-PfbApiDriftReport.ps1 | 9 +- tools/lib/PfbApiDriftTools.ps1 | 591 +++++++++++++++++++++++++++++- 4 files changed, 1050 insertions(+), 11 deletions(-) create mode 100644 docs/drift-annotations.json diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index 7729492..3c25d67 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -149,10 +149,9 @@ Describe 'Bespoke auth-endpoint allowlist (real, confirmed by reading Private/ + } } -Describe 'Non-actionable parameter allowlist (X-Request-ID: no functional effect; continuation_token/offset: superseded by -AutoPaginate)' { - It 'contains exactly the three confirmed non-actionable fields, no more, no fewer' { +Describe 'Non-actionable parameter allowlist (X-Request-ID/offset: no Private/ injection site exists for either -- confirmed hand-written; continuation_token is DERIVED now, see Get-PfbNonActionableParameters)' { + It 'contains exactly the two hand-written fields, no more, no fewer -- continuation_token is no longer hardcoded here' { $script:PfbNonActionableParameters | Sort-Object | Should -Be @( - 'continuation_token', 'offset', 'X-Request-ID' ) | Sort-Object @@ -768,3 +767,432 @@ Describe 'Get-PfbBodyPropertyEnrichment (Task 5: composed enum join + type + syn $countIsZero | Should -BeTrue } } + +Describe 'Get-PfbSystemicGaps (Task 6, decision 7: collapse per-endpoint gap lists into one finding per wire name)' { + BeforeAll { + $script:systemicGaps = @( + [PSCustomObject]@{ Endpoint = 'GET /a'; MissingQueryParameters = @('context_names', 'filter'); MissingBodyProperties = @() } + [PSCustomObject]@{ Endpoint = 'GET /b'; MissingQueryParameters = @('context_names'); MissingBodyProperties = @() } + [PSCustomObject]@{ Endpoint = 'POST /c'; MissingQueryParameters = @(); MissingBodyProperties = @('context_names') } + [PSCustomObject]@{ Endpoint = 'DELETE /d'; MissingQueryParameters = @('lonely_field'); MissingBodyProperties = @() } + ) + } + + It 'collapses a name repeated across many endpoints into ONE finding with the right EndpointCount' { + $findings = Get-PfbSystemicGaps -Gaps $systemicGaps + $ctx = $findings | Where-Object { $_.Name -eq 'context_names' } + $ctx | Should -Not -BeNullOrEmpty + $ctx.EndpointCount | Should -Be 3 + $ctx.Endpoints | Should -Be @('GET /a', 'GET /b', 'POST /c') + } + + It 'counts query vs body occurrences separately, informationally, without affecting the deduplicated total' { + $ctx = (Get-PfbSystemicGaps -Gaps $systemicGaps) | Where-Object { $_.Name -eq 'context_names' } + $ctx.QueryEndpointCount | Should -Be 2 + $ctx.BodyEndpointCount | Should -Be 1 + $ctx.EndpointCount | Should -Be 3 + } + + It 'dedupes an endpoint appearing in BOTH lists for the same name to ONE endpoint credit (the placement_names shape)' { + $dualGaps = @([PSCustomObject]@{ Endpoint = 'POST /dual'; MissingQueryParameters = @('dual_name'); MissingBodyProperties = @('dual_name') }) + $finding = (Get-PfbSystemicGaps -Gaps $dualGaps) | Where-Object { $_.Name -eq 'dual_name' } + $finding.EndpointCount | Should -Be 1 + $finding.QueryEndpointCount | Should -Be 1 + $finding.BodyEndpointCount | Should -Be 1 + } + + It 'still emits a finding for a name that appears on only one endpoint' { + $finding = (Get-PfbSystemicGaps -Gaps $systemicGaps) | Where-Object { $_.Name -eq 'lonely_field' } + $finding.EndpointCount | Should -Be 1 + } + + It 'sorts findings by EndpointCount descending, Name ascending as a tiebreak' { + $findings = @(Get-PfbSystemicGaps -Gaps $systemicGaps) + $findings[0].Name | Should -Be 'context_names' + ($findings | Select-Object -Skip 1).EndpointCount | ForEach-Object { $_ | Should -BeLessOrEqual $findings[0].EndpointCount } + } + + It 'returns an empty array for an empty -Gaps input, never $null or an error' { + $findings = @(Get-PfbSystemicGaps -Gaps @()) + $findings.Count | Should -Be 0 + } + + It 'tolerates an enriched MissingBodyProperties record shape ({name=...}) via Get-PfbGapFieldName, not just bare strings' { + $enrichedGaps = @([PSCustomObject]@{ Endpoint = 'PATCH /e'; MissingQueryParameters = @(); MissingBodyProperties = @([PSCustomObject]@{ name = 'enriched_field'; type = 'string' }) }) + $finding = (Get-PfbSystemicGaps -Gaps $enrichedGaps) | Where-Object { $_.Name -eq 'enriched_field' } + $finding | Should -Not -BeNullOrEmpty + $finding.EndpointCount | Should -Be 1 + } +} + +Describe 'Get-PfbConventionStrength (Task 6, decision 8: mechanical batch-fix vs architectural decision)' { + BeforeAll { + $script:strengthInventory = @( + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureA'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'names' } + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureB'; Parameter = 'Name'; Surface = 'Typed'; WireName = 'names' } + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureC'; Parameter = 'Id'; Surface = 'Typed'; WireName = 'ids' } + # A duplicate (Cmdlet, WireName) pair -- e.g. two parameters on the same cmdlet + # both feeding 'names' -- must still count Get-PfbFixtureA only ONCE. + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureA'; Parameter = 'Alias'; Surface = 'Typed'; WireName = 'names' } + # An unresolved surface must never contribute -- only 'Typed' counts. + [PSCustomObject]@{ Cmdlet = 'Get-PfbFixtureD'; Parameter = 'Weird'; Surface = 'AttributesOnly'; WireName = $null } + ) + } + + It 'counts DISTINCT cmdlets exposing a wire name, deduping a cmdlet with two parameters feeding the same name' { + $result = Get-PfbConventionStrength -CmdletInventory $strengthInventory -Names @('names') + $result.CmdletCount | Should -Be 2 + $result.Cmdlets | Should -Be @('Get-PfbFixtureA', 'Get-PfbFixtureB') + } + + It 'reports 0/empty (never omitted) for a name no cmdlet exposes -- the architectural-decision signal' { + $result = Get-PfbConventionStrength -CmdletInventory $strengthInventory -Names @('context_names') + $result.CmdletCount | Should -Be 0 + $result.Cmdlets | Should -Be @() + } + + It 'preserves -Names input order across multiple names, one result per name' { + $results = @(Get-PfbConventionStrength -CmdletInventory $strengthInventory -Names @('ids', 'names', 'context_names')) + $results[0].Name | Should -Be 'ids' + $results[1].Name | Should -Be 'names' + $results[2].Name | Should -Be 'context_names' + } + + It 'ignores an AttributesOnly/unresolved row entirely' { + $result = Get-PfbConventionStrength -CmdletInventory $strengthInventory -Names @('weird') + $result.CmdletCount | Should -Be 0 + } +} + +Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded design decisions, prior conclusions, live-testing hazards)' { + BeforeAll { + $script:annotationsFixturePath = Join-Path $TestDrive 'drift-annotations.fixture.json' + Set-Content -Path $annotationsFixturePath -Value @' +{ + "schemaVersion": 1, + "annotations": [ + { "matchType": "field", "match": "context_names", "kind": "designDecision", "note": "not yet implemented", "reference": "docs/design/fusion-context-injection.md" }, + { "matchType": "field", "match": "allow_errors", "kind": "designDecision", "note": "not yet implemented", "reference": "docs/design/fusion-context-injection.md" }, + { "matchType": "endpoint", "match": "management-access-policies", "kind": "liveTestingHazard", "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", "reference": null } + ] +} +'@ + } + + It 'loads the file and finds a field-keyed annotation by exact wire name' { + $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath + $found = Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'context_names' + $found.Count | Should -Be 1 + $found[0].kind | Should -Be 'designDecision' + $found[0].reference | Should -Be 'docs/design/fusion-context-injection.md' + } + + It 'never asserts whether allow_errors injection is endpoint-gated or unconditional -- purely descriptive note only' { + $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath + $found = Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'allow_errors' + $found[0].note | Should -Be 'not yet implemented' + $found[0].note | Should -Not -Match 'gate|gated|unconditional|every endpoint' + } + + It 'finds an endpoint-keyed annotation via case-insensitive substring match against the endpoint key' { + $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath + $found = Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'POST /management-access-policies' + $found.Count | Should -Be 1 + $found[0].kind | Should -Be 'liveTestingHazard' + $found[0].note | Should -Match '403' + } + + It 'returns an empty array (never $null/error) for a name/endpoint with no annotation' { + $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath + @(Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'no_such_field').Count | Should -Be 0 + } + + It 'returns $null (never throws) when -Path does not exist' { + Get-PfbDriftAnnotations -Path (Join-Path $TestDrive 'does-not-exist.json') | Should -BeNullOrEmpty + } + + It 'Find-PfbDriftAnnotation tolerates a $null -Annotations without throwing' { + @(Find-PfbDriftAnnotation -Annotations $null -FieldName 'context_names').Count | Should -Be 0 + } + + It 'the real checked-in docs/drift-annotations.json loads and carries both required seed entries' { + $realPath = Join-Path $repoRoot 'docs/drift-annotations.json' + Test-Path $realPath | Should -BeTrue + $realAnnotations = Get-PfbDriftAnnotations -Path $realPath + (Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'context_names').Count | Should -Be 1 + (Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'allow_errors').Count | Should -Be 1 + (Find-PfbDriftAnnotation -Annotations $realAnnotations -Endpoint 'DELETE /management-access-policies').Count | Should -Be 1 + } +} + +Describe 'Get-PfbCentralInjectionSites / Get-PfbDerivedNonActionableParameters / Get-PfbNonActionableParameters (Task 6: central-injection detection)' { + BeforeAll { + $script:injectionFixtureDir = Join-Path $TestDrive 'InjectionPrivate' + New-Item -ItemType Directory -Path $injectionFixtureDir -Force | Out-Null + + # Mirrors the REAL Private/Add-PfbCommonQueryParams.ps1 shape exactly: every + # assignment here traces its VALUE back to a parameter of this function, either + # directly (-Names/-Ids) or via the $BoundParameters dictionary the caller + # forwarded (-Filter/-Sort/-Limit), or via a narrowly-shaped ContainsKey(...) guard + # whose value is a literal (-TotalOnly). + Set-Content -Path (Join-Path $injectionFixtureDir 'Add-PfbFixtureCommonQueryParams.ps1') -Value @' +function Add-PfbFixtureCommonQueryParams { + [CmdletBinding()] + param( + [Parameter(Mandatory)][hashtable]$Into, + [Parameter(Mandatory)][System.Collections.IDictionary]$BoundParameters, + [string[]]$Names, + [string[]]$Ids + ) + if ($BoundParameters.ContainsKey('Filter')) { $Into['filter'] = $BoundParameters['Filter'] } + if ($BoundParameters.ContainsKey('TotalOnly')) { $Into['total_only'] = 'true' } + if ($Names) { $Into['names'] = $Names -join ',' } +} +'@ + + # Mirrors the REAL Private/Invoke-PfbApiRequest.ps1 shape exactly: the assigned + # VALUE traces to $response (server data), and the guarding condition is a compound + # -and expression that merely INCLUDES -AutoPaginate as one operand -- it must NOT + # count as "gated on a parameter" for THIS key's value. + Set-Content -Path (Join-Path $injectionFixtureDir 'Invoke-PfbFixtureApiRequest.ps1') -Value @' +function Invoke-PfbFixtureApiRequest { + [CmdletBinding()] + param( + [hashtable]$QueryParams, + [switch]$AutoPaginate + ) + $response = Invoke-RestMethod -Uri 'https://example.invalid' + $limitReached = $false + if ($AutoPaginate -and $response.continuation_token -and -not $limitReached) { + $QueryParams['continuation_token'] = $response.continuation_token + } +} +'@ + + # HTTP-transport plumbing that must be OUT OF SCOPE entirely -- a variable name not + # in the recognized set (queryParams/body/into). + Set-Content -Path (Join-Path $injectionFixtureDir 'Invoke-PfbFixtureLogin.ps1') -Value @' +function Invoke-PfbFixtureLogin { + [CmdletBinding()] + param([string]$Token) + $headers = @{} + $headers['Authorization'] = "Bearer $Token" +} +'@ + + $script:injectionSites = Get-PfbCentralInjectionSites -PrivateDirectory $injectionFixtureDir + } + + It 'classifies filter (via $BoundParameters, a parameter) as parameter-sourced' { + ($injectionSites | Where-Object { $_.Key -eq 'filter' }).Classification | Should -Be 'parameter-sourced' + } + + It 'classifies total_only (literal RHS, but ContainsKey-guarded on a parameter) as parameter-sourced' { + ($injectionSites | Where-Object { $_.Key -eq 'total_only' }).Classification | Should -Be 'parameter-sourced' + } + + It 'classifies names (direct parameter reference in the RHS) as parameter-sourced' { + ($injectionSites | Where-Object { $_.Key -eq 'names' }).Classification | Should -Be 'parameter-sourced' + } + + It 'classifies continuation_token (RHS traces to $response, compound non-parameter guard) as server-or-internal-derived' { + ($injectionSites | Where-Object { $_.Key -eq 'continuation_token' }).Classification | Should -Be 'server-or-internal-derived' + } + + It 'never picks up an out-of-scope hashtable variable name (headers is not body/queryParams/into)' { + $injectionSites | Where-Object { $_.Key -eq 'Authorization' } | Should -BeNullOrEmpty + } + + It 'every site carries the coverage-not-correctness caveat' { + $injectionSites | ForEach-Object { $_.Caveat | Should -Match 'coverage' } + } + + It 'Get-PfbDerivedNonActionableParameters includes continuation_token but excludes filter/total_only/names' { + $derived = Get-PfbDerivedNonActionableParameters -InjectionSites $injectionSites + $derived.Name | Should -Contain 'continuation_token' + $derived.Name | Should -Not -Contain 'filter' + $derived.Name | Should -Not -Contain 'total_only' + $derived.Name | Should -Not -Contain 'names' + } + + It 'marks continuation_token Strength as structural, not the general coverage claim' { + $derived = Get-PfbDerivedNonActionableParameters -InjectionSites $injectionSites + ($derived | Where-Object { $_.Name -eq 'continuation_token' }).Strength | Should -Be 'structural' + } + + It 'Get-PfbNonActionableParameters unions the hardcoded X-Request-ID/offset with the derived continuation_token' { + $merged = Get-PfbNonActionableParameters -PrivateDirectory $injectionFixtureDir + $merged | Should -Be @('continuation_token', 'offset', 'X-Request-ID') | Sort-Object + $merged | Should -Contain 'X-Request-ID' + $merged | Should -Contain 'offset' + $merged | Should -Contain 'continuation_token' + $merged | Should -Not -Contain 'filter' + $merged | Should -Not -Contain 'names' + } + + It 'a key with even ONE parameter-sourced site anywhere is never derived, even if another site for it looked server-derived' { + # Regression guard for the exact mistake this effort already caught and corrected + # once: a bare "any assignment found" rule would have wrongly flagged + # Add-PfbCommonQueryParams' own keys. Two sites for the SAME key, one of each + # classification -- the derived result must still exclude it. + $mixedDir = Join-Path $TestDrive 'MixedPrivate' + New-Item -ItemType Directory -Path $mixedDir -Force | Out-Null + Set-Content -Path (Join-Path $mixedDir 'Test-PfbFixtureMixed.ps1') -Value @' +function Test-PfbFixtureMixed { + [CmdletBinding()] + param([string]$Sort) + $queryParams = @{} + if ($Sort) { $queryParams['sort'] = $Sort } + $response = Invoke-RestMethod -Uri 'https://example.invalid' + $queryParams['sort'] = $response.default_sort +} +'@ + $mixedSites = Get-PfbCentralInjectionSites -PrivateDirectory $mixedDir + ($mixedSites | Where-Object { $_.Key -eq 'sort' }).Classification | Should -Be @('parameter-sourced', 'server-or-internal-derived') + $derived = Get-PfbDerivedNonActionableParameters -InjectionSites $mixedSites + $derived.Name | Should -Not -Contain 'sort' + } + + It 'X-Request-ID and offset have no Private/ injection site in this fixture, matching the real tree (confirmed separately below)' { + $injectionSites | Where-Object { $_.Key -eq 'X-Request-ID' } | Should -BeNullOrEmpty + $injectionSites | Where-Object { $_.Key -eq 'offset' } | Should -BeNullOrEmpty + } +} + +Describe 'Central-injection detection against the REAL Private/ tree (confirms the acceptance-critical claims for real)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + $script:realPrivateDirectory = Join-Path $repoRoot 'Private' + } + + It 'X-Request-ID has no injection site anywhere in the real Private/ tree' { + $sites = Get-PfbCentralInjectionSites -PrivateDirectory $realPrivateDirectory + $sites | Where-Object { $_.Key -eq 'X-Request-ID' } | Should -BeNullOrEmpty + } + + It 'offset has no injection site anywhere in the real Private/ tree' { + $sites = Get-PfbCentralInjectionSites -PrivateDirectory $realPrivateDirectory + $sites | Where-Object { $_.Key -eq 'offset' } | Should -BeNullOrEmpty + } + + It 'filter/sort/limit/total_only/names/ids are all classified parameter-sourced, never a candidate for exclusion' { + $sites = Get-PfbCentralInjectionSites -PrivateDirectory $realPrivateDirectory + foreach ($key in @('filter', 'sort', 'limit', 'total_only', 'names', 'ids')) { + $matching = @($sites | Where-Object { $_.Key -eq $key }) + $matching | Should -Not -BeNullOrEmpty + $matching | ForEach-Object { $_.Classification | Should -Be 'parameter-sourced' } + } + $derived = Get-PfbDerivedNonActionableParameters -InjectionSites $sites + foreach ($key in @('filter', 'sort', 'limit', 'total_only', 'names', 'ids')) { + $derived.Name | Should -Not -Contain $key + } + } + + It 'continuation_token is derived as server-or-internal-derived / structural from the real Invoke-PfbApiRequest.ps1' { + $sites = Get-PfbCentralInjectionSites -PrivateDirectory $realPrivateDirectory + $ctSites = @($sites | Where-Object { $_.Key -eq 'continuation_token' }) + $ctSites | Should -Not -BeNullOrEmpty + $ctSites | ForEach-Object { $_.Classification | Should -Be 'server-or-internal-derived' } + + $derived = Get-PfbDerivedNonActionableParameters -InjectionSites $sites + $ctDerived = $derived | Where-Object { $_.Name -eq 'continuation_token' } + $ctDerived | Should -Not -BeNullOrEmpty + $ctDerived.Strength | Should -Be 'structural' + } + + It 'Get-PfbNonActionableParameters against the real tree contains X-Request-ID/offset/continuation_token and nothing from Add-PfbCommonQueryParams' { + $merged = Get-PfbNonActionableParameters -PrivateDirectory $realPrivateDirectory + $merged | Should -Contain 'X-Request-ID' + $merged | Should -Contain 'offset' + $merged | Should -Contain 'continuation_token' + foreach ($key in @('filter', 'sort', 'limit', 'total_only', 'names', 'ids')) { + $merged | Should -Not -Contain $key + } + } +} + +Describe 'Task 6 real-data acceptance figures (systemic gaps + convention strength, skips gracefully if the real capability map is absent)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + $script:realCapabilityMapPath2 = Join-Path $repoRoot 'Data/PfbCapabilityMap.json' + $script:realPublicDirectory2 = Join-Path $repoRoot 'Public' + $script:realPrivateDirectory2 = Join-Path $repoRoot 'Private' + $script:realSpecsDirectory2 = Join-Path $repoRoot 'tools/specs' + $script:hasRealData = (Test-Path $realCapabilityMapPath2) -and (Test-Path $realSpecsDirectory2) -and (Get-ChildItem $realSpecsDirectory2 -Filter 'fb*.json' -ErrorAction SilentlyContinue) + + if ($hasRealData) { + # Mirrors tools/Build-PfbApiDriftReport.ps1's own construction exactly (same + # -CurrentSpecCapabilities phantom-field filtering, same -ExcludedFields via + # Get-PfbNonActionableParameters) -- Get-PfbSystemicGaps must be fed the SAME + # gaps the real report actually emits, not a looser, unfiltered set, or its + # acceptance figures will not reproduce. + . (Join-Path $repoRoot 'tools/lib/PfbSpecTools.ps1') + + $script:realCapMap2 = Get-Content -Path $realCapabilityMapPath2 -Raw | ConvertFrom-Json -Depth 20 + $script:realInventory2 = Get-PfbCmdletParameterInventory -PublicDirectory $realPublicDirectory2 + $script:realCalledEndpoints2 = Get-PfbModuleCalledEndpoints -PublicDirectory $realPublicDirectory2 -PrivateDirectory $realPrivateDirectory2 + + $newestAnalysedVersion2 = $realCapMap2.generatedFrom | Select-Object -Last 1 + $currentSpecCapabilities2 = @() + if ($newestAnalysedVersion2) { + $newestSpecPath2 = Join-Path $realSpecsDirectory2 "fb$newestAnalysedVersion2.json" + if (Test-Path $newestSpecPath2) { + $newestSpec2 = Get-Content -Path $newestSpecPath2 -Raw | ConvertFrom-Json -Depth 64 + $currentSpecCapabilities2 = @(Get-PfbSpecCapabilities -Spec $newestSpec2) + } + } + + $nonActionable2 = Get-PfbNonActionableParameters -PrivateDirectory $realPrivateDirectory2 + + $script:realGapsAllConfidence2 = Get-PfbParameterCoverageGaps -CapabilityMap $realCapMap2 -CmdletInventory $realInventory2 -CalledEndpoints $realCalledEndpoints2 -ExcludedFields $nonActionable2 -CurrentSpecCapabilities $currentSpecCapabilities2 + # Filtered to 'high'-confidence endpoints only, same precedent as Task 5's own + # MissingBodyProperties enrichment gate (Get-PfbBodyPropertyEnrichment is only + # ever invoked for a 'high'-confidence endpoint) -- a 'partial'-confidence + # endpoint's gap lists can contain false positives (an unresolved parameter may + # already cover the apparent gap through a path this AST-only inventory can't + # see), so surfacing it as a systemic-gaps FINDING would overstate the same + # confidence Get-PfbParameterCoverageGaps's own `confidence.caveat` explicitly + # warns against. Get-PfbSystemicGaps/Get-PfbConventionStrength themselves are + # confidence-agnostic by design (aggregation is a pure grouping over WHATEVER + # gaps they're handed) -- filtering by confidence is the CALLER's decision, made + # explicitly here to reproduce this task's pinned acceptance figures. + $script:realGaps2 = @($realGapsAllConfidence2 | Where-Object { $_.Confidence.Level -eq 'high' }) + $script:realSystemicGaps2 = @(Get-PfbSystemicGaps -Gaps $realGaps2) + } + } + + It 'shows allow_errors at 109 endpoints (systemic-gaps acceptance figure -- exact match)' { + if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + $finding = $realSystemicGaps2 | Where-Object { $_.Name -eq 'allow_errors' } + $finding | Should -Not -BeNullOrEmpty + $finding.EndpointCount | Should -Be 109 + } + + It 'shows context_names at 253 endpoints -- the task brief''s corrected figure says 252; investigated (3 independent methodological variants: with/without phantom-field filtering, with/without -ExcludedFields, all converge on 253) and could not reproduce 252 exactly, so this pins the actual, honestly-measured, reproducible value rather than force-matching a figure one endpoint stale' { + if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + $finding = $realSystemicGaps2 | Where-Object { $_.Name -eq 'context_names' } + $finding | Should -Not -BeNullOrEmpty + $finding.EndpointCount | Should -Be 253 + } + + It 'convention strength: names = 306, ids = 218, context_names = 0 (acceptance figures)' { + if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + $strength = Get-PfbConventionStrength -CmdletInventory $realInventory2 -Names @('names', 'ids', 'context_names') + ($strength | Where-Object { $_.Name -eq 'names' }).CmdletCount | Should -Be 306 + ($strength | Where-Object { $_.Name -eq 'ids' }).CmdletCount | Should -Be 218 + ($strength | Where-Object { $_.Name -eq 'context_names' }).CmdletCount | Should -Be 0 + } + + It 'the top-10 most-common field names absorb roughly 41.7% of total missing-field (endpoint, name) pairs' { + if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + $pairCounts = $realSystemicGaps2 | ForEach-Object { $_.QueryEndpointCount + $_.BodyEndpointCount } + $totalPairs = ($pairCounts | Measure-Object -Sum).Sum + $top10Sum = (($realSystemicGaps2 | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; Pairs = $_.QueryEndpointCount + $_.BodyEndpointCount } }) | + Sort-Object Pairs -Descending | Select-Object -First 10 | Measure-Object -Property Pairs -Sum).Sum + $ratio = $top10Sum / $totalPairs + Write-Host "Task 6 real-data verification: top-10 aggregation ratio = $top10Sum / $totalPairs = $([Math]::Round($ratio * 100, 2))%" + # Not bit-for-bit pinned (Task 4/5 changed some list membership per this task's own + # brief) -- just confirms the aggregation actually matters, close to the + # independently-measured ~41.7%/642 figure. + $ratio | Should -BeGreaterThan 0.30 + $ratio | Should -BeLessThan 0.55 + } +} diff --git a/docs/drift-annotations.json b/docs/drift-annotations.json new file mode 100644 index 0000000..558e731 --- /dev/null +++ b/docs/drift-annotations.json @@ -0,0 +1,27 @@ +{ + "schema": "One entry per annotation. matchType 'field' matches 'match' exactly against a wire field name (as it appears in MissingQueryParameters/MissingBodyProperties); matchType 'endpoint' matches 'match' as a case-insensitive SUBSTRING of an endpoint key (' /', e.g. 'GET /management-access-policies'). kind is one of: designDecision (a recorded, already-made design decision -- e.g. a field intentionally not yet wired up), priorConclusion (a conclusion an earlier investigation already reached, so it isn't re-litigated), liveTestingHazard (a note that live-array testing behaves in a way that is NOT an implementation bug -- e.g. a permissions/authorization quirk). note is a short, deliberately non-authoritative human-readable string -- it must never assert or imply a behavioral decision that has not actually been made elsewhere. reference is a repo-relative path to further detail, or null. See tools/lib/PfbApiDriftTools.ps1's Get-PfbDriftAnnotations/Find-PfbDriftAnnotation for the loader/lookup functions that read this file; consumers should use those rather than parsing this JSON directly. Add more entries by appending to 'annotations' -- no code change is needed for a new entry using an existing kind/matchType.", + "schemaVersion": 1, + "annotations": [ + { + "matchType": "field", + "match": "context_names", + "kind": "designDecision", + "note": "not yet implemented", + "reference": "docs/design/fusion-context-injection.md" + }, + { + "matchType": "field", + "match": "allow_errors", + "kind": "designDecision", + "note": "not yet implemented", + "reference": "docs/design/fusion-context-injection.md" + }, + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } + ] +} diff --git a/tools/Build-PfbApiDriftReport.ps1 b/tools/Build-PfbApiDriftReport.ps1 index fc89135..9f49b6d 100644 --- a/tools/Build-PfbApiDriftReport.ps1 +++ b/tools/Build-PfbApiDriftReport.ps1 @@ -300,7 +300,14 @@ $uncoveredEndpoints = @(Get-PfbEndpointCoverageGaps -CapabilityMap $capabilityMa # but degrading to the pre-enrichment bare-string shape is safer than throwing. $canEnrichBodyProperties = [bool]$newestSpec -$parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $script:PfbNonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities | +# Task 6: $script:PfbNonActionableParameters no longer carries continuation_token by hand +# -- Get-PfbNonActionableParameters derives it (plus the still-hardcoded X-Request-ID/ +# offset, neither of which has any Private/ injection site) from a live AST scan of +# -PrivateDirectory, so a future change to how Invoke-PfbApiRequest.ps1 injects +# continuation_token is reflected here automatically instead of silently going stale. +$nonActionableParameters = Get-PfbNonActionableParameters -PrivateDirectory $PrivateDirectory + +$parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $nonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities | ForEach-Object { $gapRaw = $_ $endpointParts = $gapRaw.Endpoint -split ' ', 2 diff --git a/tools/lib/PfbApiDriftTools.ps1 b/tools/lib/PfbApiDriftTools.ps1 index 87146c8..c674f04 100644 --- a/tools/lib/PfbApiDriftTools.ps1 +++ b/tools/lib/PfbApiDriftTools.ps1 @@ -35,22 +35,38 @@ $script:PfbBespokeAuthEndpoints = @( # - X-Request-ID: no functional effect on the request -- request/response-log # correlation only ("Supplied by client during request or generated by server," per # the spec), present on 629/632 capability-map endpoints as of 2.27 with zero cmdlets -# exposing it anywhere (confirmed via grep of Public/+Private/). -# - continuation_token: superseded by Invoke-PfbApiRequest's own -AutoPaginate, which -# already reads response.continuation_token and re-queries automatically -# (Private/Invoke-PfbApiRequest.ps1) -- a typed parameter would let a caller interfere -# with pagination state the wrapper already owns end-to-end. +# exposing it anywhere (confirmed via grep of Public/+Private/). No Private/ injection +# site exists for it either -- confirmed by Get-PfbCentralInjectionSites finding zero +# assignment sites for this key -- so it stays a hand-written entry: there is nothing +# to derive an absence FROM. # - offset: an alternate, unused positioning mechanism into the same paginated # collections -AutoPaginate already retrieves in full; co-occurs with # continuation_token on 208/212 of its capability-map endpoints, and zero cmdlets -# expose it. +# expose it. Same as X-Request-ID: no Private/ injection site exists, so this stays +# hand-written too. +# +# continuation_token is DELIBERATELY NOT here any more (Task 6) -- it used to be, with a +# hand-written justification identical in spirit to the two above ("superseded by +# Invoke-PfbApiRequest's own -AutoPaginate"). That hand-written comment could go silently +# stale the moment Invoke-PfbApiRequest.ps1 changed shape -- e.g. if a future edit sourced +# it from a parameter instead of `$response`, or stopped injecting it at all -- with +# nothing to notice. It is now DERIVED instead, by Get-PfbNonActionableParameters (below), +# from Get-PfbCentralInjectionSites' live AST scan of Private/Invoke-PfbApiRequest.ps1's +# actual `$QueryParams['continuation_token'] = $response.continuation_token` assignment +# (currently line 227): its right-hand side traces to `$response` -- server-issued data +# from the just-completed Invoke-RestMethod call, never a cmdlet/caller parameter, so no +# caller could meaningfully supply this value even if a typed parameter existed for it. +# This is a STRONGER claim than the general injection-detection mechanism's usual +# "coverage, not correctness" caveat (see Get-PfbCentralInjectionSites/ +# Get-PfbDerivedNonActionableParameters's own docs): continuation_token is structurally +# unable to ever become a cmdlet parameter, not merely "not currently seen as a gap". $script:PfbNonActionableParameters = @( 'X-Request-ID', - 'continuation_token', 'offset' ) . (Join-Path $PSScriptRoot 'PfbValueEnumTools.ps1') +. (Join-Path $PSScriptRoot 'PfbCmdletParamTools.ps1') function Test-PfbApiVersionNewerThan { <# @@ -837,3 +853,564 @@ function Get-PfbBodyPropertyEnrichment { EnumStatus = $resolution.Status } } + +# --- Task 6: systemic-gaps aggregation, convention strength, annotations, injection detection -- + +function Get-PfbGapFieldName { + <# + .SYNOPSIS + Internal helper: the wire name a MissingQueryParameters/MissingBodyProperties list + ENTRY represents, whether that entry is a bare string (Get-PfbParameterCoverageGaps' + own, always-bare-string shape) or an enriched record + (Build-PfbApiDriftReport.ps1's `{ name, type, format, ... }` shape, applied ONLY to + high-confidence MissingBodyProperties -- see Get-PfbBodyPropertyEnrichment). Kept + tolerant of both shapes so Get-PfbSystemicGaps works whether it's handed + Get-PfbParameterCoverageGaps' raw output (this task's own real-data verification) or + a later, already-enriched report structure (Task 7's job, not this task's). + .OUTPUTS + string, or $null if -Entry is neither shape. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowNull()] + $Entry + ) + + if ($null -eq $Entry) { return $null } + if ($Entry -is [string]) { return $Entry } + if ($Entry.PSObject.Properties.Name -contains 'name') { return $Entry.name } + return $null +} + +function Get-PfbSystemicGaps { + <# + .SYNOPSIS + Decision 7: collapses Get-PfbParameterCoverageGaps's per-endpoint + MissingQueryParameters/MissingBodyProperties lists into ONE finding PER DISTINCT + WIRE NAME, across every endpoint AND both lists together -- e.g. `context_names` + showing up as a missing query parameter on 252 different endpoints becomes a + SINGLE finding with an EndpointCount of 252, not 252 separate per-endpoint rows. + This is what turns hundreds of individual gap rows into a handful of real, + actionable decisions. + .DESCRIPTION + An endpoint whose SAME field name happens to appear in both its own + MissingQueryParameters and MissingBodyProperties (measured against the real + capability map: exactly 1 real case, POST /workloads/placement-recommendations| + placement_names -- see Get-PfbParameterCoverageGaps's own .OUTPUTS help) still + contributes that endpoint only ONCE to the name's EndpointCount: endpoints are + deduplicated per name via a HashSet, never concatenated across the two lists. + Entries are read through Get-PfbGapFieldName so this tolerates either + Get-PfbParameterCoverageGaps's own bare-string lists or an already-enriched + MissingBodyProperties record shape. + .OUTPUTS + [PSCustomObject]@{ Name; EndpointCount; Endpoints; QueryEndpointCount; + BodyEndpointCount }[], sorted by EndpointCount descending, then Name ascending. + Endpoints is the sorted, deduplicated list of " /" endpoint keys. + QueryEndpointCount/BodyEndpointCount are the (possibly-overlapping) counts of + endpoints where the name showed up specifically in MissingQueryParameters / + MissingBodyProperties -- informational only; EndpointCount is always the + deduplicated total, never their sum. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [object[]]$Gaps + ) + + # Typed Dictionary[string, T], not a plain Hashtable, for every one of these three maps + # -- a wire field literally named 'keys'/'count'/'values' would shadow .Keys/.Count/ + # .Values member access on a Hashtable-backed IDictionary (the same hazard + # Get-PfbParameterCoverageGaps's own $queryFieldVersions/$bodyFieldVersions already + # avoid, see its comment above them). + $endpointsByName = [System.Collections.Generic.Dictionary[string, object]]::new() + $queryCountByName = [System.Collections.Generic.Dictionary[string, int]]::new() + $bodyCountByName = [System.Collections.Generic.Dictionary[string, int]]::new() + + foreach ($gap in $Gaps) { + foreach ($rawEntry in @($gap.MissingQueryParameters)) { + $name = Get-PfbGapFieldName -Entry $rawEntry + if (-not $name) { continue } + if (-not $endpointsByName.ContainsKey($name)) { $endpointsByName[$name] = [System.Collections.Generic.HashSet[string]]::new() } + [void]$endpointsByName[$name].Add($gap.Endpoint) + if (-not $queryCountByName.ContainsKey($name)) { $queryCountByName[$name] = 0 } + $queryCountByName[$name] = $queryCountByName[$name] + 1 + } + foreach ($rawEntry in @($gap.MissingBodyProperties)) { + $name = Get-PfbGapFieldName -Entry $rawEntry + if (-not $name) { continue } + if (-not $endpointsByName.ContainsKey($name)) { $endpointsByName[$name] = [System.Collections.Generic.HashSet[string]]::new() } + [void]$endpointsByName[$name].Add($gap.Endpoint) + if (-not $bodyCountByName.ContainsKey($name)) { $bodyCountByName[$name] = 0 } + $bodyCountByName[$name] = $bodyCountByName[$name] + 1 + } + } + + $findings = [System.Collections.Generic.List[object]]::new() + foreach ($name in $endpointsByName.get_Keys()) { + $endpoints = @($endpointsByName[$name] | Sort-Object) + $findings.Add([PSCustomObject]@{ + Name = $name + EndpointCount = $endpoints.Count + Endpoints = $endpoints + QueryEndpointCount = if ($queryCountByName.ContainsKey($name)) { $queryCountByName[$name] } else { 0 } + BodyEndpointCount = if ($bodyCountByName.ContainsKey($name)) { $bodyCountByName[$name] } else { 0 } + }) + } + + return @($findings | Sort-Object -Property @{ Expression = 'EndpointCount'; Descending = $true }, Name) +} + +function Get-PfbWireNameCmdletCounts { + <# + .SYNOPSIS + Wire name -> the distinct set of cmdlets across the WHOLE module that already + expose it as a resolved ('Typed') parameter -- the raw data + Get-PfbConventionStrength ranks names against. Built directly from + Get-PfbCmdletParameterInventory's own output (tools/lib/PfbCmdletParamTools.ps1); + this function does not re-derive wire-name resolution itself, per this task's + brief ("read that file to find the right existing data source rather than + re-deriving wire-name resolution from scratch"). + .OUTPUTS + System.Collections.Generic.Dictionary[string, System.Collections.Generic.HashSet[string]] + -- typed Dictionary, not a plain Hashtable, for the same keys-shadowing reason as + every other new map in this section (a wire name literally named 'keys' is real: + see Get-PfbParameterCoverageGaps's own comment for the confirmed example). + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [object[]]$CmdletInventory + ) + + $map = [System.Collections.Generic.Dictionary[string, object]]::new() + foreach ($row in $CmdletInventory) { + if ($row.Surface -ne 'Typed' -or -not $row.WireName) { continue } + if (-not $map.ContainsKey($row.WireName)) { $map[$row.WireName] = [System.Collections.Generic.HashSet[string]]::new() } + [void]$map[$row.WireName].Add($row.Cmdlet) + } + return $map +} + +function Get-PfbConventionStrength { + <# + .SYNOPSIS + Decision 8: for each of -Names (typically the field names Get-PfbSystemicGaps just + surfaced), how many DISTINCT cmdlets across the whole module already expose that + exact wire name as a resolved ('Typed') parameter somewhere -- a proxy for "how + mechanical would it be to close the REMAINING gaps for this name". A name already + used by hundreds of cmdlets (e.g. `names`) is a trivial batch fix on whatever + stragglers are left; a name used by ZERO cmdlets (e.g. `context_names`) has no + established convention to extend at all -- closing it is an architectural + decision, not a mechanical batch job. + .OUTPUTS + [PSCustomObject]@{ Name; CmdletCount; Cmdlets }[], one entry per -Names input IN + THE SAME ORDER (never re-sorted here -- a caller ranks by CmdletCount itself). + CmdletCount is 0 and Cmdlets is an empty array (never omitted, never $null) for a + name no cmdlet exposes at all -- that zero IS the finding for names like + `context_names`. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [object[]]$CmdletInventory, + + [Parameter(Mandatory)] + [string[]]$Names + ) + + $countsByName = Get-PfbWireNameCmdletCounts -CmdletInventory $CmdletInventory + + foreach ($name in $Names) { + $cmdlets = if ($countsByName.ContainsKey($name)) { @($countsByName[$name] | Sort-Object) } else { @() } + [PSCustomObject]@{ + Name = $name + CmdletCount = $cmdlets.Count + Cmdlets = $cmdlets + } + } +} + +function Get-PfbDriftAnnotations { + <# + .SYNOPSIS + Loads docs/drift-annotations.json -- ONE annotation channel serving three purposes + at once: a recorded design decision (`context_names`/`allow_errors`, both pointing + at docs/design/fusion-context-injection.md -- a forward reference to a NOT-YET- + WRITTEN design doc from a separate, related Fusion effort; this function does not + create that file, only references its path), a prior investigation conclusion, and + a live-testing hazard note (`management-access-policies`' + POST/PATCH/DELETE-return-403 finding). Deliberately checked in under docs/ + (tracked by git) and NOT under Data/ -- Data/ is strictly runtime-loaded by + Private/, and nothing under Private/ may ever wire this file's content into the + module at runtime; this is a tools/reporting-only concern. + .DESCRIPTION + Schema (see docs/drift-annotations.json's own top-level "schema" field for the same + description kept next to the data): + { + "schemaVersion": 1, + "annotations": [ + { + "matchType": "field" | "endpoint", + "match": string, + -- exact wire-field name for matchType 'field' (e.g. "context_names"); + an endpoint-key SUBSTRING for matchType 'endpoint', matched + case-insensitively against the " /" key format (e.g. + "management-access-policies" matches every method on that resource). + "kind": "designDecision" | "priorConclusion" | "liveTestingHazard", + "note": string, + -- human-readable, deliberately never a machine-verified assertion. + E.g. allow_errors' note says only "not yet implemented" -- NOT + whether its injection would be gated on the endpoint declaring the + parameter or sent unconditionally to every endpoint. That specific + behavioral question is explicitly deferred to a separate PR (#22) + and is not yet decided; this file must never assert either answer. + "reference": string | null + -- a doc path (repo-relative), or null when there's nowhere to point. + }, ... + ] + } + Easy to extend: append another object to "annotations" -- no code change needed for + a new entry with an existing "kind"/"matchType" value. + .OUTPUTS + The parsed PSCustomObject (schemaVersion/annotations), or $null if -Path doesn't + exist. Never throws for a missing file -- an absent annotations file means "no + annotations available (yet)", not a hard error, so a consumer keeps working even + before this file existed / if it's ever deleted. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [string]$Path + ) + + if (-not (Test-Path $Path)) { return $null } + return Get-Content -Path $Path -Raw | ConvertFrom-Json -Depth 10 +} + +function Find-PfbDriftAnnotation { + <# + .SYNOPSIS + Looks up every annotation in -Annotations (Get-PfbDriftAnnotations's output) that + matches -FieldName (matchType 'field', exact match) and/or -Endpoint (matchType + 'endpoint', case-insensitive substring match against the endpoint key). + .OUTPUTS + [PSCustomObject][] -- zero or more matching annotation records, never $null (an + empty array when -Annotations is $null, has no "annotations" list, or nothing + matches). + #> + [CmdletBinding()] + param( + [AllowNull()] + $Annotations, + + [string]$FieldName, + + [string]$Endpoint + ) + + if (-not $Annotations -or -not $Annotations.annotations) { return @() } + + return @($Annotations.annotations | Where-Object { + ($_.matchType -eq 'field' -and $FieldName -and $_.match -eq $FieldName) -or + ($_.matchType -eq 'endpoint' -and $Endpoint -and $Endpoint -like "*$($_.match)*") + }) +} + +function Test-PfbExpressionReferencesParameter { + <# + .SYNOPSIS + Internal helper for Get-PfbCentralInjectionSites: true if -ExpressionAst references, + ANYWHERE within its subtree, a variable whose name is in -ParameterNames (the + enclosing function's own declared parameter names) -- e.g. `$BoundParameters['Filter']` + references `$BoundParameters`, or `$Names -join ','` references `$Names`. + .OUTPUTS + [bool] + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [System.Management.Automation.Language.Ast]$ExpressionAst, + + [Parameter(Mandatory)] + [System.Collections.Generic.HashSet[string]]$ParameterNames + ) + + if ($ParameterNames.Count -eq 0) { return $false } + + $varRefs = $ExpressionAst.FindAll({ param($n) $n -is [System.Management.Automation.Language.VariableExpressionAst] }, $true) + foreach ($v in $varRefs) { + if ($ParameterNames.Contains($v.VariablePath.UserPath)) { return $true } + } + return $false +} + +function Test-PfbGuardedByParameterCondition { + <# + .SYNOPSIS + Internal helper for Get-PfbCentralInjectionSites: true if -Assignment sits inside an + enclosing `if` clause whose test expression, taken AS A WHOLE, is EXACTLY a bare + parameter reference (`if ($Names)`) or a `.ContainsKey(...)` call on a parameter + (`if ($BoundParameters.ContainsKey('TotalOnly'))`) -- the two guard shapes + Private/Add-PfbCommonQueryParams.ps1 actually uses. + .DESCRIPTION + Deliberately narrow, not "the condition mentions a parameter anywhere": a condition + that merely INCLUDES a parameter as one operand of a larger boolean expression -- + e.g. Private/Invoke-PfbApiRequest.ps1's `$AutoPaginate -and $response.continuation_token + -and -not $limitReached` -- does NOT match here, because $AutoPaginate there gates + WHETHER pagination happens at all, not WHERE the assigned key's VALUE comes from. + Only a condition that reduces, whole, to one of the two exact shapes above counts, + matching the real Add-PfbCommonQueryParams idiom this rule exists to recognize. + .OUTPUTS + [bool] + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [System.Management.Automation.Language.Ast]$Assignment, + + [Parameter(Mandatory)] + [System.Collections.Generic.HashSet[string]]$ParameterNames + ) + + if ($ParameterNames.Count -eq 0) { return $false } + + $node = $Assignment.Parent + while ($node) { + if ($node -is [System.Management.Automation.Language.IfStatementAst]) { + foreach ($clause in $node.Clauses) { + $withinBody = @($clause.Item2.FindAll({ param($n) $n -eq $Assignment }, $true)) + if ($withinBody.Count -eq 0) { continue } + + # Unwrap the PipelineAst/CommandExpressionAst layers the parser puts around + # a bare `if (...)` test expression -- same wrapping phenomenon + # Resolve-PfbSingleExpression (tools/lib/PfbCmdletParamTools.ps1) already + # peels for an assignment's right-hand side, reused here rather than + # re-deriving the same unwrap loop. + $condExpr = Resolve-PfbSingleExpression -Ast $clause.Item1 + + $bareVar = $condExpr -as [System.Management.Automation.Language.VariableExpressionAst] + if ($bareVar -and $ParameterNames.Contains($bareVar.VariablePath.UserPath)) { return $true } + + $memberCall = $condExpr -as [System.Management.Automation.Language.InvokeMemberExpressionAst] + if ($memberCall -and $memberCall.Member -is [System.Management.Automation.Language.StringConstantExpressionAst] -and + $memberCall.Member.Value -eq 'ContainsKey') { + $callTarget = $memberCall.Expression -as [System.Management.Automation.Language.VariableExpressionAst] + if ($callTarget -and $ParameterNames.Contains($callTarget.VariablePath.UserPath)) { return $true } + } + } + } + $node = $node.Parent + } + return $false +} + +function Get-PfbCentralInjectionSites { + <# + .SYNOPSIS + Scans every function in -PrivateDirectory for the same wire-key assignment AST + shape Get-PfbWireNameForParameter (tools/lib/PfbCmdletParamTools.ps1) already + recognizes for Public/ cmdlets -- `$Var['key'] = `, an IndexExpressionAst on + the assignment's left side -- restricted to the three variable names this module + actually uses, Private-side, for a request's wire-level payload hashtable: + 'queryParams' (Invoke-PfbApiRequest's own -QueryParams parameter), 'body' (its + -Body parameter), and 'into' (Add-PfbCommonQueryParams's -Into parameter, the + query-params hashtable a Public/ caller passes in by reference). + .DESCRIPTION + Deliberately narrower than "every IndexExpressionAst assignment anywhere in + Private/": this directory also splats plenty of OTHER hashtables that are + HTTP-transport/SSH plumbing, never spec-documented API fields -- $headers, + $restParams, $sshParams, $loginParams, $jwtParams, $oauthParams (confirmed by + direct inspection: Private/Invoke-PfbApiRequest.ps1, Private/Get-PfbApiTokenViaSsh.ps1, + Private/Invoke-PfbApiTokenLogin.ps1, Private/Invoke-PfbOAuth2Login.ps1). Including + those would pollute the candidate list with junk like 'Authorization' or + 'AcceptKey' that could never be a capability-map field name in the first place. + + For each matching assignment, classifies whether the assigned VALUE traces back to + a parameter of the ENCLOSING function: + - directly, via Test-PfbExpressionReferencesParameter on the right-hand side + (e.g. `$Into['filter'] = $BoundParameters['Filter']` references $BoundParameters, + a parameter of Add-PfbCommonQueryParams; `$Into['names'] = $Names -join ','` + references $Names directly); or + - via Test-PfbGuardedByParameterCondition, for the one real case where the + right-hand side is a bare literal but the key's PRESENCE is still gated on a + parameter (`if ($BoundParameters.ContainsKey('TotalOnly')) { $Into['total_only'] = 'true' }`). + Anything neither reaches is classified 'server-or-internal-derived' -- e.g. + Private/Invoke-PfbApiRequest.ps1's own + `$QueryParams['continuation_token'] = $response.continuation_token`: its RHS + references `$response` (not a declared parameter of Invoke-PfbApiRequest), and its + guard condition (`$AutoPaginate -and $response.continuation_token -and -not + $limitReached`) is a compound `-and` expression, not one of + Test-PfbGuardedByParameterCondition's two narrow whole-condition shapes, so it does + not get credited to $AutoPaginate merely because that parameter happens to appear + in it. + + This is intentionally narrow, not general symbolic data-flow analysis. See this + function's own Caveat output field (always populated) for the resulting COVERAGE + (never correctness) claim: this AST scan cannot verify injection ORDERING relative + to Assert-PfbApiCapability (the module's actual parameter-support gate) -- an + assignment could in principle run before or after that gate in a way this scan + does not model. + .OUTPUTS + [PSCustomObject]@{ Key; File; Function; Line; TargetVariable; ParameterTraced; + Classification; Caveat }[] -- Classification is 'parameter-sourced' (traces to a + cmdlet/caller parameter; must NEVER become a candidate for + $script:PfbNonActionableParameters) or 'server-or-internal-derived' (a candidate -- + see Get-PfbDerivedNonActionableParameters for how candidates are reduced to a final + per-key verdict). + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [string]$PrivateDirectory + ) + + $targetVarNames = @('queryparams', 'body', 'into') + $coverageCaveat = 'coverage claim only -- this AST scan cannot verify injection ordering relative to Assert-PfbApiCapability' + + $results = [System.Collections.Generic.List[object]]::new() + $files = Get-ChildItem -Path $PrivateDirectory -Filter '*.ps1' -Recurse -File + + foreach ($file in $files) { + $tokens = $null; $parseErrors = $null + $ast = [System.Management.Automation.Language.Parser]::ParseFile($file.FullName, [ref]$tokens, [ref]$parseErrors) + $functionAsts = $ast.FindAll({ param($n) $n -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) + + foreach ($funcAst in $functionAsts) { + $paramBlock = $funcAst.Body.ParamBlock + $paramNames = [System.Collections.Generic.HashSet[string]]::new([string[]]@(), [System.StringComparer]::OrdinalIgnoreCase) + if ($paramBlock) { + foreach ($p in $paramBlock.Parameters) { [void]$paramNames.Add($p.Name.VariablePath.UserPath) } + } + + $assignments = $funcAst.FindAll({ + param($n) + $n -is [System.Management.Automation.Language.AssignmentStatementAst] -and + $n.Left -is [System.Management.Automation.Language.IndexExpressionAst] + }, $true) + + foreach ($assign in $assignments) { + $indexExpr = $assign.Left + $targetVar = $indexExpr.Target -as [System.Management.Automation.Language.VariableExpressionAst] + if (-not $targetVar) { continue } + if ($targetVarNames -notcontains $targetVar.VariablePath.UserPath.ToLowerInvariant()) { continue } + + $keyExpr = $indexExpr.Index -as [System.Management.Automation.Language.StringConstantExpressionAst] + if (-not $keyExpr) { continue } + + $rhsTraced = Test-PfbExpressionReferencesParameter -ExpressionAst $assign.Right -ParameterNames $paramNames + $conditionTraced = Test-PfbGuardedByParameterCondition -Assignment $assign -ParameterNames $paramNames + $traced = $rhsTraced -or $conditionTraced + $classification = if ($traced) { 'parameter-sourced' } else { 'server-or-internal-derived' } + + $results.Add([PSCustomObject]@{ + Key = $keyExpr.Value + File = $file.FullName + Function = $funcAst.Name + Line = $assign.Extent.StartLineNumber + TargetVariable = $targetVar.VariablePath.UserPath + ParameterTraced = $traced + Classification = $classification + Caveat = $coverageCaveat + }) + } + } + } + + return $results.ToArray() +} + +function Get-PfbDerivedNonActionableParameters { + <# + .SYNOPSIS + Reduces Get-PfbCentralInjectionSites's per-assignment-site output to one verdict + per distinct wire key: a key becomes a DERIVED non-actionable-parameter candidate + only when EVERY assignment site found for that key classified + 'server-or-internal-derived' -- if even ONE site for the same key traces to a + parameter (as filter/sort/limit/total_only/names/ids all do, via + Private/Add-PfbCommonQueryParams.ps1), the key is excluded from this result, never + silently added. Excluding those six would be actively harmful, not just imprecise: + it would silently delete real, still-open gaps on every endpoint/cmdlet that + doesn't yet expose that parameter (measured against the real capability map: 160 + genuine residual gaps across the six names combined -- 13+35+14+17+35+46). + .OUTPUTS + [PSCustomObject]@{ Name; Sites; Caveat; Strength }[], sorted by Name. + Strength is 'structural' for `continuation_token` specifically (its RHS is + provably server-response state, `$response.continuation_token` in + Private/Invoke-PfbApiRequest.ps1 -- can never be sourced from a cmdlet parameter + even in principle, not merely "not currently seen as a gap") and 'coverage' for + every other derived key (the general case -- this scan can only claim no OTHER + Private/ assignment for that key traced to a parameter; it is a coverage claim, + never a correctness one, per Get-PfbCentralInjectionSites's own Caveat). + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [AllowEmptyCollection()] + [object[]]$InjectionSites + ) + + $byKey = $InjectionSites | Group-Object -Property Key + + $results = [System.Collections.Generic.List[object]]::new() + foreach ($group in $byKey) { + $sites = @($group.Group) + $anyParameterSourced = [bool]($sites | Where-Object { $_.Classification -eq 'parameter-sourced' }) + if ($anyParameterSourced) { continue } + + $strength = if ($group.Name -eq 'continuation_token') { 'structural' } else { 'coverage' } + + $results.Add([PSCustomObject]@{ + Name = $group.Name + Sites = $sites + Caveat = $sites[0].Caveat + Strength = $strength + }) + } + + return @($results | Sort-Object Name) +} + +function Get-PfbNonActionableParameters { + <# + .SYNOPSIS + The full, up-to-date replacement for reading $script:PfbNonActionableParameters + directly: the two structurally-confirmed-absent hardcoded entries (X-Request-ID, + offset -- see the comment above $script:PfbNonActionableParameters for why no + injection site exists for either) UNIONED with whatever + Get-PfbCentralInjectionSites/Get-PfbDerivedNonActionableParameters currently derive + from the real -PrivateDirectory tree -- today, exactly 'continuation_token'. + .DESCRIPTION + Callers (e.g. tools/Build-PfbApiDriftReport.ps1's -ExcludedFields) should call this + function instead of reading $script:PfbNonActionableParameters directly, so a + future change to Private/Invoke-PfbApiRequest.ps1's injection shape -- e.g. if it + stopped injecting continuation_token, or started sourcing it from a parameter + instead of $response -- is reflected automatically the next time this runs, rather + than silently going stale the way the old hand-written comment could. + .OUTPUTS + string[], sorted, deduplicated. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [string]$PrivateDirectory + ) + + # @(...) wraps BOTH calls, not just the final consumption -- the same "assigning a + # function's output straight to a variable silently collapses a ZERO-element result to + # $null, not a real empty array/collection" hazard already documented repeatedly + # elsewhere in this file (e.g. Get-PfbParameterCoverageGaps's $readOnlyList comment). + # -InjectionSites/-InjectionSites below both carry [AllowEmptyCollection()], which + # accepts a real empty array but still rejects an outright $null -- confirmed live: a + # -PrivateDirectory tree with zero matching assignment sites made + # Get-PfbCentralInjectionSites's `return $results.ToArray()` collapse to $null on + # assignment here, throwing a ParameterBindingValidationException one call downstream. + $sites = @(Get-PfbCentralInjectionSites -PrivateDirectory $PrivateDirectory) + $derived = @(Get-PfbDerivedNonActionableParameters -InjectionSites $sites) + $derivedNames = @($derived | ForEach-Object { $_.Name }) + + return @($script:PfbNonActionableParameters + $derivedNames | Select-Object -Unique | Sort-Object) +} From 7ab09bac8c17c798a4b197ef4e0070eeb23f9b0a Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 00:41:37 -0700 Subject: [PATCH 12/17] feat(tools): wire systemic gaps, convention strength, annotations, and generatedFrom split into the drift report (Task 7) Wires Task 4/5/6's building blocks into the actual report output: Get-PfbSystemicGaps and Get-PfbConventionStrength are now aggregated (high-confidence gaps only) and emitted as new top-level JSON keys (systemicGaps/conventionStrength), each systemic finding and parameter-gap row carries matching docs/drift-annotations.json entries, and a new phantomFieldCount surfaces how many (endpoint, field) pairs are silently excluded by phantom-field filtering. generatedFrom is split into analysedVersions (from the capability map) and availableSpecVersions (from tools/specs/ on disk), with a versionDivergenceWarning when they disagree -- verified live: 28 vs 29 versions today. The Markdown report is restructured in the required section order (How to read this report -> Summary -> Systemic gaps -> Parameter gaps -> Read-only fields -> Uncovered endpoints -> ValidateSet drift -> New ValidateSet candidates), reproduces the decision-6 false-positive procedure verbatim, and gives partial-confidence rows a visible marker plus a Partial-confidence detail appendix with file:line for each unresolved parameter. Also fixes update-api-capability-map.yml's driftSummary, which mislabeled an endpoint count as "parameter gaps"; it now reports the endpoint count under an accurate label alongside honest field-level counts and the new systemicGaps count. Co-Authored-By: Claude Sonnet 5 --- .../workflows/update-api-capability-map.yml | 11 +- Tests/Build-PfbApiDriftReport.Tests.ps1 | 253 +++++++++++++++++- tools/Build-PfbApiDriftReport.ps1 | 230 +++++++++++++++- 3 files changed, 466 insertions(+), 28 deletions(-) diff --git a/.github/workflows/update-api-capability-map.yml b/.github/workflows/update-api-capability-map.yml index 81398fd..e2de28b 100644 --- a/.github/workflows/update-api-capability-map.yml +++ b/.github/workflows/update-api-capability-map.yml @@ -123,8 +123,17 @@ jobs: $newlyAdded = $newManifest.generatedFrom | Where-Object { $oldVersions -notcontains $_ } "new_versions=$($newlyAdded -join ', ')" | Out-File -FilePath $env:GITHUB_OUTPUT -Append + # $drift.parameterGaps.Count counts ENDPOINTS that have at least one gap, not + # individual fields -- it was mislabeled "parameter gaps" here, which read as a + # field-level count. Query/body/read-only are separate categories on the report + # (see tools/Build-PfbApiDriftReport.ps1), so the field-level total is the sum of + # each category's own field count, computed honestly from the report rather than + # re-using the endpoint count under a field-shaped label. $drift = Get-Content 'Reports/PfbApiDriftReport.json' -Raw | ConvertFrom-Json -Depth 20 - $driftSummary = "$($drift.uncoveredEndpoints.Count) uncovered endpoints, $($drift.parameterGaps.Count) parameter gaps, $($drift.validateSetDrift.Count) ValidateSet drift findings, $($drift.newValidateSetCandidates.Count) new ValidateSet candidates" + $queryFieldCount = (@($drift.parameterGaps.missingQueryParameters) | Measure-Object).Count + $bodyFieldCount = (@($drift.parameterGaps.missingBodyProperties) | Measure-Object).Count + $readOnlyFieldCount = (@($drift.parameterGaps.readOnlyFields) | Measure-Object).Count + $driftSummary = "$($drift.uncoveredEndpoints.Count) uncovered endpoints, $($drift.parameterGaps.Count) endpoints with parameter gaps ($queryFieldCount missing query fields, $bodyFieldCount missing body fields, $readOnlyFieldCount read-only fields), $($drift.systemicGaps.Count) systemic gaps, $($drift.validateSetDrift.Count) ValidateSet drift findings, $($drift.newValidateSetCandidates.Count) new ValidateSet candidates" "drift_summary=$driftSummary" | Out-File -FilePath $env:GITHUB_OUTPUT -Append - name: Open pull request diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index 4631641..8f49bdd 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -349,21 +349,248 @@ Describe 'Build-PfbApiDriftReport -SinceVersion filter' -Skip:($PSVersionTable.P } Describe 'Build-PfbApiDriftReport (real generated artifacts, skips gracefully if absent)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { - It 'produces a manifest against the real Public/Private tree and Reports/ + Data/ inputs' { - $realCapabilityMapPath = Join-Path $repoRoot 'Data/PfbCapabilityMap.json' - $realFieldCmdletMapPath = Join-Path $repoRoot 'Reports/PfbFieldCmdletMap.json' - $realSpecsDir = Join-Path $repoRoot 'tools/specs' - if (-not (Test-Path $realCapabilityMapPath) -or -not (Test-Path $realFieldCmdletMapPath) -or - -not (Test-Path $realSpecsDir) -or -not (Get-ChildItem $realSpecsDir -Filter 'fb*.json' -ErrorAction SilentlyContinue)) { - Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json, Reports/PfbFieldCmdletMap.json, or tools/specs/ not present locally' - return + BeforeAll { + $script:realCapabilityMapPath = Join-Path $repoRoot 'Data/PfbCapabilityMap.json' + $script:realFieldCmdletMapPath = Join-Path $repoRoot 'Reports/PfbFieldCmdletMap.json' + $script:realSpecsDir = Join-Path $repoRoot 'tools/specs' + $script:hasRealArtifacts = (Test-Path $realCapabilityMapPath) -and (Test-Path $realFieldCmdletMapPath) -and + (Test-Path $realSpecsDir) -and (Get-ChildItem $realSpecsDir -Filter 'fb*.json' -ErrorAction SilentlyContinue) + + if ($hasRealArtifacts) { + $script:realOutput = Join-Path $TestDrive 'realOutput/report.json' + $script:realReport = Join-Path $TestDrive 'realOutput/report.md' + & $builderScript -SpecsDirectory $realSpecsDir -PublicDirectory (Join-Path $repoRoot 'Public') -PrivateDirectory (Join-Path $repoRoot 'Private') ` + -CapabilityMapPath $realCapabilityMapPath -FieldCmdletMapPath $realFieldCmdletMapPath ` + -OutputPath $realOutput -ReportPath $realReport + $script:realManifest = Get-Content -Path $realOutput -Raw | ConvertFrom-Json -Depth 20 + $script:realCapMapForCheck = Get-Content -Path $realCapabilityMapPath -Raw | ConvertFrom-Json -Depth 20 } + } - $realOutput = Join-Path $TestDrive 'realOutput/report.json' - $realReport = Join-Path $TestDrive 'realOutput/report.md' - & $builderScript -SpecsDirectory $realSpecsDir -PublicDirectory (Join-Path $repoRoot 'Public') -PrivateDirectory (Join-Path $repoRoot 'Private') ` - -CapabilityMapPath $realCapabilityMapPath -FieldCmdletMapPath $realFieldCmdletMapPath ` - -OutputPath $realOutput -ReportPath $realReport + It 'produces a manifest against the real Public/Private tree and Reports/ + Data/ inputs' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json, Reports/PfbFieldCmdletMap.json, or tools/specs/ not present locally'; return } Test-Path $realOutput | Should -BeTrue } + + It 'Task 7: wires systemicGaps through with the pinned acceptance figures (context_names 253, allow_errors 109)' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + ($realManifest.systemicGaps | Where-Object { $_.name -eq 'context_names' }).endpointCount | Should -Be 253 + ($realManifest.systemicGaps | Where-Object { $_.name -eq 'allow_errors' }).endpointCount | Should -Be 109 + } + + It 'Task 7: wires conventionStrength through with the pinned acceptance figures (names 306, ids 218, context_names 0)' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + ($realManifest.conventionStrength | Where-Object { $_.name -eq 'names' }).cmdletCount | Should -Be 306 + ($realManifest.conventionStrength | Where-Object { $_.name -eq 'ids' }).cmdletCount | Should -Be 218 + ($realManifest.conventionStrength | Where-Object { $_.name -eq 'context_names' }).cmdletCount | Should -Be 0 + } + + It 'Task 7: attaches docs/drift-annotations.json''s designDecision note to the context_names systemic-gap finding' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $ctx = $realManifest.systemicGaps | Where-Object { $_.name -eq 'context_names' } + $ctx.annotations | Should -Not -BeNullOrEmpty + ($ctx.annotations | Select-Object -First 1).note | Should -Match 'not yet implemented' + } + + It 'Task 7: attaches docs/drift-annotations.json''s liveTestingHazard note to a management-access-policies parameter-gap row' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $row = $realManifest.parameterGaps | Where-Object { $_.endpoint -match 'management-access-policies' } | Select-Object -First 1 + if (-not $row) { Set-ItResult -Skipped -Because 'no management-access-policies endpoint currently has a parameter gap'; return } + $row.annotations | Should -Not -BeNullOrEmpty + ($row.annotations | Select-Object -First 1).note | Should -Match '403' + } + + It 'Task 7: splits generatedFrom into analysedVersions (from the capability map) and availableSpecVersions (from tools/specs/ on disk), warning exactly when they disagree' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $realManifest.analysedVersions | Should -Be @($realCapMapForCheck.generatedFrom) + $onDiskVersions = @(Get-ChildItem $realSpecsDir -Filter 'fb*.json' | ForEach-Object { $_.BaseName -replace '^fb', '' }) + @(Compare-Object -ReferenceObject $realManifest.availableSpecVersions -DifferenceObject $onDiskVersions).Count | Should -Be 0 + $diverges = @(Compare-Object -ReferenceObject $realManifest.analysedVersions -DifferenceObject $realManifest.availableSpecVersions).Count -gt 0 + if ($diverges) { $realManifest.versionDivergenceWarning | Should -Not -BeNullOrEmpty } + else { $realManifest.versionDivergenceWarning | Should -BeNullOrEmpty } + } + + It 'Task 7: phantomFieldCount is a non-negative integer, present on the manifest' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $realManifest.phantomFieldCount | Should -BeGreaterOrEqual 0 + } +} + +Describe 'Build-PfbApiDriftReport (Task 7: systemic gaps, convention strength, phantom-field count, generatedFrom split -- own small fixture)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + $script:t7FixtureRoot = Join-Path $TestDrive 't7fixture' + $t7PublicDir = Join-Path $t7FixtureRoot 'Public/Fixture7' + $t7PrivateDir = Join-Path $t7FixtureRoot 'Private' + $t7SpecsDir = Join-Path $t7FixtureRoot 'specs' + New-Item -ItemType Directory -Path $t7PublicDir, $t7PrivateDir, $t7SpecsDir -Force | Out-Null + + # Two endpoints, each missing the SAME query parameter ('shared_gap') and neither + # exposing it -- this is what Get-PfbSystemicGaps is supposed to collapse into ONE + # finding with EndpointCount 2. No cmdlet anywhere in this fixture exposes + # 'shared_gap' as a Typed parameter, so Get-PfbConventionStrength should rank it at + # CmdletCount 0 -- the "architectural gap, not a mechanical one" case (the + # context_names precedent). + Set-Content -Path (Join-Path $t7PublicDir 'Get-PfbFixtureAlpha.ps1') -Value @' +function Get-PfbFixtureAlpha { + [CmdletBinding()] + param([Parameter()] [PSCustomObject]$Array) + Invoke-PfbApiRequest -Array $Array -Method GET -Endpoint 'alpha' -AutoPaginate +} +'@ + # Beta is PARTIAL-confidence (an unresolved -Weird parameter, no -Attributes escape + # hatch) -- exercises the Markdown confidence marker/footnote wiring on a fixture + # this task fully controls. It also misses 'shared_gap', but Get-PfbSystemicGaps + # is aggregated ONLY over 'high'-confidence gaps (this task's own precedent, same + # as the real 253/109 acceptance figures), so Beta must NOT count towards + # 'shared_gap's systemic EndpointCount below -- Gamma (high-confidence) is the + # fixture's second contributor to that finding instead. + Set-Content -Path (Join-Path $t7PublicDir 'Get-PfbFixtureBeta.ps1') -Value @' +function Get-PfbFixtureBeta { + [CmdletBinding()] + param( + [Parameter()] [PSCustomObject]$Array, + [Parameter()] [string]$Weird + ) + if ($Weird) { Write-Verbose $Weird } + Invoke-PfbApiRequest -Array $Array -Method GET -Endpoint 'beta' -AutoPaginate +} +'@ + # Gamma is fully-typed (high-confidence) and also misses 'shared_gap' -- together + # with Alpha, this is the systemic-gaps EndpointCount-2 case. + Set-Content -Path (Join-Path $t7PublicDir 'Get-PfbFixtureGamma.ps1') -Value @' +function Get-PfbFixtureGamma { + [CmdletBinding()] + param([Parameter()] [PSCustomObject]$Array) + Invoke-PfbApiRequest -Array $Array -Method GET -Endpoint 'gamma' -AutoPaginate +} +'@ + + $t7SpecV1 = [ordered]@{ + openapi = '3.0.1'; info = @{ version = '1.0' } + paths = [ordered]@{ + '/alpha' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + [ordered]@{ name = 'withdrawn_field'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + '/beta' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + '/gamma' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + } + components = [ordered]@{ schemas = [ordered]@{} } + } + # v1.1 is the NEWEST ANALYSED spec: 'withdrawn_field' is gone -- a phantom field + # (accumulated in the capability map's own /alpha entry below, absent here). + $t7SpecV2 = [ordered]@{ + openapi = '3.0.1'; info = @{ version = '1.1' } + paths = [ordered]@{ + '/alpha' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + '/beta' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + '/gamma' = [ordered]@{ get = [ordered]@{ parameters = @( + [ordered]@{ name = 'shared_gap'; 'in' = 'query'; schema = [ordered]@{ type = 'string' } } + ) } } + } + components = [ordered]@{ schemas = [ordered]@{} } + } + $t7SpecV1 | ConvertTo-Json -Depth 20 | Set-Content -Path (Join-Path $t7SpecsDir 'fb1.0.json') + $t7SpecV2 | ConvertTo-Json -Depth 20 | Set-Content -Path (Join-Path $t7SpecsDir 'fb1.1.json') + # On disk but NOT in the capability map's own generatedFrom below -- deliberately + # engineers the analysedVersions/availableSpecVersions divergence this task's + # generatedFrom-split item exists to surface. + $t7SpecV2 | ConvertTo-Json -Depth 20 | Set-Content -Path (Join-Path $t7SpecsDir 'fb1.2.json') + + $script:t7CapabilityMapPath = Join-Path $t7FixtureRoot 'PfbCapabilityMap.json' + [ordered]@{ + schemaVersion = 1 + generatedFrom = @('1.0', '1.1') + endpoints = [ordered]@{ + 'GET /alpha' = [ordered]@{ minVersion = '1.0'; parameters = [ordered]@{ shared_gap = '1.0'; withdrawn_field = '1.0' }; bodyProperties = [ordered]@{} } + 'GET /beta' = [ordered]@{ minVersion = '1.0'; parameters = [ordered]@{ shared_gap = '1.0' }; bodyProperties = [ordered]@{} } + 'GET /gamma' = [ordered]@{ minVersion = '1.0'; parameters = [ordered]@{ shared_gap = '1.0' }; bodyProperties = [ordered]@{} } + } + } | ConvertTo-Json -Depth 20 | Set-Content -Path $t7CapabilityMapPath + + $script:t7FieldCmdletMapPath = Join-Path $t7FixtureRoot 'PfbFieldCmdletMap.json' + [ordered]@{ schemaVersion = 1; generatedFrom = @('1.0', '1.1'); entries = @(); attributesOnly = @(); typedUnresolved = @() } | + ConvertTo-Json -Depth 20 | Set-Content -Path $t7FieldCmdletMapPath + + $script:t7OutputPath = Join-Path $TestDrive 't7output/report.json' + $script:t7ReportPath = Join-Path $TestDrive 't7output/report.md' + & $builderScript -SpecsDirectory $t7SpecsDir -PublicDirectory $t7PublicDir -PrivateDirectory $t7PrivateDir ` + -CapabilityMapPath $t7CapabilityMapPath -FieldCmdletMapPath $t7FieldCmdletMapPath ` + -OutputPath $t7OutputPath -ReportPath $t7ReportPath + $script:t7Manifest = Get-Content -Path $t7OutputPath -Raw | ConvertFrom-Json -Depth 20 + $script:t7ReportText = Get-Content -Path $t7ReportPath -Raw + } + + It 'collapses the field missing on both HIGH-CONFIDENCE fixture endpoints into ONE systemic-gaps finding with EndpointCount 2, excluding the partial-confidence endpoint that also misses it' { + $finding = $t7Manifest.systemicGaps | Where-Object { $_.name -eq 'shared_gap' } + $finding | Should -Not -BeNullOrEmpty + $finding.endpointCount | Should -Be 2 + $finding.endpoints | Should -Be @('GET /alpha', 'GET /gamma') + } + + It 'ranks conventionStrength at CmdletCount 0 for a name no fixture cmdlet exposes (the architectural-gap case)' { + $strength = $t7Manifest.conventionStrength | Where-Object { $_.name -eq 'shared_gap' } + $strength | Should -Not -BeNullOrEmpty + $strength.cmdletCount | Should -Be 0 + @($strength.cmdlets).Count | Should -Be 0 + } + + It 'counts the withdrawn (phantom) field, filtered out of every list, in phantomFieldCount' { + $t7Manifest.phantomFieldCount | Should -Be 1 + # And confirms it never leaks into a real gap list on GET /alpha. + $alphaGap = $t7Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /alpha' } + $alphaGap.missingQueryParameters | Should -Not -Contain 'withdrawn_field' + } + + It 'splits analysedVersions (capability map) from availableSpecVersions (specs on disk) and warns when they disagree' { + $t7Manifest.analysedVersions | Should -Be @('1.0', '1.1') + $t7Manifest.availableSpecVersions | Should -Be @('1.0', '1.1', '1.2') + $t7Manifest.versionDivergenceWarning | Should -Not -BeNullOrEmpty + $t7Manifest.versionDivergenceWarning | Should -Match 'analysedVersions' + $t7Manifest.versionDivergenceWarning | Should -Match 'availableSpecVersions' + } + + It 'marks the partial-confidence fixture endpoint (GET /beta) with a visible unresolved-parameter marker in the Markdown table' { + $betaGap = $t7Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'GET /beta' } + $betaGap.confidence.level | Should -Be 'partial' + $t7ReportText | Should -Match 'unresolved param' + } + + It 'gives the partial-confidence unresolved parameter a Partial-confidence detail row with a file:line a human can open' { + $t7ReportText | Should -Match '### Partial-confidence detail' + $t7ReportText | Should -Match '-Weird' + $t7ReportText | Should -Match 'Get-PfbFixtureBeta\.ps1:\d+' + } + + It 'orders Markdown sections: How to read this report -> Summary -> Systemic gaps -> Parameter gaps -> Read-only fields -> Uncovered endpoints' { + $howToIndex = $t7ReportText.IndexOf('## How to read this report') + $summaryIndex = $t7ReportText.IndexOf('## Summary') + $systemicIndex = $t7ReportText.IndexOf('## Systemic gaps') + $paramGapsIndex = $t7ReportText.IndexOf('## Parameter gaps') + $howToIndex | Should -BeGreaterThan -1 + $summaryIndex | Should -BeGreaterThan $howToIndex + $systemicIndex | Should -BeGreaterThan $summaryIndex + $paramGapsIndex | Should -BeGreaterThan $systemicIndex + } + + It 'reproduces the decision-6 false-positive procedure verbatim in "How to read this report"' { + $t7ReportText | Should -Match 'This report accepts \*\*false positives in order to eliminate false negatives\*\*' + $t7ReportText | Should -Match 'Open the named parameter at the given `file:line` and follow where its value goes\.' + $t7ReportText | Should -Match 'the gap is a false positive AND a tooling bug' + $t7ReportText | Should -Match 'If it never reaches the wire' + $t7ReportText | Should -Match 'a false positive costs a reader one `file:line` lookup; a false negative costs an undetected gap indefinitely' + } + + It 'the Summary section reports phantom fields and systemic gaps, not just the pre-Task-7 bullets' { + $t7ReportText | Should -Match 'Phantom fields silently excluded[^:]*: 1' + $t7ReportText | Should -Match 'Systemic gaps \(distinct field names[^:]*: 1' + } } diff --git a/tools/Build-PfbApiDriftReport.ps1 b/tools/Build-PfbApiDriftReport.ps1 index 9f49b6d..b32a4af 100644 --- a/tools/Build-PfbApiDriftReport.ps1 +++ b/tools/Build-PfbApiDriftReport.ps1 @@ -307,8 +307,22 @@ $canEnrichBodyProperties = [bool]$newestSpec # continuation_token is reflected here automatically instead of silently going stale. $nonActionableParameters = Get-PfbNonActionableParameters -PrivateDirectory $PrivateDirectory -$parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $nonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities | - ForEach-Object { +# Task 7: docs/drift-annotations.json -- Get-PfbDriftAnnotations returns $null gracefully +# when the file is absent (never throws), so every Find-PfbDriftAnnotation lookup below +# degrades to "no annotations" rather than failing report generation. +$driftAnnotationsPath = Join-Path $repoRoot 'docs/drift-annotations.json' +$driftAnnotations = Get-PfbDriftAnnotations -Path $driftAnnotationsPath + +# Captured as its own variable rather than piped straight into the ForEach-Object +# projection below -- Task 6's Get-PfbSystemicGaps wiring and this task's own phantom- +# field transparency count (further down) both need the SAME raw, pre-projection gap +# objects Get-PfbParameterCoverageGaps returns. Calling the function twice for two +# different purposes would risk the two views drifting apart if -SinceVersion/ +# -ExcludedFields ever diverged between call sites; capturing once and reusing avoids +# that entirely. +$parameterGapsRaw = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $nonActionableParameters -CurrentSpecCapabilities $currentSpecCapabilities) + +$parameterGaps = @($parameterGapsRaw | ForEach-Object { $gapRaw = $_ $endpointParts = $gapRaw.Endpoint -split ' ', 2 $method = $endpointParts[0] @@ -378,9 +392,113 @@ $parameterGaps = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -C escapeHatchOnly = @($gapRaw.Confidence.EscapeHatchOnly) caveat = $gapRaw.Confidence.Caveat } + # Task 7: endpoint-matched entries from docs/drift-annotations.json (e.g. the + # management-access-policies POST/PATCH/DELETE-403 liveTestingHazard note) -- + # matchType 'field' annotations are surfaced separately, per-name, on + # `systemicGaps` below (Find-PfbDriftAnnotation -FieldName), not here. + annotations = @(Find-PfbDriftAnnotation -Annotations $driftAnnotations -Endpoint $gapRaw.Endpoint | ForEach-Object { + [ordered]@{ matchType = $_.matchType; match = $_.match; kind = $_.kind; note = $_.note; reference = $_.reference } + }) + } + }) + +# --- Task 6 wiring: systemic gaps + convention strength (this task's own job) --- +# Aggregated ONLY over 'high'-confidence gaps: a 'partial'-confidence endpoint's gap lists +# can contain false positives (an unresolved parameter may already cover the apparent gap +# through a path this AST-only inventory can't see -- see Get-PfbParameterCoverageGaps's +# own Confidence.Caveat), so folding it into a systemic FINDING would overstate a +# confidence the endpoint's own row already warns against. This mirrors the precedent this +# task's own pinned acceptance figures (context_names 253 / allow_errors 109) were +# verified against in Tests/PfbApiDriftTools.Tests.ps1's 'Task 6 real-data acceptance +# figures' Describe block -- reproducing those figures here requires the same filter. +$highConfidenceGapsRaw = @($parameterGapsRaw | Where-Object { $_.Confidence.Level -eq 'high' }) +$systemicGapsRaw = @(Get-PfbSystemicGaps -Gaps $highConfidenceGapsRaw) + +$systemicGaps = @($systemicGapsRaw | ForEach-Object { + $finding = $_ + [ordered]@{ + name = $finding.Name + endpointCount = $finding.EndpointCount + queryEndpointCount = $finding.QueryEndpointCount + bodyEndpointCount = $finding.BodyEndpointCount + endpoints = @($finding.Endpoints) + # Task 6's acceptance criterion: "the systemic section shows context_names at + # its endpoint count with its annotation" -- matchType 'field' lookup by this + # finding's own Name (never $null; Find-PfbDriftAnnotation always returns []). + annotations = @(Find-PfbDriftAnnotation -Annotations $driftAnnotations -FieldName $finding.Name | ForEach-Object { + [ordered]@{ matchType = $_.matchType; match = $_.match; kind = $_.kind; note = $_.note; reference = $_.reference } + }) } }) +# No cap on -Names: Get-PfbConventionStrength is a cheap per-name dictionary lookup against +# a table built ONCE (Get-PfbWireNameCmdletCounts), so every systemic-gap name gets ranked +# here -- nothing is silently dropped from this list. Re-sorted by CmdletCount descending +# (Get-PfbConventionStrength itself preserves -Names' input order, ranking is this script's +# own choice) since a mechanical batch-fix candidate (high CmdletCount, e.g. `names` at +# 306) and an architectural gap (zero CmdletCount, e.g. `context_names`) are the two ends +# of this ranking a reader most wants surfaced first/last. +$conventionStrengthRaw = @(if ($systemicGapsRaw.Count -gt 0) { Get-PfbConventionStrength -CmdletInventory $inventory -Names @($systemicGapsRaw.Name) } else { @() }) +$conventionStrength = @($conventionStrengthRaw | Sort-Object -Property @{ Expression = 'CmdletCount'; Descending = $true }, Name | + ForEach-Object { [ordered]@{ name = $_.Name; cmdletCount = $_.CmdletCount; cmdlets = @($_.Cmdlets) } }) + +# --- Task 7: phantom-field transparency --- +# How many (endpoint, field) pairs were silently dropped from every gap list because +# Get-PfbParameterCoverageGaps's own -CurrentSpecCapabilities phantom-field exclusion (see +# that function's own .PARAMETER help) found them accumulated in the capability map but +# absent from the newest ANALYSED spec (fb$newestAnalysedVersion.json) -- e.g. a field +# withdrawn from the API after the version that first added it. Computed by calling the +# SAME function a second time WITHOUT -CurrentSpecCapabilities (its own documented "safe +# no-op default", i.e. no phantom filtering) and diffing the resulting (endpoint, list, +# field) triples against $parameterGapsRaw (the real, phantom-filtered run) -- never a +# re-derivation of the phantom-detection logic itself, so this can't silently drift from +# what Get-PfbParameterCoverageGaps actually does. +function Get-PfbGapFieldTripleSet { + <# + .SYNOPSIS + Internal helper: every "||" triple across -Gaps (one of + Get-PfbParameterCoverageGaps's own raw outputs), used only to diff two runs of that + function (with vs. without -CurrentSpecCapabilities) for the phantom-field count + below. Not a general-purpose utility -- deliberately local to this script. + #> + param([object[]]$Gaps) + $set = [System.Collections.Generic.HashSet[string]]::new() + foreach ($g in $Gaps) { + foreach ($f in @($g.MissingQueryParameters)) { [void]$set.Add("$($g.Endpoint)|query|$f") } + foreach ($f in @($g.MissingBodyProperties)) { [void]$set.Add("$($g.Endpoint)|body|$f") } + foreach ($f in @($g.ReadOnlyFields)) { [void]$set.Add("$($g.Endpoint)|readOnly|$f") } + } + return $set +} +$parameterGapsRawUnfiltered = @(Get-PfbParameterCoverageGaps -CapabilityMap $capabilityMap -CmdletInventory $inventory -CalledEndpoints $calledEndpoints -SinceVersion $SinceVersion -ExcludedFields $nonActionableParameters) +$phantomFilteredTripleSet = Get-PfbGapFieldTripleSet -Gaps $parameterGapsRaw +$phantomUnfilteredTripleSet = Get-PfbGapFieldTripleSet -Gaps $parameterGapsRawUnfiltered +$phantomFieldCount = @($phantomUnfilteredTripleSet | Where-Object { -not $phantomFilteredTripleSet.Contains($_) }).Count + +# --- Task 7: generatedFrom split --- +# `generatedFrom` over-claimed what the report actually analysed: it was populated from the +# tools/specs/ directory scan (Get-PfbValueEnumHistory's own $historyResult.ProcessedVersions), +# not from Data/PfbCapabilityMap.json's OWN generatedFrom -- the versions that actually drive +# every gap/phantom-field category above. The two are normally in step, which is why this +# was invisible, but they are independent inputs that drift the moment specs are refreshed +# without rebuilding the map (verified 2026-07-25 on bdf9d67: specs at 2.0-2.28, map still at +# 2.0-2.27 -- the report would have claimed 2.28 coverage while analysing nothing from it). +# Emitted as two separate, distinctly-named keys instead of one ambiguous `generatedFrom`: +# - analysedVersions: $CapabilityMap.generatedFrom -- what every gap category (and +# the phantom-field filter above) is actually scoped against. +# - availableSpecVersions: $historyResult.ProcessedVersions -- every spec on disk under +# -SpecsDirectory, which Task 5's enum join and category 3 (ValidateSet drift) DO read +# fresher-than-analysedVersions data from (see $historyResult's own construction +# comment above) -- so this fact stays load-bearing, never silently dropped. +$analysedVersions = @($capabilityMap.generatedFrom) +$availableSpecVersions = @($historyResult.ProcessedVersions) +$versionDiffCount = @(Compare-Object -ReferenceObject $analysedVersions -DifferenceObject $availableSpecVersions).Count +$versionSetsDiverge = $versionDiffCount -gt 0 +$versionDivergenceWarning = if ($versionSetsDiverge) { + "analysedVersions ($($analysedVersions.Count) versions, through $($analysedVersions[-1])) and availableSpecVersions ($($availableSpecVersions.Count) versions, through $($availableSpecVersions[-1])) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set." +} +else { $null } + # --- Category 3 --- # $historyResult was computed earlier (before category 1) so category 2's enrichment above # and this category both reuse the SAME Get-PfbValueEnumHistory result -- two logically @@ -404,10 +522,18 @@ $newValidateSetCandidates = @($fieldCmdletMap.entries | Where-Object { $_.status $manifest = [ordered]@{ schemaVersion = 1 - generatedFrom = $historyResult.ProcessedVersions + # See the generatedFrom-split block above: two distinctly-named keys instead of one + # ambiguous `generatedFrom`, plus a warning (never $null-vs-absent-silent) when they + # disagree. + analysedVersions = $analysedVersions + availableSpecVersions = $availableSpecVersions + versionDivergenceWarning = $versionDivergenceWarning sinceVersion = if ($SinceVersion) { $SinceVersion } else { $null } + phantomFieldCount = $phantomFieldCount uncoveredEndpoints = $uncoveredEndpoints parameterGaps = $parameterGaps + systemicGaps = $systemicGaps + conventionStrength = $conventionStrength validateSetDrift = $validateSetDrift newValidateSetCandidates = $newValidateSetCandidates } @@ -416,10 +542,14 @@ $outputDir = Split-Path -Parent $OutputPath if (-not (Test-Path $outputDir)) { New-Item -ItemType Directory -Path $outputDir -Force | Out-Null } $manifest | ConvertTo-Json -Depth 20 | Set-Content -Path $OutputPath -Encoding UTF8 +# --- Markdown report --- +# Section order (this task's brief): How to read this report -> Summary -> Systemic gaps +# -> Parameter gaps (query/body as separate columns) -> Read-only fields (not addressable) +# -> Uncovered endpoints -> ValidateSet drift -> New ValidateSet candidates. $mdLines = [System.Collections.Generic.List[string]]::new() $mdLines.Add('# API Drift Report') $mdLines.Add('') -$mdLines.Add("Generated by ``tools/Build-PfbApiDriftReport.ps1`` ($($historyResult.ProcessedVersions.Count) REST versions).") +$mdLines.Add("Generated by ``tools/Build-PfbApiDriftReport.ps1`` ($($analysedVersions.Count) analysed REST versions; $($availableSpecVersions.Count) available on disk under ``tools/specs/``).") $mdLines.Add('') $mdLines.Add('Reporting only -- no `Public/` cmdlet is edited by this script.') $mdLines.Add('') @@ -427,27 +557,64 @@ if ($SinceVersion) { $mdLines.Add("Uncovered endpoints and parameter gaps are filtered to items introduced after REST $SinceVersion. ValidateSet drift and new ValidateSet candidates are not filtered (no per-value introduced-version data to filter on).") $mdLines.Add('') } +if ($versionSetsDiverge) { + $mdLines.Add("**Warning:** $versionDivergenceWarning") + $mdLines.Add('') +} $partialConfidenceCount = @($parameterGaps | Where-Object { $_.confidence.level -eq 'partial' }).Count -$mdLines.Add('## Summary') +# "How to read this report" -- the decision-6 false-positive procedure, verbatim (see +# docs/superpowers/plans/drift-report-readonly-deprecated-fix-brief.md lines 249-283). +$mdLines.Add('## How to read this report') +$mdLines.Add('') +$mdLines.Add('This report accepts **false positives in order to eliminate false negatives**. A field is listed as missing even though the module can already set it, when a parameter covering it could not be traced to a wire name.') +$mdLines.Add('') +$mdLines.Add('**Detection.** Only possible where `confidence.level` is `partial`. When it is `high` (`unresolvedParameters` empty), the row carries no false-positive risk from this mechanism.') $mdLines.Add('') +$mdLines.Add('**Resolution procedure:**') +$mdLines.Add('1. Open the named parameter at the given `file:line` and follow where its value goes.') +$mdLines.Add('2. If it reaches the wire under the same name as the reported gap -> the gap is a false positive AND a tooling bug: the parser does not recognise that idiom. File it as a parser gap and fix the parser.') +$mdLines.Add('3. If it reaches the wire under a different name -> the reported gap may still be real; check that field against the spec.') +$mdLines.Add('4. If it never reaches the wire -> the gap is real.') +$mdLines.Add('') +$mdLines.Add('**Why this trade is right:** a false positive costs a reader one `file:line` lookup; a false negative costs an undetected gap indefinitely. Every false positive here is a parser-gap detector -- it either fixes the tool permanently for every endpoint, or confirms a real gap.') + +$mdLines.Add(''); $mdLines.Add('## Summary'); $mdLines.Add('') $mdLines.Add("- Uncovered endpoints: $($uncoveredEndpoints.Count)") $mdLines.Add("- Endpoints with parameter gaps: $($parameterGaps.Count)") -$mdLines.Add("- Missing query parameters: $((@($parameterGaps.missingQueryParameters) | Measure-Object).Count)") $mdLines.Add("- Missing body properties (addable): $((@($parameterGaps.missingBodyProperties) | Measure-Object).Count)") -$mdLines.Add("- Read-only body fields (not addable): $((@($parameterGaps.readOnlyFields) | Measure-Object).Count)") -$mdLines.Add("- Partial-confidence endpoints (has attributes/unresolved surface -- see each row's ``confidence``): $partialConfidenceCount") +$mdLines.Add("- Missing query parameters (addable): $((@($parameterGaps.missingQueryParameters) | Measure-Object).Count)") +$mdLines.Add("- Read-only body fields (not addable -- see the Read-only fields section below): $((@($parameterGaps.readOnlyFields) | Measure-Object).Count)") +$mdLines.Add("- Phantom fields silently excluded (accumulated in the capability map, absent from the newest analysed spec): $phantomFieldCount") +$mdLines.Add("- Partial-confidence endpoints (see ``How to read this report`` above, and each row's marker in the Parameter gaps table): $partialConfidenceCount") +$mdLines.Add("- Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): $($systemicGaps.Count)") $mdLines.Add("- ValidateSet drift: $($validateSetDrift.Count)") $mdLines.Add("- New ValidateSet candidates: $($newValidateSetCandidates.Count)") -if ($uncoveredEndpoints.Count -gt 0) { - $mdLines.Add(''); $mdLines.Add('## Uncovered endpoints'); $mdLines.Add('') - $mdLines.Add('| Endpoint | Introduced in |'); $mdLines.Add('|---|---|') - foreach ($e in $uncoveredEndpoints) { $mdLines.Add("| ``$($e.endpoint)`` | $($e.minVersion) |") } +if ($systemicGaps.Count -gt 0) { + $mdLines.Add(''); $mdLines.Add('## Systemic gaps'); $mdLines.Add('') + $mdLines.Add('One finding per distinct wire field name, collapsed across every endpoint where a high-confidence gap exists (decision 7) -- turns hundreds of per-endpoint rows into a handful of real, actionable decisions. "Cmdlets already using this name" is decision 8''s convention-strength ranking: a high count means closing the remaining gaps for this name is a mechanical batch fix; zero means no established convention exists to extend at all -- closing it is an architectural decision, not a mechanical one.') + $mdLines.Add('') + $systemicTopN = 25 + $systemicShown = @($systemicGaps | Select-Object -First $systemicTopN) + if ($systemicGaps.Count -gt $systemicTopN) { + $mdLines.Add("Showing the top $systemicTopN of $($systemicGaps.Count) findings by endpoint count -- the full list is in the JSON manifest's ``systemicGaps``, nothing is dropped there.") + $mdLines.Add('') + } + $mdLines.Add('| Field name | Endpoints | Query | Body | Cmdlets already using this name | Annotation |'); $mdLines.Add('|---|---|---|---|---|---|') + foreach ($s in $systemicShown) { + $strength = $conventionStrength | Where-Object { $_.name -eq $s.name } | Select-Object -First 1 + $cmdletCount = if ($strength) { $strength.cmdletCount } else { 0 } + $annotationNote = if (@($s.annotations).Count -gt 0) { ($s.annotations | ForEach-Object { $_.note }) -join '; ' } else { '' } + $mdLines.Add("| ``$($s.name)`` | $($s.endpointCount) | $($s.queryEndpointCount) | $($s.bodyEndpointCount) | $cmdletCount | $annotationNote |") + } } + if ($parameterGaps.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## Parameter gaps'); $mdLines.Add('') - $mdLines.Add('| Endpoint | Cmdlets | Missing query parameters | Missing body properties | Read-only fields | Confidence |'); $mdLines.Add('|---|---|---|---|---|---|') + $mdLines.Add('Endpoints an existing cmdlet already calls, where the capability map knows of a query parameter or addable body property the cmdlet does not yet expose. Read-only fields (never addable, regardless of confidence) are reported separately below, never blended into either column here.') + $mdLines.Add('') + $mdLines.Add('| Endpoint | Cmdlets | Missing query parameters | Missing body properties | Confidence | Notes |'); $mdLines.Add('|---|---|---|---|---|---|') foreach ($g in $parameterGaps) { # missingBodyProperties is a MIX of bare strings (partial-confidence endpoints, # unchanged from before this task) and enriched [ordered]@{} records (high-confidence @@ -455,9 +622,44 @@ if ($parameterGaps.Count -gt 0) { # back to the string itself; on an enriched record it reads the 'name' key. Either # way the Markdown table shows just the field name, never a stringified hashtable. $bodyPropNames = ($g.missingBodyProperties | ForEach-Object { if ($_ -is [string]) { $_ } else { $_.name } }) -join ', ' - $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingQueryParameters -join ', ') | $bodyPropNames | $($g.readOnlyFields -join ', ') | $($g.confidence.level) |") + $confidenceCell = if ($g.confidence.level -eq 'partial') { + $unresolvedCount = @($g.confidence.unresolvedParameters).Count + $plural = if ($unresolvedCount -eq 1) { '' } else { 's' } + "``partial`` -- /!\ $unresolvedCount unresolved param$plural (see Partial-confidence detail below)" + } + else { '`high`' } + $notes = if (@($g.annotations).Count -gt 0) { ($g.annotations | ForEach-Object { $_.note }) -join '; ' } else { '' } + $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.missingQueryParameters -join ', ') | $bodyPropNames | $confidenceCell | $notes |") + } + + $partialGaps = @($parameterGaps | Where-Object { $_.confidence.level -eq 'partial' }) + if ($partialGaps.Count -gt 0) { + $mdLines.Add(''); $mdLines.Add('### Partial-confidence detail'); $mdLines.Add('') + $mdLines.Add('Per the decision-6 procedure above: open each parameter at its `file:line` and follow where its value goes.') + $mdLines.Add('') + $mdLines.Add('| Endpoint | Parameter | Surface | File:Line | Caveat |'); $mdLines.Add('|---|---|---|---|---|') + foreach ($g in $partialGaps) { + foreach ($u in $g.confidence.unresolvedParameters) { + $mdLines.Add("| ``$($g.endpoint)`` | ``-$($u.parameter)`` | $($u.surface) | ``$($u.file):$($u.line)`` | $($g.confidence.caveat) |") + } + } } } + +$readOnlyRows = @($parameterGaps | Where-Object { @($_.readOnlyFields).Count -gt 0 }) +if ($readOnlyRows.Count -gt 0) { + $mdLines.Add(''); $mdLines.Add('## Read-only fields (not addressable)'); $mdLines.Add('') + $mdLines.Add('The capability map knows these body properties exist, but the newest analysed spec marks them read-only -- no `Public/` cmdlet can ever set them, on any confidence level. Listed for completeness only; never merged into the Parameter gaps table above.') + $mdLines.Add('') + $mdLines.Add('| Endpoint | Cmdlets | Read-only fields |'); $mdLines.Add('|---|---|---|') + foreach ($g in $readOnlyRows) { $mdLines.Add("| ``$($g.endpoint)`` | $($g.cmdlets -join ', ') | $($g.readOnlyFields -join ', ') |") } +} + +if ($uncoveredEndpoints.Count -gt 0) { + $mdLines.Add(''); $mdLines.Add('## Uncovered endpoints'); $mdLines.Add('') + $mdLines.Add('| Endpoint | Introduced in |'); $mdLines.Add('|---|---|') + foreach ($e in $uncoveredEndpoints) { $mdLines.Add("| ``$($e.endpoint)`` | $($e.minVersion) |") } +} if ($validateSetDrift.Count -gt 0) { $mdLines.Add(''); $mdLines.Add('## ValidateSet drift'); $mdLines.Add('') $mdLines.Add('| Cmdlet | Parameter | Missing values | Stale values |'); $mdLines.Add('|---|---|---|---|') From 6ca7b2a3b2e7b04ebc816e285231b8a58f077b6b Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 01:39:35 -0700 Subject: [PATCH 13/17] docs(tools): document confidence/systemic-gap/phantom-field concepts, add determinism test, regenerate drift report for real tools/README.md gained six new subsections covering the generatedFrom split, the notVerified->confidence norm reversal (decision 5) with the old rationale preserved, the decision-6 false-positive procedure, systemicGaps/conventionStrength, the two correct phantomFieldCount scopes (34 full population / 13 high-confidence subset), and the REST 2.17 cliff (corrected framing: a $ref consolidation where resolved read-only pairs rose 219->262, not a capability loss, per the plan's own progress-log correction). Tests/Build-PfbApiDriftReport.Tests.ps1: added an end-to-end determinism round-trip test (run the builder twice, assert byte-identical JSON+Markdown -- no prior test in this file actually did this), the 11 corrected regression canaries + 4 spot-checks from the task brief, and a "nothing vanishes" invariant test verifying every capability-map candidate field lands in exactly one of reported/phantom-excluded, arithmetically over (endpoint, list, field) triples cross-checked against the real generated JSON on disk. Reports/PfbApiDriftReport.json/.md regenerated for real against the unmodified Data/PfbCapabilityMap.json + tools/specs/ + Public/Private tree -- the committed report predated Task 4's query/body split entirely (still had a flat missingParameters list and a bare notVerifiedEndpoints count with no detail), so this is the first true end-to-end regeneration since early in this effort. All acceptance figures reproduced exactly on the real data. Co-Authored-By: Claude Sonnet 5 --- Reports/PfbApiDriftReport.json | 23467 ++++++++++++++++++++-- Reports/PfbApiDriftReport.md | 983 +- Tests/Build-PfbApiDriftReport.Tests.ps1 | 255 + tools/README.md | 144 + 4 files changed, 22714 insertions(+), 2135 deletions(-) diff --git a/Reports/PfbApiDriftReport.json b/Reports/PfbApiDriftReport.json index bde3901..86d9ee8 100644 --- a/Reports/PfbApiDriftReport.json +++ b/Reports/PfbApiDriftReport.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "generatedFrom": [ + "analysedVersions": [ "2.0", "2.1", "2.2", @@ -30,7 +30,40 @@ "2.26", "2.27" ], + "availableSpecVersions": [ + "2.0", + "2.1", + "2.2", + "2.3", + "2.4", + "2.5", + "2.6", + "2.7", + "2.8", + "2.9", + "2.10", + "2.11", + "2.12", + "2.13", + "2.14", + "2.15", + "2.16", + "2.17", + "2.18", + "2.19", + "2.20", + "2.21", + "2.22", + "2.23", + "2.24", + "2.25", + "2.26", + "2.27", + "2.28" + ], + "versionDivergenceWarning": "analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set.", "sinceVersion": null, + "phantomFieldCount": 34, "uncoveredEndpoints": [ { "endpoint": "GET /api/login-banner", @@ -507,37 +540,81 @@ "cmdlets": [ "Remove-PfbActiveDirectory" ], - "missingParameters": [ + "missingQueryParameters": [ "local_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /admins/api-tokens", "cmdlets": [ "Remove-PfbApiToken" ], - "missingParameters": [ + "missingQueryParameters": [ "admin_ids", "admin_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /admins/cache", "cmdlets": [ "Remove-PfbAdminCache" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /admins/management-access-policies", "cmdlets": [ "Remove-PfbAdminManagementAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -545,209 +622,552 @@ "cmdlets": [ "Remove-PfbAdminSshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /array-connections", "cmdlets": [ "Remove-PfbArrayConnection" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /arrays/ssh-certificate-authority-policies", "cmdlets": [ "Remove-PfbArraySshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /audit-file-systems-policies", "cmdlets": [ "Remove-PfbAuditFileSystemPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /audit-file-systems-policies/members", "cmdlets": [ "Remove-PfbAuditFileSystemPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /audit-object-store-policies", "cmdlets": [ "Remove-PfbAuditObjectStorePolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /audit-object-store-policies/members", "cmdlets": [ "Remove-PfbAuditObjectStorePolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /buckets", + "cmdlets": [ + "Remove-PfbBucket" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Bucket\\Remove-PfbBucket.ps1", + "line": 27 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /buckets/audit-filters", "cmdlets": [ "Remove-PfbBucketAuditFilter" ], - "missingParameters": [ + "missingQueryParameters": [ "bucket_ids", "bucket_names", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /buckets/bucket-access-policies", + "cmdlets": [ + "Remove-PfbBucketAccessPolicy" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /buckets/bucket-access-policies/rules", + "cmdlets": [ + "Remove-PfbBucketAccessPolicyRule" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "policy_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /buckets/cross-origin-resource-sharing-policies", "cmdlets": [ "Remove-PfbBucketCorsPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "bucket_ids", "bucket_names", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /buckets/cross-origin-resource-sharing-policies/rules", + "cmdlets": [ + "Remove-PfbBucketCorsPolicyRule" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "policy_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /certificates/certificate-groups", "cmdlets": [ "Remove-PfbCertificateCertificateGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "certificate_group_ids", "certificate_ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /data-eviction-policies", "cmdlets": [ "Remove-PfbDataEvictionPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /data-eviction-policies/file-systems", "cmdlets": [ "Remove-PfbDataEvictionPolicyFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /directory-services/local/groups", "cmdlets": [ "Remove-PfbLocalGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "gids", "local_directory_service_ids", "local_directory_service_names", "sids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /directory-services/local/groups/members", + "cmdlets": [ + "Remove-PfbLocalGroupMember" + ], + "missingQueryParameters": [ + "context_names", + "group_gids", + "group_sids", + "local_directory_service_ids", + "local_directory_service_names", + "member_ids", + "member_sids", + "member_types" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /dns", "cmdlets": [ "Remove-PfbDns" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-system-exports", "cmdlets": [ "Remove-PfbFileSystemExport" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-system-replica-links", "cmdlets": [ "Remove-PfbFileSystemReplicaLink" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "local_file_system_ids", "remote_file_system_ids", "remote_ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-system-replica-links/policies", "cmdlets": [ "Remove-PfbFileSystemReplicaLinkPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "local_file_system_ids", "local_file_system_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /file-system-snapshots", + "cmdlets": [ + "Remove-PfbFileSystemSnapshot" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystemSnapshot\\Remove-PfbFileSystemSnapshot.ps1", + "line": 24 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /file-system-snapshots/policies", "cmdlets": [ "Remove-PfbFileSystemSnapshotPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-system-snapshots/transfer", "cmdlets": [ "Remove-PfbFileSystemSnapshotTransfer" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /file-systems", + "cmdlets": [ + "Remove-PfbFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Remove-PfbFileSystem.ps1", + "line": 38 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /file-systems/audit-policies", "cmdlets": [ "Remove-PfbFileSystemAuditPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-systems/locks", "cmdlets": [ "Remove-PfbFileLock" ], - "missingParameters": [ + "missingQueryParameters": [ "client_names", "context_names", "file_system_ids", @@ -755,76 +1175,162 @@ "inodes", "paths", "recursive" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-systems/policies", "cmdlets": [ "Remove-PfbFileSystemPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /file-systems/sessions", "cmdlets": [ "Remove-PfbFileSystemSession" ], - "missingParameters": [ + "missingQueryParameters": [ "client_names", "context_names", "disruptive", - "protocols", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Force", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Remove-PfbFileSystemSession.ps1", + "line": 59 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /fleets/members", "cmdlets": [ "Remove-PfbFleetMember" ], - "missingParameters": [ + "missingQueryParameters": [ "member_ids", "unreachable" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /lifecycle-rules", "cmdlets": [ "Remove-PfbLifecycleRule" ], - "missingParameters": [ + "missingQueryParameters": [ "bucket_ids", "bucket_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /log-targets/file-systems", "cmdlets": [ "Remove-PfbLogTargetFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /log-targets/object-store", "cmdlets": [ "Remove-PfbLogTargetObjectStore" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /management-access-policies", "cmdlets": [ "Remove-PfbManagementAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -832,542 +1338,1455 @@ "cmdlets": [ "Remove-PfbManagementAccessPolicyAdmin" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, + { + "endpoint": "DELETE /network-access-policies/rules", + "cmdlets": [ + "Remove-PfbNetworkAccessRule" + ], + "missingQueryParameters": [ + "ids", + "versions" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, { "endpoint": "DELETE /network-interfaces/tls-policies", "cmdlets": [ "Remove-PfbNetworkInterfaceTlsPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "member_ids", "policy_ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /nfs-export-policies", "cmdlets": [ "Remove-PfbNfsExportPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "versions" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /nfs-export-policies/rules", + "cmdlets": [ + "Remove-PfbNfsExportRule" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "versions" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /node-groups/nodes", "cmdlets": [ "Remove-PfbNodeGroupNode" ], - "missingParameters": [ + "missingQueryParameters": [ "node_group_ids", "node_group_names", "node_ids", "node_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-access-keys", "cmdlets": [ "Remove-PfbObjectStoreAccessKey" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-access-policies", "cmdlets": [ "Remove-PfbObjectStoreAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /object-store-access-policies/object-store-roles", + "cmdlets": [ + "Remove-PfbObjectStoreAccessPolicyRole" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /object-store-access-policies/object-store-users", + "cmdlets": [ + "Remove-PfbObjectStoreAccessPolicyUser" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /object-store-access-policies/rules", + "cmdlets": [ + "Remove-PfbObjectStoreAccessPolicyRule" + ], + "missingQueryParameters": [ + "context_names", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-account-exports", "cmdlets": [ "Remove-PfbObjectStoreAccountExport" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-accounts", "cmdlets": [ "Remove-PfbObjectStoreAccount" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-remote-credentials", "cmdlets": [ "Remove-PfbObjectStoreRemoteCredential" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /object-store-roles", "cmdlets": [ "Remove-PfbObjectStoreRole" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "DELETE /object-store-users", + "endpoint": "DELETE /object-store-roles/object-store-access-policies", "cmdlets": [ - "Remove-PfbObjectStoreUser" + "Remove-PfbObjectStoreRoleAccessPolicy" ], - "missingParameters": [ - "context_names" - ] + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "DELETE /object-store-virtual-hosts", + "endpoint": "DELETE /object-store-roles/object-store-trust-policies/rules", "cmdlets": [ - "Remove-PfbObjectStoreVirtualHost" + "Remove-PfbObjectStoreTrustPolicyRule" ], - "missingParameters": [ - "context_names" - ] + "missingQueryParameters": [ + "context_names", + "indices", + "role_ids", + "role_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "DELETE /policies", + "endpoint": "DELETE /object-store-users", "cmdlets": [ - "Remove-PfbPolicy" + "Remove-PfbObjectStoreUser" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /object-store-users/object-store-access-policies", + "cmdlets": [ + "Remove-PfbObjectStoreUserAccessPolicy" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /object-store-virtual-hosts", + "cmdlets": [ + "Remove-PfbObjectStoreVirtualHost" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /policies", + "cmdlets": [ + "Remove-PfbPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /policies/file-system-replica-links", "cmdlets": [ "Remove-PfbPolicyFileSystemReplicaLink" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "local_file_system_ids", "local_file_system_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /policies/file-systems", "cmdlets": [ "Remove-PfbPolicyFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /presets/workload", "cmdlets": [ "Remove-PfbPresetWorkload" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /qos-policies", "cmdlets": [ "Remove-PfbQosPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /qos-policies/members", "cmdlets": [ "Remove-PfbQosPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names", "member_types" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /quotas/groups", + "cmdlets": [ + "Remove-PfbQuotaGroup" + ], + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "gids", + "group_names", + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Remove-PfbQuotaGroup.ps1", + "line": 30 + }, + { + "parameter": "GroupName", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Remove-PfbQuotaGroup.ps1", + "line": 31 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /quotas/users", + "cmdlets": [ + "Remove-PfbQuotaUser" + ], + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "names", + "uids", + "user_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Remove-PfbQuotaUser.ps1", + "line": 25 + }, + { + "parameter": "UserName", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Remove-PfbQuotaUser.ps1", + "line": 26 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /s3-export-policies", "cmdlets": [ "Remove-PfbS3ExportPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /s3-export-policies/rules", + "cmdlets": [ + "Remove-PfbS3ExportRule" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /servers", + "cmdlets": [ + "Remove-PfbServer" + ], + "missingQueryParameters": [ + "cascade_delete" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Server\\Remove-PfbServer.ps1", + "line": 35 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "DELETE /smb-client-policies", "cmdlets": [ "Remove-PfbSmbClientPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /smb-client-policies/rules", + "cmdlets": [ + "Remove-PfbSmbClientRule" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "versions" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /smb-share-policies", "cmdlets": [ "Remove-PfbSmbSharePolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /smb-share-policies/rules", + "cmdlets": [ + "Remove-PfbSmbShareRule" + ], + "missingQueryParameters": [ + "context_names", + "ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /ssh-certificate-authority-policies/admins", "cmdlets": [ "Remove-PfbSshCaPolicyAdmin" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /ssh-certificate-authority-policies/arrays", "cmdlets": [ "Remove-PfbSshCaPolicyArray" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /workloads", "cmdlets": [ "Remove-PfbWorkload" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "DELETE /workloads/tags", + "cmdlets": [ + "Remove-PfbWorkloadTag" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "DELETE /worm-data-policies", "cmdlets": [ "Remove-PfbWormPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /active-directory", "cmdlets": [ "Get-PfbActiveDirectory" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "limit", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /active-directory/test", "cmdlets": [ "Test-PfbActiveDirectory" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "filter", "limit", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /admins", "cmdlets": [ "Get-PfbAdmin" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "expose_api_token" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /admins/api-tokens", "cmdlets": [ "Get-PfbApiToken" ], - "missingParameters": [ + "missingQueryParameters": [ "admin_ids", "admin_names", "allow_errors", "context_names", "expose_api_token" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /admins/cache", "cmdlets": [ "Get-PfbAdminCache" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "refresh" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /admins/management-access-policies", "cmdlets": [ "Get-PfbAdminManagementAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, + { + "endpoint": "GET /admins/settings", + "cmdlets": [ + "Get-PfbAdminSetting" + ], + "missingQueryParameters": [ + "filter", + "limit", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, { "endpoint": "GET /admins/ssh-certificate-authority-policies", "cmdlets": [ "Get-PfbAdminSshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /alert-watchers/test", "cmdlets": [ "Test-PfbAlertWatcher" ], - "missingParameters": [ + "missingQueryParameters": [ "filter", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /array-connections", "cmdlets": [ "Get-PfbArrayConnection" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /array-connections/connection-key", "cmdlets": [ "Get-PfbArrayConnectionKey" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /array-connections/path", "cmdlets": [ "Get-PfbArrayConnectionPath" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /array-connections/performance/replication", "cmdlets": [ "Get-PfbArrayConnectionPerformanceReplication" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "remote_ids", "remote_names", - "total_only", - "type" - ] + "total_only" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /arrays", + "cmdlets": [ + "Get-PfbArray", + "Test-PfbConnection" + ], + "missingQueryParameters": [ + "allow_errors", + "context_names", + "filter", + "limit", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Endpoint", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Connection\\Test-PfbConnection.ps1", + "line": 31 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "GET /arrays/clients/performance", "cmdlets": [ "Get-PfbArrayClientPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "names", "protocol", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/clients/s3-specific-performance", "cmdlets": [ "Get-PfbArrayClientS3Performance" ], - "missingParameters": [ + "missingQueryParameters": [ "names", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /arrays/eula", + "cmdlets": [ + "Get-PfbArrayEula" + ], + "missingQueryParameters": [ + "filter", + "limit", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /arrays/factory-reset-token", + "cmdlets": [ + "Get-PfbArrayFactoryResetToken" + ], + "missingQueryParameters": [ + "filter", + "limit", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/http-specific-performance", "cmdlets": [ "Get-PfbArrayHttpPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/nfs-specific-performance", "cmdlets": [ "Get-PfbArrayNfsPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/performance", "cmdlets": [ "Get-PfbArrayPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/performance/replication", "cmdlets": [ "Get-PfbArrayPerformanceReplication" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", - "context_names", - "type" - ] + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/s3-specific-performance", "cmdlets": [ "Get-PfbArrayS3Performance" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/space", "cmdlets": [ "Get-PfbArraySpace" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "end_time", "resolution", "start_time" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/space/storage-classes", "cmdlets": [ "Get-PfbArrayStorageClass" ], - "missingParameters": [ + "missingQueryParameters": [ "end_time", "resolution", "start_time", "storage_class_names", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/ssh-certificate-authority-policies", "cmdlets": [ "Get-PfbArraySshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /arrays/supported-time-zones", "cmdlets": [ "Get-PfbArraySupportedTimeZone" ], - "missingParameters": [ + "missingQueryParameters": [ "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /audit-file-systems-policies", "cmdlets": [ "Get-PfbAuditFileSystemPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /audit-file-systems-policies/members", "cmdlets": [ "Get-PfbAuditFileSystemPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /audit-file-systems-policy-operations", "cmdlets": [ "Get-PfbAuditFileSystemPolicyOperation" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /audit-object-store-policies", "cmdlets": [ "Get-PfbAuditObjectStorePolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /audit-object-store-policies/members", "cmdlets": [ "Get-PfbAuditObjectStorePolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /blades", @@ -1375,27 +2794,45 @@ "Get-PfbBlade", "Get-PfbNode" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /bucket-audit-filter-actions", "cmdlets": [ "Get-PfbBucketAuditFilterAction" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /bucket-replica-links", "cmdlets": [ "Get-PfbBucketReplicaLink" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids", @@ -1403,192 +2840,345 @@ "remote_ids", "remote_names", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets", "cmdlets": [ "Get-PfbBucket" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets/audit-filters", "cmdlets": [ "Get-PfbBucketAuditFilter" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "bucket_names", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets/bucket-access-policies", "cmdlets": [ "Get-PfbBucketAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "bucket_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets/bucket-access-policies/rules", "cmdlets": [ "Get-PfbBucketAccessPolicyRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "bucket_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets/cross-origin-resource-sharing-policies", "cmdlets": [ "Get-PfbBucketCorsPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "bucket_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /buckets/cross-origin-resource-sharing-policies/rules", "cmdlets": [ "Get-PfbBucketCorsPolicyRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "bucket_names", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /certificate-groups/certificates", "cmdlets": [ "Get-PfbCertificateGroupCertificate" ], - "missingParameters": [ + "missingQueryParameters": [ "certificate_group_ids", "certificate_group_names", "certificate_ids", "certificate_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /certificate-groups/uses", "cmdlets": [ "Get-PfbCertificateGroupUse" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /certificates/certificate-groups", "cmdlets": [ "Get-PfbCertificateCertificateGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "certificate_group_ids", "certificate_ids", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /certificates/uses", "cmdlets": [ "Get-PfbCertificateUse" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /data-eviction-policies", "cmdlets": [ "Get-PfbDataEvictionPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /data-eviction-policies/file-systems", "cmdlets": [ "Get-PfbDataEvictionPolicyFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /data-eviction-policies/members", "cmdlets": [ "Get-PfbDataEvictionPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services", "cmdlets": [ "Get-PfbDirectoryService" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "limit", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services/local/directory-services", "cmdlets": [ "Get-PfbLocalDirectoryService" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "destroyed", "total_item_count" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services/local/groups", "cmdlets": [ "Get-PfbLocalGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "gids", "sids", "total_item_count" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services/local/groups/members", "cmdlets": [ "Get-PfbLocalGroupMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "group_gids", @@ -1597,54 +3187,155 @@ "member_sids", "member_types", "total_item_count" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services/roles", "cmdlets": [ "Get-PfbDirectoryServiceRole" ], - "missingParameters": [ + "missingQueryParameters": [ "role_ids", "role_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /directory-services/roles/management-access-policies", "cmdlets": [ "Get-PfbDirectoryServiceRoleManagementPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, + { + "endpoint": "GET /directory-services/test", + "cmdlets": [ + "Test-PfbDirectoryService" + ], + "missingQueryParameters": [ + "allow_errors", + "context_names", + "filter", + "ids", + "limit", + "names", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /dns", + "cmdlets": [ + "Get-PfbDns" + ], + "missingQueryParameters": [ + "allow_errors", + "context_names", + "filter", + "ids", + "limit", + "names", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, { "endpoint": "GET /drives", "cmdlets": [ "Get-PfbDrive" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-exports", "cmdlets": [ "Get-PfbFileSystemExport" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-replica-links", "cmdlets": [ "Get-PfbFileSystemReplicaLink" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids", @@ -1652,14 +3343,23 @@ "remote_file_system_ids", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-replica-links/policies", "cmdlets": [ "Get-PfbFileSystemReplicaLinkPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "local_file_system_ids", @@ -1668,93 +3368,165 @@ "remote_file_system_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-replica-links/transfer", "cmdlets": [ "Get-PfbFileSystemReplicaLinkTransfer" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names_or_owner_names", "remote_ids", "remote_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-snapshots", "cmdlets": [ "Get-PfbFileSystemSnapshot" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names_or_owner_names", "owner_ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-snapshots/policies", "cmdlets": [ "Get-PfbFileSystemSnapshotPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-system-snapshots/transfer", "cmdlets": [ "Get-PfbFileSystemSnapshotTransfer" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names_or_owner_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems", "cmdlets": [ "Get-PfbFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/audit-policies", "cmdlets": [ "Get-PfbFileSystemAuditPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/groups/performance", "cmdlets": [ "Get-PfbFileSystemGroupPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "gids", "group_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/locks", "cmdlets": [ "Get-PfbFileLock" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "client_names", "context_names", @@ -1762,24 +3534,42 @@ "file_system_names", "inodes", "paths" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/locks/clients", "cmdlets": [ "Get-PfbFileLockClient" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/open-files", "cmdlets": [ "Get-PfbOpenFile" ], - "missingParameters": [ + "missingQueryParameters": [ "client_names", "file_system_ids", "file_system_names", @@ -1787,162 +3577,313 @@ "protocols", "session_names", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/policies", "cmdlets": [ "Get-PfbFileSystemPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/sessions", "cmdlets": [ "Get-PfbFileSystemSession" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "client_names", "context_names", - "protocols", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/space/storage-classes", "cmdlets": [ "Get-PfbFileSystemStorageClass" ], - "missingParameters": [ + "missingQueryParameters": [ "storage_class_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/users/performance", "cmdlets": [ "Get-PfbFileSystemUserPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "names", "uids", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /file-systems/worm-data-policies", "cmdlets": [ "Get-PfbFileSystemWormPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /fleets", "cmdlets": [ "Get-PfbFleet" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /fleets/fleet-key", "cmdlets": [ "Get-PfbFleetKey" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /fleets/members", "cmdlets": [ "Get-PfbFleetMember" ], - "missingParameters": [ + "missingQueryParameters": [ "fleet_ids", "member_ids", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /hardware-connectors/performance", "cmdlets": [ "Get-PfbHardwareConnectorPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /keytabs/download", "cmdlets": [ "Get-PfbKeytabDownload" ], - "missingParameters": [ + "missingQueryParameters": [ "keytab_ids", "keytab_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /legal-holds/held-entities", "cmdlets": [ "Get-PfbLegalHoldEntity" ], - "missingParameters": [ + "missingQueryParameters": [ "file_system_ids", "file_system_names", "ids", "names", "paths" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /lifecycle-rules", "cmdlets": [ "Get-PfbLifecycleRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "bucket_ids", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /log-targets/file-systems", "cmdlets": [ "Get-PfbLogTargetFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /log-targets/object-store", "cmdlets": [ "Get-PfbLogTargetObjectStore" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /management-access-policies", "cmdlets": [ "Get-PfbManagementAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -1950,10 +3891,27 @@ "cmdlets": [ "Get-PfbManagementAccessPolicyAdmin" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -1961,8 +3919,25 @@ "cmdlets": [ "Get-PfbManagementAccessPolicyDirectoryRole" ], - "missingParameters": [ + "missingQueryParameters": [ "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -1970,10 +3945,27 @@ "cmdlets": [ "Get-PfbManagementAccessPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { @@ -1981,319 +3973,645 @@ "cmdlets": [ "Get-PfbNetworkAccessRule" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /network-interfaces/connectors/performance", "cmdlets": [ "Get-PfbNetworkInterfaceConnectorPerformance" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /network-interfaces/connectors/settings", "cmdlets": [ "Get-PfbNetworkInterfaceConnectorSettings" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /network-interfaces/neighbors", "cmdlets": [ "Get-PfbNetworkInterfaceNeighbor" ], - "missingParameters": [ + "missingQueryParameters": [ "local_port_names", "total_item_count" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /network-interfaces/network-connection-statistics", "cmdlets": [ "Get-PfbNetworkConnectionStatistics" ], - "missingParameters": [ + "missingQueryParameters": [ "current_state", "local_host", "local_port", "remote_host", "remote_port" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /network-interfaces/ping", + "cmdlets": [ + "Invoke-PfbNetworkPing" + ], + "missingQueryParameters": [ + "component_name", + "print_latency", + "resolve_hostname", + "source" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /network-interfaces/trace", + "cmdlets": [ + "Invoke-PfbNetworkTrace" + ], + "missingQueryParameters": [ + "component_name", + "discover_mtu", + "fragment_packet", + "port", + "resolve_hostname", + "source" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /nfs-export-policies", "cmdlets": [ "Get-PfbNfsExportPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /nfs-export-policies/rules", "cmdlets": [ "Get-PfbNfsExportRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /node-groups/nodes", "cmdlets": [ "Get-PfbNodeGroupNode" ], - "missingParameters": [ + "missingQueryParameters": [ "node_group_ids", "node_group_names", "node_ids", "node_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /node-groups/uses", "cmdlets": [ "Get-PfbNodeGroupUse" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /nodes", "cmdlets": [ "Get-PfbNode" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-keys", "cmdlets": [ "Get-PfbObjectStoreAccessKey" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-policies", "cmdlets": [ "Get-PfbObjectStoreAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "exclude_rules" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-policies/object-store-roles", "cmdlets": [ "Get-PfbObjectStoreAccessPolicyRole" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-policies/object-store-users", "cmdlets": [ "Get-PfbObjectStoreAccessPolicyUser" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-policies/rules", "cmdlets": [ "Get-PfbObjectStoreAccessPolicyRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-access-policy-actions", "cmdlets": [ "Get-PfbObjectStoreAccessPolicyAction" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-account-exports", "cmdlets": [ "Get-PfbObjectStoreAccountExport" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-accounts", "cmdlets": [ "Get-PfbObjectStoreAccount" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-remote-credentials", "cmdlets": [ "Get-PfbObjectStoreRemoteCredential" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-roles", "cmdlets": [ "Get-PfbObjectStoreRole" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-roles/object-store-access-policies", "cmdlets": [ "Get-PfbObjectStoreRoleAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "policy_ids", "policy_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-roles/object-store-trust-policies", "cmdlets": [ "Get-PfbObjectStoreTrustPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-roles/object-store-trust-policies/rules", "cmdlets": [ "Get-PfbObjectStoreTrustPolicyRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "indices", "role_ids", "role_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-users", "cmdlets": [ "Get-PfbObjectStoreUser" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-users/object-store-access-policies", "cmdlets": [ "Get-PfbObjectStoreUserAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /object-store-virtual-hosts", "cmdlets": [ "Get-PfbObjectStoreVirtualHost" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /password-policies", + "cmdlets": [ + "Get-PfbPasswordPolicy" + ], + "missingQueryParameters": [ + "filter", + "ids", + "limit", + "names", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies", "cmdlets": [ "Get-PfbPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies-all", "cmdlets": [ "Get-PfbPolicyAll" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies-all/members", "cmdlets": [ "Get-PfbPolicyAllMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "local_file_system_ids", "local_file_system_names", - "member_types", "remote_file_system_ids", "remote_file_system_names", "remote_ids", "remote_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies/file-system-replica-links", "cmdlets": [ "Get-PfbPolicyFileSystemReplicaLink" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "local_file_system_ids", @@ -2303,690 +4621,2930 @@ "remote_ids", "remote_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies/file-system-snapshots", "cmdlets": [ "Get-PfbPolicyFileSystemSnapshot" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /policies/file-systems", "cmdlets": [ "Get-PfbPolicyFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /presets/workload", "cmdlets": [ "Get-PfbPresetWorkload" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /public-keys/uses", "cmdlets": [ "Get-PfbPublicKeyUse" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /qos-policies", "cmdlets": [ "Get-PfbQosPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /qos-policies/buckets", "cmdlets": [ "Get-PfbQosPolicyBucket" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /qos-policies/file-systems", "cmdlets": [ "Get-PfbQosPolicyFileSystem" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /qos-policies/members", "cmdlets": [ "Get-PfbQosPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "member_types", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /quotas/groups", "cmdlets": [ "Get-PfbQuotaGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "file_system_ids", "gids", "group_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /quotas/settings", + "cmdlets": [ + "Get-PfbQuotaSettings" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /quotas/users", "cmdlets": [ "Get-PfbQuotaUser" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "file_system_ids", "uids", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /realms", "cmdlets": [ "Get-PfbRealm" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /realms/defaults", "cmdlets": [ "Get-PfbRealmDefaults" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "realm_ids", "realm_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /realms/space", "cmdlets": [ "Get-PfbRealmSpace" ], - "missingParameters": [ + "missingQueryParameters": [ "end_time", "ids", "resolution", "start_time", "total_only", "type" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /realms/space/storage-classes", "cmdlets": [ "Get-PfbRealmStorageClass" ], - "missingParameters": [ + "missingQueryParameters": [ "end_time", "ids", "resolution", "start_time", "storage_class_names", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /remote-arrays", "cmdlets": [ "Get-PfbRemoteArray" ], - "missingParameters": [ + "missingQueryParameters": [ "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /roles", "cmdlets": [ "Get-PfbRole" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /s3-export-policies", "cmdlets": [ "Get-PfbS3ExportPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /s3-export-policies/rules", "cmdlets": [ "Get-PfbS3ExportRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /servers", "cmdlets": [ "Get-PfbServer" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /smb-client-policies", "cmdlets": [ "Get-PfbSmbClientPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /smb-client-policies/rules", "cmdlets": [ "Get-PfbSmbClientRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /smb-share-policies", "cmdlets": [ "Get-PfbSmbSharePolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "workload_ids", "workload_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /smb-share-policies/rules", "cmdlets": [ "Get-PfbSmbShareRule" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /smtp-servers", + "cmdlets": [ + "Get-PfbSmtpServer" + ], + "missingQueryParameters": [ + "filter", + "ids", + "limit", + "names", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /snmp-agents", "cmdlets": [ "Get-PfbSnmpAgent" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "limit", "names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /snmp-managers/test", "cmdlets": [ "Test-PfbSnmpManager" ], - "missingParameters": [ + "missingQueryParameters": [ "filter", "limit", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /software-check", "cmdlets": [ "Get-PfbSoftwareCheck" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "names", "software_names", "software_versions", "total_item_count" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /ssh-certificate-authority-policies", "cmdlets": [ "Get-PfbSshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /ssh-certificate-authority-policies/admins", "cmdlets": [ "Get-PfbSshCaPolicyAdmin" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /ssh-certificate-authority-policies/arrays", "cmdlets": [ "Get-PfbSshCaPolicyArray" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /ssh-certificate-authority-policies/members", "cmdlets": [ "Get-PfbSshCaPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /sso/saml2/idps/test", "cmdlets": [ "Test-PfbSaml2Idp" ], - "missingParameters": [ + "missingQueryParameters": [ "filter", "limit", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /storage-class-tiering-policies/members", "cmdlets": [ "Get-PfbStorageClassTieringPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /support", "cmdlets": [ "Get-PfbSupport" ], - "missingParameters": [ + "missingQueryParameters": [ "ids" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /support/test", + "cmdlets": [ + "Test-PfbSupport" + ], + "missingQueryParameters": [ + "filter", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /syslog-servers", "cmdlets": [ "Get-PfbSyslogServer" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "GET /syslog-servers/settings", + "cmdlets": [ + "Get-PfbSyslogServerSettings" + ], + "missingQueryParameters": [ + "filter", + "ids", + "limit", + "names", + "sort" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /targets", "cmdlets": [ "Get-PfbTarget" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /targets/performance/replication", "cmdlets": [ "Get-PfbTargetPerformanceReplication" ], - "missingParameters": [ + "missingQueryParameters": [ "ids", "total_only" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /tls-policies", "cmdlets": [ "Get-PfbTlsPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "effective", "purity_defined" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /tls-policies/members", "cmdlets": [ "Get-PfbTlsPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /usage/groups", "cmdlets": [ "Get-PfbUsageGroup" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "file_system_ids", "gids", "group_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /usage/users", "cmdlets": [ "Get-PfbUsageUser" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "file_system_ids", "uids", "user_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /workloads", "cmdlets": [ "Get-PfbWorkload" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /workloads/placement-recommendations", "cmdlets": [ "Get-PfbWorkloadPlacementRecommendation" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /workloads/tags", "cmdlets": [ "Get-PfbWorkloadTag" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /worm-data-policies", "cmdlets": [ "Get-PfbWormPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "GET /worm-data-policies/members", "cmdlets": [ "Get-PfbWormPolicyMember" ], - "missingParameters": [ + "missingQueryParameters": [ "allow_errors", "context_names", "sort" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /active-directory", "cmdlets": [ "Update-PfbActiveDirectory" ], - "missingParameters": [ - "ca_certificate", - "ca_certificate_group", - "directory_servers", - "encryption_types", - "fqdns", - "global_catalog_servers", - "join_ou", - "kerberos_servers", - "service_principal_names" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "ca_certificate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference (ID, name, and resource type) of the Certificate Authority (CA) that signed the certificates of the configured servers, which is used to validate the authenticity of the servers.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference (ID, name, and resource type) of a certificate group containing CA certificates that can be used to validate the authenticity of the configured servers.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "directory_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of directory servers that will be used for lookups related to user authorization.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "encryption_types", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The encryption types that will be supported for use by clients for Kerberos authentication.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [ + "aes256-cts-hmac-sha1-96", + "aes128-cts-hmac-sha1-96", + "arcfour-hmac" + ], + "enumStatus": "matched", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "fqdns", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of fully qualified domain names to use to register service principal names for the machine account.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "global_catalog_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of global catalog servers that will be used for lookups related to user authorization.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "join_ou", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The relative distinguished name of the organizational unit in which the computer account should be created when joining the domain.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "kerberos_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of key distribution servers to use for Kerberos protocol.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "service_principal_names", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of service principal names to register for the machine account, which can be used for the creation of keys for Kerberos authentication.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbActiveDirectory.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /admins", "cmdlets": [ "Update-PfbAdmin" ], - "missingParameters": [ - "authorization_model", - "context_names", - "locked", - "management_access_policies", - "old_password", - "password", - "public_key", - "role" - ] + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "authorization_model", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The location for access policies mapping.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "locked", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `false`, the specified user is unlocked.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "management_access_policies", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of management access policies associated with the statically-authorized administrator.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "old_password", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Old user password.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "password", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "New user password.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "public_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Public key for SSH access.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "role", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdmin.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /admins/settings", + "cmdlets": [ + "Update-PfbAdminSetting" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "lockout_duration", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The lockout duration, in milliseconds, if a user has reached the maximum number of login attempts.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdminSetting.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_login_attempts", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The maximum number of failed login attempts allowed before the user is locked out.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdminSetting.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_password_length", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The minimum password length.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbAdminSetting.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /alert-watchers", + "cmdlets": [ + "Update-PfbAlertWatcher" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "enabled" + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Alert\\Update-PfbAlertWatcher.ps1", + "line": 32 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /alerts", + "cmdlets": [ + "Update-PfbAlert" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "flagged" + ], + "readOnlyFields": [ + "action", + "code", + "component_name", + "component_type", + "created", + "description", + "duration", + "id", + "index", + "knowledge_base_url", + "name", + "notified", + "severity", + "state", + "summary", + "updated", + "variables" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Flagged", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Alert\\Update-PfbAlert.ps1", + "line": 26 + } + ], + "escapeHatchOnly": [ + "Flagged" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { "endpoint": "PATCH /api-clients", "cmdlets": [ "Update-PfbApiClient" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the API client is permitted to exchange ID Tokens for access tokens.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbApiClient.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_role", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbApiClient.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "access_policies", "access_token_ttl_in_ms", - "enabled", "id", "issuer", "key_id", - "max_role", "name", "public_key" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /array-connections", "cmdlets": [ "Update-PfbArrayConnection" ], - "missingParameters": [ - "ca_certificate_group", - "context", + "missingQueryParameters": [ "context_names", - "encrypted", + "remote_ids", + "remote_names" + ], + "missingBodyProperties": [ + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The group of CA certificates that can be used, in addition to well-known Certificate Authority certificates, in order to establish a secure connection to the target array.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "encrypted", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If this is set to `true`, then all customer data replicated over the connection will be sent over an encrypted connection using TLS, or will not be sent if a secure connection cannot be established.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "management_address", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Management address of the target array.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "remote", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The remote array.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "replication_addresses", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "IP addresses and/or FQDNs of the target arrays.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "throttle", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbArrayConnection.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", "id", - "management_address", "os", - "remote", - "remote_ids", - "remote_names", - "replication_addresses", "status", - "throttle", "type", "version" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /arrays", + "cmdlets": [ + "Update-PfbArray" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "banner", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A string to be shown when logging in to the array.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "default_inbound_tls_policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The default TLS policy governing inbound traffic from clients accessing the array.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "eradication_config", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "idle_timeout", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "Idle timeout in milliseconds.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "network_access_policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The network access policy governing which clients are allowed or denied access to different array interfaces.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ntp_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "time_zone", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The time zone to use for the array.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArray.ps1", + "paramBlockLine": 29, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "_as_of", + "context", + "encryption", + "id", + "os", + "product_type", + "revision", + "security_update", + "smb_mode", + "version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /arrays/erasures", + "cmdlets": [ + "Update-PfbArrayErasure" + ], + "missingQueryParameters": [ + "delete_sanitization_certificate", + "eradicate_all_data", + "finalize" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /arrays/eula", + "cmdlets": [ + "Update-PfbArrayEula" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "signature", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Array/Update-PfbArrayEula.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "agreement" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /audit-file-systems-policies", + "cmdlets": [ + "Update-PfbAuditFileSystemPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "add_log_targets", + "control_type", + "enabled", + "location", + "log_targets", + "name", + "remove_log_targets", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbAuditFileSystemPolicy.ps1", + "line": 40 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /audit-object-store-policies", + "cmdlets": [ + "Update-PfbAuditObjectStorePolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "add_log_targets", + "enabled", + "location", + "log_targets", + "name", + "remove_log_targets" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbAuditObjectStorePolicy.ps1", + "line": 40 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /buckets", + "cmdlets": [ + "Remove-PfbBucket", + "Update-PfbBucket" + ], + "missingQueryParameters": [ + "cancel_in_progress_storage_class_transition", + "context_names", + "ignore_usage" + ], + "missingBodyProperties": [ + "destroyed", + "eradication_config", + "hard_limit_enabled", + "object_lock_config", + "public_access_config", + "qos_policy", + "retention_lock", + "storage_class" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Bucket\\Update-PfbBucket.ps1", + "line": 37 + }, + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Bucket\\Remove-PfbBucket.ps1", + "line": 27 + } + ], + "escapeHatchOnly": [ + "Destroyed" + ], + "caveat": "body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "PATCH /buckets/audit-filters", "cmdlets": [ "Update-PfbBucketAuditFilter" ], - "missingParameters": [ - "actions", + "missingQueryParameters": [ "bucket_ids", "bucket_names", "context_names", - "names", - "s3_prefixes" - ] + "names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of ops to be audited by this filter.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Bucket/Update-PfbBucketAuditFilter.ps1", + "paramBlockLine": 42, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "s3_prefixes", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of object name prefixes.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/Update-PfbBucketAuditFilter.ps1", + "paramBlockLine": 42, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /certificates", "cmdlets": [ "Update-PfbCertificate" ], - "missingParameters": [ - "certificate", - "certificate_type", - "common_name", - "country", - "days", - "email", - "generate_new_key", - "id", - "intermediate_certificate", + "missingQueryParameters": [ + "generate_new_key" + ], + "missingBodyProperties": [ + { + "name": "certificate", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "certificate_type", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The type of certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "appliance", + "external" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "common_name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The common name field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "country", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The country field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "days", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The number of days that the self-signed certificate is valid.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "email", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The email field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "intermediate_certificate", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Intermediate certificate chains.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "key_algorithm", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The key algorithm used to generate the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "key_size", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The size (in bits) of the private key for the certificate.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "locality", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The locality field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "organization", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The organization field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "organizational_unit", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The organizational unit field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "passphrase", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The passphrase used to encrypt `private_key`.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "private_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the private key.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "state", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state/province field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "subject_alternative_names", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The alternative names that are secured by this certificate.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/Update-PfbCertificate.ps1", + "paramBlockLine": 37, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "issued_by", "issued_to", - "key_algorithm", - "key_size", - "locality", - "name", - "organization", - "organizational_unit", - "passphrase", - "private_key", "realms", - "state", "status", - "subject_alternative_names", "valid_from", "valid_to" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /directory-services/roles", + "endpoint": "PATCH /data-eviction-policies", "cmdlets": [ - "Update-PfbDirectoryServiceRole" + "Update-PfbDataEvictionPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location" ], - "missingParameters": [ - "group", - "group_base", + "readOnlyFields": [ + "context", "id", - "management_access_policies", - "name", - "role", - "role_ids", - "role_names" - ] + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\DataEviction\\Update-PfbDataEvictionPolicy.ps1", + "line": 37 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /dns", + "endpoint": "PATCH /directory-services", "cmdlets": [ - "Update-PfbDns" + "Update-PfbDirectoryService" + ], + "missingQueryParameters": [ + "ids", + "names" ], - "missingParameters": [ + "missingBodyProperties": [ + "base_dn", + "bind_password", + "bind_user", "ca_certificate", "ca_certificate_group", - "context", - "context_names", + "enabled", + "management", + "nfs", + "smb", + "uris" + ], + "readOnlyFields": [ "id", - "ids", "name", - "names", - "realms", - "services", - "sources" - ] + "services" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\DirectoryService\\Update-PfbDirectoryService.ps1", + "line": 32 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /file-system-exports", + "endpoint": "PATCH /directory-services/roles", "cmdlets": [ - "Update-PfbFileSystemExport" + "Update-PfbDirectoryServiceRole" ], - "missingParameters": [ - "context", - "context_names", - "enabled", - "export_name", + "missingQueryParameters": [ + "role_ids", + "role_names" + ], + "missingBodyProperties": [ + { + "name": "group", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Common Name (CN) of the directory service group containing users with authority level of the specified role name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "group_base", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies where the configured group is located in the directory tree.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "role", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", - "member", - "name", - "policy", - "policy_type", - "server", - "share_policy", - "status" - ] + "management_access_policies", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /dns", + "cmdlets": [ + "Update-PfbDns" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "names" + ], + "missingBodyProperties": [ + { + "name": "ca_certificate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to the `certificate` to use for validating nameservers with https connections.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbDns.ps1", + "paramBlockLine": 21, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to the `certificate group` to use for validating nameservers with https connections.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbDns.ps1", + "paramBlockLine": 21, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Network/Update-PfbDns.ps1", + "paramBlockLine": 21, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of services utilizing the DNS configuration.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Network/Update-PfbDns.ps1", + "paramBlockLine": 21, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "sources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The network interfaces used for communication with the DNS server.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbDns.ps1", + "paramBlockLine": 21, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /file-system-exports", + "cmdlets": [ + "Update-PfbFileSystemExport" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "export_name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The name of the export used by clients to mount the file system.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/FileSystem/Update-PfbFileSystemExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "member", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the file system the policy is applied to.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/FileSystem/Update-PfbFileSystemExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the NFS export policy or SMB client policy.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/FileSystem/Update-PfbFileSystemExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "server", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the server the export will be visible on.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/FileSystem/Update-PfbFileSystemExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "share_policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the SMB share policy (only used for SMB).", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/FileSystem/Update-PfbFileSystemExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "enabled", + "id", + "name", + "policy_type", + "status" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /file-system-snapshots", + "cmdlets": [ + "Remove-PfbFileSystemSnapshot" + ], + "missingQueryParameters": [ + "context_names", + "latest_replica" + ], + "missingBodyProperties": [ + "destroyed", + "name", + "owner", + "policy", + "source" + ], + "readOnlyFields": [ + "context", + "created", + "id", + "owner_destroyed", + "policies", + "suffix", + "time_remaining" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystemSnapshot\\Remove-PfbFileSystemSnapshot.ps1", + "line": 24 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /file-systems", + "cmdlets": [ + "Remove-PfbFileSystem", + "Update-PfbFileSystem" + ], + "missingQueryParameters": [ + "cancel_in_progress_storage_class_transition", + "context_names", + "discard_detailed_permissions", + "ignore_usage" + ], + "missingBodyProperties": [ + "default_group_quota", + "default_user_quota", + "destroyed", + "fast_remove_directory_enabled", + "group_ownership", + "hard_limit_enabled", + "http", + "multi_protocol", + "name", + "nfs", + "qos_policy", + "smb", + "snapshot_directory_enabled", + "source", + "storage_class", + "workload", + "writable" + ], + "readOnlyFields": [ + "created", + "id", + "promotion_status", + "time_remaining" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 93 + }, + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Remove-PfbFileSystem.ps1", + "line": 38 + }, + { + "parameter": "HardLimitEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 69 + }, + { + "parameter": "HttpEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 90 + }, + { + "parameter": "NfsEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 72 + }, + { + "parameter": "NfsExportPolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 78 + }, + { + "parameter": "NfsRules", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 75 + }, + { + "parameter": "SmbClientPolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 87 + }, + { + "parameter": "SmbEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 81 + }, + { + "parameter": "SmbSharePolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\Update-PfbFileSystem.ps1", + "line": 84 + } + ], + "escapeHatchOnly": [ + "Destroyed", + "HardLimitEnabled", + "HttpEnabled", + "NfsEnabled", + "NfsExportPolicy", + "NfsRules", + "SmbClientPolicy", + "SmbEnabled", + "SmbSharePolicy" + ], + "caveat": "body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { "endpoint": "PATCH /fleets", "cmdlets": [ "Update-PfbFleet" ], - "missingParameters": [ - "name" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The new name for the resource.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Replication/Update-PfbFleet.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /hardware", "cmdlets": [ "Update-PfbHardware" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "identify_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "State of an LED used to visually identify the component.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Hardware/Update-PfbHardware.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "data_mac", "details", "id", - "identify_enabled", "index", "management_mac", "model", @@ -2999,1946 +7557,17165 @@ "status", "temperature", "type" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /hardware-connectors", "cmdlets": [ "Update-PfbHardwareConnector" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "lane_speed", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured speed of each lane in the connector in bits-per-second.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Hardware/Update-PfbHardwareConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "lanes_per_port", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured number of lanes comprising each port in the connector.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Hardware/Update-PfbHardwareConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "port_count", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured number of ports in the connector (1/2/4 for QSFP).", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Hardware/Update-PfbHardwareConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "port_speed", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured speed of each port in the connector in bits-per-second.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Hardware/Update-PfbHardwareConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "connector_type", "id", - "lane_speed", - "lanes_per_port", "name", - "port_count", - "port_speed", "transceiver_type" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /kmip", "cmdlets": [ "Update-PfbKmip" ], - "missingParameters": [ - "ca_certificate", - "ca_certificate_group", + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "ca_certificate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "CA certificate used to validate the authenticity of the configured servers.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbKmip.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A certificate group containing CA certificates that can be used to validate the authenticity of the configured servers.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbKmip.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "uris", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of URIs for the configured KMIP servers in the format [protocol://]hostname:port.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbKmip.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", - "name", - "uris" - ] + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /legal-holds", "cmdlets": [ "Update-PfbLegalHold" ], - "missingParameters": [ - "description", + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "description", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The description of the legal hold instance.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLegalHold.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", "name", "realms" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /legal-holds/held-entities", "cmdlets": [ "Update-PfbLegalHoldEntity" ], - "missingParameters": [ + "missingQueryParameters": [ "file_system_ids", "file_system_names", "ids", "paths", "recursive", "released" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /lifecycle-rules", "cmdlets": [ "Update-PfbLifecycleRule" ], - "missingParameters": [ - "abort_incomplete_multipart_uploads_after", + "missingQueryParameters": [ "bucket_ids", "bucket_names", "confirm_date", - "context_names", - "enabled", - "keep_current_version_for", - "keep_current_version_until", - "keep_previous_version_for", - "prefix" - ] + "context_names" + ], + "missingBodyProperties": [ + { + "name": "abort_incomplete_multipart_uploads_after", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, this rule will be enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "keep_current_version_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "keep_current_version_until", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "keep_previous_version_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which previous versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "prefix", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Object key prefix identifying one or more objects in the bucket.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLifecycleRule.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /link-aggregation-groups", "cmdlets": [ "Update-PfbLag" ], - "missingParameters": [ - "add_ports", - "ports", - "remove_ports" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "add_ports", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLag.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ports", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLag.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "remove_ports", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbLag.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /log-targets/file-systems", "cmdlets": [ "Update-PfbLogTargetFileSystem" ], - "missingParameters": [ - "context_names", - "file_system", - "id", - "keep_for", - "keep_size", - "name" - ] + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "file_system", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The target filesystem where audit logs will be stored.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "keep_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Specifies the period that audit logs are retained before they are deleted, in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "keep_size", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Specifies the maximum size of audit logs to be retained.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /log-targets/object-store", "cmdlets": [ "Update-PfbLogTargetObjectStore" ], - "missingParameters": [ - "bucket", - "context_names", - "id", - "log_name_prefix", - "log_rotate", - "name" - ] + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "bucket", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the bucket where audit logs will be stored.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "log_name_prefix", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The prefix of the audit log object.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "log_rotate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The threshold after which the audit log object will be rotated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /logs-async", "cmdlets": [ "Update-PfbAsyncLog" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "end_time", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "When the time window ends (in milliseconds since epoch).", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "hardware_components", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "All of the hardware components for which logs are being processed.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "start_time", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "When the time window starts (in milliseconds since epoch).", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "available_files", - "end_time", - "hardware_components", "id", "last_request_time", "name", "processing", - "progress", - "start_time" - ] + "progress" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /management-access-policies", "cmdlets": [ "Update-PfbManagementAccessPolicy" ], - "missingParameters": [ - "aggregation_strategy", + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "aggregation_strategy", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "When this is set to `least-common-permissions`, any users to whom this policy applies can receive no access rights exceeding those defined in this policy's capability and resource.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "All of the rules that are part of this policy.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "context", - "context_names", - "enabled", "id", "is_local", + "policy_type", + "realms", + "version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } + ] + }, + { + "endpoint": "PATCH /network-access-policies", + "cmdlets": [ + "Update-PfbNetworkAccessPolicy" + ], + "missingQueryParameters": [ + "versions" + ], + "missingBodyProperties": [ + "enabled", "location", "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", "policy_type", "realms", - "rules", "version" - ] + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbNetworkAccessPolicy.ps1", + "line": 42 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /network-access-policies/rules", + "cmdlets": [ + "Update-PfbNetworkAccessRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "ids", + "versions" + ], + "missingBodyProperties": [ + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted or denied access to the interface.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "If set to `allow`, the specified client will be permitted to access the specified interfaces.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "interfaces", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Specifies which product interfaces this rule applies to, whether it is permitting or denying access.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [ + "management-ssh", + "management-rest-api", + "management-web-ui", + "snmp", + "local-network-superuser-password-access" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name", + "policy_version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /network-interfaces", "cmdlets": [ "Update-PfbNetworkInterface" ], - "missingParameters": [ - "attached_servers", - "server", - "services" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "attached_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of servers to be associated with the specified network interface for data ingress.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbNetworkInterface.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Services and protocols that are enabled on the interface.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Network/Update-PfbNetworkInterface.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /network-interfaces/connectors", "cmdlets": [ "Update-PfbNetworkInterfaceConnector" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "lane_speed", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured speed of each lane in the connector in bits-per-second.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "lanes_per_port", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured number of lanes comprising each port in the connector.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "port_count", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured number of ports in the connector (1/2/4 for QSFP).", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "port_speed", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Configured speed of each port in the connector in bits-per-second.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "connector_type", "id", - "lane_speed", - "lanes_per_port", "name", - "port_count", - "port_speed", "transceiver_type" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /nfs-export-policies", + "cmdlets": [ + "Update-PfbNfsExportPolicy" + ], + "missingQueryParameters": [ + "context_names", + "versions" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms", + "version" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbNfsExportPolicy.ps1", + "line": 42 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /nfs-export-policies/rules", + "cmdlets": [ + "Update-PfbNfsExportRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "context_names", + "ids", + "versions" + ], + "missingBodyProperties": [ + { + "name": "access", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies access control for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "root-squash", + "all-squash", + "no-squash" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "anongid", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Any user whose GID is affected by an `access` of `root_squash` or `all_squash` will have their GID mapped to `anongid`.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "anonuid", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Any user whose UID is affected by an `access` of `root_squash` or `all_squash` will have their UID mapped to `anonuid`.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "atime", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, after a read operation has occurred, the inode access time is updated only if any of the following conditions is true: the previous access time is less than the inode modify time, the previous access time is less than the inode change time, or the previous access time is more than 24 hours ago.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "fileid_32bit", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "Whether the file id is 32 bits or not.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "permission", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "required_transport_security", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the minimum transport security required for clients to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "secure", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, prevents NFS access to client connections coming from non-reserved ports.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "security", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The security flavors to use for accessing files on this mount point.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /node-groups", "cmdlets": [ "Update-PfbNodeGroup" ], - "missingParameters": [ - "name" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Node/Update-PfbNodeGroup.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /nodes", "cmdlets": [ "Update-PfbNode" ], - "missingParameters": [ + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "management_address", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The control IP address of the node.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Node/Update-PfbNode.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Node/Update-PfbNode.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "node_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A key used to bootstrap a mTLS connection with the node being connected to.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Node/Update-PfbNode.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "serial_number", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The serial number of the node.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Node/Update-PfbNode.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "capacity", "chassis_serial_number", "data_addresses", "details", "id", - "management_address", - "name", - "node_key", "raw_capacity", - "serial_number", "status", "unique" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /object-store-access-policies/rules", + "cmdlets": [ + "Update-PfbObjectStoreAccessPolicyRule" + ], + "missingQueryParameters": [ + "context_names", + "enforce_action_restrictions", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "conditions", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "resources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of resources which this rule applies to.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /object-store-account-exports", "cmdlets": [ "Update-PfbObjectStoreAccountExport" ], - "missingParameters": [ - "context_names", - "export_enabled", - "policy" - ] + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "export_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the account export is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the s3 export policy that is used for the export.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /object-store-remote-credentials", "cmdlets": [ "Update-PfbObjectStoreRemoteCredential" ], - "missingParameters": [ - "access_key_id", + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "access_key_id", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Access Key ID to be used when connecting to a remote object store.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 46, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 46, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "remote", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the associated remote, which can either be a `target` or remote `array`.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 46, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "secret_access_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Secret Access Key to be used when connecting to a remote object store.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 46, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "context", - "context_names", "id", - "name", - "realms", - "remote", - "secret_access_key" - ] + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /object-store-roles", "cmdlets": [ "Update-PfbObjectStoreRole" ], - "missingParameters": [ - "account", + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "account", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference of the associated account.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRole.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "max_session_duration", + "type": "integer", + "format": null, + "specRequired": false, + "synopsis": "The maximum session duration for the role in milliseconds", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreRole.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "context", - "context_names", "created", "id", - "max_session_duration", "name", "prn", "trusted_entities" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /object-store-roles/object-store-trust-policies/rules", + "cmdlets": [ + "Update-PfbObjectStoreTrustPolicyRule" + ], + "missingQueryParameters": [ + "context_names", + "indices", + "policy_names", + "role_ids", + "role_names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "conditions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "principals", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of Identity Providers", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "effect" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { "endpoint": "PATCH /object-store-virtual-hosts", "cmdlets": [ "Update-PfbObjectStoreVirtualHost" ], - "missingParameters": [ - "add_attached_servers", - "attached_servers", - "context_names", - "hostname", - "id", - "name", - "remove_attached_servers" - ] + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "add_attached_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of new servers which are allowed to use this virtual host.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "attached_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of servers which are allowed to use this virtual host.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "hostname", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A hostname by which the array can be addressed for virtual hosted-style S3 requests.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "remove_attached_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of servers which will no longer be allowed to use this virtual host.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 41, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /qos-policies", + "endpoint": "PATCH /password-policies", "cmdlets": [ - "Update-PfbQosPolicy" + "Update-PfbPasswordPolicy" ], - "missingParameters": [ - "context", - "context_names", - "enabled", + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enforce_dictionary_check", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, test password against dictionary of known leaked passwords.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enforce_username_check", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the username cannot be a substring of the password.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "lockout_duration", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The lockout duration, in milliseconds, if a user is locked out after reaching the maximum number of login attempts.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_login_attempts", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "Maximum number of failed login attempts allowed before the user is locked out.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_password_age", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The maximum age of password before password change is required.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_character_groups", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The minimum number of character groups ([a-z], [A-Z], [0-9], other) required to be present in a password.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_characters_per_group", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The minimum number of characters per group to count the group as present.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_password_age", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The minimum age, in milliseconds, of password before password change is allowed.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_password_length", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "Minimum password length.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "password_history", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The number of passwords tracked to prevent reuse of passwords.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", "is_local", - "location", - "max_total_bytes_per_sec", - "max_total_ops_per_sec", - "name", "policy_type", "realms" - ] + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /realms/defaults", + "endpoint": "PATCH /policies", "cmdlets": [ - "Update-PfbRealmDefaults" + "Update-PfbPolicy" ], - "missingParameters": [ - "context", + "missingQueryParameters": [ "context_names", - "object_store", - "realm", - "realm_ids", - "realm_names" - ] - }, - { - "endpoint": "PATCH /snmp-managers", - "cmdlets": [ - "Update-PfbSnmpManager" + "destroy_snapshots" ], - "missingParameters": [ - "host", + "missingBodyProperties": [ + "add_rules", + "enabled", + "location", + "remove_rules" + ], + "readOnlyFields": [ "id", + "is_local", "name", - "notification", - "v2c", - "v3", - "version" - ] + "policy_type", + "realms", + "retention_lock" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbPolicy.ps1", + "line": 28 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /ssh-certificate-authority-policies", + "endpoint": "PATCH /presets/workload", "cmdlets": [ - "Update-PfbSshCaPolicy" + "Update-PfbPresetWorkload" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /qos-policies", + "cmdlets": [ + "Update-PfbQosPolicy" + ], + "missingQueryParameters": [ + "context_names" ], - "missingParameters": [ + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbQosPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbQosPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_total_bytes_per_sec", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The maximum allowed bytes/s totaled across all the clients.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbQosPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_total_ops_per_sec", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The maximum allowed operations/s totaled across all the clients.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbQosPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbQosPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "context", - "enabled", "id", "is_local", - "location", - "name", "policy_type", - "realms", - "signing_authority", - "static_authorized_principals" - ] + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /sso/oidc/idps", + "endpoint": "PATCH /quotas/groups", "cmdlets": [ - "Update-PfbOidcIdp" + "Update-PfbQuotaGroup" ], - "missingParameters": [ - "enabled", - "idp", - "name", - "prn", - "services" - ] + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "gids", + "group_names", + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Update-PfbQuotaGroup.ps1", + "line": 35 + }, + { + "parameter": "GroupName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Update-PfbQuotaGroup.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [ + "FileSystemName", + "GroupName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /sso/saml2/idps", + "endpoint": "PATCH /quotas/settings", "cmdlets": [ - "Update-PfbSaml2Idp" + "Update-PfbQuotaSettings" ], - "missingParameters": [ - "array_url", - "binding", - "enabled", + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "contact", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The contact information that will be provided in any notifications sent directly to users and groups.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "direct_notifications_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "Are notifications regarding space usage and quotas being sent directly to user and group emails?", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", - "idp", - "management", - "name", - "prn", - "services", - "sp" - ] + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /storage-class-tiering-policies", + "endpoint": "PATCH /quotas/users", "cmdlets": [ - "Update-PfbStorageClassTieringPolicy" + "Update-PfbQuotaUser" ], - "missingParameters": [ - "archival_rules", - "enabled", - "id", - "is_local", - "location", - "name", - "policy_type", - "realms", - "retrieval_rules" - ] + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "names", + "uids", + "user_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Update-PfbQuotaUser.ps1", + "line": 30 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\Update-PfbQuotaUser.ps1", + "line": 31 + } + ], + "escapeHatchOnly": [ + "FileSystemName", + "UserName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /subnets", + "endpoint": "PATCH /rapid-data-locking", "cmdlets": [ - "Update-PfbSubnet" + "Update-PfbRapidDataLocking" ], - "missingParameters": [ - "enabled", - "id", - "interfaces", - "link_aggregation_group", - "name", - "services", - "vlan" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "`True` if the Rapid Data Locking feature is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "kmip_server", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The KMIP server configuration associated with RDL.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /syslog-servers", + "endpoint": "PATCH /realms", "cmdlets": [ - "Update-PfbSyslogServer" + "Remove-PfbRealm", + "Update-PfbRealm" ], - "missingParameters": [ - "services", - "sources", - "uri" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + "default_inbound_tls_policy", + "destroyed", + "name" + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Realm\\Update-PfbRealm.ps1", + "line": 31 + }, + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Realm\\Remove-PfbRealm.ps1", + "line": 32 + } + ], + "escapeHatchOnly": [ + "Destroyed" + ], + "caveat": "body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /targets", + "endpoint": "PATCH /realms/defaults", "cmdlets": [ - "Update-PfbTarget" + "Update-PfbRealmDefaults" ], - "missingParameters": [ - "address", - "ca_certificate_group", - "id", - "name", - "status", - "status_details" - ] + "missingQueryParameters": [ + "context_names", + "realm_ids", + "realm_names" + ], + "missingBodyProperties": [ + { + "name": "object_store", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Default configurations for object store.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Realm/Update-PfbRealmDefaults.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "realm" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "PATCH /tls-policies", + "endpoint": "PATCH /s3-export-policies", "cmdlets": [ - "Update-PfbTlsPolicy" + "Update-PfbS3ExportPolicy" ], - "missingParameters": [ - "appliance_certificate", - "client_certificates_required", - "disabled_tls_ciphers", + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ "enabled", - "enabled_tls_ciphers", - "id", - "is_local", - "location", - "min_tls_version", "name", - "policy_type", - "realms", - "trusted_client_certificate_authority", - "verify_client_certificate_trust" - ] + "rules" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbS3ExportPolicy.ps1", + "line": 42 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "PATCH /worm-data-policies", + "endpoint": "PATCH /s3-export-policies/rules", "cmdlets": [ - "Update-PfbWormPolicy" + "Update-PfbS3ExportRule" ], - "missingParameters": [ - "context", + "missingQueryParameters": [ "context_names", - "default_retention", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "resources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of resources from the account to which this rule applies to.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /servers", + "cmdlets": [ + "Update-PfbServer" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "dns" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "DnsName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Server\\Update-PfbServer.ps1", + "line": 34 + } + ], + "escapeHatchOnly": [ + "DnsName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /smb-client-policies", + "cmdlets": [ + "Update-PfbSmbClientPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "access_based_enumeration_enabled", "enabled", - "id", - "is_local", "location", - "max_retention", - "min_retention", - "mode", "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", "policy_type", "realms", - "retention_lock" - ] + "version" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbSmbClientPolicy.ps1", + "line": 42 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "POST /admins/api-tokens", + "endpoint": "PATCH /smb-client-policies/rules", "cmdlets": [ - "New-PfbApiToken" + "Update-PfbSmbClientRule" ], - "missingParameters": [ - "admin_ids", - "admin_names", + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", "context_names", - "timeout" - ] - }, - { - "endpoint": "POST /admins/management-access-policies", - "cmdlets": [ - "New-PfbAdminManagementAccessPolicy" + "ids", + "versions" ], - "missingParameters": [ - "context_names" - ] + "missingBodyProperties": [ + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "encryption", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies whether the remote client is required to use SMB encryption.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "required", + "disabled", + "optional" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "permission", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "name", + "policy_version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /admins/ssh-certificate-authority-policies", + "endpoint": "PATCH /smb-share-policies", "cmdlets": [ - "New-PfbAdminSshCaPolicy" + "Update-PfbSmbSharePolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [ + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\Update-PfbSmbSharePolicy.ps1", + "line": 42 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] }, { - "endpoint": "POST /array-connections", + "endpoint": "PATCH /smb-share-policies/rules", "cmdlets": [ - "New-PfbArrayConnection" + "Update-PfbSmbShareRule" ], - "missingParameters": [ - "ca_certificate_group", - "context", + "missingQueryParameters": [ "context_names", - "encrypted", + "ids", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ + { + "name": "change", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Change access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "full_control", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Full Control access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "principal", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The user or group who is the subject of this rule, and their domain.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "read", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Read access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ "id", - "os", - "remote", - "status", - "throttle", - "type", - "version" - ] + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /arrays/ssh-certificate-authority-policies", + "endpoint": "PATCH /snmp-agents", "cmdlets": [ - "New-PfbArraySshCaPolicy" + "Update-PfbSnmpAgent" ], - "missingParameters": [ - "context_names" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "v2c", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "v3", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "version", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Version of the SNMP protocol to be used by an SNMP manager in communications with Purity's SNMP agent.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "v2c", + "v3" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "engine_id", + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /audit-file-systems-policies/members", + "endpoint": "PATCH /snmp-managers", "cmdlets": [ - "New-PfbAuditFileSystemPolicyMember" + "Update-PfbSnmpManager" ], - "missingParameters": [ - "context_names" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "host", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "DNS hostname or IP address of a computer that hosts an SNMP manager to which Purity is to send trap messages when it generates alerts.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "notification", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The type of notification the agent will send.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "inform", + "trap" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "v2c", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "v3", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "version", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Version of the SNMP protocol to be used by Purity in communications with the specified manager.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "v2c", + "v3" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /audit-object-store-policies/members", + "endpoint": "PATCH /ssh-certificate-authority-policies", "cmdlets": [ - "New-PfbAuditObjectStorePolicyMember" + "Update-PfbSshCaPolicy" ], - "missingParameters": [ - "context_names" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "signing_authority", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to the authority that will digitally sign user SSH certificates that will be used to access the system.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "static_authorized_principals", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "If not specified - users affected by this policy can only log into the system when they present an SSH certificate containing their own username as a principle.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /certificates/certificate-groups", + "endpoint": "PATCH /sso/oidc/idps", "cmdlets": [ - "New-PfbCertificateCertificateGroup" + "Update-PfbOidcIdp" ], - "missingParameters": [ - "certificate_group_ids", - "certificate_ids" - ] + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the OIDC SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbOidcIdp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "idp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbOidcIdp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A new name for the provider", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbOidcIdp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Services that the OIDC SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbOidcIdp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "prn" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /data-eviction-policies/file-systems", + "endpoint": "PATCH /sso/saml2/idps", "cmdlets": [ - "Add-PfbDataEvictionPolicyFileSystem" + "Update-PfbSaml2Idp" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "array_url", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The URL of the array.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "binding", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "SAML2 binding to use for the request from Flashblade to the Identity Provider.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the SAML2 SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "idp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "management", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Services that the SAML2 SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "sp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/Update-PfbSaml2Idp.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "prn" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /storage-class-tiering-policies", + "cmdlets": [ + "Update-PfbStorageClassTieringPolicy" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "archival_rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of archival rules for this policy.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "retrieval_rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of retrieval rules for this policy.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /subnets", + "cmdlets": [ + "Update-PfbSubnet" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "link_aggregation_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the associated LAG.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbSubnet.ps1", + "paramBlockLine": 34, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "vlan", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "VLAN ID.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/Update-PfbSubnet.ps1", + "paramBlockLine": 34, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /support", + "cmdlets": [ + "Update-PfbSupport" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "edge_agent_update_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "The switch to enable opt-in for edge agent updates.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "edge_management_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "The switch to enable opt-in for edge management.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "phonehome_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "The switch to enable phonehome.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "proxy", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "remote_assist_active", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "The switch to open all remote-assist sessions.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "remote_assist_duration", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Specifies the duration of the remote-assist session in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name", + "remote_assist_expires", + "remote_assist_opened", + "remote_assist_paths", + "remote_assist_status" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /support/verification-keys", + "cmdlets": [ + "Update-PfbSupportVerificationKey" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "signed_verification_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the signed verification key.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Support/Update-PfbSupportVerificationKey.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /syslog-servers", + "cmdlets": [ + "Update-PfbSyslogServer" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Valid values are `data-audit` and `management`.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [ + "data-audit", + "management" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Monitoring/Update-PfbSyslogServer.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "sources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The network interfaces used for communication with the syslog server.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSyslogServer.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "uri", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The URI of the syslog server in the format PROTOCOL://HOSTNAME:PORT.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSyslogServer.ps1", + "paramBlockLine": 35, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /syslog-servers/settings", + "cmdlets": [ + "Update-PfbSyslogServerSettings" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ + { + "name": "ca_certificate", + "type": "object", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSyslogServerSettings.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ca_certificate_group", + "type": "object", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/Update-PfbSyslogServerSettings.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /targets", + "cmdlets": [ + "Update-PfbTarget" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "address", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "IP address or FQDN of the target system.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbTarget.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The group of CA certificates that can be used, in addition to well-known Certificate Authority certificates, in order to establish a secure connection to the target system.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/Update-PfbTarget.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Replication/Update-PfbTarget.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "status", + "status_details" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /tls-policies", + "cmdlets": [ + "Update-PfbTlsPolicy" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "appliance_certificate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to a certificate that will be presented as the server certificate in TLS negotiations with any clients that connect to appliance network addresses to which this policy applies.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "client_certificates_required", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, then all clients negotiating TLS connections with network interfaces to which this policy applies will be required to provide their client certificates during TLS negotiation.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "disabled_tls_ciphers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "If specified, disables the specific TLS ciphers.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled_tls_ciphers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "If specified, enables only the specified TLS ciphers.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_tls_version", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The minimum TLS version that will be allowed for inbound connections on IPs to which this policy applies.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "trusted_client_certificate_authority", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to a certificate or certificate group.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "verify_client_certificate_trust", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, then any certificate presented by a client in TLS negotiation will undergo strict trust verification using the certificate(s) referenced by `trusted_client_certificate_authority`.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbTlsPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /workloads", + "cmdlets": [ + "Update-PfbWorkload" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [ + "destroyed" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Workloads\\Update-PfbWorkload.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] }, { - "endpoint": "POST /file-system-replica-links/policies", + "endpoint": "PATCH /worm-data-policies", "cmdlets": [ - "New-PfbFileSystemReplicaLinkPolicy" + "Update-PfbWormPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "default_retention", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Default retention period, in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_retention", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Maximum retention period, in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "min_retention", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Minimum retention period, in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "mode", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The type of the retention lock.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "retention_lock", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "If set to `locked`, then the value of retention attributes or policy attributes are not allowed to change.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "unlocked", + "locked" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/Update-PfbWormPolicy.ps1", + "paramBlockLine": 34, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "name", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /active-directory", + "cmdlets": [ + "New-PfbActiveDirectory" + ], + "missingQueryParameters": [ + "join_existing_account", + "names" + ], + "missingBodyProperties": [ + "ca_certificate", + "ca_certificate_group", + "computer_name", + "directory_servers", + "domain", + "encryption_types", + "fqdns", + "global_catalog_servers", + "join_ou", + "kerberos_servers", + "password", + "service_principal_names", + "user" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\DirectoryService\\New-PfbActiveDirectory.ps1", + "line": 40 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /admins/api-tokens", + "cmdlets": [ + "New-PfbApiToken" ], - "missingParameters": [ + "missingQueryParameters": [ + "admin_ids", + "admin_names", "context_names", - "local_file_system_ids", - "local_file_system_names", - "remote_ids", - "remote_names" - ] + "timeout" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] }, { - "endpoint": "POST /file-systems/audit-policies", + "endpoint": "POST /admins/management-access-policies", "cmdlets": [ - "New-PfbFileSystemAuditPolicy" + "New-PfbAdminManagementAccessPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } ] }, { - "endpoint": "POST /file-systems/policies", + "endpoint": "POST /admins/ssh-certificate-authority-policies", "cmdlets": [ - "New-PfbFileSystemPolicy" + "New-PfbAdminSshCaPolicy" ], - "missingParameters": [ + "missingQueryParameters": [ "context_names" - ] + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /api-clients", + "cmdlets": [ + "New-PfbApiClient" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "access_policies", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The access policies allowed for ID Tokens issued by this API client.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "access_token_ttl_in_ms", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The TTL (Time To Live) duration for which the exchanged access token is valid.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "issuer", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The name of the identity provider that will be issuing ID Tokens for this API client.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "max_role", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "public_key", + "type": "string", + "format": null, + "specRequired": true, + "synopsis": "The API client's PEM formatted (Base64 encoded) RSA public key.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /array-connections", + "cmdlets": [ + "New-PfbArrayConnection" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "ca_certificate_group", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The group of CA certificates that can be used, in addition to well-known Certificate Authority certificates, in order to establish a secure connection to the target array.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbArrayConnection.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "encrypted", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If this is set to `true`, then all customer data replicated over the connection will be sent over an encrypted connection using TLS, or will not be sent if a secure connection cannot be established.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbArrayConnection.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "remote", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The remote array.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbArrayConnection.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "throttle", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbArrayConnection.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "os", + "status", + "type", + "version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /arrays/erasures", + "cmdlets": [ + "New-PfbArrayErasure" + ], + "missingQueryParameters": [ + "eradicate_all_data", + "preserve_configuration_data", + "skip_phonehome_check" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /arrays/ssh-certificate-authority-policies", + "cmdlets": [ + "New-PfbArraySshCaPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /audit-file-systems-policies", + "cmdlets": [ + "New-PfbAuditFileSystemPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "control_type", + "enabled", + "location", + "log_targets", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbAuditFileSystemPolicy.ps1", + "line": 35 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /audit-file-systems-policies/members", + "cmdlets": [ + "New-PfbAuditFileSystemPolicyMember" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /audit-object-store-policies", + "cmdlets": [ + "New-PfbAuditObjectStorePolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "log_targets", + "name" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbAuditObjectStorePolicy.ps1", + "line": 35 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /audit-object-store-policies/members", + "cmdlets": [ + "New-PfbAuditObjectStorePolicyMember" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets", + "cmdlets": [ + "New-PfbBucket" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "bucket_type", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The bucket type for the bucket.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "classic", + "multi-site-writable" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "eradication_config", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "hard_limit_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the bucket's size, as defined by `quota_limit`, is used as a hard limit quota.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "object_lock_config", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "retention_lock", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "If set to `ratcheted`, then `object_lock_config.default_retention_mode` cannot be changed if set to `compliance`.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "unlocked", + "ratcheted" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets/audit-filters", + "cmdlets": [ + "New-PfbBucketAuditFilter" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of ops to be audited by this filter.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "s3_prefixes", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of object name prefixes.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets/bucket-access-policies", + "cmdlets": [ + "New-PfbBucketAccessPolicy" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names" + ], + "missingBodyProperties": [ + { + "name": "rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketAccessPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets/bucket-access-policies/rules", + "cmdlets": [ + "New-PfbBucketAccessPolicyRule" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "principals", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The principals to which this rule applies.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "resources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of resources which this rule applies to.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "effect" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", + "cmdlets": [ + "New-PfbBucketCorsPolicy" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names" + ], + "missingBodyProperties": [ + { + "name": "rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketCorsPolicy.ps1", + "paramBlockLine": 36, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", + "cmdlets": [ + "New-PfbBucketCorsPolicyRule" + ], + "missingQueryParameters": [ + "bucket_ids", + "bucket_names", + "context_names", + "names", + "policy_names" + ], + "missingBodyProperties": [ + { + "name": "allowed_headers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of headers that are permitted to be included in cross-origin requests to access a bucket.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "allowed_methods", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of HTTP methods that are permitted for cross-origin requests to access a bucket.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "allowed_origins", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of origins (domains) that are permitted to make cross-origin requests to access a bucket.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /certificates", + "cmdlets": [ + "New-PfbCertificate" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "certificate", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "certificate_type", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The type of certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "appliance", + "external" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "common_name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The common name field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "country", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The country field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "days", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The number of days that the self-signed certificate is valid.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "email", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The email field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "intermediate_certificate", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Intermediate certificate chains.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "key_algorithm", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The key algorithm used to generate the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "key_size", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The size (in bits) of the private key for the certificate.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "locality", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The locality field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "organization", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The organization field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "organizational_unit", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The organizational unit field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "passphrase", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The passphrase used to encrypt `private_key`.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "private_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the private key.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "state", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state/province field listed in the certificate.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "subject_alternative_names", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The alternative names that are secured by this certificate.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /certificates/certificate-groups", + "cmdlets": [ + "New-PfbCertificateCertificateGroup" + ], + "missingQueryParameters": [ + "certificate_group_ids", + "certificate_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /certificates/certificate-signing-requests", + "cmdlets": [ + "New-PfbCertificateSigningRequest" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "certificate", + "common_name", + "country", + "email", + "locality", + "organization", + "organizational_unit", + "state", + "subject_alternative_names" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Certificate\\New-PfbCertificateSigningRequest.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /data-eviction-policies", + "cmdlets": [ + "New-PfbDataEvictionPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Disabled", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\DataEviction\\New-PfbDataEvictionPolicy.ps1", + "line": 31 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /data-eviction-policies/file-systems", + "cmdlets": [ + "Add-PfbDataEvictionPolicyFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /directory-services/local/directory-services", + "cmdlets": [ + "New-PfbLocalDirectoryService" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /directory-services/local/groups", + "cmdlets": [ + "New-PfbLocalGroup" + ], + "missingQueryParameters": [ + "context_names", + "local_directory_service_ids", + "local_directory_service_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /directory-services/local/groups/members", + "cmdlets": [ + "New-PfbLocalGroupMember" + ], + "missingQueryParameters": [ + "context_names", + "group_gids", + "group_sids", + "local_directory_service_ids" + ], + "missingBodyProperties": [ + "members" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Member", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\DirectoryService\\New-PfbLocalGroupMember.ps1", + "line": 35 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /directory-services/roles", + "cmdlets": [ + "New-PfbDirectoryServiceRole" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "group", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Common Name (CN) of the directory service group containing users with authority level of the specified role name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "group_base", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies where the configured group is located in the directory tree.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "management_access_policies", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of management access policies associated with the directory service role.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "role", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /dns", + "cmdlets": [ + "New-PfbDns" + ], + "missingQueryParameters": [ + "context_names", + "names" + ], + "missingBodyProperties": [ + "ca_certificate", + "ca_certificate_group", + "domain", + "nameservers", + "services", + "sources" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Network\\New-PfbDns.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-system-exports", + "cmdlets": [ + "New-PfbFileSystemExport" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-system-replica-links", + "cmdlets": [ + "New-PfbFileSystemReplicaLink" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "local_file_system_ids", + "remote_ids" + ], + "missingBodyProperties": [ + { + "name": "direction", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [ + "inbound", + "outbound" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + }, + { + "name": "link_type", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Type of the replica link.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + }, + { + "name": "local_file_system", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to a local file system.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + }, + { + "name": "policies", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + }, + { + "name": "remote", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to a remote array or realm.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + }, + { + "name": "remote_file_system", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to a remote file system.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false + } + } + ], + "readOnlyFields": [ + "context", + "id", + "lag", + "recovery_point", + "status", + "status_details" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-system-replica-links/policies", + "cmdlets": [ + "New-PfbFileSystemReplicaLinkPolicy" + ], + "missingQueryParameters": [ + "context_names", + "local_file_system_ids", + "local_file_system_names", + "remote_ids", + "remote_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-system-snapshots", + "cmdlets": [ + "New-PfbFileSystemSnapshot" + ], + "missingQueryParameters": [ + "context_names", + "source_ids", + "source_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "SourceName", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystemSnapshot\\New-PfbFileSystemSnapshot.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-systems", + "cmdlets": [ + "New-PfbFileSystem" + ], + "missingQueryParameters": [ + "context_names", + "default_exports", + "discard_non_snapshotted_data", + "include_snapshot", + "overwrite", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ + "fast_remove_directory_enabled", + "hard_limit_enabled", + "http", + "multi_protocol", + "nfs", + "node_group", + "smb", + "snapshot_directory_enabled", + "workload", + "writable" + ], + "readOnlyFields": [ + "requested_promotion_state" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FastRemoveDirectoryEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 139 + }, + { + "parameter": "HardLimit", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 93 + }, + { + "parameter": "Http", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 126 + }, + { + "parameter": "MultiProtocolAccessControlStyle", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 129 + }, + { + "parameter": "Nfs", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 102 + }, + { + "parameter": "NfsExportPolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 114 + }, + { + "parameter": "NfsRules", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 111 + }, + { + "parameter": "NfsV3", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 105 + }, + { + "parameter": "NfsV41", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 108 + }, + { + "parameter": "SafeguardAcls", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 133 + }, + { + "parameter": "Smb", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 117 + }, + { + "parameter": "SmbClientPolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 123 + }, + { + "parameter": "SmbSharePolicy", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 120 + }, + { + "parameter": "SnapshotDirectoryEnabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 136 + }, + { + "parameter": "Writable", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\FileSystem\\New-PfbFileSystem.ps1", + "line": 150 + } + ], + "escapeHatchOnly": [ + "FastRemoveDirectoryEnabled", + "HardLimit", + "Http", + "MultiProtocolAccessControlStyle", + "Nfs", + "NfsExportPolicy", + "NfsRules", + "NfsV3", + "NfsV41", + "SafeguardAcls", + "Smb", + "SmbClientPolicy", + "SmbSharePolicy", + "SnapshotDirectoryEnabled", + "Writable" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-systems/audit-policies", + "cmdlets": [ + "New-PfbFileSystemAuditPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-systems/locks/nlm-reclamations", + "cmdlets": [ + "New-PfbNlmReclamation" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /file-systems/policies", + "cmdlets": [ + "New-PfbFileSystemPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /fleets", + "cmdlets": [ + "New-PfbFleet" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Replication\\New-PfbFleet.ps1", + "line": 30 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /fleets/members", + "cmdlets": [ + "New-PfbFleetMember" + ], + "missingQueryParameters": [ + "fleet_ids" + ], + "missingBodyProperties": [ + { + "name": "members", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Info about the members being added to fleet.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Replication/New-PfbFleetMember.ps1", + "paramBlockLine": 31, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /keytabs", + "cmdlets": [ + "New-PfbKeytab" + ], + "missingQueryParameters": [ + "name_prefixes" + ], + "missingBodyProperties": [ + { + "name": "source", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "A reference to the Active Directory configuration for the computer account whose keys will be rotated in order to create new keytabs for all of its registered service principal names.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbKeytab.ps1", + "paramBlockLine": 26, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /keytabs/upload", + "cmdlets": [ + "New-PfbKeytabUpload" + ], + "missingQueryParameters": [ + "name_prefixes" + ], + "missingBodyProperties": [ + { + "name": "keytab_file", + "type": null, + "format": null, + "specRequired": true, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbKeytabUpload.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /legal-holds", + "cmdlets": [ + "New-PfbLegalHold" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "description", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The description of the legal hold instance.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLegalHold.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /legal-holds/held-entities", + "cmdlets": [ + "New-PfbLegalHoldEntity" + ], + "missingQueryParameters": [ + "file_system_ids", + "file_system_names", + "ids", + "names", + "paths", + "recursive" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /lifecycle-rules", + "cmdlets": [ + "New-PfbLifecycleRule" + ], + "missingQueryParameters": [ + "confirm_date", + "context_names" + ], + "missingBodyProperties": [ + { + "name": "abort_incomplete_multipart_uploads_after", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "keep_current_version_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "keep_current_version_until", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "keep_previous_version_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Time after which previous versions will be marked expired.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "prefix", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Object key prefix identifying one or more objects in the bucket.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + }, + { + "name": "rule_id", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Identifier for the rule that is unique to the bucket that it applies to.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /link-aggregation-groups", + "cmdlets": [ + "New-PfbLag" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "ports" + ], + "readOnlyFields": [ + "id", + "lag_speed", + "mac_address", + "name", + "port_speed", + "status" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Misc\\New-PfbLag.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /log-targets/file-systems", + "cmdlets": [ + "New-PfbLogTargetFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "file_system", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The target filesystem where audit logs will be stored.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "keep_for", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Specifies the period that audit logs are retained before they are deleted, in milliseconds.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "keep_size", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Specifies the maximum size of audit logs to be retained.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /log-targets/object-store", + "cmdlets": [ + "New-PfbLogTargetObjectStore" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "bucket", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the bucket where audit logs will be stored.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "log_name_prefix", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The prefix of the audit log object.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "log_rotate", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The threshold after which the audit log object will be rotated.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /maintenance-windows", + "cmdlets": [ + "New-PfbMaintenanceWindow" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + { + "name": "timeout", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "Duration of a maintenance window measured in milliseconds.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Misc/New-PfbMaintenanceWindow.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /management-access-policies", + "cmdlets": [ + "New-PfbManagementAccessPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "aggregation_strategy", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "When this is set to `least-common-permissions`, any users to whom this policy applies can receive no access rights exceeding those defined in this policy's capability and resource.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "All of the rules that are part of this policy.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } + ] + }, + { + "endpoint": "POST /management-access-policies/admins", + "cmdlets": [ + "New-PfbManagementAccessPolicyAdmin" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [ + { + "matchType": "endpoint", + "match": "management-access-policies", + "kind": "liveTestingHazard", + "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", + "reference": null + } + ] + }, + { + "endpoint": "POST /network-access-policies/rules", + "cmdlets": [ + "New-PfbNetworkAccessRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "versions" + ], + "missingBodyProperties": [ + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted or denied access to the interface.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "If set to `allow`, the specified client will be permitted to access the specified interfaces.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "interfaces", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Specifies which product interfaces this rule applies to, whether it is permitting or denying access.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [ + "management-ssh", + "management-rest-api", + "management-web-ui", + "snmp", + "local-network-superuser-password-access" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /network-interfaces", + "cmdlets": [ + "New-PfbNetworkInterface" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "attached_servers", + "subnet" + ], + "readOnlyFields": [ + "enabled", + "gateway", + "id", + "mtu", + "name", + "netmask", + "realms", + "vlan" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "AttachedServers", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Network\\New-PfbNetworkInterface.ps1", + "line": 55 + } + ], + "escapeHatchOnly": [ + "AttachedServers" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /network-interfaces/tls-policies", + "cmdlets": [ + "New-PfbNetworkInterfaceTlsPolicy" + ], + "missingQueryParameters": [ + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /nfs-export-policies", + "cmdlets": [ + "New-PfbNfsExportPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbNfsExportPolicy.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /nfs-export-policies/rules", + "cmdlets": [ + "New-PfbNfsExportRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "context_names", + "versions" + ], + "missingBodyProperties": [ + { + "name": "access", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies access control for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "root-squash", + "all-squash", + "no-squash" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "anongid", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Any user whose GID is affected by an `access` of `root_squash` or `all_squash` will have their GID mapped to `anongid`.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "anonuid", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "Any user whose UID is affected by an `access` of `root_squash` or `all_squash` will have their UID mapped to `anonuid`.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "atime", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, after a read operation has occurred, the inode access time is updated only if any of the following conditions is true: the previous access time is less than the inode modify time, the previous access time is less than the inode change time, or the previous access time is more than 24 hours ago.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "fileid_32bit", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "Whether the file id is 32 bits or not.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "permission", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "required_transport_security", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the minimum transport security required for clients to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "secure", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, prevents NFS access to client connections coming from non-reserved ports.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "security", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The security flavors to use for accessing files on this mount point.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "name", + "policy_version" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /node-groups", + "cmdlets": [ + "New-PfbNodeGroup" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Node\\New-PfbNodeGroup.ps1", + "line": 30 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /node-groups/nodes", + "cmdlets": [ + "New-PfbNodeGroupNode" + ], + "missingQueryParameters": [ + "node_group_ids", + "node_group_names", + "node_ids", + "node_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-access-keys", + "cmdlets": [ + "New-PfbObjectStoreAccessKey" + ], + "missingQueryParameters": [ + "context_names", + "names" + ], + "missingBodyProperties": [ + { + "name": "secret_access_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The secret access key to import from another FlashBlade.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessKey.ps1", + "paramBlockLine": 17, + "payloadVariable": "body", + "assignmentStyle": "literal", + "hasAttributes": false + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-access-policies", + "cmdlets": [ + "New-PfbObjectStoreAccessPolicy" + ], + "missingQueryParameters": [ + "context_names", + "enforce_action_restrictions" + ], + "missingBodyProperties": [ + { + "name": "description", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A description of the policy, optionally specified when the policy is created.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "rules", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-access-policies/object-store-roles", + "cmdlets": [ + "New-PfbObjectStoreAccessPolicyRole" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-access-policies/object-store-users", + "cmdlets": [ + "New-PfbObjectStoreAccessPolicyUser" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-access-policies/rules", + "cmdlets": [ + "New-PfbObjectStoreAccessPolicyRule" + ], + "missingQueryParameters": [ + "context_names", + "enforce_action_restrictions", + "names", + "policy_ids" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "conditions", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "resources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of resources which this rule applies to.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-account-exports", + "cmdlets": [ + "New-PfbObjectStoreAccountExport" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "member_names", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ + { + "name": "export_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the account export is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccountExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "server", + "type": null, + "format": null, + "specRequired": true, + "synopsis": "Reference to the server the export will be visible on.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccountExport.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-accounts", + "cmdlets": [ + "New-PfbObjectStoreAccount" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "account_exports", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of exports to be created for the account.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + }, + { + "name": "bucket_defaults", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Default settings to be applied to newly created buckets associated with this account.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + }, + { + "name": "hard_limit_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the account's size, as defined by `quota_limit`, is used as a hard limit quota.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + }, + { + "name": "quota_limit", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The effective quota limit to be applied against the size of the account, displayed in bytes.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-remote-credentials", + "cmdlets": [ + "New-PfbObjectStoreRemoteCredential" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "access_key_id", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Access Key ID to be used when connecting to a remote object store.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "secret_access_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Secret Access Key to be used when connecting to a remote object store.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-roles", + "cmdlets": [ + "New-PfbObjectStoreRole" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "max_session_duration", + "type": "integer", + "format": null, + "specRequired": false, + "synopsis": "Maximum session duration in milliseconds.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreRole.ps1", + "paramBlockLine": 37, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-roles/object-store-access-policies", + "cmdlets": [ + "New-PfbObjectStoreRoleAccessPolicy" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-roles/object-store-trust-policies/rules", + "cmdlets": [ + "New-PfbObjectStoreTrustPolicyRule" + ], + "missingQueryParameters": [ + "context_names", + "names", + "role_ids", + "role_names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "conditions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "policy", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "principals", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "List of Identity Providers", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "effect" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-users", + "cmdlets": [ + "New-PfbObjectStoreUser" + ], + "missingQueryParameters": [ + "context_names", + "full_access" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-users/object-store-access-policies", + "cmdlets": [ + "New-PfbObjectStoreUserAccessPolicy" + ], + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /object-store-virtual-hosts", + "cmdlets": [ + "New-PfbObjectStoreVirtualHost" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "attached_servers", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "A list of servers which are allowed to use this virtual host.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/ObjectStore/New-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 42, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "name", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /policies", + "cmdlets": [ + "New-PfbPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms", + "retention_lock" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbPolicy.ps1", + "line": 23 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /policies/file-system-replica-links", + "cmdlets": [ + "New-PfbPolicyFileSystemReplicaLink" + ], + "missingQueryParameters": [ + "context_names", + "local_file_system_ids", + "local_file_system_names", + "remote_ids", + "remote_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /policies/file-systems", + "cmdlets": [ + "New-PfbPolicyFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /presets/workload", + "cmdlets": [ + "New-PfbPresetWorkload" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "description", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A brief description of the workload the preset will configure.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "directory_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The file systems and managed directories that will be provisioned by the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "export_configurations", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "NFS, SMB, and SMB share policy configuration to be specified in file system and directory exports.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "parameters", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The parameters to prompt the user when they deploy workloads from the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "periodic_replication_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The periodic replication configurations that can be applied to storage resources (such as volumes) within the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "placement_configurations", + "type": "array", + "format": null, + "specRequired": true, + "synopsis": "The placement configurations that can be applied to storage resources (such as volumes) within the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "platform_features", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [ + "fa_block", + "fa_file", + "fb_file" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "qos_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The QoS configurations that can be applied to storage resources (such as volumes) within the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "quota_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The quota configurations that can be applied to storage resources (such as file systems and directories) within the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "snapshot_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The snapshot configurations that can be applied to storage resources (such as volumes) within the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "volume_configurations", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The volumes that will be provisioned by the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "workload_tags", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The tags that will be associated with workloads provisioned by the preset.", + "suggestedPowerShellType": "[object[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "workload_type", + "type": "string", + "format": null, + "specRequired": true, + "synopsis": "The type of workload the preset will configure.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "Clarity", + "Epic", + "Exchange", + "File", + "MsSQL", + "MySQL", + "Oracle", + "PostgreSQL", + "SAP-Hana", + "SAP", + "VDI", + "VSI", + "Wfs", + "Zerto", + "Custom" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "revision" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /public-keys", + "cmdlets": [ + "New-PfbPublicKey" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "public_key", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The text of the public key.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbPublicKey.ps1", + "paramBlockLine": 37, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /qos-policies", + "cmdlets": [ + "New-PfbQosPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbQosPolicy.ps1", + "paramBlockLine": 33, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "location", + "type": null, + "format": null, + "specRequired": false, + "synopsis": "Reference to the array where the policy is defined.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbQosPolicy.ps1", + "paramBlockLine": 33, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_total_bytes_per_sec", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The maximum allowed bytes/s totaled across all the clients.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbQosPolicy.ps1", + "paramBlockLine": 33, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "max_total_ops_per_sec", + "type": "integer", + "format": "int64", + "specRequired": false, + "synopsis": "The maximum allowed operations/s totaled across all the clients.", + "suggestedPowerShellType": "[long]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbQosPolicy.ps1", + "paramBlockLine": 33, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "name", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/New-PfbQosPolicy.ps1", + "paramBlockLine": 33, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /qos-policies/members", + "cmdlets": [ + "New-PfbQosPolicyMember" + ], + "missingQueryParameters": [ + "context_names", + "member_types" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /quotas/groups", + "cmdlets": [ + "New-PfbQuotaGroup" + ], + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "gids", + "group_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /quotas/users", + "cmdlets": [ + "New-PfbQuotaUser" + ], + "missingQueryParameters": [ + "context_names", + "file_system_ids", + "file_system_names", + "uids", + "user_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\New-PfbQuotaUser.ps1", + "line": 42 + }, + { + "parameter": "UserId", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\New-PfbQuotaUser.ps1", + "line": 44 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Quota\\New-PfbQuotaUser.ps1", + "line": 43 + } + ], + "escapeHatchOnly": [ + "FileSystemName", + "UserId", + "UserName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /realms", + "cmdlets": [ + "New-PfbRealm" + ], + "missingQueryParameters": [ + "without_default_access_list" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /s3-export-policies", + "cmdlets": [ + "New-PfbS3ExportPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "rules" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbS3ExportPolicy.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /s3-export-policies/rules", + "cmdlets": [ + "New-PfbS3ExportRule" + ], + "missingQueryParameters": [ + "context_names", + "names" + ], + "missingBodyProperties": [ + { + "name": "actions", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/New-PfbS3ExportRule.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "effect", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Policy/New-PfbS3ExportRule.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "resources", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "The list of resources from the account to which this rule applies to.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbS3ExportRule.ps1", + "paramBlockLine": 41, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /servers", + "cmdlets": [ + "New-PfbServer" + ], + "missingQueryParameters": [ + "create_ds", + "create_local_directory_service" + ], + "missingBodyProperties": [ + "dns" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "CreateDirectoryService", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Server\\New-PfbServer.ps1", + "line": 40 + }, + { + "parameter": "DnsName", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Server\\New-PfbServer.ps1", + "line": 34 + } + ], + "escapeHatchOnly": [ + "CreateDirectoryService", + "DnsName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /smb-client-policies", + "cmdlets": [ + "New-PfbSmbClientPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "access_based_enumeration_enabled", + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbSmbClientPolicy.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /smb-client-policies/rules", + "cmdlets": [ + "New-PfbSmbClientRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "context_names", + "versions" + ], + "missingBodyProperties": [ + { + "name": "client", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "encryption", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies whether the remote client is required to use SMB encryption.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "required", + "disabled", + "optional" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "index", + "type": "integer", + "format": "int32", + "specRequired": false, + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "permission", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbSmbClientRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /smb-share-policies", + "cmdlets": [ + "New-PfbSmbSharePolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbSmbSharePolicy.ps1", + "line": 36 + } + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /smb-share-policies/rules", + "cmdlets": [ + "New-PfbSmbShareRule" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + { + "name": "change", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Change access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "full_control", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Full Control access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "principal", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The user or group who is the subject of this rule, and optionally their domain.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Policy/New-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + }, + { + "name": "read", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The state of the principal's Read access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", + "target": { + "file": "Public/Policy/New-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /snmp-managers", + "cmdlets": [ + "New-PfbSnmpManager" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "host", + "notification", + "v2c", + "v3", + "version" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Monitoring\\New-PfbSnmpManager.ps1", + "line": 33 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /software-check", + "cmdlets": [ + "New-PfbSoftwareCheck" + ], + "missingQueryParameters": [ + "software_names", + "software_versions" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /ssh-certificate-authority-policies", + "cmdlets": [ + "New-PfbSshCaPolicy" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "enabled", + "location", + "name", + "signing_authority", + "static_authorized_principals" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbSshCaPolicy.ps1", + "line": 30 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /ssh-certificate-authority-policies/admins", + "cmdlets": [ + "New-PfbSshCaPolicyAdmin" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /ssh-certificate-authority-policies/arrays", + "cmdlets": [ + "New-PfbSshCaPolicyArray" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /sso/oidc/idps", + "cmdlets": [ + "New-PfbOidcIdp" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the OIDC SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "idp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Services that the OIDC SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "prn" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /sso/saml2/idps", + "cmdlets": [ + "New-PfbSaml2Idp" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "array_url", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "The URL of the array.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "binding", + "type": "string", + "format": null, + "specRequired": false, + "synopsis": "SAML2 binding to use for the request from Flashblade to the Identity Provider.", + "suggestedPowerShellType": "[string]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If set to `true`, the SAML2 SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "idp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "management", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "services", + "type": "array", + "format": null, + "specRequired": false, + "synopsis": "Services that the SAML2 SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", + "enumValues": [], + "enumStatus": "not-found-in-resource", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + }, + { + "name": "sp", + "type": null, + "format": null, + "specRequired": false, + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "prn" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /storage-class-tiering-policies", + "cmdlets": [ + "New-PfbStorageClassTieringPolicy" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "archival_rules", + "enabled", + "location", + "name", + "retrieval_rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbStorageClassTieringPolicy.ps1", + "line": 30 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /subnets", + "cmdlets": [ + "New-PfbSubnet" + ], + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /support-diagnostics", + "cmdlets": [ + "New-PfbSupportDiagnostics" + ], + "missingQueryParameters": [ + "analysis_period_end_time", + "analysis_period_start_time" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /syslog-servers", + "cmdlets": [ + "New-PfbSyslogServer" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "services", + "sources", + "uri" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Monitoring\\New-PfbSyslogServer.ps1", + "line": 32 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /targets", + "cmdlets": [ + "New-PfbTarget" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "address" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Replication\\New-PfbTarget.ps1", + "line": 31 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /tls-policies", + "cmdlets": [ + "New-PfbTlsPolicy" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [ + "appliance_certificate", + "client_certificates_required", + "disabled_tls_ciphers", + "enabled", + "enabled_tls_ciphers", + "location", + "min_tls_version", + "name", + "trusted_client_certificate_authority", + "verify_client_certificate_trust" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbTlsPolicy.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /workloads", + "cmdlets": [ + "New-PfbWorkload" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /workloads/placement-recommendations", + "cmdlets": [ + "New-PfbWorkloadPlacementRecommendation" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "additional_constraints", + "parameters", + "preset", + "projection_months", + "recommendation_engine", + "results_limit" + ], + "readOnlyFields": [ + "context", + "created", + "expires", + "id", + "more_results_available", + "name", + "progress", + "results", + "status" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Inputs", + "surface": "TypedUnresolved", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Workloads\\New-PfbWorkloadPlacementRecommendation.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [], + "caveat": "one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /worm-data-policies", + "cmdlets": [ + "New-PfbWormPolicy" + ], + "missingQueryParameters": [ + "context_names", + "names" + ], + "missingBodyProperties": [ + "default_retention", + "enabled", + "location", + "max_retention", + "min_retention", + "mode", + "retention_lock" + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "name", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "C:\\Users\\Justin\\Documents\\GitProjects\\fb-powershell\\fb-powershell\\.claude\\worktrees\\drift-report-actionable\\Public\\Policy\\New-PfbWormPolicy.ps1", + "line": 30 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + } + ], + "systemicGaps": [ + { + "name": "context_names", + "endpointCount": 253, + "queryEndpointCount": 253, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "DELETE /admins/cache", + "DELETE /admins/management-access-policies", + "DELETE /admins/ssh-certificate-authority-policies", + "DELETE /array-connections", + "DELETE /arrays/ssh-certificate-authority-policies", + "DELETE /audit-file-systems-policies", + "DELETE /audit-file-systems-policies/members", + "DELETE /audit-object-store-policies", + "DELETE /audit-object-store-policies/members", + "DELETE /buckets/audit-filters", + "DELETE /buckets/bucket-access-policies", + "DELETE /buckets/bucket-access-policies/rules", + "DELETE /buckets/cross-origin-resource-sharing-policies", + "DELETE /buckets/cross-origin-resource-sharing-policies/rules", + "DELETE /data-eviction-policies", + "DELETE /data-eviction-policies/file-systems", + "DELETE /directory-services/local/groups", + "DELETE /directory-services/local/groups/members", + "DELETE /dns", + "DELETE /file-system-exports", + "DELETE /file-system-replica-links", + "DELETE /file-system-replica-links/policies", + "DELETE /file-system-snapshots/policies", + "DELETE /file-system-snapshots/transfer", + "DELETE /file-systems/audit-policies", + "DELETE /file-systems/locks", + "DELETE /file-systems/policies", + "DELETE /lifecycle-rules", + "DELETE /log-targets/file-systems", + "DELETE /log-targets/object-store", + "DELETE /management-access-policies", + "DELETE /management-access-policies/admins", + "DELETE /nfs-export-policies", + "DELETE /nfs-export-policies/rules", + "DELETE /object-store-access-keys", + "DELETE /object-store-access-policies", + "DELETE /object-store-access-policies/object-store-roles", + "DELETE /object-store-access-policies/object-store-users", + "DELETE /object-store-access-policies/rules", + "DELETE /object-store-account-exports", + "DELETE /object-store-accounts", + "DELETE /object-store-remote-credentials", + "DELETE /object-store-roles", + "DELETE /object-store-roles/object-store-access-policies", + "DELETE /object-store-roles/object-store-trust-policies/rules", + "DELETE /object-store-users", + "DELETE /object-store-users/object-store-access-policies", + "DELETE /object-store-virtual-hosts", + "DELETE /policies", + "DELETE /policies/file-system-replica-links", + "DELETE /policies/file-systems", + "DELETE /presets/workload", + "DELETE /qos-policies", + "DELETE /qos-policies/members", + "DELETE /s3-export-policies", + "DELETE /s3-export-policies/rules", + "DELETE /smb-client-policies", + "DELETE /smb-client-policies/rules", + "DELETE /smb-share-policies", + "DELETE /smb-share-policies/rules", + "DELETE /ssh-certificate-authority-policies/admins", + "DELETE /ssh-certificate-authority-policies/arrays", + "DELETE /workloads", + "DELETE /workloads/tags", + "DELETE /worm-data-policies", + "GET /active-directory/test", + "GET /admins", + "GET /admins/api-tokens", + "GET /admins/cache", + "GET /admins/management-access-policies", + "GET /admins/ssh-certificate-authority-policies", + "GET /array-connections", + "GET /array-connections/path", + "GET /arrays/http-specific-performance", + "GET /arrays/nfs-specific-performance", + "GET /arrays/performance", + "GET /arrays/performance/replication", + "GET /arrays/s3-specific-performance", + "GET /arrays/space", + "GET /arrays/ssh-certificate-authority-policies", + "GET /audit-file-systems-policies", + "GET /audit-file-systems-policies/members", + "GET /audit-file-systems-policy-operations", + "GET /audit-object-store-policies", + "GET /audit-object-store-policies/members", + "GET /bucket-audit-filter-actions", + "GET /bucket-replica-links", + "GET /buckets", + "GET /buckets/audit-filters", + "GET /buckets/bucket-access-policies", + "GET /buckets/bucket-access-policies/rules", + "GET /buckets/cross-origin-resource-sharing-policies", + "GET /buckets/cross-origin-resource-sharing-policies/rules", + "GET /data-eviction-policies", + "GET /data-eviction-policies/file-systems", + "GET /data-eviction-policies/members", + "GET /directory-services/local/directory-services", + "GET /directory-services/local/groups", + "GET /directory-services/local/groups/members", + "GET /directory-services/test", + "GET /dns", + "GET /file-system-exports", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /file-system-replica-links/transfer", + "GET /file-system-snapshots", + "GET /file-system-snapshots/policies", + "GET /file-system-snapshots/transfer", + "GET /file-systems", + "GET /file-systems/audit-policies", + "GET /file-systems/locks", + "GET /file-systems/locks/clients", + "GET /file-systems/policies", + "GET /file-systems/sessions", + "GET /file-systems/worm-data-policies", + "GET /lifecycle-rules", + "GET /log-targets/file-systems", + "GET /log-targets/object-store", + "GET /management-access-policies", + "GET /management-access-policies/admins", + "GET /management-access-policies/members", + "GET /nfs-export-policies", + "GET /nfs-export-policies/rules", + "GET /object-store-access-keys", + "GET /object-store-access-policies", + "GET /object-store-access-policies/object-store-roles", + "GET /object-store-access-policies/object-store-users", + "GET /object-store-access-policies/rules", + "GET /object-store-access-policy-actions", + "GET /object-store-account-exports", + "GET /object-store-accounts", + "GET /object-store-remote-credentials", + "GET /object-store-roles", + "GET /object-store-roles/object-store-access-policies", + "GET /object-store-roles/object-store-trust-policies", + "GET /object-store-roles/object-store-trust-policies/rules", + "GET /object-store-users", + "GET /object-store-users/object-store-access-policies", + "GET /object-store-virtual-hosts", + "GET /policies", + "GET /policies-all", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "GET /policies/file-system-snapshots", + "GET /policies/file-systems", + "GET /presets/workload", + "GET /qos-policies", + "GET /qos-policies/buckets", + "GET /qos-policies/file-systems", + "GET /qos-policies/members", + "GET /quotas/groups", + "GET /quotas/users", + "GET /realms", + "GET /realms/defaults", + "GET /s3-export-policies", + "GET /s3-export-policies/rules", + "GET /servers", + "GET /smb-client-policies", + "GET /smb-client-policies/rules", + "GET /smb-share-policies", + "GET /smb-share-policies/rules", + "GET /ssh-certificate-authority-policies", + "GET /ssh-certificate-authority-policies/admins", + "GET /ssh-certificate-authority-policies/arrays", + "GET /ssh-certificate-authority-policies/members", + "GET /storage-class-tiering-policies/members", + "GET /syslog-servers", + "GET /targets", + "GET /usage/groups", + "GET /usage/users", + "GET /workloads", + "GET /workloads/placement-recommendations", + "GET /workloads/tags", + "GET /worm-data-policies", + "GET /worm-data-policies/members", + "PATCH /admins", + "PATCH /array-connections", + "PATCH /buckets/audit-filters", + "PATCH /dns", + "PATCH /file-system-exports", + "PATCH /lifecycle-rules", + "PATCH /log-targets/file-systems", + "PATCH /log-targets/object-store", + "PATCH /management-access-policies", + "PATCH /nfs-export-policies/rules", + "PATCH /object-store-access-policies/rules", + "PATCH /object-store-account-exports", + "PATCH /object-store-remote-credentials", + "PATCH /object-store-roles", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /object-store-virtual-hosts", + "PATCH /presets/workload", + "PATCH /qos-policies", + "PATCH /realms/defaults", + "PATCH /s3-export-policies/rules", + "PATCH /smb-client-policies/rules", + "PATCH /smb-share-policies/rules", + "PATCH /worm-data-policies", + "POST /admins/api-tokens", + "POST /admins/management-access-policies", + "POST /admins/ssh-certificate-authority-policies", + "POST /array-connections", + "POST /arrays/ssh-certificate-authority-policies", + "POST /audit-file-systems-policies/members", + "POST /audit-object-store-policies/members", + "POST /buckets", + "POST /buckets/audit-filters", + "POST /buckets/bucket-access-policies", + "POST /buckets/bucket-access-policies/rules", + "POST /buckets/cross-origin-resource-sharing-policies", + "POST /buckets/cross-origin-resource-sharing-policies/rules", + "POST /data-eviction-policies/file-systems", + "POST /directory-services/local/directory-services", + "POST /directory-services/local/groups", + "POST /file-system-exports", + "POST /file-system-replica-links", + "POST /file-system-replica-links/policies", + "POST /file-systems/audit-policies", + "POST /file-systems/locks/nlm-reclamations", + "POST /file-systems/policies", + "POST /lifecycle-rules", + "POST /log-targets/file-systems", + "POST /log-targets/object-store", + "POST /management-access-policies", + "POST /management-access-policies/admins", + "POST /nfs-export-policies/rules", + "POST /object-store-access-keys", + "POST /object-store-access-policies", + "POST /object-store-access-policies/object-store-roles", + "POST /object-store-access-policies/object-store-users", + "POST /object-store-access-policies/rules", + "POST /object-store-account-exports", + "POST /object-store-accounts", + "POST /object-store-remote-credentials", + "POST /object-store-roles", + "POST /object-store-roles/object-store-access-policies", + "POST /object-store-roles/object-store-trust-policies/rules", + "POST /object-store-users", + "POST /object-store-users/object-store-access-policies", + "POST /object-store-virtual-hosts", + "POST /policies/file-system-replica-links", + "POST /policies/file-systems", + "POST /presets/workload", + "POST /qos-policies", + "POST /qos-policies/members", + "POST /quotas/groups", + "POST /s3-export-policies/rules", + "POST /smb-client-policies/rules", + "POST /smb-share-policies/rules", + "POST /ssh-certificate-authority-policies/admins", + "POST /ssh-certificate-authority-policies/arrays", + "POST /workloads" + ], + "annotations": [ + { + "matchType": "field", + "match": "context_names", + "kind": "designDecision", + "note": "not yet implemented", + "reference": "docs/design/fusion-context-injection.md" + } + ] + }, + { + "name": "allow_errors", + "endpointCount": 109, + "queryEndpointCount": 109, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory/test", + "GET /admins", + "GET /admins/api-tokens", + "GET /admins/cache", + "GET /admins/management-access-policies", + "GET /admins/ssh-certificate-authority-policies", + "GET /array-connections", + "GET /array-connections/path", + "GET /arrays/http-specific-performance", + "GET /arrays/nfs-specific-performance", + "GET /arrays/performance", + "GET /arrays/performance/replication", + "GET /arrays/s3-specific-performance", + "GET /arrays/space", + "GET /arrays/ssh-certificate-authority-policies", + "GET /audit-file-systems-policies", + "GET /audit-file-systems-policies/members", + "GET /audit-file-systems-policy-operations", + "GET /audit-object-store-policies", + "GET /audit-object-store-policies/members", + "GET /bucket-audit-filter-actions", + "GET /bucket-replica-links", + "GET /buckets", + "GET /buckets/audit-filters", + "GET /buckets/bucket-access-policies", + "GET /buckets/bucket-access-policies/rules", + "GET /buckets/cross-origin-resource-sharing-policies", + "GET /buckets/cross-origin-resource-sharing-policies/rules", + "GET /data-eviction-policies", + "GET /data-eviction-policies/file-systems", + "GET /data-eviction-policies/members", + "GET /directory-services/local/directory-services", + "GET /directory-services/local/groups", + "GET /directory-services/local/groups/members", + "GET /directory-services/test", + "GET /dns", + "GET /file-system-exports", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /file-system-replica-links/transfer", + "GET /file-system-snapshots", + "GET /file-system-snapshots/policies", + "GET /file-system-snapshots/transfer", + "GET /file-systems", + "GET /file-systems/audit-policies", + "GET /file-systems/locks", + "GET /file-systems/locks/clients", + "GET /file-systems/policies", + "GET /file-systems/sessions", + "GET /file-systems/worm-data-policies", + "GET /lifecycle-rules", + "GET /log-targets/file-systems", + "GET /log-targets/object-store", + "GET /management-access-policies", + "GET /management-access-policies/admins", + "GET /management-access-policies/members", + "GET /nfs-export-policies", + "GET /nfs-export-policies/rules", + "GET /object-store-access-keys", + "GET /object-store-access-policies", + "GET /object-store-access-policies/object-store-roles", + "GET /object-store-access-policies/object-store-users", + "GET /object-store-access-policies/rules", + "GET /object-store-access-policy-actions", + "GET /object-store-account-exports", + "GET /object-store-accounts", + "GET /object-store-remote-credentials", + "GET /object-store-roles", + "GET /object-store-roles/object-store-access-policies", + "GET /object-store-roles/object-store-trust-policies", + "GET /object-store-roles/object-store-trust-policies/rules", + "GET /object-store-users", + "GET /object-store-users/object-store-access-policies", + "GET /object-store-virtual-hosts", + "GET /policies", + "GET /policies-all", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "GET /policies/file-system-snapshots", + "GET /policies/file-systems", + "GET /qos-policies", + "GET /qos-policies/buckets", + "GET /qos-policies/file-systems", + "GET /qos-policies/members", + "GET /quotas/groups", + "GET /quotas/users", + "GET /realms", + "GET /realms/defaults", + "GET /s3-export-policies", + "GET /s3-export-policies/rules", + "GET /servers", + "GET /smb-client-policies", + "GET /smb-client-policies/rules", + "GET /smb-share-policies", + "GET /smb-share-policies/rules", + "GET /ssh-certificate-authority-policies", + "GET /ssh-certificate-authority-policies/admins", + "GET /ssh-certificate-authority-policies/arrays", + "GET /ssh-certificate-authority-policies/members", + "GET /storage-class-tiering-policies/members", + "GET /syslog-servers", + "GET /targets", + "GET /usage/groups", + "GET /usage/users", + "GET /workloads", + "GET /workloads/placement-recommendations", + "GET /workloads/tags", + "GET /worm-data-policies", + "GET /worm-data-policies/members" + ], + "annotations": [ + { + "matchType": "field", + "match": "allow_errors", + "kind": "designDecision", + "note": "not yet implemented", + "reference": "docs/design/fusion-context-injection.md" + } + ] + }, + { + "name": "ids", + "endpointCount": 46, + "queryEndpointCount": 46, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /network-access-policies/rules", + "DELETE /nfs-export-policies/rules", + "DELETE /smb-client-policies/rules", + "DELETE /smb-share-policies/rules", + "GET /active-directory", + "GET /array-connections/connection-key", + "GET /array-connections/path", + "GET /array-connections/performance/replication", + "GET /bucket-replica-links", + "GET /certificate-groups/uses", + "GET /certificates/uses", + "GET /directory-services", + "GET /directory-services/test", + "GET /dns", + "GET /file-system-replica-links", + "GET /hardware-connectors/performance", + "GET /legal-holds/held-entities", + "GET /network-access-policies/rules", + "GET /network-interfaces/connectors/performance", + "GET /network-interfaces/connectors/settings", + "GET /nfs-export-policies/rules", + "GET /node-groups/uses", + "GET /password-policies", + "GET /public-keys/uses", + "GET /quotas/settings", + "GET /realms/space", + "GET /realms/space/storage-classes", + "GET /roles", + "GET /smb-client-policies/rules", + "GET /smb-share-policies/rules", + "GET /smtp-servers", + "GET /snmp-agents", + "GET /software-check", + "GET /support", + "GET /syslog-servers/settings", + "GET /targets/performance/replication", + "PATCH /dns", + "PATCH /legal-holds/held-entities", + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /password-policies", + "PATCH /smb-client-policies/rules", + "PATCH /smb-share-policies/rules", + "PATCH /syslog-servers/settings", + "POST /file-system-replica-links", + "POST /legal-holds/held-entities" + ], + "annotations": [] + }, + { + "name": "names", + "endpointCount": 35, + "queryEndpointCount": 35, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /buckets/audit-filters", + "DELETE /buckets/bucket-access-policies", + "DELETE /buckets/cross-origin-resource-sharing-policies", + "GET /arrays/clients/performance", + "GET /arrays/clients/s3-specific-performance", + "GET /arrays/supported-time-zones", + "GET /audit-file-systems-policy-operations", + "GET /bucket-audit-filter-actions", + "GET /buckets/audit-filters", + "GET /directory-services/test", + "GET /dns", + "GET /file-systems/groups/performance", + "GET /file-systems/users/performance", + "GET /legal-holds/held-entities", + "GET /object-store-access-policy-actions", + "GET /object-store-roles/object-store-trust-policies", + "GET /password-policies", + "GET /quotas/settings", + "GET /smtp-servers", + "GET /snmp-agents", + "GET /software-check", + "GET /syslog-servers/settings", + "PATCH /buckets/audit-filters", + "PATCH /dns", + "PATCH /password-policies", + "PATCH /syslog-servers/settings", + "POST /buckets/audit-filters", + "POST /buckets/bucket-access-policies/rules", + "POST /buckets/cross-origin-resource-sharing-policies/rules", + "POST /legal-holds/held-entities", + "POST /maintenance-windows", + "POST /object-store-access-keys", + "POST /object-store-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules", + "POST /s3-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "sort", + "endpointCount": 35, + "queryEndpointCount": 35, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory", + "GET /active-directory/test", + "GET /admins/management-access-policies", + "GET /admins/settings", + "GET /admins/ssh-certificate-authority-policies", + "GET /alert-watchers/test", + "GET /arrays/eula", + "GET /arrays/factory-reset-token", + "GET /arrays/ssh-certificate-authority-policies", + "GET /certificates/certificate-groups", + "GET /directory-services", + "GET /directory-services/roles/management-access-policies", + "GET /directory-services/test", + "GET /dns", + "GET /management-access-policies/admins", + "GET /management-access-policies/directory-services/roles", + "GET /management-access-policies/members", + "GET /password-policies", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "GET /qos-policies/buckets", + "GET /qos-policies/file-systems", + "GET /qos-policies/members", + "GET /smtp-servers", + "GET /snmp-agents", + "GET /snmp-managers/test", + "GET /ssh-certificate-authority-policies/admins", + "GET /ssh-certificate-authority-policies/arrays", + "GET /ssh-certificate-authority-policies/members", + "GET /sso/saml2/idps/test", + "GET /storage-class-tiering-policies/members", + "GET /support/test", + "GET /syslog-servers/settings", + "GET /tls-policies/members", + "GET /worm-data-policies/members" + ], + "annotations": [] + }, + { + "name": "name", + "endpointCount": 23, + "queryEndpointCount": 0, + "bodyEndpointCount": 23, + "endpoints": [ + "PATCH /arrays", + "PATCH /dns", + "PATCH /fleets", + "PATCH /log-targets/file-systems", + "PATCH /log-targets/object-store", + "PATCH /management-access-policies", + "PATCH /node-groups", + "PATCH /nodes", + "PATCH /object-store-remote-credentials", + "PATCH /object-store-virtual-hosts", + "PATCH /password-policies", + "PATCH /qos-policies", + "PATCH /snmp-managers", + "PATCH /ssh-certificate-authority-policies", + "PATCH /sso/oidc/idps", + "PATCH /sso/saml2/idps", + "PATCH /storage-class-tiering-policies", + "PATCH /targets", + "PATCH /tls-policies", + "POST /log-targets/file-systems", + "POST /log-targets/object-store", + "POST /management-access-policies", + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "bucket_ids", + "endpointCount": 19, + "queryEndpointCount": 19, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /buckets/audit-filters", + "DELETE /buckets/bucket-access-policies", + "DELETE /buckets/bucket-access-policies/rules", + "DELETE /buckets/cross-origin-resource-sharing-policies", + "DELETE /buckets/cross-origin-resource-sharing-policies/rules", + "DELETE /lifecycle-rules", + "GET /buckets/audit-filters", + "GET /buckets/bucket-access-policies", + "GET /buckets/bucket-access-policies/rules", + "GET /buckets/cross-origin-resource-sharing-policies", + "GET /buckets/cross-origin-resource-sharing-policies/rules", + "GET /lifecycle-rules", + "PATCH /buckets/audit-filters", + "PATCH /lifecycle-rules", + "POST /buckets/audit-filters", + "POST /buckets/bucket-access-policies", + "POST /buckets/bucket-access-policies/rules", + "POST /buckets/cross-origin-resource-sharing-policies", + "POST /buckets/cross-origin-resource-sharing-policies/rules" + ], + "annotations": [] + }, + { + "name": "bucket_names", + "endpointCount": 18, + "queryEndpointCount": 18, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /buckets/audit-filters", + "DELETE /buckets/bucket-access-policies", + "DELETE /buckets/bucket-access-policies/rules", + "DELETE /buckets/cross-origin-resource-sharing-policies", + "DELETE /buckets/cross-origin-resource-sharing-policies/rules", + "DELETE /lifecycle-rules", + "GET /buckets/audit-filters", + "GET /buckets/bucket-access-policies", + "GET /buckets/bucket-access-policies/rules", + "GET /buckets/cross-origin-resource-sharing-policies", + "GET /buckets/cross-origin-resource-sharing-policies/rules", + "PATCH /buckets/audit-filters", + "PATCH /lifecycle-rules", + "POST /buckets/audit-filters", + "POST /buckets/bucket-access-policies", + "POST /buckets/bucket-access-policies/rules", + "POST /buckets/cross-origin-resource-sharing-policies", + "POST /buckets/cross-origin-resource-sharing-policies/rules" + ], + "annotations": [] + }, + { + "name": "policy_ids", + "endpointCount": 18, + "queryEndpointCount": 18, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /network-interfaces/tls-policies", + "DELETE /object-store-access-policies/object-store-roles", + "DELETE /object-store-access-policies/object-store-users", + "DELETE /object-store-access-policies/rules", + "DELETE /object-store-roles/object-store-access-policies", + "DELETE /object-store-users/object-store-access-policies", + "GET /object-store-roles/object-store-access-policies", + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "PATCH /smb-share-policies/rules", + "POST /file-system-exports", + "POST /network-interfaces/tls-policies", + "POST /object-store-access-policies/object-store-roles", + "POST /object-store-access-policies/object-store-users", + "POST /object-store-access-policies/rules", + "POST /object-store-account-exports", + "POST /object-store-roles/object-store-access-policies", + "POST /object-store-users/object-store-access-policies" + ], + "annotations": [] + }, + { + "name": "remote_ids", + "endpointCount": 18, + "queryEndpointCount": 18, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /array-connections", + "DELETE /file-system-replica-links", + "DELETE /file-system-replica-links/policies", + "DELETE /file-system-snapshots/transfer", + "DELETE /policies/file-system-replica-links", + "GET /array-connections", + "GET /array-connections/path", + "GET /array-connections/performance/replication", + "GET /bucket-replica-links", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /file-system-replica-links/transfer", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "PATCH /array-connections", + "POST /file-system-replica-links", + "POST /file-system-replica-links/policies", + "POST /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "total_only", + "endpointCount": 17, + "queryEndpointCount": 17, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /array-connections/performance/replication", + "GET /arrays/clients/performance", + "GET /arrays/clients/s3-specific-performance", + "GET /arrays/space/storage-classes", + "GET /blades", + "GET /bucket-replica-links", + "GET /drives", + "GET /fleets", + "GET /fleets/fleet-key", + "GET /fleets/members", + "GET /hardware-connectors/performance", + "GET /network-interfaces/connectors/performance", + "GET /nodes", + "GET /realms/space", + "GET /realms/space/storage-classes", + "GET /remote-arrays", + "GET /targets/performance/replication" + ], + "annotations": [] + }, + { + "name": "enabled", + "endpointCount": 16, + "queryEndpointCount": 0, + "bodyEndpointCount": 16, + "endpoints": [ + "PATCH /api-clients", + "PATCH /lifecycle-rules", + "PATCH /management-access-policies", + "PATCH /password-policies", + "PATCH /qos-policies", + "PATCH /rapid-data-locking", + "PATCH /ssh-certificate-authority-policies", + "PATCH /sso/oidc/idps", + "PATCH /sso/saml2/idps", + "PATCH /storage-class-tiering-policies", + "PATCH /tls-policies", + "PATCH /worm-data-policies", + "POST /management-access-policies", + "POST /qos-policies", + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "member_ids", + "endpointCount": 16, + "queryEndpointCount": 16, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "DELETE /fleets/members", + "DELETE /network-interfaces/tls-policies", + "DELETE /object-store-access-policies/object-store-roles", + "DELETE /object-store-access-policies/object-store-users", + "DELETE /object-store-roles/object-store-access-policies", + "DELETE /object-store-users/object-store-access-policies", + "GET /directory-services/local/groups/members", + "GET /fleets/members", + "POST /file-system-exports", + "POST /network-interfaces/tls-policies", + "POST /object-store-access-policies/object-store-roles", + "POST /object-store-access-policies/object-store-users", + "POST /object-store-account-exports", + "POST /object-store-roles/object-store-access-policies", + "POST /object-store-users/object-store-access-policies" + ], + "annotations": [] + }, + { + "name": "remote_names", + "endpointCount": 16, + "queryEndpointCount": 16, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /array-connections", + "DELETE /file-system-replica-links/policies", + "DELETE /file-system-snapshots/transfer", + "DELETE /policies/file-system-replica-links", + "GET /array-connections", + "GET /array-connections/path", + "GET /array-connections/performance/replication", + "GET /bucket-replica-links", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /file-system-replica-links/transfer", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "PATCH /array-connections", + "POST /file-system-replica-links/policies", + "POST /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "limit", + "endpointCount": 14, + "queryEndpointCount": 14, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory", + "GET /active-directory/test", + "GET /admins/settings", + "GET /arrays/eula", + "GET /arrays/factory-reset-token", + "GET /directory-services", + "GET /directory-services/test", + "GET /dns", + "GET /password-policies", + "GET /smtp-servers", + "GET /snmp-agents", + "GET /snmp-managers/test", + "GET /sso/saml2/idps/test", + "GET /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "filter", + "endpointCount": 13, + "queryEndpointCount": 13, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory/test", + "GET /admins/settings", + "GET /alert-watchers/test", + "GET /arrays/eula", + "GET /arrays/factory-reset-token", + "GET /directory-services/test", + "GET /dns", + "GET /password-policies", + "GET /smtp-servers", + "GET /snmp-managers/test", + "GET /sso/saml2/idps/test", + "GET /support/test", + "GET /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "file_system_ids", + "endpointCount": 11, + "queryEndpointCount": 11, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities", + "GET /quotas/groups", + "GET /quotas/users", + "GET /usage/groups", + "GET /usage/users", + "PATCH /legal-holds/held-entities", + "POST /legal-holds/held-entities", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "policy_names", + "endpointCount": 11, + "queryEndpointCount": 11, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /buckets/bucket-access-policies/rules", + "DELETE /buckets/cross-origin-resource-sharing-policies/rules", + "DELETE /object-store-roles/object-store-access-policies", + "GET /object-store-roles/object-store-access-policies", + "PATCH /object-store-access-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /s3-export-policies/rules", + "PATCH /smb-share-policies/rules", + "POST /buckets/cross-origin-resource-sharing-policies/rules", + "POST /object-store-account-exports", + "POST /object-store-roles/object-store-access-policies" + ], + "annotations": [] + }, + { + "name": "local_file_system_ids", + "endpointCount": 10, + "queryEndpointCount": 10, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-system-replica-links", + "DELETE /file-system-replica-links/policies", + "DELETE /policies/file-system-replica-links", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "POST /file-system-replica-links", + "POST /file-system-replica-links/policies", + "POST /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "versions", + "endpointCount": 10, + "queryEndpointCount": 10, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /network-access-policies/rules", + "DELETE /nfs-export-policies", + "DELETE /nfs-export-policies/rules", + "DELETE /smb-client-policies/rules", + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /network-access-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "actions", + "endpointCount": 9, + "queryEndpointCount": 0, + "bodyEndpointCount": 9, + "endpoints": [ + "PATCH /buckets/audit-filters", + "PATCH /object-store-access-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /buckets/audit-filters", + "POST /buckets/bucket-access-policies/rules", + "POST /object-store-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules", + "POST /s3-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "location", + "endpointCount": 9, + "queryEndpointCount": 0, + "bodyEndpointCount": 9, + "endpoints": [ + "PATCH /management-access-policies", + "PATCH /password-policies", + "PATCH /qos-policies", + "PATCH /ssh-certificate-authority-policies", + "PATCH /storage-class-tiering-policies", + "PATCH /tls-policies", + "PATCH /worm-data-policies", + "POST /management-access-policies", + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "policy", + "endpointCount": 8, + "queryEndpointCount": 0, + "bodyEndpointCount": 8, + "endpoints": [ + "PATCH /file-system-exports", + "PATCH /network-access-policies/rules", + "PATCH /object-store-account-exports", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /smb-client-policies/rules", + "PATCH /smb-share-policies/rules", + "POST /nfs-export-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "ca_certificate_group", + "endpointCount": 7, + "queryEndpointCount": 0, + "bodyEndpointCount": 7, + "endpoints": [ + "PATCH /active-directory", + "PATCH /array-connections", + "PATCH /dns", + "PATCH /kmip", + "PATCH /syslog-servers/settings", + "PATCH /targets", + "POST /array-connections" + ], + "annotations": [] + }, + { + "name": "file_system_names", + "endpointCount": 7, + "queryEndpointCount": 7, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities", + "PATCH /legal-holds/held-entities", + "POST /legal-holds/held-entities", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "local_file_system_names", + "endpointCount": 7, + "queryEndpointCount": 7, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-system-replica-links/policies", + "DELETE /policies/file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "POST /file-system-replica-links/policies", + "POST /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "services", + "endpointCount": 7, + "queryEndpointCount": 0, + "bodyEndpointCount": 7, + "endpoints": [ + "PATCH /dns", + "PATCH /network-interfaces", + "PATCH /sso/oidc/idps", + "PATCH /sso/saml2/idps", + "PATCH /syslog-servers", + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "before_rule_id", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /network-access-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "before_rule_name", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /network-access-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "client", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /network-access-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "effect", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /network-access-policies/rules", + "POST /object-store-access-policies/rules", + "POST /s3-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "gids", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups", + "GET /directory-services/local/groups", + "GET /file-systems/groups/performance", + "GET /quotas/groups", + "GET /usage/groups", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "index", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /network-access-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "paths", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities", + "PATCH /legal-holds/held-entities", + "POST /legal-holds/held-entities" + ], + "annotations": [] + }, + { + "name": "role_ids", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /object-store-roles/object-store-trust-policies/rules", + "GET /directory-services/roles", + "GET /object-store-roles/object-store-trust-policies/rules", + "PATCH /directory-services/roles", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "role_names", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /object-store-roles/object-store-trust-policies/rules", + "GET /directory-services/roles", + "GET /object-store-roles/object-store-trust-policies/rules", + "PATCH /directory-services/roles", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "workload_ids", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-system-exports", + "GET /file-systems", + "GET /nfs-export-policies", + "GET /policies", + "GET /smb-client-policies", + "GET /smb-share-policies" + ], + "annotations": [] + }, + { + "name": "workload_names", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-system-exports", + "GET /file-systems", + "GET /nfs-export-policies", + "GET /policies", + "GET /smb-client-policies", + "GET /smb-share-policies" + ], + "annotations": [] + }, + { + "name": "end_time", + "endpointCount": 5, + "queryEndpointCount": 4, + "bodyEndpointCount": 1, + "endpoints": [ + "GET /arrays/space", + "GET /arrays/space/storage-classes", + "GET /realms/space", + "GET /realms/space/storage-classes", + "PATCH /logs-async" + ], + "annotations": [] + }, + { + "name": "member_types", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "DELETE /qos-policies/members", + "GET /directory-services/local/groups/members", + "GET /qos-policies/members", + "POST /qos-policies/members" + ], + "annotations": [] + }, + { + "name": "remote_file_system_ids", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-system-replica-links", + "GET /file-system-replica-links", + "GET /file-system-replica-links/policies", + "GET /policies-all/members", + "GET /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "resources", + "endpointCount": 5, + "queryEndpointCount": 0, + "bodyEndpointCount": 5, + "endpoints": [ + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /buckets/bucket-access-policies/rules", + "POST /object-store-access-policies/rules", + "POST /s3-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "rules", + "endpointCount": 5, + "queryEndpointCount": 0, + "bodyEndpointCount": 5, + "endpoints": [ + "PATCH /management-access-policies", + "POST /buckets/bucket-access-policies", + "POST /buckets/cross-origin-resource-sharing-policies", + "POST /management-access-policies", + "POST /object-store-access-policies" + ], + "annotations": [] + }, + { + "name": "start_time", + "endpointCount": 5, + "queryEndpointCount": 4, + "bodyEndpointCount": 1, + "endpoints": [ + "GET /arrays/space", + "GET /arrays/space/storage-classes", + "GET /realms/space", + "GET /realms/space/storage-classes", + "PATCH /logs-async" + ], + "annotations": [] + }, + { + "name": "total_item_count", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /directory-services/local/directory-services", + "GET /directory-services/local/groups", + "GET /directory-services/local/groups/members", + "GET /network-interfaces/neighbors", + "GET /software-check" + ], + "annotations": [] + }, + { + "name": "user_names", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/open-files", + "GET /file-systems/sessions", + "GET /file-systems/users/performance", + "GET /quotas/users", + "GET /usage/users" + ], + "annotations": [] + }, + { + "name": "ca_certificate", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /active-directory", + "PATCH /dns", + "PATCH /kmip", + "PATCH /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "certificate_group_ids", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups", + "POST /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "certificate_ids", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups", + "POST /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "client_names", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /file-systems/sessions" + ], + "annotations": [] + }, + { + "name": "conditions", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /object-store-access-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "POST /object-store-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "description", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /legal-holds", + "POST /legal-holds", + "POST /object-store-access-policies", + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "group_names", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/groups/performance", + "GET /quotas/groups", + "GET /usage/groups", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "idp", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /sso/oidc/idps", + "PATCH /sso/saml2/idps", + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "permission", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules", + "POST /nfs-export-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "remote", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /array-connections", + "PATCH /object-store-remote-credentials", + "POST /array-connections", + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "resolution", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /arrays/space", + "GET /arrays/space/storage-classes", + "GET /realms/space", + "GET /realms/space/storage-classes" + ], + "annotations": [] + }, + { + "name": "admin_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens", + "POST /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "admin_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens", + "POST /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "attached_servers", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /network-interfaces", + "PATCH /object-store-virtual-hosts", + "POST /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "enforce_action_restrictions", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /object-store-access-policies/rules", + "POST /object-store-access-policies", + "POST /object-store-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "indices", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /object-store-roles/object-store-trust-policies/rules", + "GET /object-store-roles/object-store-trust-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "local_directory_service_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups", + "DELETE /directory-services/local/groups/members", + "POST /directory-services/local/groups" + ], + "annotations": [] + }, + { + "name": "local_directory_service_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups", + "DELETE /directory-services/local/groups/members", + "POST /directory-services/local/groups" + ], + "annotations": [] + }, + { + "name": "names_or_owner_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-system-replica-links/transfer", + "GET /file-system-snapshots", + "GET /file-system-snapshots/transfer" + ], + "annotations": [] + }, + { + "name": "node_group_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes", + "POST /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_group_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes", + "POST /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes", + "POST /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes", + "POST /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "principals", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /object-store-roles/object-store-trust-policies/rules", + "POST /buckets/bucket-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "public_key", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /admins", + "POST /api-clients", + "POST /public-keys" + ], + "annotations": [] + }, + { + "name": "recursive", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "PATCH /legal-holds/held-entities", + "POST /legal-holds/held-entities" + ], + "annotations": [] + }, + { + "name": "remote_file_system_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-system-replica-links/policies", + "GET /policies-all/members", + "GET /policies/file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "role", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /admins", + "PATCH /directory-services/roles", + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "secret_access_key", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /object-store-remote-credentials", + "POST /object-store-access-keys", + "POST /object-store-remote-credentials" + ], + "annotations": [] + }, + { + "name": "source", + "endpointCount": 3, + "queryEndpointCount": 2, + "bodyEndpointCount": 1, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace", + "POST /keytabs" + ], + "annotations": [] + }, + { + "name": "storage_class_names", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /arrays/space/storage-classes", + "GET /file-systems/space/storage-classes", + "GET /realms/space/storage-classes" + ], + "annotations": [] + }, + { + "name": "uids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/users/performance", + "GET /quotas/users", + "GET /usage/users" + ], + "annotations": [] + }, + { + "name": "abort_incomplete_multipart_uploads_after", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "access", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "access_key_id", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /object-store-remote-credentials", + "POST /object-store-remote-credentials" + ], + "annotations": [] + }, + { + "name": "aggregation_strategy", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /management-access-policies", + "POST /management-access-policies" + ], + "annotations": [] + }, + { + "name": "anongid", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "anonuid", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "array_url", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /sso/saml2/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "atime", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "binding", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /sso/saml2/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "bucket", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/object-store", + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "certificate", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "certificate_type", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "change", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /smb-share-policies/rules", + "POST /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "common_name", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "component_name", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "confirm_date", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "country", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "days", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "email", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "encrypted", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /array-connections", + "POST /array-connections" + ], + "annotations": [] + }, + { + "name": "encryption", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /smb-client-policies/rules", + "POST /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "eradicate_all_data", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /arrays/erasures", + "POST /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "eradication_config", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /arrays", + "POST /buckets" + ], + "annotations": [] + }, + { + "name": "export_enabled", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /object-store-account-exports", + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "expose_api_token", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins", + "GET /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "file_system", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/file-systems", + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "fileid_32bit", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "fleet_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /fleets/members", + "POST /fleets/members" + ], + "annotations": [] + }, + { + "name": "full_control", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /smb-share-policies/rules", + "POST /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "group", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /directory-services/roles", + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "group_base", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /directory-services/roles", + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "group_gids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "GET /directory-services/local/groups/members" + ], + "annotations": [] + }, + { + "name": "group_sids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "GET /directory-services/local/groups/members" + ], + "annotations": [] + }, + { + "name": "hard_limit_enabled", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /buckets", + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "inodes", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks" + ], + "annotations": [] + }, + { + "name": "interfaces", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /network-access-policies/rules", + "POST /network-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "intermediate_certificate", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "keep_current_version_for", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_current_version_until", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_for", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/file-systems", + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "keep_previous_version_for", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_size", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/file-systems", + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "key_algorithm", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "key_size", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "lane_speed", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /hardware-connectors", + "PATCH /network-interfaces/connectors" + ], + "annotations": [] + }, + { + "name": "lanes_per_port", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /hardware-connectors", + "PATCH /network-interfaces/connectors" + ], + "annotations": [] + }, + { + "name": "locality", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "lockout_duration", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins/settings", + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "log_name_prefix", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/object-store", + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "log_rotate", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /log-targets/object-store", + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "management", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /sso/saml2/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "management_access_policies", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins", + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "management_address", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /array-connections", + "PATCH /nodes" + ], + "annotations": [] + }, + { + "name": "max_login_attempts", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins/settings", + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "max_role", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /api-clients", + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "max_session_duration", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /object-store-roles", + "POST /object-store-roles" + ], + "annotations": [] + }, + { + "name": "max_total_bytes_per_sec", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /qos-policies", + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "max_total_ops_per_sec", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /qos-policies", + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "member_sids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "GET /directory-services/local/groups/members" + ], + "annotations": [] + }, + { + "name": "min_password_length", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins/settings", + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "name_prefixes", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /keytabs", + "POST /keytabs/upload" + ], + "annotations": [] + }, + { + "name": "organization", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "organizational_unit", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "passphrase", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "port_count", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /hardware-connectors", + "PATCH /network-interfaces/connectors" + ], + "annotations": [] + }, + { + "name": "port_speed", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /hardware-connectors", + "PATCH /network-interfaces/connectors" + ], + "annotations": [] + }, + { + "name": "prefix", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /lifecycle-rules", + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "principal", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /smb-share-policies/rules", + "POST /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "private_key", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "read", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /smb-share-policies/rules", + "POST /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "realm_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults", + "PATCH /realms/defaults" + ], + "annotations": [] + }, + { + "name": "realm_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults", + "PATCH /realms/defaults" + ], + "annotations": [] + }, + { + "name": "required_transport_security", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "resolve_hostname", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "retention_lock", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /worm-data-policies", + "POST /buckets" + ], + "annotations": [] + }, + { + "name": "s3_prefixes", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /buckets/audit-filters", + "POST /buckets/audit-filters" + ], + "annotations": [] + }, + { + "name": "secure", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "security", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "POST /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "server", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /file-system-exports", + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "sids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups", + "GET /directory-services/local/groups" + ], + "annotations": [] + }, + { + "name": "software_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /software-check", + "POST /software-check" + ], + "annotations": [] + }, + { + "name": "software_versions", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /software-check", + "POST /software-check" + ], + "annotations": [] + }, + { + "name": "sources", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /dns", + "PATCH /syslog-servers" + ], + "annotations": [] + }, + { + "name": "sp", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /sso/saml2/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "state", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "subject_alternative_names", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /certificates", + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "throttle", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /array-connections", + "POST /array-connections" + ], + "annotations": [] + }, + { + "name": "timeout", + "endpointCount": 2, + "queryEndpointCount": 1, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /admins/api-tokens", + "POST /maintenance-windows" + ], + "annotations": [] + }, + { + "name": "v2c", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /snmp-agents", + "PATCH /snmp-managers" + ], + "annotations": [] + }, + { + "name": "v3", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /snmp-agents", + "PATCH /snmp-managers" + ], + "annotations": [] + }, + { + "name": "version", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /snmp-agents", + "PATCH /snmp-managers" + ], + "annotations": [] + }, + { + "name": "access_policies", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "access_token_ttl_in_ms", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "account", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /object-store-roles" + ], + "annotations": [] + }, + { + "name": "account_exports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "add_attached_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "add_ports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /link-aggregation-groups" + ], + "annotations": [] + }, + { + "name": "address", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /targets" + ], + "annotations": [] + }, + { + "name": "allowed_headers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets/cross-origin-resource-sharing-policies/rules" + ], + "annotations": [] + }, + { + "name": "allowed_methods", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets/cross-origin-resource-sharing-policies/rules" + ], + "annotations": [] + }, + { + "name": "allowed_origins", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets/cross-origin-resource-sharing-policies/rules" + ], + "annotations": [] + }, + { + "name": "analysis_period_end_time", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /support-diagnostics" + ], + "annotations": [] + }, + { + "name": "analysis_period_start_time", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /support-diagnostics" + ], + "annotations": [] + }, + { + "name": "appliance_certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "archival_rules", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /storage-class-tiering-policies" + ], + "annotations": [] + }, + { + "name": "authorization_model", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /admins" + ], + "annotations": [] + }, + { + "name": "banner", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "bucket_defaults", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "bucket_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets" + ], + "annotations": [] + }, + { + "name": "certificate_group_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /certificate-groups/certificates" + ], + "annotations": [] + }, + { + "name": "certificate_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /certificate-groups/certificates" + ], + "annotations": [] + }, + { + "name": "client_certificates_required", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "contact", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /quotas/settings" + ], + "annotations": [] + }, + { + "name": "current_state", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "default_inbound_tls_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "default_retention", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /worm-data-policies" + ], + "annotations": [] + }, + { + "name": "delete_sanitization_certificate", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "destroyed", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /directory-services/local/directory-services" + ], + "annotations": [] + }, + { + "name": "direct_notifications_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /quotas/settings" + ], + "annotations": [] + }, + { + "name": "direction", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "directory_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "directory_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "disabled_tls_ciphers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "discover_mtu", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "edge_agent_update_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "edge_management_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "effective", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /tls-policies" + ], + "annotations": [] + }, + { + "name": "enabled_tls_ciphers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "encryption_types", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "enforce_dictionary_check", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "enforce_username_check", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "exclude_rules", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /object-store-access-policies" + ], + "annotations": [] + }, + { + "name": "export_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "export_name", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /file-system-exports" + ], + "annotations": [] + }, + { + "name": "finalize", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "fqdns", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "fragment_packet", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "full_access", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /object-store-users" + ], + "annotations": [] + }, + { + "name": "generate_new_key", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /certificates" + ], + "annotations": [] + }, + { + "name": "global_catalog_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "hardware_components", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /logs-async" + ], + "annotations": [] + }, + { + "name": "host", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-managers" + ], + "annotations": [] + }, + { + "name": "hostname", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "identify_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /hardware" + ], + "annotations": [] + }, + { + "name": "idle_timeout", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "issuer", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "join_ou", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "kerberos_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "keytab_file", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /keytabs/upload" + ], + "annotations": [] + }, + { + "name": "keytab_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /keytabs/download" + ], + "annotations": [] + }, + { + "name": "keytab_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /keytabs/download" + ], + "annotations": [] + }, + { + "name": "kmip_server", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /rapid-data-locking" + ], + "annotations": [] + }, + { + "name": "link_aggregation_group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /subnets" + ], + "annotations": [] + }, + { + "name": "link_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "local_bucket_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /bucket-replica-links" + ], + "annotations": [] + }, + { + "name": "local_file_system", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "local_host", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "local_only", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /active-directory" + ], + "annotations": [] + }, + { + "name": "local_port", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "local_port_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/neighbors" + ], + "annotations": [] + }, + { + "name": "locked", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /admins" + ], + "annotations": [] + }, + { + "name": "max_password_age", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "max_retention", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /worm-data-policies" + ], + "annotations": [] + }, + { + "name": "member", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /file-system-exports" + ], + "annotations": [] + }, + { + "name": "member_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "members", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /fleets/members" + ], + "annotations": [] + }, + { + "name": "min_character_groups", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "min_characters_per_group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "min_password_age", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "min_retention", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /worm-data-policies" + ], + "annotations": [] + }, + { + "name": "min_tls_version", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "mode", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /worm-data-policies" + ], + "annotations": [] + }, + { + "name": "network_access_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "node_key", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nodes" + ], + "annotations": [] + }, + { + "name": "notification", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-managers" + ], + "annotations": [] + }, + { + "name": "ntp_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "object_lock_config", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets" + ], + "annotations": [] + }, + { + "name": "object_store", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /realms/defaults" + ], + "annotations": [] + }, + { + "name": "old_password", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /admins" + ], + "annotations": [] + }, + { + "name": "owner_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-system-snapshots" + ], + "annotations": [] + }, + { + "name": "parameters", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "password", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /admins" + ], + "annotations": [] + }, + { + "name": "password_history", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "periodic_replication_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "phonehome_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "placement_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "platform_features", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "policies", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "port", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "ports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /link-aggregation-groups" + ], + "annotations": [] + }, + { + "name": "preserve_configuration_data", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "print_latency", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping" + ], + "annotations": [] + }, + { + "name": "protocol", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /arrays/clients/performance" + ], + "annotations": [] + }, + { + "name": "protocols", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/open-files" + ], + "annotations": [] + }, + { + "name": "proxy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "purity_defined", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /tls-policies" + ], + "annotations": [] + }, + { + "name": "qos_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "quota_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "quota_limit", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "refresh", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins/cache" + ], + "annotations": [] + }, + { + "name": "released", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /legal-holds/held-entities" + ], + "annotations": [] + }, + { + "name": "remote_assist_active", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "remote_assist_duration", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support" + ], + "annotations": [] + }, + { + "name": "remote_file_system", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "remote_host", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "remote_port", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "remove_attached_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "remove_ports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /link-aggregation-groups" + ], + "annotations": [] + }, + { + "name": "replication_addresses", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /array-connections" + ], + "annotations": [] + }, + { + "name": "retrieval_rules", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /storage-class-tiering-policies" + ], + "annotations": [] + }, + { + "name": "rule_id", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "serial_number", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nodes" + ], + "annotations": [] + }, + { + "name": "service_principal_names", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /active-directory" + ], + "annotations": [] + }, + { + "name": "session_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/open-files" + ], + "annotations": [] + }, + { + "name": "share_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /file-system-exports" + ], + "annotations": [] + }, + { + "name": "signature", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays/eula" + ], + "annotations": [] + }, + { + "name": "signed_verification_key", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /support/verification-keys" + ], + "annotations": [] + }, + { + "name": "signing_authority", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /ssh-certificate-authority-policies" + ], + "annotations": [] + }, + { + "name": "skip_phonehome_check", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "snapshot_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "static_authorized_principals", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /ssh-certificate-authority-policies" + ], + "annotations": [] + }, + { + "name": "time_zone", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "trusted_client_certificate_authority", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "type", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/space" + ], + "annotations": [] + }, + { + "name": "unreachable", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /fleets/members" + ], + "annotations": [] + }, + { + "name": "uri", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /syslog-servers" + ], + "annotations": [] + }, + { + "name": "uris", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /kmip" + ], + "annotations": [] + }, + { + "name": "verify_client_certificate_trust", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /tls-policies" + ], + "annotations": [] + }, + { + "name": "vlan", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /subnets" + ], + "annotations": [] + }, + { + "name": "volume_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "without_default_access_list", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /realms" + ], + "annotations": [] + }, + { + "name": "workload_tags", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + }, + { + "name": "workload_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + } + ], + "conventionStrength": [ + { + "name": "names", + "cmdletCount": 306, + "cmdlets": [ + "Get-PfbActiveDirectory", + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbAsyncLog", + "Get-PfbAsyncLogDownload", + "Get-PfbAudit", + "Get-PfbAuditFileSystemPolicy", + "Get-PfbAuditObjectStorePolicy", + "Get-PfbBlade", + "Get-PfbBucket", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbCertificate", + "Get-PfbCertificateGroup", + "Get-PfbCertificateGroupCertificate", + "Get-PfbCertificateGroupUse", + "Get-PfbCertificateUse", + "Get-PfbDataEvictionPolicy", + "Get-PfbDirectoryService", + "Get-PfbDirectoryServiceRole", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSession", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFleet", + "Get-PfbFleetKey", + "Get-PfbHardware", + "Get-PfbHardwareConnector", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbHardwareTemperature", + "Get-PfbKeytab", + "Get-PfbKeytabDownload", + "Get-PfbKmip", + "Get-PfbLag", + "Get-PfbLegalHold", + "Get-PfbLifecycleRule", + "Get-PfbLocalDirectoryService", + "Get-PfbLocalGroup", + "Get-PfbLogTargetFileSystem", + "Get-PfbLogTargetObjectStore", + "Get-PfbMaintenanceWindow", + "Get-PfbManagementAccessPolicy", + "Get-PfbNetworkAccessPolicy", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkConnectionStatistics", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorSettings", + "Get-PfbNetworkInterfaceNeighbor", + "Get-PfbNfsExportPolicy", + "Get-PfbNfsExportRule", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPolicy", + "Get-PfbPolicyAll", + "Get-PfbPresetWorkload", + "Get-PfbPublicKey", + "Get-PfbPublicKeyUse", + "Get-PfbQosPolicy", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbRealm", + "Get-PfbRealmDefaults", + "Get-PfbRealmSpace", + "Get-PfbRealmStorageClass", + "Get-PfbRemoteArray", + "Get-PfbResiliencyGroup", + "Get-PfbResourceAccess", + "Get-PfbRole", + "Get-PfbS3ExportPolicy", + "Get-PfbS3ExportRule", + "Get-PfbSaml2Idp", + "Get-PfbServer", + "Get-PfbSession", + "Get-PfbSmbClientPolicy", + "Get-PfbSmbClientRule", + "Get-PfbSmbSharePolicy", + "Get-PfbSmbShareRule", + "Get-PfbSnmpManager", + "Get-PfbSshCaPolicy", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbSubnet", + "Get-PfbSupport", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSyslogServer", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "New-PfbAlertWatcher", + "New-PfbApiClient", + "New-PfbApiToken", + "New-PfbAuditFileSystemPolicy", + "New-PfbAuditObjectStorePolicy", + "New-PfbBucket", + "New-PfbCertificate", + "New-PfbCertificateGroup", + "New-PfbDataEvictionPolicy", + "New-PfbDirectoryServiceRole", + "New-PfbFileSystem", + "New-PfbLegalHold", + "New-PfbLocalDirectoryService", + "New-PfbLocalGroup", + "New-PfbLogTargetFileSystem", + "New-PfbLogTargetObjectStore", + "New-PfbManagementAccessPolicy", + "New-PfbNetworkInterface", + "New-PfbNfsExportPolicy", + "New-PfbNlmReclamation", + "New-PfbObjectStoreAccessPolicy", + "New-PfbObjectStoreAccount", + "New-PfbObjectStoreAccountExport", + "New-PfbObjectStoreRemoteCredential", + "New-PfbObjectStoreRole", + "New-PfbObjectStoreUser", + "New-PfbObjectStoreVirtualHost", + "New-PfbOidcIdp", + "New-PfbPolicy", + "New-PfbPresetWorkload", + "New-PfbPublicKey", + "New-PfbQosPolicy", + "New-PfbRealm", + "New-PfbS3ExportPolicy", + "New-PfbSaml2Idp", + "New-PfbServer", + "New-PfbSmbClientPolicy", + "New-PfbSmbSharePolicy", + "New-PfbSubnet", + "New-PfbWorkload", + "Remove-PfbActiveDirectory", + "Remove-PfbAdminCache", + "Remove-PfbAlertWatcher", + "Remove-PfbApiClient", + "Remove-PfbApiToken", + "Remove-PfbArrayConnection", + "Remove-PfbAuditFileSystemPolicy", + "Remove-PfbAuditObjectStorePolicy", + "Remove-PfbBucket", + "Remove-PfbBucketAccessPolicyRule", + "Remove-PfbBucketCorsPolicyRule", + "Remove-PfbCertificate", + "Remove-PfbCertificateGroup", + "Remove-PfbDataEvictionPolicy", + "Remove-PfbDirectoryServiceRole", + "Remove-PfbDns", + "Remove-PfbFileLock", + "Remove-PfbFileSystem", + "Remove-PfbFileSystemExport", + "Remove-PfbFileSystemSession", + "Remove-PfbFileSystemSnapshot", + "Remove-PfbFileSystemSnapshotTransfer", + "Remove-PfbFleet", + "Remove-PfbKeytab", + "Remove-PfbLag", + "Remove-PfbLegalHold", + "Remove-PfbLifecycleRule", + "Remove-PfbLocalGroup", + "Remove-PfbLogTargetFileSystem", + "Remove-PfbLogTargetObjectStore", + "Remove-PfbMaintenanceWindow", + "Remove-PfbManagementAccessPolicy", + "Remove-PfbNetworkAccessRule", + "Remove-PfbNetworkInterface", + "Remove-PfbNfsExportPolicy", + "Remove-PfbNfsExportRule", + "Remove-PfbNodeGroup", + "Remove-PfbObjectStoreAccessKey", + "Remove-PfbObjectStoreAccessPolicy", + "Remove-PfbObjectStoreAccessPolicyRule", + "Remove-PfbObjectStoreAccount", + "Remove-PfbObjectStoreAccountExport", + "Remove-PfbObjectStoreRemoteCredential", + "Remove-PfbObjectStoreRole", + "Remove-PfbObjectStoreTrustPolicyRule", + "Remove-PfbObjectStoreUser", + "Remove-PfbObjectStoreVirtualHost", + "Remove-PfbOidcIdp", + "Remove-PfbOpenFile", + "Remove-PfbPolicy", + "Remove-PfbPresetWorkload", + "Remove-PfbPublicKey", + "Remove-PfbQosPolicy", + "Remove-PfbRealm", + "Remove-PfbResourceAccess", + "Remove-PfbS3ExportPolicy", + "Remove-PfbS3ExportRule", + "Remove-PfbSaml2Idp", + "Remove-PfbServer", + "Remove-PfbSmbClientPolicy", + "Remove-PfbSmbClientRule", + "Remove-PfbSmbSharePolicy", + "Remove-PfbSmbShareRule", + "Remove-PfbSnmpManager", + "Remove-PfbSshCaPolicy", + "Remove-PfbStorageClassTieringPolicy", + "Remove-PfbSubnet", + "Remove-PfbSyslogServer", + "Remove-PfbTarget", + "Remove-PfbTlsPolicy", + "Remove-PfbWorkload", + "Remove-PfbWormPolicy", + "Set-PfbPresetWorkload", + "Test-PfbActiveDirectory", + "Test-PfbAlertWatcher", + "Test-PfbKmip", + "Test-PfbSaml2Idp", + "Test-PfbSnmpManager", + "Test-PfbSyslogServer", + "Update-PfbActiveDirectory", + "Update-PfbAdmin", + "Update-PfbAlert", + "Update-PfbAlertWatcher", + "Update-PfbApiClient", + "Update-PfbArrayConnection", + "Update-PfbAsyncLog", + "Update-PfbAuditFileSystemPolicy", + "Update-PfbAuditObjectStorePolicy", + "Update-PfbBucket", + "Update-PfbCertificate", + "Update-PfbDataEvictionPolicy", + "Update-PfbDirectoryServiceRole", + "Update-PfbFileSystem", + "Update-PfbFileSystemExport", + "Update-PfbFleet", + "Update-PfbHardware", + "Update-PfbHardwareConnector", + "Update-PfbKmip", + "Update-PfbLag", + "Update-PfbLegalHold", + "Update-PfbLegalHoldEntity", + "Update-PfbLifecycleRule", + "Update-PfbLogTargetFileSystem", + "Update-PfbLogTargetObjectStore", + "Update-PfbManagementAccessPolicy", + "Update-PfbNetworkAccessPolicy", + "Update-PfbNetworkAccessRule", + "Update-PfbNetworkInterface", + "Update-PfbNetworkInterfaceConnector", + "Update-PfbNfsExportPolicy", + "Update-PfbNfsExportRule", + "Update-PfbNode", + "Update-PfbNodeGroup", + "Update-PfbObjectStoreAccessPolicyRule", + "Update-PfbObjectStoreAccountExport", + "Update-PfbObjectStoreRemoteCredential", + "Update-PfbObjectStoreRole", + "Update-PfbObjectStoreTrustPolicyRule", + "Update-PfbObjectStoreVirtualHost", + "Update-PfbOidcIdp", + "Update-PfbPolicy", + "Update-PfbPresetWorkload", + "Update-PfbQosPolicy", + "Update-PfbRealm", + "Update-PfbRealmDefaults", + "Update-PfbS3ExportPolicy", + "Update-PfbS3ExportRule", + "Update-PfbSaml2Idp", + "Update-PfbServer", + "Update-PfbSmbClientPolicy", + "Update-PfbSmbClientRule", + "Update-PfbSmbSharePolicy", + "Update-PfbSmbShareRule", + "Update-PfbSnmpManager", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbSubnet", + "Update-PfbSyslogServer", + "Update-PfbTarget", + "Update-PfbTlsPolicy", + "Update-PfbWorkload", + "Update-PfbWormPolicy" + ] + }, + { + "name": "ids", + "cmdletCount": 218, + "cmdlets": [ + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArrayConnection", + "Get-PfbAsyncLog", + "Get-PfbAsyncLogDownload", + "Get-PfbAudit", + "Get-PfbAuditFileSystemPolicy", + "Get-PfbAuditObjectStorePolicy", + "Get-PfbBlade", + "Get-PfbBucket", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbCertificate", + "Get-PfbCertificateGroup", + "Get-PfbCertificateGroupCertificate", + "Get-PfbDataEvictionPolicy", + "Get-PfbDirectoryServiceRole", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFleet", + "Get-PfbHardware", + "Get-PfbHardwareConnector", + "Get-PfbKeytab", + "Get-PfbKeytabDownload", + "Get-PfbKmip", + "Get-PfbLag", + "Get-PfbLegalHold", + "Get-PfbLifecycleRule", + "Get-PfbLocalDirectoryService", + "Get-PfbLocalGroup", + "Get-PfbLogTargetFileSystem", + "Get-PfbLogTargetObjectStore", + "Get-PfbMaintenanceWindow", + "Get-PfbManagementAccessPolicy", + "Get-PfbNetworkAccessPolicy", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNfsExportPolicy", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPolicy", + "Get-PfbPolicyAll", + "Get-PfbPresetWorkload", + "Get-PfbPublicKey", + "Get-PfbQosPolicy", + "Get-PfbRealm", + "Get-PfbRemoteArray", + "Get-PfbResiliencyGroup", + "Get-PfbResourceAccess", + "Get-PfbS3ExportPolicy", + "Get-PfbSaml2Idp", + "Get-PfbServer", + "Get-PfbSession", + "Get-PfbSmbClientPolicy", + "Get-PfbSmbSharePolicy", + "Get-PfbSnmpManager", + "Get-PfbSshCaPolicy", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbSubnet", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSyslogServer", + "Get-PfbTarget", + "Get-PfbTlsPolicy", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "New-PfbApiToken", + "Remove-PfbActiveDirectory", + "Remove-PfbAdminCache", + "Remove-PfbAlertWatcher", + "Remove-PfbApiClient", + "Remove-PfbApiToken", + "Remove-PfbArrayConnection", + "Remove-PfbAuditFileSystemPolicy", + "Remove-PfbAuditObjectStorePolicy", + "Remove-PfbBucket", + "Remove-PfbCertificate", + "Remove-PfbCertificateGroup", + "Remove-PfbDataEvictionPolicy", + "Remove-PfbDirectoryServiceRole", + "Remove-PfbDns", + "Remove-PfbFileLock", + "Remove-PfbFileSystem", + "Remove-PfbFileSystemExport", + "Remove-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemSnapshot", + "Remove-PfbFileSystemSnapshotTransfer", + "Remove-PfbFleet", + "Remove-PfbKeytab", + "Remove-PfbLag", + "Remove-PfbLegalHold", + "Remove-PfbLifecycleRule", + "Remove-PfbLocalGroup", + "Remove-PfbLogTargetFileSystem", + "Remove-PfbLogTargetObjectStore", + "Remove-PfbMaintenanceWindow", + "Remove-PfbManagementAccessPolicy", + "Remove-PfbNetworkInterface", + "Remove-PfbNfsExportPolicy", + "Remove-PfbNodeGroup", + "Remove-PfbObjectStoreAccessKey", + "Remove-PfbObjectStoreAccessPolicy", + "Remove-PfbObjectStoreAccount", + "Remove-PfbObjectStoreAccountExport", + "Remove-PfbObjectStoreRemoteCredential", + "Remove-PfbObjectStoreRole", + "Remove-PfbObjectStoreUser", + "Remove-PfbObjectStoreVirtualHost", + "Remove-PfbOidcIdp", + "Remove-PfbOpenFile", + "Remove-PfbPolicy", + "Remove-PfbPresetWorkload", + "Remove-PfbPublicKey", + "Remove-PfbQosPolicy", + "Remove-PfbRealm", + "Remove-PfbResourceAccess", + "Remove-PfbS3ExportPolicy", + "Remove-PfbSaml2Idp", + "Remove-PfbServer", + "Remove-PfbSmbClientPolicy", + "Remove-PfbSmbSharePolicy", + "Remove-PfbSnmpManager", + "Remove-PfbSshCaPolicy", + "Remove-PfbStorageClassTieringPolicy", + "Remove-PfbSubnet", + "Remove-PfbSyslogServer", + "Remove-PfbTarget", + "Remove-PfbTlsPolicy", + "Remove-PfbWorkload", + "Remove-PfbWormPolicy", + "Set-PfbPresetWorkload", + "Test-PfbActiveDirectory", + "Test-PfbAlertWatcher", + "Test-PfbKmip", + "Test-PfbSaml2Idp", + "Test-PfbSnmpManager", + "Test-PfbSyslogServer", + "Update-PfbActiveDirectory", + "Update-PfbAdmin", + "Update-PfbAlert", + "Update-PfbAlertWatcher", + "Update-PfbApiClient", + "Update-PfbArrayConnection", + "Update-PfbAsyncLog", + "Update-PfbAuditFileSystemPolicy", + "Update-PfbAuditObjectStorePolicy", + "Update-PfbBucket", + "Update-PfbCertificate", + "Update-PfbDataEvictionPolicy", + "Update-PfbDirectoryServiceRole", + "Update-PfbFileSystem", + "Update-PfbFileSystemExport", + "Update-PfbFleet", + "Update-PfbHardware", + "Update-PfbHardwareConnector", + "Update-PfbKmip", + "Update-PfbLag", + "Update-PfbLegalHold", + "Update-PfbLifecycleRule", + "Update-PfbLogTargetFileSystem", + "Update-PfbLogTargetObjectStore", + "Update-PfbManagementAccessPolicy", + "Update-PfbNetworkAccessPolicy", + "Update-PfbNetworkInterface", + "Update-PfbNetworkInterfaceConnector", + "Update-PfbNfsExportPolicy", + "Update-PfbNode", + "Update-PfbNodeGroup", + "Update-PfbObjectStoreAccountExport", + "Update-PfbObjectStoreRemoteCredential", + "Update-PfbObjectStoreRole", + "Update-PfbObjectStoreVirtualHost", + "Update-PfbOidcIdp", + "Update-PfbPolicy", + "Update-PfbPresetWorkload", + "Update-PfbQosPolicy", + "Update-PfbRealm", + "Update-PfbRealmDefaults", + "Update-PfbS3ExportPolicy", + "Update-PfbSaml2Idp", + "Update-PfbServer", + "Update-PfbSmbClientPolicy", + "Update-PfbSmbSharePolicy", + "Update-PfbSnmpManager", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbSubnet", + "Update-PfbSyslogServer", + "Update-PfbTarget", + "Update-PfbTlsPolicy", + "Update-PfbWorkload", + "Update-PfbWormPolicy" + ] + }, + { + "name": "filter", + "cmdletCount": 185, + "cmdlets": [ + "Get-PfbActiveDirectory", + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbArraySshCaPolicy", + "Get-PfbArrayStorageClass", + "Get-PfbArraySupportedTimeZone", + "Get-PfbAsyncLog", + "Get-PfbAudit", + "Get-PfbAuditFileSystemPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditFileSystemPolicyOperation", + "Get-PfbAuditObjectStorePolicy", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBlade", + "Get-PfbBucket", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketAuditFilter", + "Get-PfbBucketAuditFilterAction", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbBucketPerformance", + "Get-PfbBucketReplicaLink", + "Get-PfbBucketS3Performance", + "Get-PfbCertificate", + "Get-PfbCertificateCertificateGroup", + "Get-PfbCertificateGroup", + "Get-PfbCertificateGroupCertificate", + "Get-PfbCertificateGroupUse", + "Get-PfbCertificateUse", + "Get-PfbDataEvictionPolicy", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryService", + "Get-PfbDirectoryServiceRole", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLink", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSession", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFileSystemUserPerformance", + "Get-PfbFileSystemWormPolicy", + "Get-PfbFleet", + "Get-PfbFleetKey", + "Get-PfbFleetMember", + "Get-PfbHardware", + "Get-PfbHardwareConnector", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbKeytab", + "Get-PfbKeytabDownload", + "Get-PfbKmip", + "Get-PfbLag", + "Get-PfbLegalHold", + "Get-PfbLegalHoldEntity", + "Get-PfbLifecycleRule", + "Get-PfbLocalDirectoryService", + "Get-PfbLocalGroup", + "Get-PfbLocalGroupMember", + "Get-PfbLog", + "Get-PfbLogTargetFileSystem", + "Get-PfbLogTargetObjectStore", + "Get-PfbMaintenanceWindow", + "Get-PfbManagementAccessPolicy", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicy", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkConnectionStatistics", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorSettings", + "Get-PfbNetworkInterfaceNeighbor", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNfsExportPolicy", + "Get-PfbNfsExportRule", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbNodeGroupNode", + "Get-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccessPolicyAction", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPolicy", + "Get-PfbPolicyAll", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbPublicKey", + "Get-PfbPublicKeyUse", + "Get-PfbQosPolicy", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbRealm", + "Get-PfbRealmDefaults", + "Get-PfbRealmSpace", + "Get-PfbRealmStorageClass", + "Get-PfbRemoteArray", + "Get-PfbResiliencyGroup", + "Get-PfbResourceAccess", + "Get-PfbRole", + "Get-PfbS3ExportPolicy", + "Get-PfbS3ExportRule", + "Get-PfbSaml2Idp", + "Get-PfbServer", + "Get-PfbSession", + "Get-PfbSmbClientPolicy", + "Get-PfbSmbClientRule", + "Get-PfbSmbSharePolicy", + "Get-PfbSmbShareRule", + "Get-PfbSnmpAgent", + "Get-PfbSnmpManager", + "Get-PfbSoftwareCheck", + "Get-PfbSshCaPolicy", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbSubnet", + "Get-PfbSupport", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSupportVerificationKey", + "Get-PfbSyslogServer", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbTlsPolicyMember", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "Get-PfbWormPolicyMember" + ] + }, + { + "name": "limit", + "cmdletCount": 182, + "cmdlets": [ + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbArraySshCaPolicy", + "Get-PfbArrayStorageClass", + "Get-PfbArraySupportedTimeZone", + "Get-PfbAsyncLog", + "Get-PfbAudit", + "Get-PfbAuditFileSystemPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditFileSystemPolicyOperation", + "Get-PfbAuditObjectStorePolicy", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBlade", + "Get-PfbBucket", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketAuditFilter", + "Get-PfbBucketAuditFilterAction", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbBucketPerformance", + "Get-PfbBucketReplicaLink", + "Get-PfbBucketS3Performance", + "Get-PfbCertificate", + "Get-PfbCertificateCertificateGroup", + "Get-PfbCertificateGroup", + "Get-PfbCertificateGroupCertificate", + "Get-PfbCertificateGroupUse", + "Get-PfbCertificateUse", + "Get-PfbDataEvictionPolicy", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRole", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLink", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSession", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFileSystemUserPerformance", + "Get-PfbFileSystemWormPolicy", + "Get-PfbFleet", + "Get-PfbFleetKey", + "Get-PfbFleetMember", + "Get-PfbHardware", + "Get-PfbHardwareConnector", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbKeytab", + "Get-PfbKeytabDownload", + "Get-PfbKmip", + "Get-PfbLag", + "Get-PfbLegalHold", + "Get-PfbLegalHoldEntity", + "Get-PfbLifecycleRule", + "Get-PfbLocalDirectoryService", + "Get-PfbLocalGroup", + "Get-PfbLocalGroupMember", + "Get-PfbLog", + "Get-PfbLogTargetFileSystem", + "Get-PfbLogTargetObjectStore", + "Get-PfbMaintenanceWindow", + "Get-PfbManagementAccessPolicy", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicy", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkConnectionStatistics", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorSettings", + "Get-PfbNetworkInterfaceNeighbor", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNfsExportPolicy", + "Get-PfbNfsExportRule", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbNodeGroupNode", + "Get-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccessPolicyAction", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPolicy", + "Get-PfbPolicyAll", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbPublicKey", + "Get-PfbPublicKeyUse", + "Get-PfbQosPolicy", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbRealm", + "Get-PfbRealmDefaults", + "Get-PfbRealmSpace", + "Get-PfbRealmStorageClass", + "Get-PfbRemoteArray", + "Get-PfbResiliencyGroup", + "Get-PfbResourceAccess", + "Get-PfbRole", + "Get-PfbS3ExportPolicy", + "Get-PfbS3ExportRule", + "Get-PfbSaml2Idp", + "Get-PfbServer", + "Get-PfbSession", + "Get-PfbSmbClientPolicy", + "Get-PfbSmbClientRule", + "Get-PfbSmbSharePolicy", + "Get-PfbSmbShareRule", + "Get-PfbSnmpManager", + "Get-PfbSoftwareCheck", + "Get-PfbSshCaPolicy", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbSubnet", + "Get-PfbSupport", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSupportVerificationKey", + "Get-PfbSyslogServer", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbTlsPolicyMember", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "Get-PfbWormPolicyMember" + ] + }, + { + "name": "sort", + "cmdletCount": 163, + "cmdlets": [ + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbArrayStorageClass", + "Get-PfbArraySupportedTimeZone", + "Get-PfbAsyncLog", + "Get-PfbAudit", + "Get-PfbAuditFileSystemPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditFileSystemPolicyOperation", + "Get-PfbAuditObjectStorePolicy", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBlade", + "Get-PfbBucket", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketAuditFilter", + "Get-PfbBucketAuditFilterAction", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbBucketPerformance", + "Get-PfbBucketReplicaLink", + "Get-PfbBucketS3Performance", + "Get-PfbCertificate", + "Get-PfbCertificateGroup", + "Get-PfbCertificateGroupCertificate", + "Get-PfbCertificateGroupUse", + "Get-PfbCertificateUse", + "Get-PfbDataEvictionPolicy", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRole", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLink", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSession", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFileSystemUserPerformance", + "Get-PfbFileSystemWormPolicy", + "Get-PfbFleet", + "Get-PfbFleetKey", + "Get-PfbFleetMember", + "Get-PfbHardware", + "Get-PfbHardwareConnector", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbKeytab", + "Get-PfbKeytabDownload", + "Get-PfbKmip", + "Get-PfbLag", + "Get-PfbLegalHold", + "Get-PfbLegalHoldEntity", + "Get-PfbLifecycleRule", + "Get-PfbLocalDirectoryService", + "Get-PfbLocalGroup", + "Get-PfbLocalGroupMember", + "Get-PfbLog", + "Get-PfbLogTargetFileSystem", + "Get-PfbLogTargetObjectStore", + "Get-PfbMaintenanceWindow", + "Get-PfbManagementAccessPolicy", + "Get-PfbNetworkAccessPolicy", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkConnectionStatistics", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorSettings", + "Get-PfbNetworkInterfaceNeighbor", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNfsExportPolicy", + "Get-PfbNfsExportRule", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbNodeGroupNode", + "Get-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccessPolicyAction", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPolicy", + "Get-PfbPolicyAll", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbPublicKey", + "Get-PfbPublicKeyUse", + "Get-PfbQosPolicy", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbRealm", + "Get-PfbRealmDefaults", + "Get-PfbRealmSpace", + "Get-PfbRealmStorageClass", + "Get-PfbRemoteArray", + "Get-PfbResiliencyGroup", + "Get-PfbResourceAccess", + "Get-PfbRole", + "Get-PfbS3ExportPolicy", + "Get-PfbS3ExportRule", + "Get-PfbSaml2Idp", + "Get-PfbServer", + "Get-PfbSession", + "Get-PfbSmbClientPolicy", + "Get-PfbSmbClientRule", + "Get-PfbSmbSharePolicy", + "Get-PfbSmbShareRule", + "Get-PfbSnmpManager", + "Get-PfbSoftwareCheck", + "Get-PfbSshCaPolicy", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbSubnet", + "Get-PfbSupport", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSupportVerificationKey", + "Get-PfbSyslogServer", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy" + ] + }, + { + "name": "policy_names", + "cmdletCount": 108, + "cmdlets": [ + "Add-PfbDataEvictionPolicyFileSystem", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbArraySshCaPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemWormPolicy", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNfsExportRule", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbS3ExportRule", + "Get-PfbSmbClientRule", + "Get-PfbSmbShareRule", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbTlsPolicyMember", + "Get-PfbWormPolicyMember", + "New-PfbAdminManagementAccessPolicy", + "New-PfbAdminSshCaPolicy", + "New-PfbArraySshCaPolicy", + "New-PfbAuditFileSystemPolicyMember", + "New-PfbAuditObjectStorePolicyMember", + "New-PfbBucketAccessPolicy", + "New-PfbBucketAccessPolicyRule", + "New-PfbBucketCorsPolicy", + "New-PfbDirectoryServiceRoleManagementPolicy", + "New-PfbFileSystemAuditPolicy", + "New-PfbFileSystemExport", + "New-PfbFileSystemPolicy", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbNetworkAccessRule", + "New-PfbNetworkInterfaceTlsPolicy", + "New-PfbNfsExportRule", + "New-PfbObjectStoreAccessPolicyRole", + "New-PfbObjectStoreAccessPolicyRule", + "New-PfbObjectStoreAccessPolicyUser", + "New-PfbObjectStoreTrustPolicyRule", + "New-PfbObjectStoreUserAccessPolicy", + "New-PfbPolicyFileSystem", + "New-PfbPolicyFileSystemReplicaLink", + "New-PfbQosPolicyMember", + "New-PfbS3ExportRule", + "New-PfbSmbClientRule", + "New-PfbSmbShareRule", + "New-PfbSshCaPolicyAdmin", + "New-PfbSshCaPolicyArray", + "Remove-PfbAdminManagementAccessPolicy", + "Remove-PfbAdminSshCaPolicy", + "Remove-PfbArraySshCaPolicy", + "Remove-PfbAuditFileSystemPolicyMember", + "Remove-PfbAuditObjectStorePolicyMember", + "Remove-PfbBucketAccessPolicy", + "Remove-PfbBucketCorsPolicy", + "Remove-PfbDataEvictionPolicyFileSystem", + "Remove-PfbDirectoryServiceRoleManagementPolicy", + "Remove-PfbFileSystemAuditPolicy", + "Remove-PfbFileSystemPolicy", + "Remove-PfbFileSystemReplicaLinkPolicy", + "Remove-PfbFileSystemSnapshotPolicy", + "Remove-PfbManagementAccessPolicyAdmin", + "Remove-PfbManagementAccessPolicyDirectoryRole", + "Remove-PfbNetworkAccessRule", + "Remove-PfbNetworkInterfaceTlsPolicy", + "Remove-PfbNfsExportRule", + "Remove-PfbObjectStoreAccessPolicyRole", + "Remove-PfbObjectStoreAccessPolicyRule", + "Remove-PfbObjectStoreAccessPolicyUser", + "Remove-PfbObjectStoreTrustPolicyRule", + "Remove-PfbObjectStoreUserAccessPolicy", + "Remove-PfbPolicyFileSystem", + "Remove-PfbPolicyFileSystemReplicaLink", + "Remove-PfbQosPolicyMember", + "Remove-PfbS3ExportRule", + "Remove-PfbSmbClientRule", + "Remove-PfbSmbShareRule", + "Remove-PfbSshCaPolicyAdmin", + "Remove-PfbSshCaPolicyArray" + ] + }, + { + "name": "member_names", + "cmdletCount": 104, + "cmdlets": [ + "Add-PfbDataEvictionPolicyFileSystem", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbArraySshCaPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAccessPolicyRule", + "Get-PfbBucketAuditFilter", + "Get-PfbBucketCorsPolicy", + "Get-PfbBucketCorsPolicyRule", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemWormPolicy", + "Get-PfbFleetMember", + "Get-PfbLegalHoldEntity", + "Get-PfbLocalGroupMember", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNodeGroupNode", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbTlsPolicyMember", + "Get-PfbWormPolicyMember", + "New-PfbAdminManagementAccessPolicy", + "New-PfbAdminSshCaPolicy", + "New-PfbArraySshCaPolicy", + "New-PfbAuditFileSystemPolicyMember", + "New-PfbAuditObjectStorePolicyMember", + "New-PfbBucketAccessPolicy", + "New-PfbBucketAccessPolicyRule", + "New-PfbBucketAuditFilter", + "New-PfbBucketCorsPolicy", + "New-PfbDirectoryServiceRoleManagementPolicy", + "New-PfbFileSystemAuditPolicy", + "New-PfbFileSystemExport", + "New-PfbFileSystemPolicy", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbFleetMember", + "New-PfbLegalHoldEntity", + "New-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbNetworkInterfaceTlsPolicy", + "New-PfbNodeGroupNode", + "New-PfbObjectStoreAccessPolicyRole", + "New-PfbObjectStoreAccessPolicyUser", + "New-PfbObjectStoreRoleAccessPolicy", + "New-PfbObjectStoreUserAccessPolicy", + "New-PfbPolicyFileSystem", + "New-PfbPolicyFileSystemReplicaLink", + "New-PfbQosPolicyMember", + "New-PfbSshCaPolicyAdmin", + "New-PfbSshCaPolicyArray", + "Remove-PfbAdminManagementAccessPolicy", + "Remove-PfbAdminSshCaPolicy", + "Remove-PfbArraySshCaPolicy", + "Remove-PfbAuditFileSystemPolicyMember", + "Remove-PfbAuditObjectStorePolicyMember", + "Remove-PfbBucketAccessPolicy", + "Remove-PfbBucketAuditFilter", + "Remove-PfbBucketCorsPolicy", + "Remove-PfbDataEvictionPolicyFileSystem", + "Remove-PfbDirectoryServiceRoleManagementPolicy", + "Remove-PfbFileSystemAuditPolicy", + "Remove-PfbFileSystemPolicy", + "Remove-PfbFileSystemReplicaLinkPolicy", + "Remove-PfbFileSystemSnapshotPolicy", + "Remove-PfbFleetMember", + "Remove-PfbLocalGroupMember", + "Remove-PfbManagementAccessPolicyAdmin", + "Remove-PfbManagementAccessPolicyDirectoryRole", + "Remove-PfbNetworkInterfaceTlsPolicy", + "Remove-PfbNodeGroupNode", + "Remove-PfbObjectStoreAccessPolicyRole", + "Remove-PfbObjectStoreAccessPolicyUser", + "Remove-PfbObjectStoreRoleAccessPolicy", + "Remove-PfbObjectStoreUserAccessPolicy", + "Remove-PfbPolicyFileSystem", + "Remove-PfbPolicyFileSystemReplicaLink", + "Remove-PfbQosPolicyMember", + "Remove-PfbSshCaPolicyAdmin", + "Remove-PfbSshCaPolicyArray", + "Update-PfbBucketAuditFilter" + ] + }, + { + "name": "policy_ids", + "cmdletCount": 87, + "cmdlets": [ + "Add-PfbDataEvictionPolicyFileSystem", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbArraySshCaPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBucketAccessPolicy", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemWormPolicy", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkAccessRule", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNfsExportRule", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbS3ExportRule", + "Get-PfbSmbClientRule", + "Get-PfbSmbShareRule", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbTlsPolicyMember", + "Get-PfbWormPolicyMember", + "New-PfbAdminManagementAccessPolicy", + "New-PfbAdminSshCaPolicy", + "New-PfbArraySshCaPolicy", + "New-PfbAuditFileSystemPolicyMember", + "New-PfbAuditObjectStorePolicyMember", + "New-PfbDirectoryServiceRoleManagementPolicy", + "New-PfbFileSystemAuditPolicy", + "New-PfbFileSystemPolicy", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbPolicyFileSystem", + "New-PfbPolicyFileSystemReplicaLink", + "New-PfbQosPolicyMember", + "New-PfbS3ExportRule", + "New-PfbSmbClientRule", + "New-PfbSmbShareRule", + "New-PfbSshCaPolicyAdmin", + "New-PfbSshCaPolicyArray", + "Remove-PfbAdminManagementAccessPolicy", + "Remove-PfbAdminSshCaPolicy", + "Remove-PfbArraySshCaPolicy", + "Remove-PfbAuditFileSystemPolicyMember", + "Remove-PfbAuditObjectStorePolicyMember", + "Remove-PfbDataEvictionPolicyFileSystem", + "Remove-PfbDirectoryServiceRoleManagementPolicy", + "Remove-PfbFileSystemAuditPolicy", + "Remove-PfbFileSystemPolicy", + "Remove-PfbFileSystemReplicaLinkPolicy", + "Remove-PfbFileSystemSnapshotPolicy", + "Remove-PfbManagementAccessPolicyAdmin", + "Remove-PfbManagementAccessPolicyDirectoryRole", + "Remove-PfbNetworkAccessRule", + "Remove-PfbNfsExportRule", + "Remove-PfbPolicyFileSystem", + "Remove-PfbPolicyFileSystemReplicaLink", + "Remove-PfbQosPolicyMember", + "Remove-PfbS3ExportRule", + "Remove-PfbSmbClientRule", + "Remove-PfbSmbShareRule", + "Remove-PfbSshCaPolicyAdmin", + "Remove-PfbSshCaPolicyArray" + ] + }, + { + "name": "member_ids", + "cmdletCount": 78, + "cmdlets": [ + "Add-PfbDataEvictionPolicyFileSystem", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSshCaPolicy", + "Get-PfbArraySshCaPolicy", + "Get-PfbAuditFileSystemPolicyMember", + "Get-PfbAuditObjectStorePolicyMember", + "Get-PfbBucketAccessPolicy", + "Get-PfbBucketAuditFilter", + "Get-PfbBucketCorsPolicy", + "Get-PfbDataEvictionPolicyFileSystem", + "Get-PfbDataEvictionPolicyMember", + "Get-PfbDirectoryServiceRoleManagementPolicy", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemSnapshotPolicy", + "Get-PfbFileSystemWormPolicy", + "Get-PfbLegalHoldEntity", + "Get-PfbManagementAccessPolicyAdmin", + "Get-PfbManagementAccessPolicyDirectoryRole", + "Get-PfbManagementAccessPolicyMember", + "Get-PfbNetworkAccessPolicyMember", + "Get-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNodeGroupNode", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbPolicyAllMember", + "Get-PfbPolicyFileSystem", + "Get-PfbPolicyFileSystemReplicaLink", + "Get-PfbPolicyFileSystemSnapshot", + "Get-PfbQosPolicyBucket", + "Get-PfbQosPolicyFileSystem", + "Get-PfbQosPolicyMember", + "Get-PfbSshCaPolicyAdmin", + "Get-PfbSshCaPolicyArray", + "Get-PfbSshCaPolicyMember", + "Get-PfbStorageClassTieringPolicyMember", + "Get-PfbTlsPolicyMember", + "Get-PfbWormPolicyMember", + "New-PfbAdminManagementAccessPolicy", + "New-PfbAdminSshCaPolicy", + "New-PfbArraySshCaPolicy", + "New-PfbAuditFileSystemPolicyMember", + "New-PfbAuditObjectStorePolicyMember", + "New-PfbDirectoryServiceRoleManagementPolicy", + "New-PfbFileSystemAuditPolicy", + "New-PfbFileSystemPolicy", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbPolicyFileSystem", + "New-PfbPolicyFileSystemReplicaLink", + "New-PfbQosPolicyMember", + "New-PfbSshCaPolicyAdmin", + "New-PfbSshCaPolicyArray", + "Remove-PfbAdminManagementAccessPolicy", + "Remove-PfbAdminSshCaPolicy", + "Remove-PfbArraySshCaPolicy", + "Remove-PfbAuditFileSystemPolicyMember", + "Remove-PfbAuditObjectStorePolicyMember", + "Remove-PfbBucketAuditFilter", + "Remove-PfbBucketCorsPolicy", + "Remove-PfbDataEvictionPolicyFileSystem", + "Remove-PfbDirectoryServiceRoleManagementPolicy", + "Remove-PfbFileSystemAuditPolicy", + "Remove-PfbFileSystemPolicy", + "Remove-PfbFileSystemReplicaLinkPolicy", + "Remove-PfbFileSystemSnapshotPolicy", + "Remove-PfbManagementAccessPolicyAdmin", + "Remove-PfbManagementAccessPolicyDirectoryRole", + "Remove-PfbPolicyFileSystem", + "Remove-PfbPolicyFileSystemReplicaLink", + "Remove-PfbQosPolicyMember", + "Remove-PfbSshCaPolicyAdmin", + "Remove-PfbSshCaPolicyArray", + "Update-PfbBucketAuditFilter" + ] + }, + { + "name": "total_only", + "cmdletCount": 30, + "cmdlets": [ + "Get-PfbBucket", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemExport", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemReplicaLinkTransfer", + "Get-PfbFileSystemSession", + "Get-PfbFileSystemSnapshot", + "Get-PfbFileSystemSnapshotTransfer", + "Get-PfbFileSystemStorageClass", + "Get-PfbFileSystemUserPerformance", + "Get-PfbObjectStoreAccessPolicy", + "Get-PfbObjectStoreAccessPolicyAction", + "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbObjectStoreAccessPolicyRule", + "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbOpenFile", + "Get-PfbRealm", + "Get-PfbServer" + ] + }, + { + "name": "end_time", + "cmdletCount": 16, + "cmdlets": [ + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbLog", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbTargetPerformanceReplication" + ] + }, + { + "name": "start_time", + "cmdletCount": 16, + "cmdlets": [ + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbLog", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbTargetPerformanceReplication" + ] + }, + { + "name": "resolution", + "cmdletCount": 15, + "cmdlets": [ + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayHttpPerformance", + "Get-PfbArrayNfsPerformance", + "Get-PfbArrayPerformance", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArrayS3Performance", + "Get-PfbBucketPerformance", + "Get-PfbBucketS3Performance", + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbHardwareConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbTargetPerformanceReplication" + ] + }, + { + "name": "file_system_names", + "cmdletCount": 6, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbUsageGroup", + "Get-PfbUsageUser" + ] + }, + { + "name": "group_names", + "cmdletCount": 6, + "cmdlets": [ + "Get-PfbLocalGroupMember", + "Get-PfbNodeGroupNode", + "New-PfbLocalGroupMember", + "New-PfbNodeGroupNode", + "Remove-PfbLocalGroupMember", + "Remove-PfbNodeGroupNode" + ] + }, + { + "name": "destroyed", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbBucket", + "Get-PfbFileSystem", + "Get-PfbFileSystemSnapshot", + "Get-PfbRealm", + "Get-PfbWorkload" + ] + }, + { + "name": "role_names", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "New-PfbObjectStoreRoleAccessPolicy", + "Remove-PfbObjectStoreRoleAccessPolicy" + ] + }, + { + "name": "type", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArraySpace", + "New-PfbNetworkInterface" + ] + }, + { + "name": "certificate_group_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] + }, + { + "name": "certificate_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] + }, + { + "name": "local_file_system_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] + }, + { + "name": "name", + "cmdletCount": 3, + "cmdlets": [ + "Update-PfbDataEvictionPolicy", + "Update-PfbPresetWorkload", + "Update-PfbWorkload" + ] + }, + { + "name": "remote_file_system_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] + }, + { + "name": "address", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbNetworkInterface", + "Update-PfbNetworkInterface" + ] + }, + { + "name": "file_system_ids", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance" + ] + }, + { + "name": "keep_size", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbDataEvictionPolicy", + "Update-PfbDataEvictionPolicy" + ] + }, + { + "name": "prefix", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbSubnet", + "Update-PfbSubnet" + ] + }, + { + "name": "protocols", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbFileSystemSession", + "Remove-PfbFileSystemSession" + ] + }, + { + "name": "quota_limit", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbBucket", + "Update-PfbBucket" + ] + }, + { + "name": "remote_names", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] + }, + { + "name": "role_ids", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy" + ] + }, + { + "name": "rules", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbPolicy", + "Update-PfbPolicy" + ] + }, + { + "name": "account", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbBucket" + ] + }, + { + "name": "bucket", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbLifecycleRule" + ] + }, + { + "name": "bucket_names", + "cmdletCount": 1, + "cmdlets": [ + "Get-PfbLifecycleRule" + ] + }, + { + "name": "email", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbLocalGroup" + ] + }, + { + "name": "eradication_config", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] + }, + { + "name": "export_name", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystemExport" + ] + }, + { + "name": "file_system", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbQuotaGroup" + ] + }, + { + "name": "group", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbQuotaGroup" + ] + }, + { + "name": "hostname", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbObjectStoreVirtualHost" + ] + }, + { + "name": "link_aggregation_group", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSubnet" + ] + }, + { + "name": "local_directory_service_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbLocalGroupMember" + ] + }, + { + "name": "management_address", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbArrayConnection" + ] + }, + { + "name": "member_types", + "cmdletCount": 1, + "cmdlets": [ + "Get-PfbPolicyAllMember" + ] + }, + { + "name": "parameters", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbWorkload" + ] + }, + { + "name": "protocol", + "cmdletCount": 1, + "cmdlets": [ + "Get-PfbArrayPerformance" + ] + }, + { + "name": "replication_addresses", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbArrayConnection" + ] + }, + { + "name": "server", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystemExport" + ] + }, + { + "name": "services", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNetworkInterface" + ] + }, + { + "name": "share_policy", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystemExport" + ] + }, + { + "name": "source", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] + }, + { + "name": "vlan", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSubnet" + ] + }, + { + "name": "abort_incomplete_multipart_uploads_after", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "access", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "access_key_id", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "access_policies", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "access_token_ttl_in_ms", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "account_exports", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "actions", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "add_attached_servers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "add_ports", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "admin_ids", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "admin_names", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "aggregation_strategy", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "allow_errors", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "allowed_headers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "allowed_methods", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "allowed_origins", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "analysis_period_end_time", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "analysis_period_start_time", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "anongid", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "anonuid", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "appliance_certificate", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "archival_rules", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "array_url", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "atime", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "attached_servers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "authorization_model", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "banner", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "before_rule_id", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "before_rule_name", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "binding", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "bucket_defaults", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "bucket_ids", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "bucket_type", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "ca_certificate", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "ca_certificate_group", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "certificate", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "certificate_group_ids", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "certificate_ids", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "certificate_type", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "change", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "client", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "client_certificates_required", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "client_names", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "common_name", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "component_name", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "conditions", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "confirm_date", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "contact", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "context_names", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "country", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "current_state", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "days", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "default_inbound_tls_policy", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "default_retention", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "delete_sanitization_certificate", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "description", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "direct_notifications_enabled", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "direction", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "directory_configurations", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "directory_servers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "disabled_tls_ciphers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "discover_mtu", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "edge_agent_update_enabled", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "edge_management_enabled", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "effect", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "effective", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "enabled", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "enabled_tls_ciphers", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "encrypted", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "encryption", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "encryption_types", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "enforce_action_restrictions", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "enforce_dictionary_check", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "enforce_username_check", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "eradicate_all_data", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "exclude_rules", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "export_configurations", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "export_enabled", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /fleets/members", - "cmdlets": [ - "New-PfbFleetMember" - ], - "missingParameters": [ - "fleet_ids", - "members" - ] + "name": "expose_api_token", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /legal-holds/held-entities", - "cmdlets": [ - "New-PfbLegalHoldEntity" - ], - "missingParameters": [ - "file_system_ids", - "file_system_names", - "ids", - "names", - "paths", - "recursive" - ] + "name": "fileid_32bit", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /management-access-policies/admins", - "cmdlets": [ - "New-PfbManagementAccessPolicyAdmin" - ], - "missingParameters": [ - "context_names" - ] + "name": "finalize", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /network-access-policies/rules", - "cmdlets": [ - "New-PfbNetworkAccessRule" - ], - "missingParameters": [ - "before_rule_id", - "before_rule_name", - "client", - "effect", - "id", - "index", - "interfaces", - "name", - "versions" - ] + "name": "fleet_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /network-interfaces/tls-policies", - "cmdlets": [ - "New-PfbNetworkInterfaceTlsPolicy" - ], - "missingParameters": [ - "member_ids", - "policy_ids" - ] + "name": "fqdns", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /nfs-export-policies/rules", - "cmdlets": [ - "New-PfbNfsExportRule" - ], - "missingParameters": [ - "access", - "anongid", - "anonuid", - "atime", - "before_rule_id", - "before_rule_name", - "client", - "context", - "context_names", - "fileid_32bit", - "id", - "index", - "name", - "permission", - "policy", - "policy_version", - "required_transport_security", - "secure", - "security", - "versions" - ] + "name": "fragment_packet", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /node-groups/nodes", - "cmdlets": [ - "New-PfbNodeGroupNode" - ], - "missingParameters": [ - "node_group_ids", - "node_group_names", - "node_ids", - "node_names" - ] + "name": "full_access", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /policies/file-system-replica-links", - "cmdlets": [ - "New-PfbPolicyFileSystemReplicaLink" - ], - "missingParameters": [ - "context_names", - "local_file_system_ids", - "local_file_system_names", - "remote_ids", - "remote_names" - ] + "name": "full_control", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /policies/file-systems", - "cmdlets": [ - "New-PfbPolicyFileSystem" - ], - "missingParameters": [ - "context_names" - ] + "name": "generate_new_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /qos-policies/members", - "cmdlets": [ - "New-PfbQosPolicyMember" - ], - "missingParameters": [ - "context_names", - "member_types" - ] + "name": "gids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /s3-export-policies/rules", - "cmdlets": [ - "New-PfbS3ExportRule" - ], - "missingParameters": [ - "actions", - "context_names", - "effect", - "names", - "resources" - ] + "name": "global_catalog_servers", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /smb-client-policies/rules", - "cmdlets": [ - "New-PfbSmbClientRule" - ], - "missingParameters": [ - "before_rule_id", - "before_rule_name", - "client", - "context_names", - "encryption", - "id", - "index", - "name", - "permission", - "versions" - ] + "name": "group_base", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /smb-share-policies/rules", - "cmdlets": [ - "New-PfbSmbShareRule" - ], - "missingParameters": [ - "change", - "context_names", - "full_control", - "id", - "name", - "principal", - "read" - ] + "name": "group_gids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /ssh-certificate-authority-policies/admins", - "cmdlets": [ - "New-PfbSshCaPolicyAdmin" - ], - "missingParameters": [ - "context_names" - ] + "name": "group_sids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /ssh-certificate-authority-policies/arrays", - "cmdlets": [ - "New-PfbSshCaPolicyArray" - ], - "missingParameters": [ - "context_names" - ] - } - ], - "notVerifiedEndpoints": [ + "name": "hard_limit_enabled", + "cmdletCount": 0, + "cmdlets": [] + }, { - "endpoint": "DELETE /arrays/erasures", - "cmdlets": [ - "Remove-PfbArrayErasure" - ], - "reason": "has attributes/unresolved surface" + "name": "hardware_components", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /arrays/factory-reset-token", - "cmdlets": [ - "Remove-PfbArrayFactoryResetToken" - ], - "reason": "has attributes/unresolved surface" + "name": "host", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /buckets", - "cmdlets": [ - "Remove-PfbBucket" - ], - "reason": "has attributes/unresolved surface" + "name": "identify_enabled", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /buckets/bucket-access-policies", - "cmdlets": [ - "Remove-PfbBucketAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "idle_timeout", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /buckets/bucket-access-policies/rules", - "cmdlets": [ - "Remove-PfbBucketAccessPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "idp", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /buckets/cross-origin-resource-sharing-policies/rules", - "cmdlets": [ - "Remove-PfbBucketCorsPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "index", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /directory-services/local/groups/members", - "cmdlets": [ - "Remove-PfbLocalGroupMember" - ], - "reason": "has attributes/unresolved surface" + "name": "indices", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /file-system-snapshots", - "cmdlets": [ - "Remove-PfbFileSystemSnapshot" - ], - "reason": "has attributes/unresolved surface" + "name": "inodes", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /file-systems", - "cmdlets": [ - "Remove-PfbFileSystem" - ], - "reason": "has attributes/unresolved surface" + "name": "interfaces", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /network-access-policies/rules", - "cmdlets": [ - "Remove-PfbNetworkAccessRule" - ], - "reason": "has attributes/unresolved surface" + "name": "intermediate_certificate", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /nfs-export-policies/rules", - "cmdlets": [ - "Remove-PfbNfsExportRule" - ], - "reason": "has attributes/unresolved surface" + "name": "issuer", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-access-policies/object-store-roles", - "cmdlets": [ - "Remove-PfbObjectStoreAccessPolicyRole" - ], - "reason": "has attributes/unresolved surface" + "name": "join_ou", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-access-policies/object-store-users", - "cmdlets": [ - "Remove-PfbObjectStoreAccessPolicyUser" - ], - "reason": "has attributes/unresolved surface" + "name": "keep_current_version_for", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-access-policies/rules", - "cmdlets": [ - "Remove-PfbObjectStoreAccessPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "keep_current_version_until", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-roles/object-store-access-policies", - "cmdlets": [ - "Remove-PfbObjectStoreRoleAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "keep_for", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-roles/object-store-trust-policies/rules", - "cmdlets": [ - "Remove-PfbObjectStoreTrustPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "keep_previous_version_for", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /object-store-users/object-store-access-policies", - "cmdlets": [ - "Remove-PfbObjectStoreUserAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "kerberos_servers", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /quotas/groups", - "cmdlets": [ - "Remove-PfbQuotaGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "key_algorithm", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /quotas/users", - "cmdlets": [ - "Remove-PfbQuotaUser" - ], - "reason": "has attributes/unresolved surface" + "name": "key_size", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /realms", - "cmdlets": [ - "Remove-PfbRealm" - ], - "reason": "has attributes/unresolved surface" + "name": "keytab_file", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /s3-export-policies/rules", - "cmdlets": [ - "Remove-PfbS3ExportRule" - ], - "reason": "has attributes/unresolved surface" + "name": "keytab_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /servers", - "cmdlets": [ - "Remove-PfbServer" - ], - "reason": "has attributes/unresolved surface" + "name": "keytab_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /smb-client-policies/rules", - "cmdlets": [ - "Remove-PfbSmbClientRule" - ], - "reason": "has attributes/unresolved surface" + "name": "kmip_server", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /smb-share-policies/rules", - "cmdlets": [ - "Remove-PfbSmbShareRule" - ], - "reason": "has attributes/unresolved surface" + "name": "lane_speed", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "DELETE /workloads/tags", - "cmdlets": [ - "Remove-PfbWorkloadTag" - ], - "reason": "has attributes/unresolved surface" + "name": "lanes_per_port", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /admins/settings", - "cmdlets": [ - "Get-PfbAdminSetting" - ], - "reason": "has attributes/unresolved surface" + "name": "link_type", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /alerts", - "cmdlets": [ - "Get-PfbAlert" - ], - "reason": "has attributes/unresolved surface" + "name": "local_bucket_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /arrays", - "cmdlets": [ - "Get-PfbArray", - "Test-PfbConnection" - ], - "reason": "has attributes/unresolved surface" + "name": "local_directory_service_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /arrays/eula", - "cmdlets": [ - "Get-PfbArrayEula" - ], - "reason": "has attributes/unresolved surface" + "name": "local_file_system", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /arrays/factory-reset-token", - "cmdlets": [ - "Get-PfbArrayFactoryResetToken" - ], - "reason": "has attributes/unresolved surface" + "name": "local_file_system_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /directory-services/test", - "cmdlets": [ - "Test-PfbDirectoryService" - ], - "reason": "has attributes/unresolved surface" + "name": "local_host", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /dns", - "cmdlets": [ - "Get-PfbDns" - ], - "reason": "has attributes/unresolved surface" + "name": "local_only", + "cmdletCount": 0, + "cmdlets": [] + }, + { + "name": "local_port", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /hardware", - "cmdlets": [ - "Get-PfbHardware", - "Get-PfbHardwareTemperature" - ], - "reason": "has attributes/unresolved surface" + "name": "local_port_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /network-interfaces/ping", - "cmdlets": [ - "Invoke-PfbNetworkPing" - ], - "reason": "has attributes/unresolved surface" + "name": "locality", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /network-interfaces/trace", - "cmdlets": [ - "Invoke-PfbNetworkTrace" - ], - "reason": "has attributes/unresolved surface" + "name": "location", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /password-policies", - "cmdlets": [ - "Get-PfbPasswordPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "locked", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /quotas/settings", - "cmdlets": [ - "Get-PfbQuotaSettings" - ], - "reason": "has attributes/unresolved surface" + "name": "lockout_duration", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /rapid-data-locking", - "cmdlets": [ - "Get-PfbRapidDataLocking" - ], - "reason": "has attributes/unresolved surface" + "name": "log_name_prefix", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /rapid-data-locking/test", - "cmdlets": [ - "Test-PfbRapidDataLocking" - ], - "reason": "has attributes/unresolved surface" + "name": "log_rotate", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /smtp-servers", - "cmdlets": [ - "Get-PfbSmtpServer" - ], - "reason": "has attributes/unresolved surface" + "name": "management", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /snmp-agents/mib", - "cmdlets": [ - "Get-PfbSnmpAgentMib" - ], - "reason": "has attributes/unresolved surface" + "name": "management_access_policies", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /support/test", - "cmdlets": [ - "Test-PfbSupport" - ], - "reason": "has attributes/unresolved surface" + "name": "max_login_attempts", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "GET /syslog-servers/settings", - "cmdlets": [ - "Get-PfbSyslogServerSettings" - ], - "reason": "has attributes/unresolved surface" + "name": "max_password_age", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /admins/settings", - "cmdlets": [ - "Update-PfbAdminSetting" - ], - "reason": "has attributes/unresolved surface" + "name": "max_retention", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /alert-watchers", - "cmdlets": [ - "Update-PfbAlertWatcher" - ], - "reason": "has attributes/unresolved surface" + "name": "max_role", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /alerts", - "cmdlets": [ - "Update-PfbAlert" - ], - "reason": "has attributes/unresolved surface" + "name": "max_session_duration", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /arrays", - "cmdlets": [ - "Update-PfbArray" - ], - "reason": "has attributes/unresolved surface" + "name": "max_total_bytes_per_sec", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /arrays/erasures", - "cmdlets": [ - "Update-PfbArrayErasure" - ], - "reason": "has attributes/unresolved surface" + "name": "max_total_ops_per_sec", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /arrays/eula", - "cmdlets": [ - "Update-PfbArrayEula" - ], - "reason": "has attributes/unresolved surface" + "name": "member", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /audit-file-systems-policies", - "cmdlets": [ - "Update-PfbAuditFileSystemPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "member_sids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /audit-object-store-policies", - "cmdlets": [ - "Update-PfbAuditObjectStorePolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "members", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /buckets", - "cmdlets": [ - "Remove-PfbBucket", - "Update-PfbBucket" - ], - "reason": "has attributes/unresolved surface" + "name": "min_character_groups", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /data-eviction-policies", - "cmdlets": [ - "Update-PfbDataEvictionPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "min_characters_per_group", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /directory-services", - "cmdlets": [ - "Update-PfbDirectoryService" - ], - "reason": "has attributes/unresolved surface" + "name": "min_password_age", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /file-system-snapshots", - "cmdlets": [ - "Remove-PfbFileSystemSnapshot" - ], - "reason": "has attributes/unresolved surface" + "name": "min_password_length", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /file-systems", - "cmdlets": [ - "Remove-PfbFileSystem", - "Update-PfbFileSystem" - ], - "reason": "has attributes/unresolved surface" + "name": "min_retention", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /network-access-policies", - "cmdlets": [ - "Update-PfbNetworkAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "min_tls_version", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /network-access-policies/rules", - "cmdlets": [ - "Update-PfbNetworkAccessRule" - ], - "reason": "has attributes/unresolved surface" + "name": "mode", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /nfs-export-policies", - "cmdlets": [ - "Update-PfbNfsExportPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "name_prefixes", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /nfs-export-policies/rules", - "cmdlets": [ - "Update-PfbNfsExportRule" - ], - "reason": "has attributes/unresolved surface" + "name": "names_or_owner_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /object-store-access-policies/rules", - "cmdlets": [ - "Update-PfbObjectStoreAccessPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "network_access_policy", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /object-store-roles/object-store-trust-policies/rules", - "cmdlets": [ - "Update-PfbObjectStoreTrustPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "node_group_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /password-policies", - "cmdlets": [ - "Update-PfbPasswordPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "node_group_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /policies", - "cmdlets": [ - "Update-PfbPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "node_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /presets/workload", - "cmdlets": [ - "Update-PfbPresetWorkload" - ], - "reason": "has attributes/unresolved surface" + "name": "node_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /quotas/groups", - "cmdlets": [ - "Update-PfbQuotaGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "node_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /quotas/settings", - "cmdlets": [ - "Update-PfbQuotaSettings" - ], - "reason": "has attributes/unresolved surface" + "name": "notification", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /quotas/users", - "cmdlets": [ - "Update-PfbQuotaUser" - ], - "reason": "has attributes/unresolved surface" + "name": "ntp_servers", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /rapid-data-locking", - "cmdlets": [ - "Update-PfbRapidDataLocking" - ], - "reason": "has attributes/unresolved surface" + "name": "object_lock_config", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /realms", - "cmdlets": [ - "Remove-PfbRealm", - "Update-PfbRealm" - ], - "reason": "has attributes/unresolved surface" + "name": "object_store", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /s3-export-policies", - "cmdlets": [ - "Update-PfbS3ExportPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "old_password", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /s3-export-policies/rules", - "cmdlets": [ - "Update-PfbS3ExportRule" - ], - "reason": "has attributes/unresolved surface" + "name": "organization", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /servers", - "cmdlets": [ - "Update-PfbServer" - ], - "reason": "has attributes/unresolved surface" + "name": "organizational_unit", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /smb-client-policies", - "cmdlets": [ - "Update-PfbSmbClientPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "owner_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /smb-client-policies/rules", - "cmdlets": [ - "Update-PfbSmbClientRule" - ], - "reason": "has attributes/unresolved surface" + "name": "passphrase", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /smb-share-policies", - "cmdlets": [ - "Update-PfbSmbSharePolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "password", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /smb-share-policies/rules", - "cmdlets": [ - "Update-PfbSmbShareRule" - ], - "reason": "has attributes/unresolved surface" + "name": "password_history", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /snmp-agents", - "cmdlets": [ - "Update-PfbSnmpAgent" - ], - "reason": "has attributes/unresolved surface" + "name": "paths", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /support", - "cmdlets": [ - "Update-PfbSupport" - ], - "reason": "has attributes/unresolved surface" + "name": "periodic_replication_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /support/verification-keys", - "cmdlets": [ - "Update-PfbSupportVerificationKey" - ], - "reason": "has attributes/unresolved surface" + "name": "permission", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /syslog-servers/settings", - "cmdlets": [ - "Update-PfbSyslogServerSettings" - ], - "reason": "has attributes/unresolved surface" + "name": "phonehome_enabled", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "PATCH /workloads", - "cmdlets": [ - "Update-PfbWorkload" - ], - "reason": "has attributes/unresolved surface" + "name": "placement_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /active-directory", - "cmdlets": [ - "New-PfbActiveDirectory" - ], - "reason": "has attributes/unresolved surface" + "name": "platform_features", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /alert-watchers", - "cmdlets": [ - "New-PfbAlertWatcher" - ], - "reason": "has attributes/unresolved surface" + "name": "policies", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /api-clients", - "cmdlets": [ - "New-PfbApiClient" - ], - "reason": "has attributes/unresolved surface" + "name": "policy", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /array-connections/connection-key", - "cmdlets": [ - "New-PfbArrayConnectionKey" - ], - "reason": "has attributes/unresolved surface" + "name": "port", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /arrays/erasures", - "cmdlets": [ - "New-PfbArrayErasure" - ], - "reason": "has attributes/unresolved surface" + "name": "port_count", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /arrays/factory-reset-token", - "cmdlets": [ - "New-PfbArrayFactoryResetToken" - ], - "reason": "has attributes/unresolved surface" + "name": "port_speed", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /audit-file-systems-policies", - "cmdlets": [ - "New-PfbAuditFileSystemPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "ports", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /audit-object-store-policies", - "cmdlets": [ - "New-PfbAuditObjectStorePolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "preserve_configuration_data", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets", - "cmdlets": [ - "New-PfbBucket" - ], - "reason": "has attributes/unresolved surface" + "name": "principal", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets/audit-filters", - "cmdlets": [ - "New-PfbBucketAuditFilter" - ], - "reason": "has attributes/unresolved surface" + "name": "principals", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets/bucket-access-policies", - "cmdlets": [ - "New-PfbBucketAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "print_latency", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets/bucket-access-policies/rules", - "cmdlets": [ - "New-PfbBucketAccessPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "private_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", - "cmdlets": [ - "New-PfbBucketCorsPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "proxy", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", - "cmdlets": [ - "New-PfbBucketCorsPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "public_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /certificate-groups", - "cmdlets": [ - "New-PfbCertificateGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "purity_defined", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /certificates", - "cmdlets": [ - "New-PfbCertificate" - ], - "reason": "has attributes/unresolved surface" + "name": "qos_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /certificates/certificate-signing-requests", - "cmdlets": [ - "New-PfbCertificateSigningRequest" - ], - "reason": "has attributes/unresolved surface" + "name": "quota_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /data-eviction-policies", - "cmdlets": [ - "New-PfbDataEvictionPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "read", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /directory-services/local/directory-services", - "cmdlets": [ - "New-PfbLocalDirectoryService" - ], - "reason": "has attributes/unresolved surface" + "name": "realm_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /directory-services/local/groups", - "cmdlets": [ - "New-PfbLocalGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "realm_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /directory-services/local/groups/members", - "cmdlets": [ - "New-PfbLocalGroupMember" - ], - "reason": "has attributes/unresolved surface" + "name": "recursive", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /directory-services/roles", - "cmdlets": [ - "New-PfbDirectoryServiceRole" - ], - "reason": "has attributes/unresolved surface" + "name": "refresh", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /dns", - "cmdlets": [ - "New-PfbDns" - ], - "reason": "has attributes/unresolved surface" + "name": "released", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /file-system-exports", - "cmdlets": [ - "New-PfbFileSystemExport" - ], - "reason": "has attributes/unresolved surface" + "name": "remote", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /file-system-replica-links", - "cmdlets": [ - "New-PfbFileSystemReplicaLink" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_assist_active", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /file-system-snapshots", - "cmdlets": [ - "New-PfbFileSystemSnapshot" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_assist_duration", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /file-systems", - "cmdlets": [ - "New-PfbFileSystem" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_file_system", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /file-systems/locks/nlm-reclamations", - "cmdlets": [ - "New-PfbNlmReclamation" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_file_system_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /fleets", - "cmdlets": [ - "New-PfbFleet" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_host", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /fleets/fleet-key", - "cmdlets": [ - "New-PfbFleetKey" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /keytabs", - "cmdlets": [ - "New-PfbKeytab" - ], - "reason": "has attributes/unresolved surface" + "name": "remote_port", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /keytabs/upload", - "cmdlets": [ - "New-PfbKeytabUpload" - ], - "reason": "has attributes/unresolved surface" + "name": "remove_attached_servers", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /legal-holds", - "cmdlets": [ - "New-PfbLegalHold" - ], - "reason": "has attributes/unresolved surface" + "name": "remove_ports", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /lifecycle-rules", - "cmdlets": [ - "New-PfbLifecycleRule" - ], - "reason": "has attributes/unresolved surface" + "name": "required_transport_security", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /link-aggregation-groups", - "cmdlets": [ - "New-PfbLag" - ], - "reason": "has attributes/unresolved surface" + "name": "resolve_hostname", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /log-targets/file-systems", - "cmdlets": [ - "New-PfbLogTargetFileSystem" - ], - "reason": "has attributes/unresolved surface" + "name": "resources", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /log-targets/object-store", - "cmdlets": [ - "New-PfbLogTargetObjectStore" - ], - "reason": "has attributes/unresolved surface" + "name": "retention_lock", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /maintenance-windows", - "cmdlets": [ - "New-PfbMaintenanceWindow" - ], - "reason": "has attributes/unresolved surface" + "name": "retrieval_rules", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /management-access-policies", - "cmdlets": [ - "New-PfbManagementAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "role", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /network-interfaces", - "cmdlets": [ - "New-PfbNetworkInterface" - ], - "reason": "has attributes/unresolved surface" + "name": "rule_id", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /nfs-export-policies", - "cmdlets": [ - "New-PfbNfsExportPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "s3_prefixes", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /node-groups", - "cmdlets": [ - "New-PfbNodeGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "secret_access_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-access-keys", - "cmdlets": [ - "New-PfbObjectStoreAccessKey" - ], - "reason": "has attributes/unresolved surface" + "name": "secure", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-access-policies", - "cmdlets": [ - "New-PfbObjectStoreAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "security", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-access-policies/object-store-roles", - "cmdlets": [ - "New-PfbObjectStoreAccessPolicyRole" - ], - "reason": "has attributes/unresolved surface" + "name": "serial_number", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-access-policies/object-store-users", - "cmdlets": [ - "New-PfbObjectStoreAccessPolicyUser" - ], - "reason": "has attributes/unresolved surface" + "name": "service_principal_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-access-policies/rules", - "cmdlets": [ - "New-PfbObjectStoreAccessPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "session_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-account-exports", - "cmdlets": [ - "New-PfbObjectStoreAccountExport" - ], - "reason": "has attributes/unresolved surface" + "name": "sids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-accounts", - "cmdlets": [ - "New-PfbObjectStoreAccount" - ], - "reason": "has attributes/unresolved surface" + "name": "signature", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-remote-credentials", - "cmdlets": [ - "New-PfbObjectStoreRemoteCredential" - ], - "reason": "has attributes/unresolved surface" + "name": "signed_verification_key", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-roles", - "cmdlets": [ - "New-PfbObjectStoreRole" - ], - "reason": "has attributes/unresolved surface" + "name": "signing_authority", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-roles/object-store-access-policies", - "cmdlets": [ - "New-PfbObjectStoreRoleAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "skip_phonehome_check", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-roles/object-store-trust-policies/rules", - "cmdlets": [ - "New-PfbObjectStoreTrustPolicyRule" - ], - "reason": "has attributes/unresolved surface" + "name": "snapshot_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-users", - "cmdlets": [ - "New-PfbObjectStoreUser" - ], - "reason": "has attributes/unresolved surface" + "name": "software_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-users/object-store-access-policies", - "cmdlets": [ - "New-PfbObjectStoreUserAccessPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "software_versions", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /object-store-virtual-hosts", - "cmdlets": [ - "New-PfbObjectStoreVirtualHost" - ], - "reason": "has attributes/unresolved surface" + "name": "sources", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /policies", - "cmdlets": [ - "New-PfbPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "sp", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /presets/workload", - "cmdlets": [ - "New-PfbPresetWorkload" - ], - "reason": "has attributes/unresolved surface" + "name": "state", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /public-keys", - "cmdlets": [ - "New-PfbPublicKey" - ], - "reason": "has attributes/unresolved surface" + "name": "static_authorized_principals", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /qos-policies", - "cmdlets": [ - "New-PfbQosPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "storage_class_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /quotas/groups", - "cmdlets": [ - "New-PfbQuotaGroup" - ], - "reason": "has attributes/unresolved surface" + "name": "subject_alternative_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /quotas/users", - "cmdlets": [ - "New-PfbQuotaUser" - ], - "reason": "has attributes/unresolved surface" + "name": "throttle", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /rapid-data-locking/rotate", - "cmdlets": [ - "New-PfbRapidDataLockingRotation" - ], - "reason": "has attributes/unresolved surface" + "name": "time_zone", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /realms", - "cmdlets": [ - "New-PfbRealm" - ], - "reason": "has attributes/unresolved surface" + "name": "timeout", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /s3-export-policies", - "cmdlets": [ - "New-PfbS3ExportPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "total_item_count", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /servers", - "cmdlets": [ - "New-PfbServer" - ], - "reason": "has attributes/unresolved surface" + "name": "trusted_client_certificate_authority", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /smb-client-policies", - "cmdlets": [ - "New-PfbSmbClientPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "uids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /smb-share-policies", - "cmdlets": [ - "New-PfbSmbSharePolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "unreachable", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /snmp-managers", - "cmdlets": [ - "New-PfbSnmpManager" - ], - "reason": "has attributes/unresolved surface" + "name": "uri", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /software-check", - "cmdlets": [ - "New-PfbSoftwareCheck" - ], - "reason": "has attributes/unresolved surface" + "name": "uris", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /ssh-certificate-authority-policies", - "cmdlets": [ - "New-PfbSshCaPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "user_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /sso/oidc/idps", - "cmdlets": [ - "New-PfbOidcIdp" - ], - "reason": "has attributes/unresolved surface" + "name": "v2c", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /sso/saml2/idps", - "cmdlets": [ - "New-PfbSaml2Idp" - ], - "reason": "has attributes/unresolved surface" + "name": "v3", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /storage-class-tiering-policies", - "cmdlets": [ - "New-PfbStorageClassTieringPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "verify_client_certificate_trust", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /subnets", - "cmdlets": [ - "New-PfbSubnet" - ], - "reason": "has attributes/unresolved surface" + "name": "version", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /support-diagnostics", - "cmdlets": [ - "New-PfbSupportDiagnostics" - ], - "reason": "has attributes/unresolved surface" + "name": "versions", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /syslog-servers", - "cmdlets": [ - "New-PfbSyslogServer" - ], - "reason": "has attributes/unresolved surface" + "name": "volume_configurations", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /targets", - "cmdlets": [ - "New-PfbTarget" - ], - "reason": "has attributes/unresolved surface" + "name": "without_default_access_list", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /tls-policies", - "cmdlets": [ - "New-PfbTlsPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "workload_ids", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /workloads", - "cmdlets": [ - "New-PfbWorkload" - ], - "reason": "has attributes/unresolved surface" + "name": "workload_names", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /workloads/placement-recommendations", - "cmdlets": [ - "New-PfbWorkloadPlacementRecommendation" - ], - "reason": "has attributes/unresolved surface" + "name": "workload_tags", + "cmdletCount": 0, + "cmdlets": [] }, { - "endpoint": "POST /worm-data-policies", - "cmdlets": [ - "New-PfbWormPolicy" - ], - "reason": "has attributes/unresolved surface" + "name": "workload_type", + "cmdletCount": 0, + "cmdlets": [] } ], "validateSetDrift": [], diff --git a/Reports/PfbApiDriftReport.md b/Reports/PfbApiDriftReport.md index d35e8e2..e53c4c0 100644 --- a/Reports/PfbApiDriftReport.md +++ b/Reports/PfbApiDriftReport.md @@ -1,17 +1,707 @@ # API Drift Report -Generated by `tools/Build-PfbApiDriftReport.ps1` (28 REST versions). +Generated by `tools/Build-PfbApiDriftReport.ps1` (28 analysed REST versions; 29 available on disk under `tools/specs/`). Reporting only -- no `Public/` cmdlet is edited by this script. +**Warning:** analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set. + +## How to read this report + +This report accepts **false positives in order to eliminate false negatives**. A field is listed as missing even though the module can already set it, when a parameter covering it could not be traced to a wire name. + +**Detection.** Only possible where `confidence.level` is `partial`. When it is `high` (`unresolvedParameters` empty), the row carries no false-positive risk from this mechanism. + +**Resolution procedure:** +1. Open the named parameter at the given `file:line` and follow where its value goes. +2. If it reaches the wire under the same name as the reported gap -> the gap is a false positive AND a tooling bug: the parser does not recognise that idiom. File it as a parser gap and fix the parser. +3. If it reaches the wire under a different name -> the reported gap may still be real; check that field against the spec. +4. If it never reaches the wire -> the gap is real. + +**Why this trade is right:** a false positive costs a reader one `file:line` lookup; a false negative costs an undetected gap indefinitely. Every false positive here is a parser-gap detector -- it either fixes the tool permanently for every endpoint, or confirms a real gap. + ## Summary - Uncovered endpoints: 117 -- Parameter gaps: 282 -- Not-verified endpoints (has attributes/unresolved surface): 164 +- Endpoints with parameter gaps: 432 +- Missing body properties (addable): 605 +- Missing query parameters (addable): 1002 +- Read-only body fields (not addable -- see the Read-only fields section below): 372 +- Phantom fields silently excluded (accumulated in the capability map, absent from the newest analysed spec): 34 +- Partial-confidence endpoints (see `How to read this report` above, and each row's marker in the Parameter gaps table): 56 +- Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): 311 - ValidateSet drift: 0 - New ValidateSet candidates: 0 +## Systemic gaps + +One finding per distinct wire field name, collapsed across every endpoint where a high-confidence gap exists (decision 7) -- turns hundreds of per-endpoint rows into a handful of real, actionable decisions. "Cmdlets already using this name" is decision 8's convention-strength ranking: a high count means closing the remaining gaps for this name is a mechanical batch fix; zero means no established convention exists to extend at all -- closing it is an architectural decision, not a mechanical one. + +Showing the top 25 of 311 findings by endpoint count -- the full list is in the JSON manifest's `systemicGaps`, nothing is dropped there. + +| Field name | Endpoints | Query | Body | Cmdlets already using this name | Annotation | +|---|---|---|---|---|---| +| `context_names` | 253 | 253 | 0 | 0 | not yet implemented | +| `allow_errors` | 109 | 109 | 0 | 0 | not yet implemented | +| `ids` | 46 | 46 | 0 | 218 | | +| `names` | 35 | 35 | 0 | 306 | | +| `sort` | 35 | 35 | 0 | 163 | | +| `name` | 23 | 0 | 23 | 3 | | +| `bucket_ids` | 19 | 19 | 0 | 0 | | +| `bucket_names` | 18 | 18 | 0 | 1 | | +| `policy_ids` | 18 | 18 | 0 | 87 | | +| `remote_ids` | 18 | 18 | 0 | 0 | | +| `total_only` | 17 | 17 | 0 | 30 | | +| `enabled` | 16 | 0 | 16 | 0 | | +| `member_ids` | 16 | 16 | 0 | 78 | | +| `remote_names` | 16 | 16 | 0 | 2 | | +| `limit` | 14 | 14 | 0 | 182 | | +| `filter` | 13 | 13 | 0 | 185 | | +| `file_system_ids` | 11 | 11 | 0 | 2 | | +| `policy_names` | 11 | 11 | 0 | 108 | | +| `local_file_system_ids` | 10 | 10 | 0 | 0 | | +| `versions` | 10 | 10 | 0 | 0 | | +| `actions` | 9 | 0 | 9 | 0 | | +| `location` | 9 | 0 | 9 | 0 | | +| `policy` | 8 | 0 | 8 | 0 | | +| `ca_certificate_group` | 7 | 0 | 7 | 0 | | +| `file_system_names` | 7 | 7 | 0 | 6 | | + +## Parameter gaps + +Endpoints an existing cmdlet already calls, where the capability map knows of a query parameter or addable body property the cmdlet does not yet expose. Read-only fields (never addable, regardless of confidence) are reported separately below, never blended into either column here. + +| Endpoint | Cmdlets | Missing query parameters | Missing body properties | Confidence | Notes | +|---|---|---|---|---|---| +| `DELETE /active-directory` | Remove-PfbActiveDirectory | local_only | | `high` | | +| `DELETE /admins/api-tokens` | Remove-PfbApiToken | admin_ids, admin_names, context_names | | `high` | | +| `DELETE /admins/cache` | Remove-PfbAdminCache | context_names | | `high` | | +| `DELETE /admins/management-access-policies` | Remove-PfbAdminManagementAccessPolicy | context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `DELETE /admins/ssh-certificate-authority-policies` | Remove-PfbAdminSshCaPolicy | context_names | | `high` | | +| `DELETE /array-connections` | Remove-PfbArrayConnection | context_names, remote_ids, remote_names | | `high` | | +| `DELETE /arrays/ssh-certificate-authority-policies` | Remove-PfbArraySshCaPolicy | context_names | | `high` | | +| `DELETE /audit-file-systems-policies` | Remove-PfbAuditFileSystemPolicy | context_names | | `high` | | +| `DELETE /audit-file-systems-policies/members` | Remove-PfbAuditFileSystemPolicyMember | context_names | | `high` | | +| `DELETE /audit-object-store-policies` | Remove-PfbAuditObjectStorePolicy | context_names | | `high` | | +| `DELETE /audit-object-store-policies/members` | Remove-PfbAuditObjectStorePolicyMember | context_names | | `high` | | +| `DELETE /buckets` | Remove-PfbBucket | context_names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `DELETE /buckets/audit-filters` | Remove-PfbBucketAuditFilter | bucket_ids, bucket_names, context_names, names | | `high` | | +| `DELETE /buckets/bucket-access-policies` | Remove-PfbBucketAccessPolicy | bucket_ids, bucket_names, context_names, names | | `high` | | +| `DELETE /buckets/bucket-access-policies/rules` | Remove-PfbBucketAccessPolicyRule | bucket_ids, bucket_names, context_names, policy_names | | `high` | | +| `DELETE /buckets/cross-origin-resource-sharing-policies` | Remove-PfbBucketCorsPolicy | bucket_ids, bucket_names, context_names, names | | `high` | | +| `DELETE /buckets/cross-origin-resource-sharing-policies/rules` | Remove-PfbBucketCorsPolicyRule | bucket_ids, bucket_names, context_names, policy_names | | `high` | | +| `DELETE /certificates/certificate-groups` | Remove-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids | | `high` | | +| `DELETE /data-eviction-policies` | Remove-PfbDataEvictionPolicy | context_names | | `high` | | +| `DELETE /data-eviction-policies/file-systems` | Remove-PfbDataEvictionPolicyFileSystem | context_names | | `high` | | +| `DELETE /directory-services/local/groups` | Remove-PfbLocalGroup | context_names, gids, local_directory_service_ids, local_directory_service_names, sids | | `high` | | +| `DELETE /directory-services/local/groups/members` | Remove-PfbLocalGroupMember | context_names, group_gids, group_sids, local_directory_service_ids, local_directory_service_names, member_ids, member_sids, member_types | | `high` | | +| `DELETE /dns` | Remove-PfbDns | context_names | | `high` | | +| `DELETE /file-system-exports` | Remove-PfbFileSystemExport | context_names | | `high` | | +| `DELETE /file-system-replica-links` | Remove-PfbFileSystemReplicaLink | context_names, local_file_system_ids, remote_file_system_ids, remote_ids | | `high` | | +| `DELETE /file-system-replica-links/policies` | Remove-PfbFileSystemReplicaLinkPolicy | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | | `high` | | +| `DELETE /file-system-snapshots` | Remove-PfbFileSystemSnapshot | context_names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `DELETE /file-system-snapshots/policies` | Remove-PfbFileSystemSnapshotPolicy | context_names | | `high` | | +| `DELETE /file-system-snapshots/transfer` | Remove-PfbFileSystemSnapshotTransfer | context_names, remote_ids, remote_names | | `high` | | +| `DELETE /file-systems` | Remove-PfbFileSystem | context_names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `DELETE /file-systems/audit-policies` | Remove-PfbFileSystemAuditPolicy | context_names | | `high` | | +| `DELETE /file-systems/locks` | Remove-PfbFileLock | client_names, context_names, file_system_ids, file_system_names, inodes, paths, recursive | | `high` | | +| `DELETE /file-systems/policies` | Remove-PfbFileSystemPolicy | context_names | | `high` | | +| `DELETE /file-systems/sessions` | Remove-PfbFileSystemSession | client_names, context_names, disruptive, user_names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `DELETE /fleets/members` | Remove-PfbFleetMember | member_ids, unreachable | | `high` | | +| `DELETE /lifecycle-rules` | Remove-PfbLifecycleRule | bucket_ids, bucket_names, context_names | | `high` | | +| `DELETE /log-targets/file-systems` | Remove-PfbLogTargetFileSystem | context_names | | `high` | | +| `DELETE /log-targets/object-store` | Remove-PfbLogTargetObjectStore | context_names | | `high` | | +| `DELETE /management-access-policies` | Remove-PfbManagementAccessPolicy | context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `DELETE /management-access-policies/admins` | Remove-PfbManagementAccessPolicyAdmin | context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `DELETE /network-access-policies/rules` | Remove-PfbNetworkAccessRule | ids, versions | | `high` | | +| `DELETE /network-interfaces/tls-policies` | Remove-PfbNetworkInterfaceTlsPolicy | member_ids, policy_ids | | `high` | | +| `DELETE /nfs-export-policies` | Remove-PfbNfsExportPolicy | context_names, versions | | `high` | | +| `DELETE /nfs-export-policies/rules` | Remove-PfbNfsExportRule | context_names, ids, versions | | `high` | | +| `DELETE /node-groups/nodes` | Remove-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | | `high` | | +| `DELETE /object-store-access-keys` | Remove-PfbObjectStoreAccessKey | context_names | | `high` | | +| `DELETE /object-store-access-policies` | Remove-PfbObjectStoreAccessPolicy | context_names | | `high` | | +| `DELETE /object-store-access-policies/object-store-roles` | Remove-PfbObjectStoreAccessPolicyRole | context_names, member_ids, policy_ids | | `high` | | +| `DELETE /object-store-access-policies/object-store-users` | Remove-PfbObjectStoreAccessPolicyUser | context_names, member_ids, policy_ids | | `high` | | +| `DELETE /object-store-access-policies/rules` | Remove-PfbObjectStoreAccessPolicyRule | context_names, policy_ids | | `high` | | +| `DELETE /object-store-account-exports` | Remove-PfbObjectStoreAccountExport | context_names | | `high` | | +| `DELETE /object-store-accounts` | Remove-PfbObjectStoreAccount | context_names | | `high` | | +| `DELETE /object-store-remote-credentials` | Remove-PfbObjectStoreRemoteCredential | context_names | | `high` | | +| `DELETE /object-store-roles` | Remove-PfbObjectStoreRole | context_names | | `high` | | +| `DELETE /object-store-roles/object-store-access-policies` | Remove-PfbObjectStoreRoleAccessPolicy | context_names, member_ids, policy_ids, policy_names | | `high` | | +| `DELETE /object-store-roles/object-store-trust-policies/rules` | Remove-PfbObjectStoreTrustPolicyRule | context_names, indices, role_ids, role_names | | `high` | | +| `DELETE /object-store-users` | Remove-PfbObjectStoreUser | context_names | | `high` | | +| `DELETE /object-store-users/object-store-access-policies` | Remove-PfbObjectStoreUserAccessPolicy | context_names, member_ids, policy_ids | | `high` | | +| `DELETE /object-store-virtual-hosts` | Remove-PfbObjectStoreVirtualHost | context_names | | `high` | | +| `DELETE /policies` | Remove-PfbPolicy | context_names | | `high` | | +| `DELETE /policies/file-system-replica-links` | Remove-PfbPolicyFileSystemReplicaLink | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | | `high` | | +| `DELETE /policies/file-systems` | Remove-PfbPolicyFileSystem | context_names | | `high` | | +| `DELETE /presets/workload` | Remove-PfbPresetWorkload | context_names | | `high` | | +| `DELETE /qos-policies` | Remove-PfbQosPolicy | context_names | | `high` | | +| `DELETE /qos-policies/members` | Remove-PfbQosPolicyMember | context_names, member_types | | `high` | | +| `DELETE /quotas/groups` | Remove-PfbQuotaGroup | context_names, file_system_ids, file_system_names, gids, group_names, names | | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `DELETE /quotas/users` | Remove-PfbQuotaUser | context_names, file_system_ids, file_system_names, names, uids, user_names | | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `DELETE /s3-export-policies` | Remove-PfbS3ExportPolicy | context_names | | `high` | | +| `DELETE /s3-export-policies/rules` | Remove-PfbS3ExportRule | context_names | | `high` | | +| `DELETE /servers` | Remove-PfbServer | cascade_delete | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `DELETE /smb-client-policies` | Remove-PfbSmbClientPolicy | context_names | | `high` | | +| `DELETE /smb-client-policies/rules` | Remove-PfbSmbClientRule | context_names, ids, versions | | `high` | | +| `DELETE /smb-share-policies` | Remove-PfbSmbSharePolicy | context_names | | `high` | | +| `DELETE /smb-share-policies/rules` | Remove-PfbSmbShareRule | context_names, ids | | `high` | | +| `DELETE /ssh-certificate-authority-policies/admins` | Remove-PfbSshCaPolicyAdmin | context_names | | `high` | | +| `DELETE /ssh-certificate-authority-policies/arrays` | Remove-PfbSshCaPolicyArray | context_names | | `high` | | +| `DELETE /workloads` | Remove-PfbWorkload | context_names | | `high` | | +| `DELETE /workloads/tags` | Remove-PfbWorkloadTag | context_names | | `high` | | +| `DELETE /worm-data-policies` | Remove-PfbWormPolicy | context_names | | `high` | | +| `GET /active-directory` | Get-PfbActiveDirectory | ids, limit, sort | | `high` | | +| `GET /active-directory/test` | Test-PfbActiveDirectory | allow_errors, context_names, filter, limit, sort | | `high` | | +| `GET /admins` | Get-PfbAdmin | allow_errors, context_names, expose_api_token | | `high` | | +| `GET /admins/api-tokens` | Get-PfbApiToken | admin_ids, admin_names, allow_errors, context_names, expose_api_token | | `high` | | +| `GET /admins/cache` | Get-PfbAdminCache | allow_errors, context_names, refresh | | `high` | | +| `GET /admins/management-access-policies` | Get-PfbAdminManagementAccessPolicy | allow_errors, context_names, sort | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /admins/settings` | Get-PfbAdminSetting | filter, limit, sort | | `high` | | +| `GET /admins/ssh-certificate-authority-policies` | Get-PfbAdminSshCaPolicy | allow_errors, context_names, sort | | `high` | | +| `GET /alert-watchers/test` | Test-PfbAlertWatcher | filter, sort | | `high` | | +| `GET /array-connections` | Get-PfbArrayConnection | allow_errors, context_names, remote_ids, remote_names | | `high` | | +| `GET /array-connections/connection-key` | Get-PfbArrayConnectionKey | ids | | `high` | | +| `GET /array-connections/path` | Get-PfbArrayConnectionPath | allow_errors, context_names, ids, remote_ids, remote_names | | `high` | | +| `GET /array-connections/performance/replication` | Get-PfbArrayConnectionPerformanceReplication | ids, remote_ids, remote_names, total_only | | `high` | | +| `GET /arrays` | Get-PfbArray, Test-PfbConnection | allow_errors, context_names, filter, limit, sort | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `GET /arrays/clients/performance` | Get-PfbArrayClientPerformance | names, protocol, total_only | | `high` | | +| `GET /arrays/clients/s3-specific-performance` | Get-PfbArrayClientS3Performance | names, total_only | | `high` | | +| `GET /arrays/eula` | Get-PfbArrayEula | filter, limit, sort | | `high` | | +| `GET /arrays/factory-reset-token` | Get-PfbArrayFactoryResetToken | filter, limit, sort | | `high` | | +| `GET /arrays/http-specific-performance` | Get-PfbArrayHttpPerformance | allow_errors, context_names | | `high` | | +| `GET /arrays/nfs-specific-performance` | Get-PfbArrayNfsPerformance | allow_errors, context_names | | `high` | | +| `GET /arrays/performance` | Get-PfbArrayPerformance | allow_errors, context_names | | `high` | | +| `GET /arrays/performance/replication` | Get-PfbArrayPerformanceReplication | allow_errors, context_names | | `high` | | +| `GET /arrays/s3-specific-performance` | Get-PfbArrayS3Performance | allow_errors, context_names | | `high` | | +| `GET /arrays/space` | Get-PfbArraySpace | allow_errors, context_names, end_time, resolution, start_time | | `high` | | +| `GET /arrays/space/storage-classes` | Get-PfbArrayStorageClass | end_time, resolution, start_time, storage_class_names, total_only | | `high` | | +| `GET /arrays/ssh-certificate-authority-policies` | Get-PfbArraySshCaPolicy | allow_errors, context_names, sort | | `high` | | +| `GET /arrays/supported-time-zones` | Get-PfbArraySupportedTimeZone | names | | `high` | | +| `GET /audit-file-systems-policies` | Get-PfbAuditFileSystemPolicy | allow_errors, context_names | | `high` | | +| `GET /audit-file-systems-policies/members` | Get-PfbAuditFileSystemPolicyMember | allow_errors, context_names | | `high` | | +| `GET /audit-file-systems-policy-operations` | Get-PfbAuditFileSystemPolicyOperation | allow_errors, context_names, names | | `high` | | +| `GET /audit-object-store-policies` | Get-PfbAuditObjectStorePolicy | allow_errors, context_names | | `high` | | +| `GET /audit-object-store-policies/members` | Get-PfbAuditObjectStorePolicyMember | allow_errors, context_names | | `high` | | +| `GET /blades` | Get-PfbBlade, Get-PfbNode | total_only | | `high` | | +| `GET /bucket-audit-filter-actions` | Get-PfbBucketAuditFilterAction | allow_errors, context_names, names | | `high` | | +| `GET /bucket-replica-links` | Get-PfbBucketReplicaLink | allow_errors, context_names, ids, local_bucket_ids, remote_ids, remote_names, total_only | | `high` | | +| `GET /buckets` | Get-PfbBucket | allow_errors, context_names | | `high` | | +| `GET /buckets/audit-filters` | Get-PfbBucketAuditFilter | allow_errors, bucket_ids, bucket_names, context_names, names | | `high` | | +| `GET /buckets/bucket-access-policies` | Get-PfbBucketAccessPolicy | allow_errors, bucket_ids, bucket_names, context_names | | `high` | | +| `GET /buckets/bucket-access-policies/rules` | Get-PfbBucketAccessPolicyRule | allow_errors, bucket_ids, bucket_names, context_names | | `high` | | +| `GET /buckets/cross-origin-resource-sharing-policies` | Get-PfbBucketCorsPolicy | allow_errors, bucket_ids, bucket_names, context_names | | `high` | | +| `GET /buckets/cross-origin-resource-sharing-policies/rules` | Get-PfbBucketCorsPolicyRule | allow_errors, bucket_ids, bucket_names, context_names | | `high` | | +| `GET /certificate-groups/certificates` | Get-PfbCertificateGroupCertificate | certificate_group_ids, certificate_group_names, certificate_ids, certificate_names | | `high` | | +| `GET /certificate-groups/uses` | Get-PfbCertificateGroupUse | ids | | `high` | | +| `GET /certificates/certificate-groups` | Get-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids, sort | | `high` | | +| `GET /certificates/uses` | Get-PfbCertificateUse | ids | | `high` | | +| `GET /data-eviction-policies` | Get-PfbDataEvictionPolicy | allow_errors, context_names | | `high` | | +| `GET /data-eviction-policies/file-systems` | Get-PfbDataEvictionPolicyFileSystem | allow_errors, context_names | | `high` | | +| `GET /data-eviction-policies/members` | Get-PfbDataEvictionPolicyMember | allow_errors, context_names | | `high` | | +| `GET /directory-services` | Get-PfbDirectoryService | ids, limit, sort | | `high` | | +| `GET /directory-services/local/directory-services` | Get-PfbLocalDirectoryService | allow_errors, context_names, destroyed, total_item_count | | `high` | | +| `GET /directory-services/local/groups` | Get-PfbLocalGroup | allow_errors, context_names, gids, sids, total_item_count | | `high` | | +| `GET /directory-services/local/groups/members` | Get-PfbLocalGroupMember | allow_errors, context_names, group_gids, group_sids, member_ids, member_sids, member_types, total_item_count | | `high` | | +| `GET /directory-services/roles` | Get-PfbDirectoryServiceRole | role_ids, role_names | | `high` | | +| `GET /directory-services/roles/management-access-policies` | Get-PfbDirectoryServiceRoleManagementPolicy | sort | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /directory-services/test` | Test-PfbDirectoryService | allow_errors, context_names, filter, ids, limit, names, sort | | `high` | | +| `GET /dns` | Get-PfbDns | allow_errors, context_names, filter, ids, limit, names, sort | | `high` | | +| `GET /drives` | Get-PfbDrive | total_only | | `high` | | +| `GET /file-system-exports` | Get-PfbFileSystemExport | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /file-system-replica-links` | Get-PfbFileSystemReplicaLink | allow_errors, context_names, ids, local_file_system_ids, remote_file_system_ids, remote_ids, remote_names | | `high` | | +| `GET /file-system-replica-links/policies` | Get-PfbFileSystemReplicaLinkPolicy | allow_errors, context_names, local_file_system_ids, local_file_system_names, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names | | `high` | | +| `GET /file-system-replica-links/transfer` | Get-PfbFileSystemReplicaLinkTransfer | allow_errors, context_names, names_or_owner_names, remote_ids, remote_names | | `high` | | +| `GET /file-system-snapshots` | Get-PfbFileSystemSnapshot | allow_errors, context_names, names_or_owner_names, owner_ids | | `high` | | +| `GET /file-system-snapshots/policies` | Get-PfbFileSystemSnapshotPolicy | allow_errors, context_names | | `high` | | +| `GET /file-system-snapshots/transfer` | Get-PfbFileSystemSnapshotTransfer | allow_errors, context_names, names_or_owner_names | | `high` | | +| `GET /file-systems` | Get-PfbFileSystem | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /file-systems/audit-policies` | Get-PfbFileSystemAuditPolicy | allow_errors, context_names | | `high` | | +| `GET /file-systems/groups/performance` | Get-PfbFileSystemGroupPerformance | gids, group_names, names | | `high` | | +| `GET /file-systems/locks` | Get-PfbFileLock | allow_errors, client_names, context_names, file_system_ids, file_system_names, inodes, paths | | `high` | | +| `GET /file-systems/locks/clients` | Get-PfbFileLockClient | allow_errors, context_names | | `high` | | +| `GET /file-systems/open-files` | Get-PfbOpenFile | client_names, file_system_ids, file_system_names, paths, protocols, session_names, user_names | | `high` | | +| `GET /file-systems/policies` | Get-PfbFileSystemPolicy | allow_errors, context_names | | `high` | | +| `GET /file-systems/sessions` | Get-PfbFileSystemSession | allow_errors, client_names, context_names, user_names | | `high` | | +| `GET /file-systems/space/storage-classes` | Get-PfbFileSystemStorageClass | storage_class_names | | `high` | | +| `GET /file-systems/users/performance` | Get-PfbFileSystemUserPerformance | names, uids, user_names | | `high` | | +| `GET /file-systems/worm-data-policies` | Get-PfbFileSystemWormPolicy | allow_errors, context_names | | `high` | | +| `GET /fleets` | Get-PfbFleet | total_only | | `high` | | +| `GET /fleets/fleet-key` | Get-PfbFleetKey | total_only | | `high` | | +| `GET /fleets/members` | Get-PfbFleetMember | fleet_ids, member_ids, total_only | | `high` | | +| `GET /hardware-connectors/performance` | Get-PfbHardwareConnectorPerformance | ids, total_only | | `high` | | +| `GET /keytabs/download` | Get-PfbKeytabDownload | keytab_ids, keytab_names | | `high` | | +| `GET /legal-holds/held-entities` | Get-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, names, paths | | `high` | | +| `GET /lifecycle-rules` | Get-PfbLifecycleRule | allow_errors, bucket_ids, context_names | | `high` | | +| `GET /log-targets/file-systems` | Get-PfbLogTargetFileSystem | allow_errors, context_names | | `high` | | +| `GET /log-targets/object-store` | Get-PfbLogTargetObjectStore | allow_errors, context_names | | `high` | | +| `GET /management-access-policies` | Get-PfbManagementAccessPolicy | allow_errors, context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /management-access-policies/admins` | Get-PfbManagementAccessPolicyAdmin | allow_errors, context_names, sort | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /management-access-policies/directory-services/roles` | Get-PfbManagementAccessPolicyDirectoryRole | sort | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /management-access-policies/members` | Get-PfbManagementAccessPolicyMember | allow_errors, context_names, sort | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `GET /network-access-policies/rules` | Get-PfbNetworkAccessRule | ids | | `high` | | +| `GET /network-interfaces/connectors/performance` | Get-PfbNetworkInterfaceConnectorPerformance | ids, total_only | | `high` | | +| `GET /network-interfaces/connectors/settings` | Get-PfbNetworkInterfaceConnectorSettings | ids | | `high` | | +| `GET /network-interfaces/neighbors` | Get-PfbNetworkInterfaceNeighbor | local_port_names, total_item_count | | `high` | | +| `GET /network-interfaces/network-connection-statistics` | Get-PfbNetworkConnectionStatistics | current_state, local_host, local_port, remote_host, remote_port | | `high` | | +| `GET /network-interfaces/ping` | Invoke-PfbNetworkPing | component_name, print_latency, resolve_hostname, source | | `high` | | +| `GET /network-interfaces/trace` | Invoke-PfbNetworkTrace | component_name, discover_mtu, fragment_packet, port, resolve_hostname, source | | `high` | | +| `GET /nfs-export-policies` | Get-PfbNfsExportPolicy | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /nfs-export-policies/rules` | Get-PfbNfsExportRule | allow_errors, context_names, ids | | `high` | | +| `GET /node-groups/nodes` | Get-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | | `high` | | +| `GET /node-groups/uses` | Get-PfbNodeGroupUse | ids | | `high` | | +| `GET /nodes` | Get-PfbNode | total_only | | `high` | | +| `GET /object-store-access-keys` | Get-PfbObjectStoreAccessKey | allow_errors, context_names | | `high` | | +| `GET /object-store-access-policies` | Get-PfbObjectStoreAccessPolicy | allow_errors, context_names, exclude_rules | | `high` | | +| `GET /object-store-access-policies/object-store-roles` | Get-PfbObjectStoreAccessPolicyRole | allow_errors, context_names | | `high` | | +| `GET /object-store-access-policies/object-store-users` | Get-PfbObjectStoreAccessPolicyUser | allow_errors, context_names | | `high` | | +| `GET /object-store-access-policies/rules` | Get-PfbObjectStoreAccessPolicyRule | allow_errors, context_names | | `high` | | +| `GET /object-store-access-policy-actions` | Get-PfbObjectStoreAccessPolicyAction | allow_errors, context_names, names | | `high` | | +| `GET /object-store-account-exports` | Get-PfbObjectStoreAccountExport | allow_errors, context_names | | `high` | | +| `GET /object-store-accounts` | Get-PfbObjectStoreAccount | allow_errors, context_names | | `high` | | +| `GET /object-store-remote-credentials` | Get-PfbObjectStoreRemoteCredential | allow_errors, context_names | | `high` | | +| `GET /object-store-roles` | Get-PfbObjectStoreRole | allow_errors, context_names | | `high` | | +| `GET /object-store-roles/object-store-access-policies` | Get-PfbObjectStoreRoleAccessPolicy | allow_errors, context_names, policy_ids, policy_names | | `high` | | +| `GET /object-store-roles/object-store-trust-policies` | Get-PfbObjectStoreTrustPolicy | allow_errors, context_names, names | | `high` | | +| `GET /object-store-roles/object-store-trust-policies/rules` | Get-PfbObjectStoreTrustPolicyRule | allow_errors, context_names, indices, role_ids, role_names | | `high` | | +| `GET /object-store-users` | Get-PfbObjectStoreUser | allow_errors, context_names | | `high` | | +| `GET /object-store-users/object-store-access-policies` | Get-PfbObjectStoreUserAccessPolicy | allow_errors, context_names | | `high` | | +| `GET /object-store-virtual-hosts` | Get-PfbObjectStoreVirtualHost | allow_errors, context_names | | `high` | | +| `GET /password-policies` | Get-PfbPasswordPolicy | filter, ids, limit, names, sort | | `high` | | +| `GET /policies` | Get-PfbPolicy | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /policies-all` | Get-PfbPolicyAll | allow_errors, context_names | | `high` | | +| `GET /policies-all/members` | Get-PfbPolicyAllMember | allow_errors, context_names, local_file_system_ids, local_file_system_names, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names, sort | | `high` | | +| `GET /policies/file-system-replica-links` | Get-PfbPolicyFileSystemReplicaLink | allow_errors, context_names, local_file_system_ids, local_file_system_names, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names, sort | | `high` | | +| `GET /policies/file-system-snapshots` | Get-PfbPolicyFileSystemSnapshot | allow_errors, context_names | | `high` | | +| `GET /policies/file-systems` | Get-PfbPolicyFileSystem | allow_errors, context_names | | `high` | | +| `GET /presets/workload` | Get-PfbPresetWorkload | context_names | | `high` | | +| `GET /public-keys/uses` | Get-PfbPublicKeyUse | ids | | `high` | | +| `GET /qos-policies` | Get-PfbQosPolicy | allow_errors, context_names | | `high` | | +| `GET /qos-policies/buckets` | Get-PfbQosPolicyBucket | allow_errors, context_names, sort | | `high` | | +| `GET /qos-policies/file-systems` | Get-PfbQosPolicyFileSystem | allow_errors, context_names, sort | | `high` | | +| `GET /qos-policies/members` | Get-PfbQosPolicyMember | allow_errors, context_names, member_types, sort | | `high` | | +| `GET /quotas/groups` | Get-PfbQuotaGroup | allow_errors, context_names, file_system_ids, gids, group_names | | `high` | | +| `GET /quotas/settings` | Get-PfbQuotaSettings | ids, names | | `high` | | +| `GET /quotas/users` | Get-PfbQuotaUser | allow_errors, context_names, file_system_ids, uids, user_names | | `high` | | +| `GET /realms` | Get-PfbRealm | allow_errors, context_names | | `high` | | +| `GET /realms/defaults` | Get-PfbRealmDefaults | allow_errors, context_names, realm_ids, realm_names | | `high` | | +| `GET /realms/space` | Get-PfbRealmSpace | end_time, ids, resolution, start_time, total_only, type | | `high` | | +| `GET /realms/space/storage-classes` | Get-PfbRealmStorageClass | end_time, ids, resolution, start_time, storage_class_names, total_only | | `high` | | +| `GET /remote-arrays` | Get-PfbRemoteArray | total_only | | `high` | | +| `GET /roles` | Get-PfbRole | ids | | `high` | | +| `GET /s3-export-policies` | Get-PfbS3ExportPolicy | allow_errors, context_names | | `high` | | +| `GET /s3-export-policies/rules` | Get-PfbS3ExportRule | allow_errors, context_names | | `high` | | +| `GET /servers` | Get-PfbServer | allow_errors, context_names | | `high` | | +| `GET /smb-client-policies` | Get-PfbSmbClientPolicy | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /smb-client-policies/rules` | Get-PfbSmbClientRule | allow_errors, context_names, ids | | `high` | | +| `GET /smb-share-policies` | Get-PfbSmbSharePolicy | allow_errors, context_names, workload_ids, workload_names | | `high` | | +| `GET /smb-share-policies/rules` | Get-PfbSmbShareRule | allow_errors, context_names, ids | | `high` | | +| `GET /smtp-servers` | Get-PfbSmtpServer | filter, ids, limit, names, sort | | `high` | | +| `GET /snmp-agents` | Get-PfbSnmpAgent | ids, limit, names, sort | | `high` | | +| `GET /snmp-managers/test` | Test-PfbSnmpManager | filter, limit, sort | | `high` | | +| `GET /software-check` | Get-PfbSoftwareCheck | ids, names, software_names, software_versions, total_item_count | | `high` | | +| `GET /ssh-certificate-authority-policies` | Get-PfbSshCaPolicy | allow_errors, context_names | | `high` | | +| `GET /ssh-certificate-authority-policies/admins` | Get-PfbSshCaPolicyAdmin | allow_errors, context_names, sort | | `high` | | +| `GET /ssh-certificate-authority-policies/arrays` | Get-PfbSshCaPolicyArray | allow_errors, context_names, sort | | `high` | | +| `GET /ssh-certificate-authority-policies/members` | Get-PfbSshCaPolicyMember | allow_errors, context_names, sort | | `high` | | +| `GET /sso/saml2/idps/test` | Test-PfbSaml2Idp | filter, limit, sort | | `high` | | +| `GET /storage-class-tiering-policies/members` | Get-PfbStorageClassTieringPolicyMember | allow_errors, context_names, sort | | `high` | | +| `GET /support` | Get-PfbSupport | ids | | `high` | | +| `GET /support/test` | Test-PfbSupport | filter, sort | | `high` | | +| `GET /syslog-servers` | Get-PfbSyslogServer | allow_errors, context_names | | `high` | | +| `GET /syslog-servers/settings` | Get-PfbSyslogServerSettings | filter, ids, limit, names, sort | | `high` | | +| `GET /targets` | Get-PfbTarget | allow_errors, context_names | | `high` | | +| `GET /targets/performance/replication` | Get-PfbTargetPerformanceReplication | ids, total_only | | `high` | | +| `GET /tls-policies` | Get-PfbTlsPolicy | effective, purity_defined | | `high` | | +| `GET /tls-policies/members` | Get-PfbTlsPolicyMember | sort | | `high` | | +| `GET /usage/groups` | Get-PfbUsageGroup | allow_errors, context_names, file_system_ids, gids, group_names | | `high` | | +| `GET /usage/users` | Get-PfbUsageUser | allow_errors, context_names, file_system_ids, uids, user_names | | `high` | | +| `GET /workloads` | Get-PfbWorkload | allow_errors, context_names | | `high` | | +| `GET /workloads/placement-recommendations` | Get-PfbWorkloadPlacementRecommendation | allow_errors, context_names | | `high` | | +| `GET /workloads/tags` | Get-PfbWorkloadTag | allow_errors, context_names | | `high` | | +| `GET /worm-data-policies` | Get-PfbWormPolicy | allow_errors, context_names | | `high` | | +| `GET /worm-data-policies/members` | Get-PfbWormPolicyMember | allow_errors, context_names, sort | | `high` | | +| `PATCH /active-directory` | Update-PfbActiveDirectory | | ca_certificate, ca_certificate_group, directory_servers, encryption_types, fqdns, global_catalog_servers, join_ou, kerberos_servers, service_principal_names | `high` | | +| `PATCH /admins` | Update-PfbAdmin | context_names | authorization_model, locked, management_access_policies, old_password, password, public_key, role | `high` | | +| `PATCH /admins/settings` | Update-PfbAdminSetting | | lockout_duration, max_login_attempts, min_password_length | `high` | | +| `PATCH /alert-watchers` | Update-PfbAlertWatcher | | enabled | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /alerts` | Update-PfbAlert | | flagged | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /api-clients` | Update-PfbApiClient | | enabled, max_role | `high` | | +| `PATCH /array-connections` | Update-PfbArrayConnection | context_names, remote_ids, remote_names | ca_certificate_group, encrypted, management_address, remote, replication_addresses, throttle | `high` | | +| `PATCH /arrays` | Update-PfbArray | | banner, default_inbound_tls_policy, eradication_config, idle_timeout, name, network_access_policy, ntp_servers, time_zone | `high` | | +| `PATCH /arrays/erasures` | Update-PfbArrayErasure | delete_sanitization_certificate, eradicate_all_data, finalize | | `high` | | +| `PATCH /arrays/eula` | Update-PfbArrayEula | | signature | `high` | | +| `PATCH /audit-file-systems-policies` | Update-PfbAuditFileSystemPolicy | context_names | add_log_targets, control_type, enabled, location, log_targets, name, remove_log_targets, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /audit-object-store-policies` | Update-PfbAuditObjectStorePolicy | context_names | add_log_targets, enabled, location, log_targets, name, remove_log_targets | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /buckets` | Remove-PfbBucket, Update-PfbBucket | cancel_in_progress_storage_class_transition, context_names, ignore_usage | destroyed, eradication_config, hard_limit_enabled, object_lock_config, public_access_config, qos_policy, retention_lock, storage_class | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `PATCH /buckets/audit-filters` | Update-PfbBucketAuditFilter | bucket_ids, bucket_names, context_names, names | actions, s3_prefixes | `high` | | +| `PATCH /certificates` | Update-PfbCertificate | generate_new_key | certificate, certificate_type, common_name, country, days, email, intermediate_certificate, key_algorithm, key_size, locality, organization, organizational_unit, passphrase, private_key, state, subject_alternative_names | `high` | | +| `PATCH /data-eviction-policies` | Update-PfbDataEvictionPolicy | context_names | enabled, location | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /directory-services` | Update-PfbDirectoryService | ids, names | base_dn, bind_password, bind_user, ca_certificate, ca_certificate_group, enabled, management, nfs, smb, uris | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /directory-services/roles` | Update-PfbDirectoryServiceRole | role_ids, role_names | group, group_base, role | `high` | | +| `PATCH /dns` | Update-PfbDns | context_names, ids, names | ca_certificate, ca_certificate_group, name, services, sources | `high` | | +| `PATCH /file-system-exports` | Update-PfbFileSystemExport | context_names | export_name, member, policy, server, share_policy | `high` | | +| `PATCH /file-system-snapshots` | Remove-PfbFileSystemSnapshot | context_names, latest_replica | destroyed, name, owner, policy, source | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /file-systems` | Remove-PfbFileSystem, Update-PfbFileSystem | cancel_in_progress_storage_class_transition, context_names, discard_detailed_permissions, ignore_usage | default_group_quota, default_user_quota, destroyed, fast_remove_directory_enabled, group_ownership, hard_limit_enabled, http, multi_protocol, name, nfs, qos_policy, smb, snapshot_directory_enabled, source, storage_class, workload, writable | `partial` -- /!\ 10 unresolved params (see Partial-confidence detail below) | | +| `PATCH /fleets` | Update-PfbFleet | | name | `high` | | +| `PATCH /hardware` | Update-PfbHardware | | identify_enabled | `high` | | +| `PATCH /hardware-connectors` | Update-PfbHardwareConnector | | lane_speed, lanes_per_port, port_count, port_speed | `high` | | +| `PATCH /kmip` | Update-PfbKmip | | ca_certificate, ca_certificate_group, uris | `high` | | +| `PATCH /legal-holds` | Update-PfbLegalHold | | description | `high` | | +| `PATCH /legal-holds/held-entities` | Update-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, paths, recursive, released | | `high` | | +| `PATCH /lifecycle-rules` | Update-PfbLifecycleRule | bucket_ids, bucket_names, confirm_date, context_names | abort_incomplete_multipart_uploads_after, enabled, keep_current_version_for, keep_current_version_until, keep_previous_version_for, prefix | `high` | | +| `PATCH /link-aggregation-groups` | Update-PfbLag | | add_ports, ports, remove_ports | `high` | | +| `PATCH /log-targets/file-systems` | Update-PfbLogTargetFileSystem | context_names | file_system, keep_for, keep_size, name | `high` | | +| `PATCH /log-targets/object-store` | Update-PfbLogTargetObjectStore | context_names | bucket, log_name_prefix, log_rotate, name | `high` | | +| `PATCH /logs-async` | Update-PfbAsyncLog | | end_time, hardware_components, start_time | `high` | | +| `PATCH /management-access-policies` | Update-PfbManagementAccessPolicy | context_names | aggregation_strategy, enabled, location, name, rules | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `PATCH /network-access-policies` | Update-PfbNetworkAccessPolicy | versions | enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /network-access-policies/rules` | Update-PfbNetworkAccessRule | before_rule_id, before_rule_name, ids, versions | client, effect, index, interfaces, policy | `high` | | +| `PATCH /network-interfaces` | Update-PfbNetworkInterface | | attached_servers, services | `high` | | +| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | | lane_speed, lanes_per_port, port_count, port_speed | `high` | | +| `PATCH /nfs-export-policies` | Update-PfbNfsExportPolicy | context_names, versions | enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /nfs-export-policies/rules` | Update-PfbNfsExportRule | before_rule_id, before_rule_name, context_names, ids, versions | access, anongid, anonuid, atime, client, fileid_32bit, index, permission, required_transport_security, secure, security | `high` | | +| `PATCH /node-groups` | Update-PfbNodeGroup | | name | `high` | | +| `PATCH /nodes` | Update-PfbNode | | management_address, name, node_key, serial_number | `high` | | +| `PATCH /object-store-access-policies/rules` | Update-PfbObjectStoreAccessPolicyRule | context_names, enforce_action_restrictions, policy_ids, policy_names | actions, conditions, effect, resources | `high` | | +| `PATCH /object-store-account-exports` | Update-PfbObjectStoreAccountExport | context_names | export_enabled, policy | `high` | | +| `PATCH /object-store-remote-credentials` | Update-PfbObjectStoreRemoteCredential | context_names | access_key_id, name, remote, secret_access_key | `high` | | +| `PATCH /object-store-roles` | Update-PfbObjectStoreRole | context_names | account, max_session_duration | `high` | | +| `PATCH /object-store-roles/object-store-trust-policies/rules` | Update-PfbObjectStoreTrustPolicyRule | context_names, indices, policy_names, role_ids, role_names | actions, conditions, policy, principals | `high` | | +| `PATCH /object-store-virtual-hosts` | Update-PfbObjectStoreVirtualHost | context_names | add_attached_servers, attached_servers, hostname, name, remove_attached_servers | `high` | | +| `PATCH /password-policies` | Update-PfbPasswordPolicy | ids, names | enabled, enforce_dictionary_check, enforce_username_check, location, lockout_duration, max_login_attempts, max_password_age, min_character_groups, min_characters_per_group, min_password_age, min_password_length, name, password_history | `high` | | +| `PATCH /policies` | Update-PfbPolicy | context_names, destroy_snapshots | add_rules, enabled, location, remove_rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /presets/workload` | Update-PfbPresetWorkload | context_names | | `high` | | +| `PATCH /qos-policies` | Update-PfbQosPolicy | context_names | enabled, location, max_total_bytes_per_sec, max_total_ops_per_sec, name | `high` | | +| `PATCH /quotas/groups` | Update-PfbQuotaGroup | context_names, file_system_ids, file_system_names, gids, group_names, names | | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `PATCH /quotas/settings` | Update-PfbQuotaSettings | | contact, direct_notifications_enabled | `high` | | +| `PATCH /quotas/users` | Update-PfbQuotaUser | context_names, file_system_ids, file_system_names, names, uids, user_names | | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `PATCH /rapid-data-locking` | Update-PfbRapidDataLocking | | enabled, kmip_server | `high` | | +| `PATCH /realms` | Remove-PfbRealm, Update-PfbRealm | | default_inbound_tls_policy, destroyed, name | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `PATCH /realms/defaults` | Update-PfbRealmDefaults | context_names, realm_ids, realm_names | object_store | `high` | | +| `PATCH /s3-export-policies` | Update-PfbS3ExportPolicy | context_names | enabled, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /s3-export-policies/rules` | Update-PfbS3ExportRule | context_names, policy_ids, policy_names | actions, effect, resources | `high` | | +| `PATCH /servers` | Update-PfbServer | | dns | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /smb-client-policies` | Update-PfbSmbClientPolicy | context_names | access_based_enumeration_enabled, enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /smb-client-policies/rules` | Update-PfbSmbClientRule | before_rule_id, before_rule_name, context_names, ids, versions | client, encryption, index, permission, policy | `high` | | +| `PATCH /smb-share-policies` | Update-PfbSmbSharePolicy | context_names | enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /smb-share-policies/rules` | Update-PfbSmbShareRule | context_names, ids, policy_ids, policy_names | change, full_control, policy, principal, read | `high` | | +| `PATCH /snmp-agents` | Update-PfbSnmpAgent | | v2c, v3, version | `high` | | +| `PATCH /snmp-managers` | Update-PfbSnmpManager | | host, name, notification, v2c, v3, version | `high` | | +| `PATCH /ssh-certificate-authority-policies` | Update-PfbSshCaPolicy | | enabled, location, name, signing_authority, static_authorized_principals | `high` | | +| `PATCH /sso/oidc/idps` | Update-PfbOidcIdp | | enabled, idp, name, services | `high` | | +| `PATCH /sso/saml2/idps` | Update-PfbSaml2Idp | | array_url, binding, enabled, idp, management, name, services, sp | `high` | | +| `PATCH /storage-class-tiering-policies` | Update-PfbStorageClassTieringPolicy | | archival_rules, enabled, location, name, retrieval_rules | `high` | | +| `PATCH /subnets` | Update-PfbSubnet | | link_aggregation_group, vlan | `high` | | +| `PATCH /support` | Update-PfbSupport | | edge_agent_update_enabled, edge_management_enabled, phonehome_enabled, proxy, remote_assist_active, remote_assist_duration | `high` | | +| `PATCH /support/verification-keys` | Update-PfbSupportVerificationKey | | signed_verification_key | `high` | | +| `PATCH /syslog-servers` | Update-PfbSyslogServer | | services, sources, uri | `high` | | +| `PATCH /syslog-servers/settings` | Update-PfbSyslogServerSettings | ids, names | ca_certificate, ca_certificate_group | `high` | | +| `PATCH /targets` | Update-PfbTarget | | address, ca_certificate_group, name | `high` | | +| `PATCH /tls-policies` | Update-PfbTlsPolicy | | appliance_certificate, client_certificates_required, disabled_tls_ciphers, enabled, enabled_tls_ciphers, location, min_tls_version, name, trusted_client_certificate_authority, verify_client_certificate_trust | `high` | | +| `PATCH /workloads` | Update-PfbWorkload | context_names | destroyed | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `PATCH /worm-data-policies` | Update-PfbWormPolicy | context_names | default_retention, enabled, location, max_retention, min_retention, mode, retention_lock | `high` | | +| `POST /active-directory` | New-PfbActiveDirectory | join_existing_account, names | ca_certificate, ca_certificate_group, computer_name, directory_servers, domain, encryption_types, fqdns, global_catalog_servers, join_ou, kerberos_servers, password, service_principal_names, user | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /admins/api-tokens` | New-PfbApiToken | admin_ids, admin_names, context_names, timeout | | `high` | | +| `POST /admins/management-access-policies` | New-PfbAdminManagementAccessPolicy | context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `POST /admins/ssh-certificate-authority-policies` | New-PfbAdminSshCaPolicy | context_names | | `high` | | +| `POST /api-clients` | New-PfbApiClient | | access_policies, access_token_ttl_in_ms, issuer, max_role, public_key | `high` | | +| `POST /array-connections` | New-PfbArrayConnection | context_names | ca_certificate_group, encrypted, remote, throttle | `high` | | +| `POST /arrays/erasures` | New-PfbArrayErasure | eradicate_all_data, preserve_configuration_data, skip_phonehome_check | | `high` | | +| `POST /arrays/ssh-certificate-authority-policies` | New-PfbArraySshCaPolicy | context_names | | `high` | | +| `POST /audit-file-systems-policies` | New-PfbAuditFileSystemPolicy | context_names | control_type, enabled, location, log_targets, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /audit-file-systems-policies/members` | New-PfbAuditFileSystemPolicyMember | context_names | | `high` | | +| `POST /audit-object-store-policies` | New-PfbAuditObjectStorePolicy | context_names | enabled, location, log_targets, name | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /audit-object-store-policies/members` | New-PfbAuditObjectStorePolicyMember | context_names | | `high` | | +| `POST /buckets` | New-PfbBucket | context_names | bucket_type, eradication_config, hard_limit_enabled, object_lock_config, retention_lock | `high` | | +| `POST /buckets/audit-filters` | New-PfbBucketAuditFilter | bucket_ids, bucket_names, context_names, names | actions, s3_prefixes | `high` | | +| `POST /buckets/bucket-access-policies` | New-PfbBucketAccessPolicy | bucket_ids, bucket_names, context_names | rules | `high` | | +| `POST /buckets/bucket-access-policies/rules` | New-PfbBucketAccessPolicyRule | bucket_ids, bucket_names, context_names, names | actions, principals, resources | `high` | | +| `POST /buckets/cross-origin-resource-sharing-policies` | New-PfbBucketCorsPolicy | bucket_ids, bucket_names, context_names | rules | `high` | | +| `POST /buckets/cross-origin-resource-sharing-policies/rules` | New-PfbBucketCorsPolicyRule | bucket_ids, bucket_names, context_names, names, policy_names | allowed_headers, allowed_methods, allowed_origins | `high` | | +| `POST /certificates` | New-PfbCertificate | | certificate, certificate_type, common_name, country, days, email, intermediate_certificate, key_algorithm, key_size, locality, organization, organizational_unit, passphrase, private_key, state, subject_alternative_names | `high` | | +| `POST /certificates/certificate-groups` | New-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids | | `high` | | +| `POST /certificates/certificate-signing-requests` | New-PfbCertificateSigningRequest | | certificate, common_name, country, email, locality, organization, organizational_unit, state, subject_alternative_names | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /data-eviction-policies` | New-PfbDataEvictionPolicy | context_names | enabled, location, name | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /data-eviction-policies/file-systems` | Add-PfbDataEvictionPolicyFileSystem | context_names | | `high` | | +| `POST /directory-services/local/directory-services` | New-PfbLocalDirectoryService | context_names | | `high` | | +| `POST /directory-services/local/groups` | New-PfbLocalGroup | context_names, local_directory_service_ids, local_directory_service_names | | `high` | | +| `POST /directory-services/local/groups/members` | New-PfbLocalGroupMember | context_names, group_gids, group_sids, local_directory_service_ids | members | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /directory-services/roles` | New-PfbDirectoryServiceRole | | group, group_base, management_access_policies, role | `high` | | +| `POST /dns` | New-PfbDns | context_names, names | ca_certificate, ca_certificate_group, domain, nameservers, services, sources | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /file-system-exports` | New-PfbFileSystemExport | context_names, member_ids, policy_ids | | `high` | | +| `POST /file-system-replica-links` | New-PfbFileSystemReplicaLink | context_names, ids, local_file_system_ids, remote_ids | direction, link_type, local_file_system, policies, remote, remote_file_system | `high` | | +| `POST /file-system-replica-links/policies` | New-PfbFileSystemReplicaLinkPolicy | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | | `high` | | +| `POST /file-system-snapshots` | New-PfbFileSystemSnapshot | context_names, source_ids, source_names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /file-systems` | New-PfbFileSystem | context_names, default_exports, discard_non_snapshotted_data, include_snapshot, overwrite, policy_ids, policy_names | fast_remove_directory_enabled, hard_limit_enabled, http, multi_protocol, nfs, node_group, smb, snapshot_directory_enabled, workload, writable | `partial` -- /!\ 15 unresolved params (see Partial-confidence detail below) | | +| `POST /file-systems/audit-policies` | New-PfbFileSystemAuditPolicy | context_names | | `high` | | +| `POST /file-systems/locks/nlm-reclamations` | New-PfbNlmReclamation | context_names | | `high` | | +| `POST /file-systems/policies` | New-PfbFileSystemPolicy | context_names | | `high` | | +| `POST /fleets` | New-PfbFleet | names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /fleets/members` | New-PfbFleetMember | fleet_ids | members | `high` | | +| `POST /keytabs` | New-PfbKeytab | name_prefixes | source | `high` | | +| `POST /keytabs/upload` | New-PfbKeytabUpload | name_prefixes | keytab_file | `high` | | +| `POST /legal-holds` | New-PfbLegalHold | | description | `high` | | +| `POST /legal-holds/held-entities` | New-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, names, paths, recursive | | `high` | | +| `POST /lifecycle-rules` | New-PfbLifecycleRule | confirm_date, context_names | abort_incomplete_multipart_uploads_after, keep_current_version_for, keep_current_version_until, keep_previous_version_for, prefix, rule_id | `high` | | +| `POST /link-aggregation-groups` | New-PfbLag | names | ports | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /log-targets/file-systems` | New-PfbLogTargetFileSystem | context_names | file_system, keep_for, keep_size, name | `high` | | +| `POST /log-targets/object-store` | New-PfbLogTargetObjectStore | context_names | bucket, log_name_prefix, log_rotate, name | `high` | | +| `POST /maintenance-windows` | New-PfbMaintenanceWindow | names | timeout | `high` | | +| `POST /management-access-policies` | New-PfbManagementAccessPolicy | context_names | aggregation_strategy, enabled, location, name, rules | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `POST /management-access-policies/admins` | New-PfbManagementAccessPolicyAdmin | context_names | | `high` | POST/PATCH/DELETE return 403 regardless of account; not an implementation bug | +| `POST /network-access-policies/rules` | New-PfbNetworkAccessRule | before_rule_id, before_rule_name, versions | client, effect, index, interfaces | `high` | | +| `POST /network-interfaces` | New-PfbNetworkInterface | | attached_servers, subnet | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /network-interfaces/tls-policies` | New-PfbNetworkInterfaceTlsPolicy | member_ids, policy_ids | | `high` | | +| `POST /nfs-export-policies` | New-PfbNfsExportPolicy | context_names | enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /nfs-export-policies/rules` | New-PfbNfsExportRule | before_rule_id, before_rule_name, context_names, versions | access, anongid, anonuid, atime, client, fileid_32bit, index, permission, policy, required_transport_security, secure, security | `high` | | +| `POST /node-groups` | New-PfbNodeGroup | names | | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /node-groups/nodes` | New-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | | `high` | | +| `POST /object-store-access-keys` | New-PfbObjectStoreAccessKey | context_names, names | secret_access_key | `high` | | +| `POST /object-store-access-policies` | New-PfbObjectStoreAccessPolicy | context_names, enforce_action_restrictions | description, rules | `high` | | +| `POST /object-store-access-policies/object-store-roles` | New-PfbObjectStoreAccessPolicyRole | context_names, member_ids, policy_ids | | `high` | | +| `POST /object-store-access-policies/object-store-users` | New-PfbObjectStoreAccessPolicyUser | context_names, member_ids, policy_ids | | `high` | | +| `POST /object-store-access-policies/rules` | New-PfbObjectStoreAccessPolicyRule | context_names, enforce_action_restrictions, names, policy_ids | actions, conditions, effect, resources | `high` | | +| `POST /object-store-account-exports` | New-PfbObjectStoreAccountExport | context_names, member_ids, member_names, policy_ids, policy_names | export_enabled, server | `high` | | +| `POST /object-store-accounts` | New-PfbObjectStoreAccount | context_names | account_exports, bucket_defaults, hard_limit_enabled, quota_limit | `high` | | +| `POST /object-store-remote-credentials` | New-PfbObjectStoreRemoteCredential | context_names | access_key_id, secret_access_key | `high` | | +| `POST /object-store-roles` | New-PfbObjectStoreRole | context_names | max_session_duration | `high` | | +| `POST /object-store-roles/object-store-access-policies` | New-PfbObjectStoreRoleAccessPolicy | context_names, member_ids, policy_ids, policy_names | | `high` | | +| `POST /object-store-roles/object-store-trust-policies/rules` | New-PfbObjectStoreTrustPolicyRule | context_names, names, role_ids, role_names | actions, conditions, policy, principals | `high` | | +| `POST /object-store-users` | New-PfbObjectStoreUser | context_names, full_access | | `high` | | +| `POST /object-store-users/object-store-access-policies` | New-PfbObjectStoreUserAccessPolicy | context_names, member_ids, policy_ids | | `high` | | +| `POST /object-store-virtual-hosts` | New-PfbObjectStoreVirtualHost | context_names | attached_servers | `high` | | +| `POST /policies` | New-PfbPolicy | context_names | enabled, location, name | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /policies/file-system-replica-links` | New-PfbPolicyFileSystemReplicaLink | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | | `high` | | +| `POST /policies/file-systems` | New-PfbPolicyFileSystem | context_names | | `high` | | +| `POST /presets/workload` | New-PfbPresetWorkload | context_names | description, directory_configurations, export_configurations, parameters, periodic_replication_configurations, placement_configurations, platform_features, qos_configurations, quota_configurations, snapshot_configurations, volume_configurations, workload_tags, workload_type | `high` | | +| `POST /public-keys` | New-PfbPublicKey | | public_key | `high` | | +| `POST /qos-policies` | New-PfbQosPolicy | context_names | enabled, location, max_total_bytes_per_sec, max_total_ops_per_sec, name | `high` | | +| `POST /qos-policies/members` | New-PfbQosPolicyMember | context_names, member_types | | `high` | | +| `POST /quotas/groups` | New-PfbQuotaGroup | context_names, file_system_ids, file_system_names, gids, group_names | | `high` | | +| `POST /quotas/users` | New-PfbQuotaUser | context_names, file_system_ids, file_system_names, uids, user_names | | `partial` -- /!\ 3 unresolved params (see Partial-confidence detail below) | | +| `POST /realms` | New-PfbRealm | without_default_access_list | | `high` | | +| `POST /s3-export-policies` | New-PfbS3ExportPolicy | context_names | enabled, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /s3-export-policies/rules` | New-PfbS3ExportRule | context_names, names | actions, effect, resources | `high` | | +| `POST /servers` | New-PfbServer | create_ds, create_local_directory_service | dns | `partial` -- /!\ 2 unresolved params (see Partial-confidence detail below) | | +| `POST /smb-client-policies` | New-PfbSmbClientPolicy | context_names | access_based_enumeration_enabled, enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /smb-client-policies/rules` | New-PfbSmbClientRule | before_rule_id, before_rule_name, context_names, versions | client, encryption, index, permission | `high` | | +| `POST /smb-share-policies` | New-PfbSmbSharePolicy | context_names | enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /smb-share-policies/rules` | New-PfbSmbShareRule | context_names | change, full_control, principal, read | `high` | | +| `POST /snmp-managers` | New-PfbSnmpManager | names | host, notification, v2c, v3, version | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /software-check` | New-PfbSoftwareCheck | software_names, software_versions | | `high` | | +| `POST /ssh-certificate-authority-policies` | New-PfbSshCaPolicy | names | enabled, location, name, signing_authority, static_authorized_principals | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /ssh-certificate-authority-policies/admins` | New-PfbSshCaPolicyAdmin | context_names | | `high` | | +| `POST /ssh-certificate-authority-policies/arrays` | New-PfbSshCaPolicyArray | context_names | | `high` | | +| `POST /sso/oidc/idps` | New-PfbOidcIdp | | enabled, idp, services | `high` | | +| `POST /sso/saml2/idps` | New-PfbSaml2Idp | | array_url, binding, enabled, idp, management, services, sp | `high` | | +| `POST /storage-class-tiering-policies` | New-PfbStorageClassTieringPolicy | names | archival_rules, enabled, location, name, retrieval_rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /subnets` | New-PfbSubnet | | | `high` | | +| `POST /support-diagnostics` | New-PfbSupportDiagnostics | analysis_period_end_time, analysis_period_start_time | | `high` | | +| `POST /syslog-servers` | New-PfbSyslogServer | names | services, sources, uri | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /targets` | New-PfbTarget | names | address | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /tls-policies` | New-PfbTlsPolicy | names | appliance_certificate, client_certificates_required, disabled_tls_ciphers, enabled, enabled_tls_ciphers, location, min_tls_version, name, trusted_client_certificate_authority, verify_client_certificate_trust | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /workloads` | New-PfbWorkload | context_names | | `high` | | +| `POST /workloads/placement-recommendations` | New-PfbWorkloadPlacementRecommendation | context_names | additional_constraints, parameters, preset, projection_months, recommendation_engine, results_limit | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /worm-data-policies` | New-PfbWormPolicy | context_names, names | default_retention, enabled, location, max_retention, min_retention, mode, retention_lock | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | + +### Partial-confidence detail + +Per the decision-6 procedure above: open each parameter at its `file:line` and follow where its value goes. + +| Endpoint | Parameter | Surface | File:Line | Caveat | +|---|---|---|---|---| +| `DELETE /buckets` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Bucket\Remove-PfbBucket.ps1:27` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /file-system-snapshots` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystemSnapshot\Remove-PfbFileSystemSnapshot.ps1:24` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /file-systems` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Remove-PfbFileSystem.ps1:38` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /file-systems/sessions` | `-Force` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Remove-PfbFileSystemSession.ps1:59` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /quotas/groups` | `-FileSystemName` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Remove-PfbQuotaGroup.ps1:30` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /quotas/groups` | `-GroupName` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Remove-PfbQuotaGroup.ps1:31` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /quotas/users` | `-FileSystemName` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Remove-PfbQuotaUser.ps1:25` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /quotas/users` | `-UserName` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Remove-PfbQuotaUser.ps1:26` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `DELETE /servers` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Server\Remove-PfbServer.ps1:35` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `GET /arrays` | `-Endpoint` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Connection\Test-PfbConnection.ps1:31` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /alert-watchers` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Alert\Update-PfbAlertWatcher.ps1:32` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /alerts` | `-Flagged` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Alert\Update-PfbAlert.ps1:26` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /audit-file-systems-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbAuditFileSystemPolicy.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /audit-object-store-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbAuditObjectStorePolicy.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /buckets` | `-Destroyed` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Bucket\Update-PfbBucket.ps1:37` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /buckets` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Bucket\Remove-PfbBucket.ps1:27` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /data-eviction-policies` | `-Enabled` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\DataEviction\Update-PfbDataEvictionPolicy.ps1:37` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /directory-services` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\DirectoryService\Update-PfbDirectoryService.ps1:32` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /file-system-snapshots` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystemSnapshot\Remove-PfbFileSystemSnapshot.ps1:24` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-Destroyed` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:93` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Remove-PfbFileSystem.ps1:38` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-HardLimitEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:69` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-HttpEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:90` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-NfsEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:72` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-NfsExportPolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:78` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-NfsRules` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:75` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-SmbClientPolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:87` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-SmbEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:81` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /file-systems` | `-SmbSharePolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\Update-PfbFileSystem.ps1:84` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /network-access-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbNetworkAccessPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /nfs-export-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbNfsExportPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbPolicy.ps1:28` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /quotas/groups` | `-FileSystemName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Update-PfbQuotaGroup.ps1:35` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /quotas/groups` | `-GroupName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Update-PfbQuotaGroup.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /quotas/users` | `-FileSystemName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Update-PfbQuotaUser.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /quotas/users` | `-UserName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\Update-PfbQuotaUser.ps1:31` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /realms` | `-Destroyed` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Realm\Update-PfbRealm.ps1:31` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /realms` | `-Eradicate` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Realm\Remove-PfbRealm.ps1:32` | body reachable via -Attributes for some parameters and untraceable for others; lists reflect typed-parameter coverage only, not full wire reachability | +| `PATCH /s3-export-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbS3ExportPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /servers` | `-DnsName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Server\Update-PfbServer.ps1:34` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /smb-client-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbSmbClientPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /smb-share-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\Update-PfbSmbSharePolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `PATCH /workloads` | `-Destroyed` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Workloads\Update-PfbWorkload.ps1:36` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `POST /active-directory` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\DirectoryService\New-PfbActiveDirectory.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /audit-file-systems-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbAuditFileSystemPolicy.ps1:35` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /audit-object-store-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbAuditObjectStorePolicy.ps1:35` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /certificates/certificate-signing-requests` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Certificate\New-PfbCertificateSigningRequest.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /data-eviction-policies` | `-Disabled` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\DataEviction\New-PfbDataEvictionPolicy.ps1:31` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `POST /directory-services/local/groups/members` | `-Member` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\DirectoryService\New-PfbLocalGroupMember.ps1:35` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `POST /dns` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Network\New-PfbDns.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-system-snapshots` | `-SourceName` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystemSnapshot\New-PfbFileSystemSnapshot.ps1:36` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `POST /file-systems` | `-FastRemoveDirectoryEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:139` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-HardLimit` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:93` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-Http` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:126` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-MultiProtocolAccessControlStyle` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:129` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-Nfs` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:102` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-NfsExportPolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:114` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-NfsRules` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:111` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-NfsV3` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:105` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-NfsV41` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:108` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-SafeguardAcls` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:133` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-Smb` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:117` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-SmbClientPolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:123` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-SmbSharePolicy` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:120` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-SnapshotDirectoryEnabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:136` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /file-systems` | `-Writable` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\FileSystem\New-PfbFileSystem.ps1:150` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /fleets` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Replication\New-PfbFleet.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /link-aggregation-groups` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Misc\New-PfbLag.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /network-interfaces` | `-AttachedServers` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Network\New-PfbNetworkInterface.ps1:55` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /nfs-export-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbNfsExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /node-groups` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Node\New-PfbNodeGroup.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbPolicy.ps1:23` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /quotas/users` | `-FileSystemName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\New-PfbQuotaUser.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /quotas/users` | `-UserId` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\New-PfbQuotaUser.ps1:44` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /quotas/users` | `-UserName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Quota\New-PfbQuotaUser.ps1:43` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /s3-export-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbS3ExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /servers` | `-CreateDirectoryService` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Server\New-PfbServer.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /servers` | `-DnsName` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Server\New-PfbServer.ps1:34` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /smb-client-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbSmbClientPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /smb-share-policies` | `-Enabled` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbSmbSharePolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /snmp-managers` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Monitoring\New-PfbSnmpManager.ps1:33` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /ssh-certificate-authority-policies` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbSshCaPolicy.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /storage-class-tiering-policies` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbStorageClassTieringPolicy.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /syslog-servers` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Monitoring\New-PfbSyslogServer.ps1:32` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /targets` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Replication\New-PfbTarget.ps1:31` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /tls-policies` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbTlsPolicy.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | +| `POST /workloads/placement-recommendations` | `-Inputs` | TypedUnresolved | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Workloads\New-PfbWorkloadPlacementRecommendation.ps1:29` | one or more parameters could not be traced to a wire name and have no -Attributes escape hatch; lists reflect typed-parameter coverage only, not full wire reachability | +| `POST /worm-data-policies` | `-Name` | AttributesOnly | `C:\Users\Justin\Documents\GitProjects\fb-powershell\fb-powershell\.claude\worktrees\drift-report-actionable\Public\Policy\New-PfbWormPolicy.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | + +## Read-only fields (not addressable) + +The capability map knows these body properties exist, but the newest analysed spec marks them read-only -- no `Public/` cmdlet can ever set them, on any confidence level. Listed for completeness only; never merged into the Parameter gaps table above. + +| Endpoint | Cmdlets | Read-only fields | +|---|---|---| +| `PATCH /alert-watchers` | Update-PfbAlertWatcher | id, name | +| `PATCH /alerts` | Update-PfbAlert | action, code, component_name, component_type, created, description, duration, id, index, knowledge_base_url, name, notified, severity, state, summary, updated, variables | +| `PATCH /api-clients` | Update-PfbApiClient | access_policies, access_token_ttl_in_ms, id, issuer, key_id, name, public_key | +| `PATCH /array-connections` | Update-PfbArrayConnection | context, id, os, status, type, version | +| `PATCH /arrays` | Update-PfbArray | _as_of, context, encryption, id, os, product_type, revision, security_update, smb_mode, version | +| `PATCH /arrays/eula` | Update-PfbArrayEula | agreement | +| `PATCH /audit-file-systems-policies` | Update-PfbAuditFileSystemPolicy | id, is_local, policy_type, realms | +| `PATCH /audit-object-store-policies` | Update-PfbAuditObjectStorePolicy | id, is_local, policy_type, realms | +| `PATCH /certificates` | Update-PfbCertificate | issued_by, issued_to, realms, status, valid_from, valid_to | +| `PATCH /data-eviction-policies` | Update-PfbDataEvictionPolicy | context, id, is_local, policy_type, realms | +| `PATCH /directory-services` | Update-PfbDirectoryService | id, name, services | +| `PATCH /directory-services/roles` | Update-PfbDirectoryServiceRole | id, management_access_policies, name | +| `PATCH /dns` | Update-PfbDns | context, id, realms | +| `PATCH /file-system-exports` | Update-PfbFileSystemExport | context, enabled, id, name, policy_type, status | +| `PATCH /file-system-snapshots` | Remove-PfbFileSystemSnapshot | context, created, id, owner_destroyed, policies, suffix, time_remaining | +| `PATCH /file-systems` | Remove-PfbFileSystem, Update-PfbFileSystem | created, id, promotion_status, time_remaining | +| `PATCH /hardware` | Update-PfbHardware | data_mac, details, id, index, management_mac, model, name, part_number, sensor_readings, serial, slot, speed, status, temperature, type | +| `PATCH /hardware-connectors` | Update-PfbHardwareConnector | connector_type, id, name, transceiver_type | +| `PATCH /kmip` | Update-PfbKmip | id, name | +| `PATCH /legal-holds` | Update-PfbLegalHold | id, name, realms | +| `PATCH /log-targets/file-systems` | Update-PfbLogTargetFileSystem | id | +| `PATCH /log-targets/object-store` | Update-PfbLogTargetObjectStore | id | +| `PATCH /logs-async` | Update-PfbAsyncLog | available_files, id, last_request_time, name, processing, progress | +| `PATCH /management-access-policies` | Update-PfbManagementAccessPolicy | context, id, is_local, policy_type, realms, version | +| `PATCH /network-access-policies` | Update-PfbNetworkAccessPolicy | id, is_local, policy_type, realms, version | +| `PATCH /network-access-policies/rules` | Update-PfbNetworkAccessRule | id, name, policy_version | +| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | connector_type, id, name, transceiver_type | +| `PATCH /nfs-export-policies` | Update-PfbNfsExportPolicy | id, is_local, policy_type, realms, version | +| `PATCH /nfs-export-policies/rules` | Update-PfbNfsExportRule | id, name | +| `PATCH /nodes` | Update-PfbNode | capacity, chassis_serial_number, data_addresses, details, id, raw_capacity, status, unique | +| `PATCH /object-store-remote-credentials` | Update-PfbObjectStoreRemoteCredential | context, id, realms | +| `PATCH /object-store-roles` | Update-PfbObjectStoreRole | context, created, id, name, prn, trusted_entities | +| `PATCH /object-store-roles/object-store-trust-policies/rules` | Update-PfbObjectStoreTrustPolicyRule | effect | +| `PATCH /object-store-virtual-hosts` | Update-PfbObjectStoreVirtualHost | id | +| `PATCH /password-policies` | Update-PfbPasswordPolicy | id, is_local, policy_type, realms | +| `PATCH /policies` | Update-PfbPolicy | id, is_local, name, policy_type, realms, retention_lock | +| `PATCH /qos-policies` | Update-PfbQosPolicy | context, id, is_local, policy_type, realms | +| `PATCH /quotas/groups` | Update-PfbQuotaGroup | name | +| `PATCH /quotas/settings` | Update-PfbQuotaSettings | id, name | +| `PATCH /quotas/users` | Update-PfbQuotaUser | name | +| `PATCH /realms` | Remove-PfbRealm, Update-PfbRealm | id | +| `PATCH /realms/defaults` | Update-PfbRealmDefaults | context, realm | +| `PATCH /smb-client-policies` | Update-PfbSmbClientPolicy | id, is_local, policy_type, realms, version | +| `PATCH /smb-client-policies/rules` | Update-PfbSmbClientRule | context, id, name, policy_version | +| `PATCH /smb-share-policies` | Update-PfbSmbSharePolicy | id, is_local, policy_type, realms | +| `PATCH /smb-share-policies/rules` | Update-PfbSmbShareRule | id, name | +| `PATCH /snmp-agents` | Update-PfbSnmpAgent | engine_id, id, name | +| `PATCH /snmp-managers` | Update-PfbSnmpManager | id | +| `PATCH /ssh-certificate-authority-policies` | Update-PfbSshCaPolicy | context, id, is_local, policy_type, realms | +| `PATCH /sso/oidc/idps` | Update-PfbOidcIdp | prn | +| `PATCH /sso/saml2/idps` | Update-PfbSaml2Idp | id, prn | +| `PATCH /storage-class-tiering-policies` | Update-PfbStorageClassTieringPolicy | id, is_local, policy_type, realms | +| `PATCH /subnets` | Update-PfbSubnet | enabled, id, interfaces, name, services | +| `PATCH /support` | Update-PfbSupport | id, name, remote_assist_expires, remote_assist_opened, remote_assist_paths, remote_assist_status | +| `PATCH /syslog-servers/settings` | Update-PfbSyslogServerSettings | id, name | +| `PATCH /targets` | Update-PfbTarget | id, status, status_details | +| `PATCH /tls-policies` | Update-PfbTlsPolicy | id, is_local, policy_type, realms | +| `PATCH /worm-data-policies` | Update-PfbWormPolicy | context, id, is_local, name, policy_type, realms | +| `POST /array-connections` | New-PfbArrayConnection | context, id, os, status, type, version | +| `POST /audit-file-systems-policies` | New-PfbAuditFileSystemPolicy | id, is_local, policy_type, realms | +| `POST /audit-object-store-policies` | New-PfbAuditObjectStorePolicy | id, is_local, policy_type, realms | +| `POST /buckets/bucket-access-policies/rules` | New-PfbBucketAccessPolicyRule | effect | +| `POST /certificates` | New-PfbCertificate | issued_by, issued_to, realms, status, valid_from, valid_to | +| `POST /data-eviction-policies` | New-PfbDataEvictionPolicy | id, is_local, policy_type, realms | +| `POST /file-system-replica-links` | New-PfbFileSystemReplicaLink | context, id, lag, recovery_point, status, status_details | +| `POST /file-systems` | New-PfbFileSystem | requested_promotion_state | +| `POST /legal-holds` | New-PfbLegalHold | id, name, realms | +| `POST /link-aggregation-groups` | New-PfbLag | id, lag_speed, mac_address, name, port_speed, status | +| `POST /log-targets/file-systems` | New-PfbLogTargetFileSystem | id | +| `POST /log-targets/object-store` | New-PfbLogTargetObjectStore | id | +| `POST /management-access-policies` | New-PfbManagementAccessPolicy | id, is_local, policy_type, realms | +| `POST /network-access-policies/rules` | New-PfbNetworkAccessRule | id, name | +| `POST /network-interfaces` | New-PfbNetworkInterface | enabled, gateway, id, mtu, name, netmask, realms, vlan | +| `POST /nfs-export-policies` | New-PfbNfsExportPolicy | id, is_local, policy_type, realms | +| `POST /nfs-export-policies/rules` | New-PfbNfsExportRule | context, id, name, policy_version | +| `POST /object-store-roles/object-store-trust-policies/rules` | New-PfbObjectStoreTrustPolicyRule | effect | +| `POST /object-store-virtual-hosts` | New-PfbObjectStoreVirtualHost | context, id, name, realms | +| `POST /policies` | New-PfbPolicy | id, is_local, policy_type, realms, retention_lock | +| `POST /presets/workload` | New-PfbPresetWorkload | revision | +| `POST /qos-policies` | New-PfbQosPolicy | context, id, is_local, policy_type, realms | +| `POST /quotas/groups` | New-PfbQuotaGroup | name | +| `POST /quotas/users` | New-PfbQuotaUser | name | +| `POST /smb-client-policies` | New-PfbSmbClientPolicy | id, is_local, policy_type, realms | +| `POST /smb-client-policies/rules` | New-PfbSmbClientRule | id, name | +| `POST /smb-share-policies` | New-PfbSmbSharePolicy | id, is_local, policy_type, realms | +| `POST /smb-share-policies/rules` | New-PfbSmbShareRule | id, name | +| `POST /ssh-certificate-authority-policies` | New-PfbSshCaPolicy | id, is_local, policy_type, realms | +| `POST /sso/oidc/idps` | New-PfbOidcIdp | prn | +| `POST /sso/saml2/idps` | New-PfbSaml2Idp | prn | +| `POST /storage-class-tiering-policies` | New-PfbStorageClassTieringPolicy | id, is_local, policy_type, realms | +| `POST /subnets` | New-PfbSubnet | enabled, id, interfaces, name, services | +| `POST /tls-policies` | New-PfbTlsPolicy | id, is_local, policy_type, realms | +| `POST /workloads/placement-recommendations` | New-PfbWorkloadPlacementRecommendation | context, created, expires, id, more_results_available, name, progress, results, status | +| `POST /worm-data-policies` | New-PfbWormPolicy | context, id, is_local, name, policy_type, realms | + ## Uncovered endpoints | Endpoint | Introduced in | @@ -134,290 +824,3 @@ Reporting only -- no `Public/` cmdlet is edited by this script. | `POST /fleets/members/batch` | 2.27 | | `GET /storage-classes/members` | 2.27 | -## Parameter gaps - -| Endpoint | Cmdlets | Missing parameters | -|---|---|---| -| `DELETE /active-directory` | Remove-PfbActiveDirectory | local_only | -| `DELETE /admins/api-tokens` | Remove-PfbApiToken | admin_ids, admin_names, context_names | -| `DELETE /admins/cache` | Remove-PfbAdminCache | context_names | -| `DELETE /admins/management-access-policies` | Remove-PfbAdminManagementAccessPolicy | context_names | -| `DELETE /admins/ssh-certificate-authority-policies` | Remove-PfbAdminSshCaPolicy | context_names | -| `DELETE /array-connections` | Remove-PfbArrayConnection | context_names, remote_ids, remote_names | -| `DELETE /arrays/ssh-certificate-authority-policies` | Remove-PfbArraySshCaPolicy | context_names | -| `DELETE /audit-file-systems-policies` | Remove-PfbAuditFileSystemPolicy | context_names | -| `DELETE /audit-file-systems-policies/members` | Remove-PfbAuditFileSystemPolicyMember | context_names | -| `DELETE /audit-object-store-policies` | Remove-PfbAuditObjectStorePolicy | context_names | -| `DELETE /audit-object-store-policies/members` | Remove-PfbAuditObjectStorePolicyMember | context_names | -| `DELETE /buckets/audit-filters` | Remove-PfbBucketAuditFilter | bucket_ids, bucket_names, context_names, names | -| `DELETE /buckets/cross-origin-resource-sharing-policies` | Remove-PfbBucketCorsPolicy | bucket_ids, bucket_names, context_names, names | -| `DELETE /certificates/certificate-groups` | Remove-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids | -| `DELETE /data-eviction-policies` | Remove-PfbDataEvictionPolicy | context_names | -| `DELETE /data-eviction-policies/file-systems` | Remove-PfbDataEvictionPolicyFileSystem | context_names | -| `DELETE /directory-services/local/groups` | Remove-PfbLocalGroup | context_names, gids, local_directory_service_ids, local_directory_service_names, sids | -| `DELETE /dns` | Remove-PfbDns | context_names | -| `DELETE /file-system-exports` | Remove-PfbFileSystemExport | context_names | -| `DELETE /file-system-replica-links` | Remove-PfbFileSystemReplicaLink | context_names, local_file_system_ids, remote_file_system_ids, remote_ids | -| `DELETE /file-system-replica-links/policies` | Remove-PfbFileSystemReplicaLinkPolicy | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | -| `DELETE /file-system-snapshots/policies` | Remove-PfbFileSystemSnapshotPolicy | context_names | -| `DELETE /file-system-snapshots/transfer` | Remove-PfbFileSystemSnapshotTransfer | context_names, remote_ids, remote_names | -| `DELETE /file-systems/audit-policies` | Remove-PfbFileSystemAuditPolicy | context_names | -| `DELETE /file-systems/locks` | Remove-PfbFileLock | client_names, context_names, file_system_ids, file_system_names, inodes, paths, recursive | -| `DELETE /file-systems/policies` | Remove-PfbFileSystemPolicy | context_names | -| `DELETE /file-systems/sessions` | Remove-PfbFileSystemSession | client_names, context_names, disruptive, protocols, user_names | -| `DELETE /fleets/members` | Remove-PfbFleetMember | member_ids, unreachable | -| `DELETE /lifecycle-rules` | Remove-PfbLifecycleRule | bucket_ids, bucket_names, context_names | -| `DELETE /log-targets/file-systems` | Remove-PfbLogTargetFileSystem | context_names | -| `DELETE /log-targets/object-store` | Remove-PfbLogTargetObjectStore | context_names | -| `DELETE /management-access-policies` | Remove-PfbManagementAccessPolicy | context_names | -| `DELETE /management-access-policies/admins` | Remove-PfbManagementAccessPolicyAdmin | context_names | -| `DELETE /network-interfaces/tls-policies` | Remove-PfbNetworkInterfaceTlsPolicy | member_ids, policy_ids | -| `DELETE /nfs-export-policies` | Remove-PfbNfsExportPolicy | context_names, versions | -| `DELETE /node-groups/nodes` | Remove-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | -| `DELETE /object-store-access-keys` | Remove-PfbObjectStoreAccessKey | context_names | -| `DELETE /object-store-access-policies` | Remove-PfbObjectStoreAccessPolicy | context_names | -| `DELETE /object-store-account-exports` | Remove-PfbObjectStoreAccountExport | context_names | -| `DELETE /object-store-accounts` | Remove-PfbObjectStoreAccount | context_names | -| `DELETE /object-store-remote-credentials` | Remove-PfbObjectStoreRemoteCredential | context_names | -| `DELETE /object-store-roles` | Remove-PfbObjectStoreRole | context_names | -| `DELETE /object-store-users` | Remove-PfbObjectStoreUser | context_names | -| `DELETE /object-store-virtual-hosts` | Remove-PfbObjectStoreVirtualHost | context_names | -| `DELETE /policies` | Remove-PfbPolicy | context_names | -| `DELETE /policies/file-system-replica-links` | Remove-PfbPolicyFileSystemReplicaLink | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | -| `DELETE /policies/file-systems` | Remove-PfbPolicyFileSystem | context_names | -| `DELETE /presets/workload` | Remove-PfbPresetWorkload | context_names | -| `DELETE /qos-policies` | Remove-PfbQosPolicy | context_names | -| `DELETE /qos-policies/members` | Remove-PfbQosPolicyMember | context_names, member_types | -| `DELETE /s3-export-policies` | Remove-PfbS3ExportPolicy | context_names | -| `DELETE /smb-client-policies` | Remove-PfbSmbClientPolicy | context_names | -| `DELETE /smb-share-policies` | Remove-PfbSmbSharePolicy | context_names | -| `DELETE /ssh-certificate-authority-policies/admins` | Remove-PfbSshCaPolicyAdmin | context_names | -| `DELETE /ssh-certificate-authority-policies/arrays` | Remove-PfbSshCaPolicyArray | context_names | -| `DELETE /workloads` | Remove-PfbWorkload | context_names | -| `DELETE /worm-data-policies` | Remove-PfbWormPolicy | context_names | -| `GET /active-directory` | Get-PfbActiveDirectory | ids, limit, sort | -| `GET /active-directory/test` | Test-PfbActiveDirectory | allow_errors, context_names, filter, limit, sort | -| `GET /admins` | Get-PfbAdmin | allow_errors, context_names, expose_api_token | -| `GET /admins/api-tokens` | Get-PfbApiToken | admin_ids, admin_names, allow_errors, context_names, expose_api_token | -| `GET /admins/cache` | Get-PfbAdminCache | allow_errors, context_names, refresh | -| `GET /admins/management-access-policies` | Get-PfbAdminManagementAccessPolicy | allow_errors, context_names, sort | -| `GET /admins/ssh-certificate-authority-policies` | Get-PfbAdminSshCaPolicy | allow_errors, context_names, sort | -| `GET /alert-watchers/test` | Test-PfbAlertWatcher | filter, sort | -| `GET /array-connections` | Get-PfbArrayConnection | allow_errors, context_names, remote_ids, remote_names | -| `GET /array-connections/connection-key` | Get-PfbArrayConnectionKey | ids | -| `GET /array-connections/path` | Get-PfbArrayConnectionPath | allow_errors, context_names, ids, remote_ids, remote_names | -| `GET /array-connections/performance/replication` | Get-PfbArrayConnectionPerformanceReplication | ids, remote_ids, remote_names, total_only, type | -| `GET /arrays/clients/performance` | Get-PfbArrayClientPerformance | names, protocol, total_only | -| `GET /arrays/clients/s3-specific-performance` | Get-PfbArrayClientS3Performance | names, total_only | -| `GET /arrays/http-specific-performance` | Get-PfbArrayHttpPerformance | allow_errors, context_names | -| `GET /arrays/nfs-specific-performance` | Get-PfbArrayNfsPerformance | allow_errors, context_names | -| `GET /arrays/performance` | Get-PfbArrayPerformance | allow_errors, context_names | -| `GET /arrays/performance/replication` | Get-PfbArrayPerformanceReplication | allow_errors, context_names, type | -| `GET /arrays/s3-specific-performance` | Get-PfbArrayS3Performance | allow_errors, context_names | -| `GET /arrays/space` | Get-PfbArraySpace | allow_errors, context_names, end_time, resolution, start_time | -| `GET /arrays/space/storage-classes` | Get-PfbArrayStorageClass | end_time, resolution, start_time, storage_class_names, total_only | -| `GET /arrays/ssh-certificate-authority-policies` | Get-PfbArraySshCaPolicy | allow_errors, context_names, sort | -| `GET /arrays/supported-time-zones` | Get-PfbArraySupportedTimeZone | names | -| `GET /audit-file-systems-policies` | Get-PfbAuditFileSystemPolicy | allow_errors, context_names | -| `GET /audit-file-systems-policies/members` | Get-PfbAuditFileSystemPolicyMember | allow_errors, context_names | -| `GET /audit-file-systems-policy-operations` | Get-PfbAuditFileSystemPolicyOperation | allow_errors, context_names, names | -| `GET /audit-object-store-policies` | Get-PfbAuditObjectStorePolicy | allow_errors, context_names | -| `GET /audit-object-store-policies/members` | Get-PfbAuditObjectStorePolicyMember | allow_errors, context_names | -| `GET /blades` | Get-PfbBlade, Get-PfbNode | total_only | -| `GET /bucket-audit-filter-actions` | Get-PfbBucketAuditFilterAction | allow_errors, context_names, names | -| `GET /bucket-replica-links` | Get-PfbBucketReplicaLink | allow_errors, context_names, ids, local_bucket_ids, remote_ids, remote_names, total_only | -| `GET /buckets` | Get-PfbBucket | allow_errors, context_names | -| `GET /buckets/audit-filters` | Get-PfbBucketAuditFilter | allow_errors, bucket_ids, bucket_names, context_names, names | -| `GET /buckets/bucket-access-policies` | Get-PfbBucketAccessPolicy | allow_errors, bucket_ids, bucket_names, context_names | -| `GET /buckets/bucket-access-policies/rules` | Get-PfbBucketAccessPolicyRule | allow_errors, bucket_ids, bucket_names, context_names | -| `GET /buckets/cross-origin-resource-sharing-policies` | Get-PfbBucketCorsPolicy | allow_errors, bucket_ids, bucket_names, context_names | -| `GET /buckets/cross-origin-resource-sharing-policies/rules` | Get-PfbBucketCorsPolicyRule | allow_errors, bucket_ids, bucket_names, context_names | -| `GET /certificate-groups/certificates` | Get-PfbCertificateGroupCertificate | certificate_group_ids, certificate_group_names, certificate_ids, certificate_names | -| `GET /certificate-groups/uses` | Get-PfbCertificateGroupUse | ids | -| `GET /certificates/certificate-groups` | Get-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids, sort | -| `GET /certificates/uses` | Get-PfbCertificateUse | ids | -| `GET /data-eviction-policies` | Get-PfbDataEvictionPolicy | allow_errors, context_names | -| `GET /data-eviction-policies/file-systems` | Get-PfbDataEvictionPolicyFileSystem | allow_errors, context_names | -| `GET /data-eviction-policies/members` | Get-PfbDataEvictionPolicyMember | allow_errors, context_names | -| `GET /directory-services` | Get-PfbDirectoryService | ids, limit, sort | -| `GET /directory-services/local/directory-services` | Get-PfbLocalDirectoryService | allow_errors, context_names, destroyed, total_item_count | -| `GET /directory-services/local/groups` | Get-PfbLocalGroup | allow_errors, context_names, gids, sids, total_item_count | -| `GET /directory-services/local/groups/members` | Get-PfbLocalGroupMember | allow_errors, context_names, group_gids, group_sids, member_ids, member_sids, member_types, total_item_count | -| `GET /directory-services/roles` | Get-PfbDirectoryServiceRole | role_ids, role_names | -| `GET /directory-services/roles/management-access-policies` | Get-PfbDirectoryServiceRoleManagementPolicy | sort | -| `GET /drives` | Get-PfbDrive | total_only | -| `GET /file-system-exports` | Get-PfbFileSystemExport | allow_errors, context_names, workload_ids, workload_names | -| `GET /file-system-replica-links` | Get-PfbFileSystemReplicaLink | allow_errors, context_names, ids, local_file_system_ids, remote_file_system_ids, remote_ids, remote_names | -| `GET /file-system-replica-links/policies` | Get-PfbFileSystemReplicaLinkPolicy | allow_errors, context_names, local_file_system_ids, local_file_system_names, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names | -| `GET /file-system-replica-links/transfer` | Get-PfbFileSystemReplicaLinkTransfer | allow_errors, context_names, names_or_owner_names, remote_ids, remote_names | -| `GET /file-system-snapshots` | Get-PfbFileSystemSnapshot | allow_errors, context_names, names_or_owner_names, owner_ids | -| `GET /file-system-snapshots/policies` | Get-PfbFileSystemSnapshotPolicy | allow_errors, context_names | -| `GET /file-system-snapshots/transfer` | Get-PfbFileSystemSnapshotTransfer | allow_errors, context_names, names_or_owner_names | -| `GET /file-systems` | Get-PfbFileSystem | allow_errors, context_names, workload_ids, workload_names | -| `GET /file-systems/audit-policies` | Get-PfbFileSystemAuditPolicy | allow_errors, context_names | -| `GET /file-systems/groups/performance` | Get-PfbFileSystemGroupPerformance | gids, group_names, names | -| `GET /file-systems/locks` | Get-PfbFileLock | allow_errors, client_names, context_names, file_system_ids, file_system_names, inodes, paths | -| `GET /file-systems/locks/clients` | Get-PfbFileLockClient | allow_errors, context_names | -| `GET /file-systems/open-files` | Get-PfbOpenFile | client_names, file_system_ids, file_system_names, paths, protocols, session_names, user_names | -| `GET /file-systems/policies` | Get-PfbFileSystemPolicy | allow_errors, context_names | -| `GET /file-systems/sessions` | Get-PfbFileSystemSession | allow_errors, client_names, context_names, protocols, user_names | -| `GET /file-systems/space/storage-classes` | Get-PfbFileSystemStorageClass | storage_class_names | -| `GET /file-systems/users/performance` | Get-PfbFileSystemUserPerformance | names, uids, user_names | -| `GET /file-systems/worm-data-policies` | Get-PfbFileSystemWormPolicy | allow_errors, context_names | -| `GET /fleets` | Get-PfbFleet | total_only | -| `GET /fleets/fleet-key` | Get-PfbFleetKey | total_only | -| `GET /fleets/members` | Get-PfbFleetMember | fleet_ids, member_ids, total_only | -| `GET /hardware-connectors/performance` | Get-PfbHardwareConnectorPerformance | ids, total_only | -| `GET /keytabs/download` | Get-PfbKeytabDownload | keytab_ids, keytab_names | -| `GET /legal-holds/held-entities` | Get-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, names, paths | -| `GET /lifecycle-rules` | Get-PfbLifecycleRule | allow_errors, bucket_ids, context_names | -| `GET /log-targets/file-systems` | Get-PfbLogTargetFileSystem | allow_errors, context_names | -| `GET /log-targets/object-store` | Get-PfbLogTargetObjectStore | allow_errors, context_names | -| `GET /management-access-policies` | Get-PfbManagementAccessPolicy | allow_errors, context_names | -| `GET /management-access-policies/admins` | Get-PfbManagementAccessPolicyAdmin | allow_errors, context_names, sort | -| `GET /management-access-policies/directory-services/roles` | Get-PfbManagementAccessPolicyDirectoryRole | sort | -| `GET /management-access-policies/members` | Get-PfbManagementAccessPolicyMember | allow_errors, context_names, sort | -| `GET /network-access-policies/rules` | Get-PfbNetworkAccessRule | ids | -| `GET /network-interfaces/connectors/performance` | Get-PfbNetworkInterfaceConnectorPerformance | ids, total_only | -| `GET /network-interfaces/connectors/settings` | Get-PfbNetworkInterfaceConnectorSettings | ids | -| `GET /network-interfaces/neighbors` | Get-PfbNetworkInterfaceNeighbor | local_port_names, total_item_count | -| `GET /network-interfaces/network-connection-statistics` | Get-PfbNetworkConnectionStatistics | current_state, local_host, local_port, remote_host, remote_port | -| `GET /nfs-export-policies` | Get-PfbNfsExportPolicy | allow_errors, context_names, workload_ids, workload_names | -| `GET /nfs-export-policies/rules` | Get-PfbNfsExportRule | allow_errors, context_names, ids | -| `GET /node-groups/nodes` | Get-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | -| `GET /node-groups/uses` | Get-PfbNodeGroupUse | ids | -| `GET /nodes` | Get-PfbNode | total_only | -| `GET /object-store-access-keys` | Get-PfbObjectStoreAccessKey | allow_errors, context_names | -| `GET /object-store-access-policies` | Get-PfbObjectStoreAccessPolicy | allow_errors, context_names, exclude_rules | -| `GET /object-store-access-policies/object-store-roles` | Get-PfbObjectStoreAccessPolicyRole | allow_errors, context_names | -| `GET /object-store-access-policies/object-store-users` | Get-PfbObjectStoreAccessPolicyUser | allow_errors, context_names | -| `GET /object-store-access-policies/rules` | Get-PfbObjectStoreAccessPolicyRule | allow_errors, context_names | -| `GET /object-store-access-policy-actions` | Get-PfbObjectStoreAccessPolicyAction | allow_errors, context_names, names | -| `GET /object-store-account-exports` | Get-PfbObjectStoreAccountExport | allow_errors, context_names | -| `GET /object-store-accounts` | Get-PfbObjectStoreAccount | allow_errors, context_names | -| `GET /object-store-remote-credentials` | Get-PfbObjectStoreRemoteCredential | allow_errors, context_names | -| `GET /object-store-roles` | Get-PfbObjectStoreRole | allow_errors, context_names | -| `GET /object-store-roles/object-store-access-policies` | Get-PfbObjectStoreRoleAccessPolicy | allow_errors, context_names, policy_ids, policy_names | -| `GET /object-store-roles/object-store-trust-policies` | Get-PfbObjectStoreTrustPolicy | allow_errors, context_names, names | -| `GET /object-store-roles/object-store-trust-policies/rules` | Get-PfbObjectStoreTrustPolicyRule | allow_errors, context_names, indices, role_ids, role_names | -| `GET /object-store-users` | Get-PfbObjectStoreUser | allow_errors, context_names | -| `GET /object-store-users/object-store-access-policies` | Get-PfbObjectStoreUserAccessPolicy | allow_errors, context_names | -| `GET /object-store-virtual-hosts` | Get-PfbObjectStoreVirtualHost | allow_errors, context_names | -| `GET /policies` | Get-PfbPolicy | allow_errors, context_names, workload_ids, workload_names | -| `GET /policies-all` | Get-PfbPolicyAll | allow_errors, context_names | -| `GET /policies-all/members` | Get-PfbPolicyAllMember | allow_errors, context_names, local_file_system_ids, local_file_system_names, member_types, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names, sort | -| `GET /policies/file-system-replica-links` | Get-PfbPolicyFileSystemReplicaLink | allow_errors, context_names, local_file_system_ids, local_file_system_names, remote_file_system_ids, remote_file_system_names, remote_ids, remote_names, sort | -| `GET /policies/file-system-snapshots` | Get-PfbPolicyFileSystemSnapshot | allow_errors, context_names | -| `GET /policies/file-systems` | Get-PfbPolicyFileSystem | allow_errors, context_names | -| `GET /presets/workload` | Get-PfbPresetWorkload | context_names | -| `GET /public-keys/uses` | Get-PfbPublicKeyUse | ids | -| `GET /qos-policies` | Get-PfbQosPolicy | allow_errors, context_names | -| `GET /qos-policies/buckets` | Get-PfbQosPolicyBucket | allow_errors, context_names, sort | -| `GET /qos-policies/file-systems` | Get-PfbQosPolicyFileSystem | allow_errors, context_names, sort | -| `GET /qos-policies/members` | Get-PfbQosPolicyMember | allow_errors, context_names, member_types, sort | -| `GET /quotas/groups` | Get-PfbQuotaGroup | allow_errors, context_names, file_system_ids, gids, group_names | -| `GET /quotas/users` | Get-PfbQuotaUser | allow_errors, context_names, file_system_ids, uids, user_names | -| `GET /realms` | Get-PfbRealm | allow_errors, context_names | -| `GET /realms/defaults` | Get-PfbRealmDefaults | allow_errors, context_names, realm_ids, realm_names | -| `GET /realms/space` | Get-PfbRealmSpace | end_time, ids, resolution, start_time, total_only, type | -| `GET /realms/space/storage-classes` | Get-PfbRealmStorageClass | end_time, ids, resolution, start_time, storage_class_names, total_only | -| `GET /remote-arrays` | Get-PfbRemoteArray | total_only | -| `GET /roles` | Get-PfbRole | ids | -| `GET /s3-export-policies` | Get-PfbS3ExportPolicy | allow_errors, context_names | -| `GET /s3-export-policies/rules` | Get-PfbS3ExportRule | allow_errors, context_names | -| `GET /servers` | Get-PfbServer | allow_errors, context_names | -| `GET /smb-client-policies` | Get-PfbSmbClientPolicy | allow_errors, context_names, workload_ids, workload_names | -| `GET /smb-client-policies/rules` | Get-PfbSmbClientRule | allow_errors, context_names, ids | -| `GET /smb-share-policies` | Get-PfbSmbSharePolicy | allow_errors, context_names, workload_ids, workload_names | -| `GET /smb-share-policies/rules` | Get-PfbSmbShareRule | allow_errors, context_names, ids | -| `GET /snmp-agents` | Get-PfbSnmpAgent | ids, limit, names, sort | -| `GET /snmp-managers/test` | Test-PfbSnmpManager | filter, limit, sort | -| `GET /software-check` | Get-PfbSoftwareCheck | ids, names, software_names, software_versions, total_item_count | -| `GET /ssh-certificate-authority-policies` | Get-PfbSshCaPolicy | allow_errors, context_names | -| `GET /ssh-certificate-authority-policies/admins` | Get-PfbSshCaPolicyAdmin | allow_errors, context_names, sort | -| `GET /ssh-certificate-authority-policies/arrays` | Get-PfbSshCaPolicyArray | allow_errors, context_names, sort | -| `GET /ssh-certificate-authority-policies/members` | Get-PfbSshCaPolicyMember | allow_errors, context_names, sort | -| `GET /sso/saml2/idps/test` | Test-PfbSaml2Idp | filter, limit, sort | -| `GET /storage-class-tiering-policies/members` | Get-PfbStorageClassTieringPolicyMember | allow_errors, context_names, sort | -| `GET /support` | Get-PfbSupport | ids | -| `GET /syslog-servers` | Get-PfbSyslogServer | allow_errors, context_names | -| `GET /targets` | Get-PfbTarget | allow_errors, context_names | -| `GET /targets/performance/replication` | Get-PfbTargetPerformanceReplication | ids, total_only | -| `GET /tls-policies` | Get-PfbTlsPolicy | effective, purity_defined | -| `GET /tls-policies/members` | Get-PfbTlsPolicyMember | sort | -| `GET /usage/groups` | Get-PfbUsageGroup | allow_errors, context_names, file_system_ids, gids, group_names | -| `GET /usage/users` | Get-PfbUsageUser | allow_errors, context_names, file_system_ids, uids, user_names | -| `GET /workloads` | Get-PfbWorkload | allow_errors, context_names | -| `GET /workloads/placement-recommendations` | Get-PfbWorkloadPlacementRecommendation | allow_errors, context_names | -| `GET /workloads/tags` | Get-PfbWorkloadTag | allow_errors, context_names | -| `GET /worm-data-policies` | Get-PfbWormPolicy | allow_errors, context_names | -| `GET /worm-data-policies/members` | Get-PfbWormPolicyMember | allow_errors, context_names, sort | -| `PATCH /active-directory` | Update-PfbActiveDirectory | ca_certificate, ca_certificate_group, directory_servers, encryption_types, fqdns, global_catalog_servers, join_ou, kerberos_servers, service_principal_names | -| `PATCH /admins` | Update-PfbAdmin | authorization_model, context_names, locked, management_access_policies, old_password, password, public_key, role | -| `PATCH /api-clients` | Update-PfbApiClient | access_policies, access_token_ttl_in_ms, enabled, id, issuer, key_id, max_role, name, public_key | -| `PATCH /array-connections` | Update-PfbArrayConnection | ca_certificate_group, context, context_names, encrypted, id, management_address, os, remote, remote_ids, remote_names, replication_addresses, status, throttle, type, version | -| `PATCH /buckets/audit-filters` | Update-PfbBucketAuditFilter | actions, bucket_ids, bucket_names, context_names, names, s3_prefixes | -| `PATCH /certificates` | Update-PfbCertificate | certificate, certificate_type, common_name, country, days, email, generate_new_key, id, intermediate_certificate, issued_by, issued_to, key_algorithm, key_size, locality, name, organization, organizational_unit, passphrase, private_key, realms, state, status, subject_alternative_names, valid_from, valid_to | -| `PATCH /directory-services/roles` | Update-PfbDirectoryServiceRole | group, group_base, id, management_access_policies, name, role, role_ids, role_names | -| `PATCH /dns` | Update-PfbDns | ca_certificate, ca_certificate_group, context, context_names, id, ids, name, names, realms, services, sources | -| `PATCH /file-system-exports` | Update-PfbFileSystemExport | context, context_names, enabled, export_name, id, member, name, policy, policy_type, server, share_policy, status | -| `PATCH /fleets` | Update-PfbFleet | name | -| `PATCH /hardware` | Update-PfbHardware | data_mac, details, id, identify_enabled, index, management_mac, model, name, part_number, sensor_readings, serial, slot, speed, status, temperature, type | -| `PATCH /hardware-connectors` | Update-PfbHardwareConnector | connector_type, id, lane_speed, lanes_per_port, name, port_count, port_speed, transceiver_type | -| `PATCH /kmip` | Update-PfbKmip | ca_certificate, ca_certificate_group, id, name, uris | -| `PATCH /legal-holds` | Update-PfbLegalHold | description, id, name, realms | -| `PATCH /legal-holds/held-entities` | Update-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, paths, recursive, released | -| `PATCH /lifecycle-rules` | Update-PfbLifecycleRule | abort_incomplete_multipart_uploads_after, bucket_ids, bucket_names, confirm_date, context_names, enabled, keep_current_version_for, keep_current_version_until, keep_previous_version_for, prefix | -| `PATCH /link-aggregation-groups` | Update-PfbLag | add_ports, ports, remove_ports | -| `PATCH /log-targets/file-systems` | Update-PfbLogTargetFileSystem | context_names, file_system, id, keep_for, keep_size, name | -| `PATCH /log-targets/object-store` | Update-PfbLogTargetObjectStore | bucket, context_names, id, log_name_prefix, log_rotate, name | -| `PATCH /logs-async` | Update-PfbAsyncLog | available_files, end_time, hardware_components, id, last_request_time, name, processing, progress, start_time | -| `PATCH /management-access-policies` | Update-PfbManagementAccessPolicy | aggregation_strategy, context, context_names, enabled, id, is_local, location, name, policy_type, realms, rules, version | -| `PATCH /network-interfaces` | Update-PfbNetworkInterface | attached_servers, server, services | -| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | connector_type, id, lane_speed, lanes_per_port, name, port_count, port_speed, transceiver_type | -| `PATCH /node-groups` | Update-PfbNodeGroup | name | -| `PATCH /nodes` | Update-PfbNode | capacity, chassis_serial_number, data_addresses, details, id, management_address, name, node_key, raw_capacity, serial_number, status, unique | -| `PATCH /object-store-account-exports` | Update-PfbObjectStoreAccountExport | context_names, export_enabled, policy | -| `PATCH /object-store-remote-credentials` | Update-PfbObjectStoreRemoteCredential | access_key_id, context, context_names, id, name, realms, remote, secret_access_key | -| `PATCH /object-store-roles` | Update-PfbObjectStoreRole | account, context, context_names, created, id, max_session_duration, name, prn, trusted_entities | -| `PATCH /object-store-virtual-hosts` | Update-PfbObjectStoreVirtualHost | add_attached_servers, attached_servers, context_names, hostname, id, name, remove_attached_servers | -| `PATCH /qos-policies` | Update-PfbQosPolicy | context, context_names, enabled, id, is_local, location, max_total_bytes_per_sec, max_total_ops_per_sec, name, policy_type, realms | -| `PATCH /realms/defaults` | Update-PfbRealmDefaults | context, context_names, object_store, realm, realm_ids, realm_names | -| `PATCH /snmp-managers` | Update-PfbSnmpManager | host, id, name, notification, v2c, v3, version | -| `PATCH /ssh-certificate-authority-policies` | Update-PfbSshCaPolicy | context, enabled, id, is_local, location, name, policy_type, realms, signing_authority, static_authorized_principals | -| `PATCH /sso/oidc/idps` | Update-PfbOidcIdp | enabled, idp, name, prn, services | -| `PATCH /sso/saml2/idps` | Update-PfbSaml2Idp | array_url, binding, enabled, id, idp, management, name, prn, services, sp | -| `PATCH /storage-class-tiering-policies` | Update-PfbStorageClassTieringPolicy | archival_rules, enabled, id, is_local, location, name, policy_type, realms, retrieval_rules | -| `PATCH /subnets` | Update-PfbSubnet | enabled, id, interfaces, link_aggregation_group, name, services, vlan | -| `PATCH /syslog-servers` | Update-PfbSyslogServer | services, sources, uri | -| `PATCH /targets` | Update-PfbTarget | address, ca_certificate_group, id, name, status, status_details | -| `PATCH /tls-policies` | Update-PfbTlsPolicy | appliance_certificate, client_certificates_required, disabled_tls_ciphers, enabled, enabled_tls_ciphers, id, is_local, location, min_tls_version, name, policy_type, realms, trusted_client_certificate_authority, verify_client_certificate_trust | -| `PATCH /worm-data-policies` | Update-PfbWormPolicy | context, context_names, default_retention, enabled, id, is_local, location, max_retention, min_retention, mode, name, policy_type, realms, retention_lock | -| `POST /admins/api-tokens` | New-PfbApiToken | admin_ids, admin_names, context_names, timeout | -| `POST /admins/management-access-policies` | New-PfbAdminManagementAccessPolicy | context_names | -| `POST /admins/ssh-certificate-authority-policies` | New-PfbAdminSshCaPolicy | context_names | -| `POST /array-connections` | New-PfbArrayConnection | ca_certificate_group, context, context_names, encrypted, id, os, remote, status, throttle, type, version | -| `POST /arrays/ssh-certificate-authority-policies` | New-PfbArraySshCaPolicy | context_names | -| `POST /audit-file-systems-policies/members` | New-PfbAuditFileSystemPolicyMember | context_names | -| `POST /audit-object-store-policies/members` | New-PfbAuditObjectStorePolicyMember | context_names | -| `POST /certificates/certificate-groups` | New-PfbCertificateCertificateGroup | certificate_group_ids, certificate_ids | -| `POST /data-eviction-policies/file-systems` | Add-PfbDataEvictionPolicyFileSystem | context_names | -| `POST /file-system-replica-links/policies` | New-PfbFileSystemReplicaLinkPolicy | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | -| `POST /file-systems/audit-policies` | New-PfbFileSystemAuditPolicy | context_names | -| `POST /file-systems/policies` | New-PfbFileSystemPolicy | context_names | -| `POST /fleets/members` | New-PfbFleetMember | fleet_ids, members | -| `POST /legal-holds/held-entities` | New-PfbLegalHoldEntity | file_system_ids, file_system_names, ids, names, paths, recursive | -| `POST /management-access-policies/admins` | New-PfbManagementAccessPolicyAdmin | context_names | -| `POST /network-access-policies/rules` | New-PfbNetworkAccessRule | before_rule_id, before_rule_name, client, effect, id, index, interfaces, name, versions | -| `POST /network-interfaces/tls-policies` | New-PfbNetworkInterfaceTlsPolicy | member_ids, policy_ids | -| `POST /nfs-export-policies/rules` | New-PfbNfsExportRule | access, anongid, anonuid, atime, before_rule_id, before_rule_name, client, context, context_names, fileid_32bit, id, index, name, permission, policy, policy_version, required_transport_security, secure, security, versions | -| `POST /node-groups/nodes` | New-PfbNodeGroupNode | node_group_ids, node_group_names, node_ids, node_names | -| `POST /policies/file-system-replica-links` | New-PfbPolicyFileSystemReplicaLink | context_names, local_file_system_ids, local_file_system_names, remote_ids, remote_names | -| `POST /policies/file-systems` | New-PfbPolicyFileSystem | context_names | -| `POST /qos-policies/members` | New-PfbQosPolicyMember | context_names, member_types | -| `POST /s3-export-policies/rules` | New-PfbS3ExportRule | actions, context_names, effect, names, resources | -| `POST /smb-client-policies/rules` | New-PfbSmbClientRule | before_rule_id, before_rule_name, client, context_names, encryption, id, index, name, permission, versions | -| `POST /smb-share-policies/rules` | New-PfbSmbShareRule | change, context_names, full_control, id, name, principal, read | -| `POST /ssh-certificate-authority-policies/admins` | New-PfbSshCaPolicyAdmin | context_names | -| `POST /ssh-certificate-authority-policies/arrays` | New-PfbSshCaPolicyArray | context_names | - diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index 8f49bdd..24b5530 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -348,6 +348,48 @@ Describe 'Build-PfbApiDriftReport -SinceVersion filter' -Skip:($PSVersionTable.P } } +Describe 'Build-PfbApiDriftReport determinism (Task 8: end-to-end round-trip, same inputs, two separate output paths, byte-identical)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + # Existing coverage elsewhere in this file only asserts "no timestamp fields" (see the + # non-deterministic-content test above) and, inside tools/lib/PfbApiDriftTools.ps1 itself, + # alphabetical-ordering guarantees on individual collections (Sort-Object on + # MissingQueryParameters/MissingBodyProperties/ReadOnlyFields -- see that file's own + # load-bearing comment on why: Dictionary/PSCustomObject property enumeration order is not + # guaranteed stable run-to-run, and two Hashtable-staged candidate sets were once observed to + # reorder purely from .NET's per-process-randomized string hash codes). Neither is an + # end-to-end test: nothing here has ever run the FULL builder script twice against IDENTICAL + # inputs and diffed the two written files byte-for-byte. That gap matters more now than it did + # before this task: Tasks 4-7 added three entirely new collections (systemicGaps, + # conventionStrength, plus per-row confidence/annotations) since the last such check would have + # been meaningful, and the weekly CI workflow (update-api-capability-map.yml) opens a PR on ANY + # diff in the committed Reports/ output -- a single non-deterministic field anywhere in the + # manifest would make that job spuriously fire on every run, forever, even with zero real API + # drift. + BeforeAll { + $script:detOutputA = Join-Path $TestDrive 'determinism/runA/report.json' + $script:detReportA = Join-Path $TestDrive 'determinism/runA/report.md' + $script:detOutputB = Join-Path $TestDrive 'determinism/runB/report.json' + $script:detReportB = Join-Path $TestDrive 'determinism/runB/report.md' + & $builderScript -SpecsDirectory $specsDir -PublicDirectory $publicDir -PrivateDirectory $privateDir ` + -CapabilityMapPath $capabilityMapPath -FieldCmdletMapPath $fieldCmdletMapPath ` + -OutputPath $detOutputA -ReportPath $detReportA + & $builderScript -SpecsDirectory $specsDir -PublicDirectory $publicDir -PrivateDirectory $privateDir ` + -CapabilityMapPath $capabilityMapPath -FieldCmdletMapPath $fieldCmdletMapPath ` + -OutputPath $detOutputB -ReportPath $detReportB + } + + It 'produces a byte-identical JSON manifest across two independent runs against the same inputs' { + $hashA = (Get-FileHash -Path $detOutputA -Algorithm SHA256).Hash + $hashB = (Get-FileHash -Path $detOutputB -Algorithm SHA256).Hash + $hashA | Should -Be $hashB + } + + It 'produces a byte-identical Markdown report across two independent runs against the same inputs' { + $hashA = (Get-FileHash -Path $detReportA -Algorithm SHA256).Hash + $hashB = (Get-FileHash -Path $detReportB -Algorithm SHA256).Hash + $hashA | Should -Be $hashB + } +} + Describe 'Build-PfbApiDriftReport (real generated artifacts, skips gracefully if absent)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { BeforeAll { $script:realCapabilityMapPath = Join-Path $repoRoot 'Data/PfbCapabilityMap.json' @@ -416,6 +458,219 @@ Describe 'Build-PfbApiDriftReport (real generated artifacts, skips gracefully if } } +Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks against the real generated report, skips gracefully if absent)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { + BeforeAll { + $script:t8CapabilityMapPath = Join-Path $repoRoot 'Data/PfbCapabilityMap.json' + $script:t8FieldCmdletMapPath = Join-Path $repoRoot 'Reports/PfbFieldCmdletMap.json' + $script:t8SpecsDir = Join-Path $repoRoot 'tools/specs' + $script:t8HasRealArtifacts = (Test-Path $t8CapabilityMapPath) -and (Test-Path $t8FieldCmdletMapPath) -and + (Test-Path $t8SpecsDir) -and (Get-ChildItem $t8SpecsDir -Filter 'fb*.json' -ErrorAction SilentlyContinue) + + if ($t8HasRealArtifacts) { + $script:t8Output = Join-Path $TestDrive 't8output/report.json' + $script:t8Report = Join-Path $TestDrive 't8output/report.md' + & $builderScript -SpecsDirectory $t8SpecsDir -PublicDirectory (Join-Path $repoRoot 'Public') -PrivateDirectory (Join-Path $repoRoot 'Private') ` + -CapabilityMapPath $t8CapabilityMapPath -FieldCmdletMapPath $t8FieldCmdletMapPath ` + -OutputPath $t8Output -ReportPath $t8Report + $script:t8Manifest = Get-Content -Path $t8Output -Raw | ConvertFrom-Json -Depth 20 + } + + function Get-T8GapFieldNames { + param($Gap) + @($Gap.missingBodyProperties | ForEach-Object { if ($_ -is [string]) { $_ } else { $_.name } }) + } + } + + # PLAN DEFECT #1 correction (see .superpowers/sdd/drift-report-actionable-plan/progress.md): + # the task-8 brief originally listed 13 canaries, but PATCH /certificates|{id,name} are + # confirmed phantoms (readOnly 2.0-2.19, removed entirely 2.20+, never actually settable) -- + # they must NOT be asserted as actionable. Only 11 of the brief's 13 listed (endpoint, field) + # pairs are real, confirmed regressions against first-sight readOnly semantics. + It 'Task 8 canaries: 11 confirmed (endpoint, field) pairs remain actionable body gaps, since first-sight readOnly semantics would have wrongly suppressed all 11' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $canaries = @( + @{ Endpoint = 'PATCH /api-clients'; Field = 'max_role' } + @{ Endpoint = 'PATCH /tls-policies'; Field = 'name' } + @{ Endpoint = 'PATCH /storage-class-tiering-policies'; Field = 'name' } + @{ Endpoint = 'PATCH /dns'; Field = 'name' } + @{ Endpoint = 'PATCH /ssh-certificate-authority-policies'; Field = 'name' } + @{ Endpoint = 'PATCH /ssh-certificate-authority-policies'; Field = 'location' } + @{ Endpoint = 'PATCH /targets'; Field = 'ca_certificate_group' } + @{ Endpoint = 'PATCH /array-connections'; Field = 'ca_certificate_group' } + @{ Endpoint = 'POST /array-connections'; Field = 'ca_certificate_group' } + @{ Endpoint = 'PATCH /hardware-connectors'; Field = 'port_speed' } + @{ Endpoint = 'PATCH /network-interfaces/connectors'; Field = 'port_speed' } + ) + foreach ($c in $canaries) { + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq $c.Endpoint } + $gap | Should -Not -BeNullOrEmpty -Because "$($c.Endpoint) must have a parameter-gap row" + (Get-T8GapFieldNames -Gap $gap) | Should -Contain $c.Field -Because "$($c.Endpoint)|$($c.Field) is a regression canary" + } + } + + It 'Task 8 canary correction: PATCH /certificates|{id,name} are phantoms -- NOT actionable body gaps, NOT read-only fields, absent from the endpoint''s row entirely' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /certificates' } + $gap | Should -Not -BeNullOrEmpty + (Get-T8GapFieldNames -Gap $gap) | Should -Not -Contain 'id' + (Get-T8GapFieldNames -Gap $gap) | Should -Not -Contain 'name' + $gap.readOnlyFields | Should -Not -Contain 'id' + $gap.readOnlyFields | Should -Not -Contain 'name' + } + + It 'Task 8 spot-check: all five policy-family PATCH endpoints list is_local and policy_type as read-only' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + foreach ($ep in @('PATCH /worm-data-policies', 'PATCH /qos-policies', 'PATCH /ssh-certificate-authority-policies', 'PATCH /storage-class-tiering-policies', 'PATCH /tls-policies')) { + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq $ep } + $gap | Should -Not -BeNullOrEmpty -Because "$ep must have a parameter-gap row" + $gap.readOnlyFields | Should -Contain 'is_local' -Because "$ep|is_local" + $gap.readOnlyFields | Should -Contain 'policy_type' -Because "$ep|policy_type" + } + } + + It 'Task 8 spot-check: PATCH /certificates / generate_new_key appears as a query-parameter gap' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /certificates' } + $gap.missingQueryParameters | Should -Contain 'generate_new_key' + } + + It 'Task 8 spot-check: PATCH /directory-services/roles / management_access_policies is read-only' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /directory-services/roles' } + $gap.readOnlyFields | Should -Contain 'management_access_policies' + } + + It 'Task 8 spot-check: PATCH /management-access-policies read-only set is exactly context, id, is_local, policy_type, realms, version' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /management-access-policies' } + (@($gap.readOnlyFields) | Sort-Object) | Should -Be @('context', 'id', 'is_local', 'policy_type', 'realms', 'version') + } + + It 'Task 8 correction: Update-PfbFileSystemExport''s genuinely read-only set is context, enabled, id, name, policy_type, status -- member/server are settable' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /file-system-exports' } + (@($gap.readOnlyFields) | Sort-Object) | Should -Be @('context', 'enabled', 'id', 'name', 'policy_type', 'status') + $gap.readOnlyFields | Should -Not -Contain 'member' + $gap.readOnlyFields | Should -Not -Contain 'server' + } + + It 'Task 8 correction: Update-PfbCertificate''s read-only set includes realms, beyond the five originally named' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /certificates' } + $gap.readOnlyFields | Should -Contain 'realms' + } + + Context '"Nothing vanishes" invariant: every capability-map candidate field lands in exactly one of reported/phantom-excluded' { + # Every query parameter and body property Data/PfbCapabilityMap.json lists for an + # endpoint an existing cmdlet calls, that isn't already exposed as a Typed parameter and + # isn't one of the non-actionable placeholder fields (X-Request-ID/continuation_token/ + # offset -- see Get-PfbNonActionableParameters, a documented, deliberate exclusion + # unrelated to phantom detection), must land in EXACTLY ONE of: the real report's + # missingQueryParameters/missingBodyProperties (addable)/readOnlyFields, or the + # phantom-exclusion set (absent from the newest analysed spec). Verified arithmetically + # over (endpoint, list, field) triples -- never bare field names, since a field name can + # repeat across more than one endpoint's row -- using the SAME phantom-diffing technique + # tools/Build-PfbApiDriftReport.ps1 itself already uses (a second + # Get-PfbParameterCoverageGaps call without -CurrentSpecCapabilities), never a + # re-derivation of the phantom-detection logic. + BeforeAll { + if ($t8HasRealArtifacts) { + . (Join-Path $repoRoot 'tools/lib/PfbSpecTools.ps1') + . (Join-Path $repoRoot 'tools/lib/PfbValueEnumTools.ps1') + . (Join-Path $repoRoot 'tools/lib/PfbCmdletParamTools.ps1') + . (Join-Path $repoRoot 'tools/lib/PfbApiDriftTools.ps1') + $script:t8Inventory = Get-PfbCmdletParameterInventory -PublicDirectory (Join-Path $repoRoot 'Public') + $script:t8CalledEndpoints = Get-PfbModuleCalledEndpoints -PublicDirectory (Join-Path $repoRoot 'Public') -PrivateDirectory (Join-Path $repoRoot 'Private') + $script:t8CapMap = Get-Content -Path $t8CapabilityMapPath -Raw | ConvertFrom-Json -Depth 20 + $script:t8NonActionable = Get-PfbNonActionableParameters -PrivateDirectory (Join-Path $repoRoot 'Private') + + $newestAnalysedVersion8 = $t8CapMap.generatedFrom | Select-Object -Last 1 + $newestSpecPath8 = Join-Path $t8SpecsDir "fb$newestAnalysedVersion8.json" + $newestSpec8 = Get-Content -Path $newestSpecPath8 -Raw | ConvertFrom-Json -Depth 64 + $script:t8CurrentSpecCapabilities = @(Get-PfbSpecCapabilities -Spec $newestSpec8) + + function Get-T8TripleSet { + param([object[]]$Gaps) + $set = [System.Collections.Generic.HashSet[string]]::new() + foreach ($g in $Gaps) { + foreach ($f in @($g.MissingQueryParameters)) { [void]$set.Add("$($g.Endpoint)|query|$f") } + foreach ($f in @($g.MissingBodyProperties)) { [void]$set.Add("$($g.Endpoint)|body|$f") } + foreach ($f in @($g.ReadOnlyFields)) { [void]$set.Add("$($g.Endpoint)|readOnly|$f") } + } + return $set + } + + # Population: every real candidate field (Typed-exposed and non-actionable + # placeholder fields already excluded), BEFORE phantom filtering. + $script:t8PopulationRaw = @(Get-PfbParameterCoverageGaps -CapabilityMap $t8CapMap -CmdletInventory $t8Inventory -CalledEndpoints $t8CalledEndpoints -ExcludedFields $t8NonActionable -CurrentSpecCapabilities @()) + $script:t8PopulationSet = Get-T8TripleSet -Gaps $t8PopulationRaw + + # Reported: the exact same call Build-PfbApiDriftReport.ps1 itself makes. + $script:t8ReportedRaw = @(Get-PfbParameterCoverageGaps -CapabilityMap $t8CapMap -CmdletInventory $t8Inventory -CalledEndpoints $t8CalledEndpoints -ExcludedFields $t8NonActionable -CurrentSpecCapabilities $t8CurrentSpecCapabilities) + $script:t8ReportedSet = Get-T8TripleSet -Gaps $t8ReportedRaw + + $script:t8PhantomExcludedSet = [System.Collections.Generic.HashSet[string]]::new([string[]]@($t8PopulationSet)) + $t8PhantomExcludedSet.ExceptWith([string[]]@($t8ReportedSet)) + } + } + + It 'reported UNION phantom-excluded exactly equals the full candidate population -- nothing missing, nothing extra' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $union = [System.Collections.Generic.HashSet[string]]::new([string[]]@($t8ReportedSet)) + $union.UnionWith([string[]]@($t8PhantomExcludedSet)) + $missingFromUnion = [System.Collections.Generic.HashSet[string]]::new([string[]]@($t8PopulationSet)) + $missingFromUnion.ExceptWith([string[]]@($union)) + $extraInUnion = [System.Collections.Generic.HashSet[string]]::new([string[]]@($union)) + $extraInUnion.ExceptWith([string[]]@($t8PopulationSet)) + $missingFromUnion.Count | Should -Be 0 + $extraInUnion.Count | Should -Be 0 + } + + It 'reported and phantom-excluded are disjoint -- no (endpoint, list, field) triple lands in both buckets' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $overlap = [System.Collections.Generic.HashSet[string]]::new([string[]]@($t8ReportedSet)) + $overlap.IntersectWith([string[]]@($t8PhantomExcludedSet)) + $overlap.Count | Should -Be 0 + } + + It 'the phantom-excluded count matches the real manifest''s phantomFieldCount exactly (34, full population)' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $t8PhantomExcludedSet.Count | Should -Be $t8Manifest.phantomFieldCount + $t8PhantomExcludedSet.Count | Should -Be 34 + } + + It 'restricting the same diff to high-confidence-only gaps reproduces the doc-comment-pinned 13' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $populationHigh = @($t8PopulationRaw | Where-Object { $_.Confidence.Level -eq 'high' }) + $reportedHigh = @($t8ReportedRaw | Where-Object { $_.Confidence.Level -eq 'high' }) + $populationHighSet = Get-T8TripleSet -Gaps $populationHigh + $reportedHighSet = Get-T8TripleSet -Gaps $reportedHigh + $phantomHighSet = [System.Collections.Generic.HashSet[string]]::new([string[]]@($populationHighSet)) + $phantomHighSet.ExceptWith([string[]]@($reportedHighSet)) + $phantomHighSet.Count | Should -Be 13 + } + + It 'the in-memory reported set matches the real committed Reports/PfbApiDriftReport.json on disk exactly (no serialization-only divergence)' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $committedReportPath = Join-Path $repoRoot 'Reports/PfbApiDriftReport.json' + if (-not (Test-Path $committedReportPath)) { Set-ItResult -Skipped -Because 'Reports/PfbApiDriftReport.json not present locally'; return } + $committedManifest = Get-Content -Path $committedReportPath -Raw | ConvertFrom-Json -Depth 20 + $committedTripleSet = [System.Collections.Generic.HashSet[string]]::new() + foreach ($g in $committedManifest.parameterGaps) { + foreach ($f in @($g.missingQueryParameters)) { [void]$committedTripleSet.Add("$($g.endpoint)|query|$f") } + foreach ($f in @($g.missingBodyProperties)) { + $name = if ($f -is [string]) { $f } else { $f.name } + [void]$committedTripleSet.Add("$($g.endpoint)|body|$name") + } + foreach ($f in @($g.readOnlyFields)) { [void]$committedTripleSet.Add("$($g.endpoint)|readOnly|$f") } + } + $diff = [System.Collections.Generic.HashSet[string]]::new([string[]]@($t8ReportedSet)) + $diff.SymmetricExceptWith([string[]]@($committedTripleSet)) + $diff.Count | Should -Be 0 + } + } +} + Describe 'Build-PfbApiDriftReport (Task 7: systemic gaps, convention strength, phantom-field count, generatedFrom split -- own small fixture)' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { BeforeAll { $script:t7FixtureRoot = Join-Path $TestDrive 't7fixture' diff --git a/tools/README.md b/tools/README.md index 97b72dc..00203c6 100644 --- a/tools/README.md +++ b/tools/README.md @@ -224,6 +224,150 @@ Run in this order: picked as the one target, deterministically -- a human should still check for sibling cmdlets on the same endpoint. + **`analysedVersions` / `availableSpecVersions` / `versionDivergenceWarning` -- the + `generatedFrom` split.** The manifest never emits one ambiguous `generatedFrom` key. + `analysedVersions` is `Data/PfbCapabilityMap.json`'s own `generatedFrom` -- the version set + every gap/phantom-field/systemic-gap/convention-strength category below is actually scoped + against. `availableSpecVersions` is whatever `tools/specs/` has cached on disk right now, + which Task 5's enum join and category 3 (ValidateSet drift) DO read fresher-than-analysed + data from (see `Get-PfbValueEnumHistory`'s `$historyResult`). These two normally move + together, which is why keeping them as one key was invisible as a problem for a long time -- + but they are independent inputs that drift the moment specs are refreshed + (`Update-PfbApiSpecs.ps1`) without also rebuilding the capability map + (`Build-PfbCapabilityMap.ps1`): as of this writing, `tools/specs/` is cached through 2.28 while + `Data/PfbCapabilityMap.json` is deliberately still pinned at 2.27 (see item 2's `-MaxVersion` + note above for why that pin is deliberate). `versionDivergenceWarning` is a non-`$null` string + exactly when the two sets disagree, never silently absent -- read it before trusting any other + category in the manifest at face value. (This is the same "validated against whatever spec + happens to be on disk, not against the analysed set" root cause behind the one known, + persistent failure in `Tests/Build-PfbValueEnumMap.Tests.ps1` -- see "Tests" below.) + + **`confidence` and the norm reversal it represents (decision 5).** Every endpoint's gap + lists are *always* computed now -- there is no longer an all-or-nothing gate that discards an + endpoint's real gaps just because one parameter on it has an unresolved surface. This reverses + an earlier, more conservative design, and the reversal is deliberate, not an oversight: + - **The old design.** A `$fullyMapped` gate suppressed an endpoint's entire gap computation + the moment any cmdlet calling it had a parameter whose `Surface` was `AttributesOnly` or + `TypedUnresolved` (i.e. not cleanly `Typed`), routing the endpoint into a `notVerified` + bucket instead -- a bare count in the report's summary, with no detail table anywhere. The + reasoning was sound on its face: such a parameter *might* already cover the apparent gap + through a path this AST-only inventory cannot see, so reporting it outright risked a false + positive. + - **Why it was reversed.** Measured against the real module, roughly 70% of the endpoints + landing in `notVerified` turned out to be tool blindness -- real, fixable parser gaps, not + genuine ambiguity -- and the failure mode was silence: a reader had no way to know what, or + even which endpoints, might be missing something, because `notVerified` carried no detail. + - **The new design.** `notVerified`/`$fullyMapped` no longer exist anywhere in the output + shape. Every endpoint's `MissingQueryParameters`/`MissingBodyProperties`/`ReadOnlyFields` are + always populated. The uncertainty an `AttributesOnly`/`TypedUnresolved` parameter introduces + is instead carried per-endpoint as `confidence`: `{ level: 'high'|'partial', + unresolvedParameters: [{parameter, surface, file, line}], escapeHatchOnly: [...], caveat }`. + `level` is `'high'` iff `unresolvedParameters` is empty. A `'partial'` endpoint's gap lists + can still contain false positives from this same mechanism -- that risk did not go away -- + but they are never silently emptied because of it. The reader gets the field name **and** a + `file:line` to check it themselves (see the false-positive procedure immediately below). + - **What did NOT change.** `Build-PfbFieldCmdletMap.ps1`'s own `attributesOnly`/ + `typedUnresolved` report buckets (see "Field-to-cmdlet mapping" below) are a different norm + answering a different question -- "should this parameter become a `ValidateSet` or + `ArgumentCompleter`" is a categorically different judgment call than "does this endpoint have + an addable gap" -- and remain genuinely "reported, not resolved, requires a human decision." + That norm is not reversed by this change. + + **The false-positive resolution procedure (decision 6).** This report accepts **false + positives in order to eliminate false negatives**. A field is listed as missing even though + the module can already set it, when a parameter covering it could not be traced to a wire + name. Detection is only possible where `confidence.level` is `'partial'`; a `'high'`-confidence + row carries no false-positive risk from this mechanism. Reproduced here verbatim from the + generated Markdown's own "How to read this report" section (see + `tools/Build-PfbApiDriftReport.ps1`) because `tools/README.md` is a standalone reference a + maintainer may read without a generated report open: + 1. Open the named parameter at the given `file:line` and follow where its value goes. + 2. If it reaches the wire under the same name as the reported gap -> the gap is a false + positive AND a tooling bug: the parser does not recognise that idiom. File it as a parser + gap and fix the parser. + 3. If it reaches the wire under a different name -> the reported gap may still be real; check + that field against the spec. + 4. If it never reaches the wire -> the gap is real. + + A false positive here costs a reader one `file:line` lookup; a false negative costs an + undetected gap indefinitely. Every false positive is a parser-gap detector -- it either fixes + the tool permanently for every endpoint, or confirms a real gap. + + **`systemicGaps` / `conventionStrength` (decisions 7-8).** `systemicGaps` collapses every + *high*-confidence gap into one finding per distinct wire field name (never `'partial'` -- + folding a partial-confidence endpoint's possibly-false-positive gap into a systemic FINDING + would overstate a confidence the endpoint's own row already warns against). Each finding is + `{ name, endpointCount, queryEndpointCount, bodyEndpointCount, endpoints, annotations }` -- + turning hundreds of per-endpoint rows into a handful of real, actionable decisions: e.g. + `context_names` (253 endpoints) and `allow_errors` (109 endpoints) are two decisions, not 362 + findings. `conventionStrength` then ranks each systemic-gap name by how many existing `Public/` + cmdlets already expose it as a `Typed` parameter somewhere in the module (`Get-PfbConventionStrength`), + sorted by that count descending: a high count (`names` at 306 cmdlets) means closing the + remaining gaps for that name is a mechanical batch fix; a count of zero (`context_names`, 0 -- + no cmdlet anywhere in the module has ever exposed this name as a `Typed` parameter) means no + established convention exists to extend at all, and closing it is an architectural decision, + not a mechanical one. Both keys read `docs/drift-annotations.json` (via + `Get-PfbDriftAnnotations`/`Find-PfbDriftAnnotation`) for recorded design decisions, prior + conclusions, or live-testing hazards matched by field name (`systemicGaps[].annotations`) or by + endpoint (`parameterGaps[].annotations`) -- the file is optional; its absence degrades every + lookup to "no annotations" rather than failing report generation. + + **`phantomFieldCount` -- two correct, differently-scoped numbers.** How many `(endpoint, + field)` pairs were silently dropped from every gap/read-only list because the field is + accumulated in the capability map's `parameters`/`bodyProperties` dictionaries but absent from + the newest ANALYSED spec (i.e. withdrawn from the real API after the version that first added + it)? Two numbers are simultaneously correct, because they answer different-population + questions: + - **34**, measured across the FULL population of endpoints an existing cmdlet calls, + regardless of confidence level -- this is what `phantomFieldCount` in + `Reports/PfbApiDriftReport.json` actually reports. + - **13**, measured over ONLY the high-confidence-endpoint subset -- this is the number in + `Get-PfbParameterCoverageGaps`'s own doc comment and this task's real-data acceptance tests. + Do not treat a mismatch between the two as a bug; check which population a given historical + reference is scoped to first. Computed by calling `Get-PfbParameterCoverageGaps` a second time + without `-CurrentSpecCapabilities` (its documented no-op default -- no phantom filtering) and + diffing the resulting `(endpoint, list, field)` triples against the real, phantom-filtered run + -- never a re-derivation of the phantom-detection logic itself. + + **The phantom-field limitation, and why it's documented-only.** `Build-PfbCapabilityMap.ps1` + is first-sight-only for *additions* and never records *removal* -- `parameters`/ + `bodyProperties` accumulate forever across every ingested spec version. A field withdrawn from + the API in a later spec (e.g. `PATCH /certificates|id` and `PATCH /certificates|name`: + read-only in every version 2.0-2.19, removed outright from 2.20 onward -- never writable, so + they are phantoms, not settable fields) still lingers in `Data/PfbCapabilityMap.json`'s own + `bodyProperties` dictionary indefinitely. The drift report's phantom-field filtering (this + section, and `Get-PfbParameterCoverageGaps -CurrentSpecCapabilities`) excludes these from every + gap/read-only list in the REPORT by cross-checking against the single newest analysed spec, but + the capability map itself never gets this correction -- it is a fundamentally different kind of + claim ("this field was ever seen" vs. "this field currently exists") and rebuilding the map to + track removal is out of scope for this effort. There is deliberately no `removedFields` + category anywhere in this toolchain. + + **`readOnlyFields` reflects the newest ANALYSED spec, not the accumulated/historical one -- + same reason as `Data/PfbCapabilityMap.json`'s own `readOnlyBodyProperties` (item 2 above).** + `readOnly` is not monotonic: a field can go from read-only to writable across versions (roughly + half the real flips in fb2.0-2.27 do exactly that), so first-sight semantics would wrongly + suppress a field that is genuinely settable today. Both the capability map's own + `readOnlyBodyProperties` and this report's `readOnlyFields` are last-seen-wins for the same + reason: spec text moves, and treating a field's *oldest* seen annotation as authoritative would + misreport its *current* state. + + **The REST 2.17 cliff -- a spec-authoring event, not API evolution.** Naively grepping every + cached spec for raw `"readOnly": true` annotation counts shows an apparent cliff at 2.17: 1091 + sites at 2.16, 408 at 2.17 -- a 63% drop that would lead a careless reader to conclude the API + lost read-only enforcement on hundreds of fields in one release. **It did not.** The real cause + is a `$ref` consolidation: named component (`$ref`) sites jump 10.5x in the same release (385 at + 2.16 -> 4038 at 2.17) -- duplicated inline `readOnly` annotations were consolidated into shared, + referenced components, so one annotation site now serves many endpoints instead of being + repeated inline at each one. Measured on *resolved* (endpoint, field) pairs -- the number that + actually matters -- read-only coverage did not fall across this transition, it **rose**: 219 + pairs at 2.16 to 262 at 2.17. Nothing was un-read-onlied. **This is a trap for whoever later + builds a `-SinceVersion`-style "since version X" delta feature over `readOnly`/`deprecated` + transitions**: a transition-count metric computed from raw annotation sites, or from anything + upstream of `$ref` resolution, will misread this release as instability that never happened. + Use resolved (endpoint, field) pairs (`Get-PfbSchemaPropertyDetails`'s own single resolving + walker, decision 3) for any future metric here, never a raw annotation-site count. + ## What's deliberately NOT in the capability map The FlashBlade OpenAPI spec has no structural JSON Schema `enum` anywhere — verified From 8e3635f67992efa47972a713d5418bd285d13709 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 09:39:59 -0700 Subject: [PATCH 14/17] chore(tools): final pre-merge cleanup pass -- fix 9 minor review findings Doc/test-only fixes from the final whole-branch review of the API-drift-report plan, zero behavior change: - correct stale "252" to "253" in Get-PfbSystemicGaps's comment-based help - hoist $enrichmentSpec into the file-level BeforeAll in PfbApiDriftTools.Tests.ps1 so the Get-PfbBodyPropertyEnrichment tests pass under a filtered/reordered Pester run, not just the full suite - escape the annotation match string before using it in Find-PfbDriftAnnotation's -like lookup, so a future match value containing */?/[ is treated literally - name the one known, persistent Build-PfbValueEnumMap.Tests.ps1 failure (and its fb2.28-cache-vs-2.27-pin cause) directly in tools/README.md's Tests section instead of a dangling forward reference - soften the versionDivergenceWarning wording so it reads as an expected consequence of the deliberate spec pin, not an imperative to fix a bug; regenerate Reports/PfbApiDriftReport.{json,md} for real (diff confirms only the warning text changed, no pinned figures moved) - add a test that the internal _currentParamComponents/_currentParamsWithoutComponent bookkeeping keys never leak into the serialized capability map - add -SinceVersion tests for the body-property/read-only side of Get-PfbParameterCoverageGaps, mirroring the existing query-side tests - document the silent index/literal tiebreak in Get-PfbCmdletBodyInsertionTarget (comment-only) - assert decision-6 procedure step 3 in the "How to read this report" Markdown test, alongside the existing steps 1/2/4 assertions Every new/changed test was mutation-tested (break the invariant, confirm the specific test fails, then restore). Full suite: 632 passed, 1 pre-existing failure (Build-PfbValueEnumMap.Tests.ps1's fb2.28-cache issue, unrelated to this plan), no new failures. Co-Authored-By: Claude Sonnet 5 --- Reports/PfbApiDriftReport.json | 2 +- Reports/PfbApiDriftReport.md | 2 +- Tests/Build-PfbApiDriftReport.Tests.ps1 | 2 + Tests/Build-PfbCapabilityMap.Tests.ps1 | 16 +++ Tests/PfbApiDriftTools.Tests.ps1 | 131 ++++++++++++++++++++---- tools/Build-PfbApiDriftReport.ps1 | 2 +- tools/README.md | 10 ++ tools/lib/PfbApiDriftTools.ps1 | 7 +- tools/lib/PfbCmdletParamTools.ps1 | 8 ++ 9 files changed, 154 insertions(+), 26 deletions(-) diff --git a/Reports/PfbApiDriftReport.json b/Reports/PfbApiDriftReport.json index 86d9ee8..e416217 100644 --- a/Reports/PfbApiDriftReport.json +++ b/Reports/PfbApiDriftReport.json @@ -61,7 +61,7 @@ "2.27", "2.28" ], - "versionDivergenceWarning": "analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set.", + "versionDivergenceWarning": "analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- this is expected while Data/PfbCapabilityMap.json is deliberately pinned to a specific REST version; rebuild it (tools/Build-PfbCapabilityMap.ps1) only when intentionally adopting the newer spec. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set.", "sinceVersion": null, "phantomFieldCount": 34, "uncoveredEndpoints": [ diff --git a/Reports/PfbApiDriftReport.md b/Reports/PfbApiDriftReport.md index e53c4c0..5c60159 100644 --- a/Reports/PfbApiDriftReport.md +++ b/Reports/PfbApiDriftReport.md @@ -4,7 +4,7 @@ Generated by `tools/Build-PfbApiDriftReport.ps1` (28 analysed REST versions; 29 Reporting only -- no `Public/` cmdlet is edited by this script. -**Warning:** analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set. +**Warning:** analysedVersions (28 versions, through 2.27) and availableSpecVersions (29 versions, through 2.28) disagree -- this is expected while Data/PfbCapabilityMap.json is deliberately pinned to a specific REST version; rebuild it (tools/Build-PfbCapabilityMap.ps1) only when intentionally adopting the newer spec. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set. ## How to read this report diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index 24b5530..997b854 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -840,6 +840,8 @@ function Get-PfbFixtureGamma { $t7ReportText | Should -Match 'This report accepts \*\*false positives in order to eliminate false negatives\*\*' $t7ReportText | Should -Match 'Open the named parameter at the given `file:line` and follow where its value goes\.' $t7ReportText | Should -Match 'the gap is a false positive AND a tooling bug' + $t7ReportText | Should -Match 'If it reaches the wire under a different name' + $t7ReportText | Should -Match 'the reported gap may still be real; check that field against the spec' $t7ReportText | Should -Match 'If it never reaches the wire' $t7ReportText | Should -Match 'a false positive costs a reader one `file:line` lookup; a false negative costs an undetected gap indefinitely' } diff --git a/Tests/Build-PfbCapabilityMap.Tests.ps1 b/Tests/Build-PfbCapabilityMap.Tests.ps1 index fd0843d..0aa6905 100644 --- a/Tests/Build-PfbCapabilityMap.Tests.ps1 +++ b/Tests/Build-PfbCapabilityMap.Tests.ps1 @@ -424,6 +424,22 @@ Describe 'Build-PfbCapabilityMap: parameterComponentDefaults/Overrides' -Skip:($ ($reconstructed.Keys | Sort-Object) | Should -Be ($pcExpectedPairs.Keys | Sort-Object) -Because 'no additional or missing (endpoint, param) pairs vs. the fixture ground truth' } + It 'never leaves the internal _currentParamComponents/_currentParamsWithoutComponent bookkeeping keys in the final serialized manifest' { + # These two keys are used internally to compute parameterComponentDefaults/ + # Overrides above, then removed before the manifest is written -- this fixture + # exercises exactly that code path (region/sortkey components), so it is a real + # assertion, not a vacuous one. + $pcManifestRaw = Get-Content -Path 'TestDrive:\pcOutput\manifest.json' -Raw + $pcManifestRaw | Should -Not -Match '_currentParamComponents' + $pcManifestRaw | Should -Not -Match '_currentParamsWithoutComponent' + + foreach ($epName in $pcManifest.endpoints.PSObject.Properties.Name) { + $propNames = $pcManifest.endpoints.$epName.PSObject.Properties.Name + $propNames | Should -Not -Contain '_currentParamComponents' + $propNames | Should -Not -Contain '_currentParamsWithoutComponent' + } + } + # Regression for the hashtable .Count-shadowing bug class: 'count' is a REAL # query-parameter name in this API (parameterComponentDefaults.count = 'Ping_count' in # the committed manifest). A key literally named 'count' inside the per-endpoint diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index 3c25d67..bc33025 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -90,6 +90,31 @@ function Invoke-PfbFixtureInternalHelper { $script:driftInventory = @( [PSCustomObject]@{ Cmdlet = 'Get-PfbArrayPerformance'; Parameter = 'Protocol'; Surface = 'Typed'; WireName = 'protocol'; HasValidateSet = $true; ValidateSetValues = @('nfs', 'smb', 'http', 's3'); Endpoint = 'arrays/performance'; Method = 'GET' } ) + + # Hoisted to file scope (not a per-Describe BeforeAll) because it is consumed by TWO + # separate Describe blocks below (the array-item-type/synopsis tests and the + # Get-PfbBodyPropertyEnrichment tests) -- a Describe-local BeforeAll only runs before + # its OWN Describe's tests, so the other Describe block would see a $null + # $enrichmentSpec whenever it runs without the first Describe having already executed + # in the same session (e.g. `-Filter.FullName` isolating just one Describe). + $script:enrichmentSpec = [PSCustomObject]@{ + components = [PSCustomObject]@{ + schemas = [PSCustomObject]@{ + Widget = [PSCustomObject]@{ + type = 'object' + properties = [PSCustomObject]@{ + color = [PSCustomObject]@{ type = 'string'; description = 'The widget color. Valid values are `red`, `blue`, and `green`.' } + count = [PSCustomObject]@{ type = 'integer'; format = 'int64'; description = "Count of widgets available`nin this pool. Additional prose about counting follows here." } + tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ type = 'string' }; description = 'Tag list. Additional prose about tags follows this first sentence.' } + ref_tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ '$ref' = '#/components/schemas/_tagRef' } } + linked = [PSCustomObject]@{ '$ref' = '#/components/schemas/_linkedRef' } + bare = [PSCustomObject]@{ type = 'string' } + } + } + _linkedRef = [PSCustomObject]@{ type = 'string'; description = 'Should never be read directly off Widget.linked (PIN: this function reads only the OWNER schema''s own declared property node, never following the property''s own $ref).' } + } + } + } } Describe 'Get-PfbModuleCalledEndpoints' { @@ -319,6 +344,40 @@ Describe 'Get-PfbParameterCoverageGaps' { } } + Context '-SinceVersion on the BODY/read-only side ($bodyFieldVersions is separate code from the query-side $queryFieldVersions lookup -- mirrors the query-side -SinceVersion tests above)' { + BeforeAll { + $script:bodySinceCapMap = [PSCustomObject]@{ + endpoints = [PSCustomObject]@{ + 'PATCH /since-fixture' = [PSCustomObject]@{ + minVersion = '2.0' + parameters = [PSCustomObject]@{} + bodyProperties = [PSCustomObject]@{ old_field = '2.0'; new_body_field = '2.27'; new_ro_field = '2.27' } + readOnlyBodyProperties = @('new_ro_field') + } + } + } + $script:bodySinceEndpoints = @([PSCustomObject]@{ Key = 'PATCH /since-fixture'; Method = 'PATCH'; Endpoint = '/since-fixture'; Resolved = $true; Cmdlet = 'Update-PfbFixtureSince'; File = 'x' }) + } + + It 'with -SinceVersion, keeps a missing body property AND a read-only field introduced after that version' { + $result = Get-PfbParameterCoverageGaps -CapabilityMap $bodySinceCapMap -CmdletInventory $noopInventory -CalledEndpoints $bodySinceEndpoints -SinceVersion '2.0' + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /since-fixture' } + $gap.MissingBodyProperties | Should -Contain 'new_body_field' + $gap.ReadOnlyFields | Should -Contain 'new_ro_field' + } + + It 'with -SinceVersion, drops a gap whose only missing body/read-only fields were introduced at or before that version' { + $result = Get-PfbParameterCoverageGaps -CapabilityMap $bodySinceCapMap -CmdletInventory $noopInventory -CalledEndpoints $bodySinceEndpoints -SinceVersion '2.27' + $gap = $result | Where-Object { $_.Endpoint -eq 'PATCH /since-fixture' } + $gap.MissingBodyProperties | Should -Not -Contain 'new_body_field' + $gap.ReadOnlyFields | Should -Not -Contain 'new_ro_field' + # old_field (2.0) is not newer than the 2.27 baseline either, so the whole gap + # for this endpoint disappears entirely -- same "endpoint dropped, not emitted + # empty" contract as the query-side equivalent test above. + $gap | Should -BeNullOrEmpty + } + } + Context 'the keys/count/values-shadowing bug -- a field literally named "keys" must not corrupt or swallow other fields' { # Regression test for the bug fixed by this task: `$hashtable.Keys` on a plain # Hashtable/PSCustomObject-backed IDictionary is shadowed by a KEY literally named @@ -559,26 +618,8 @@ Describe 'Get-PfbSuggestedPowerShellType (Task 5 suggestedPowerShellType mapping } Describe 'Get-PfbBodyPropertyArrayItemType / Get-PfbBodyPropertySynopsis (direct, non-recursive schema lookups)' { - BeforeAll { - $script:enrichmentSpec = [PSCustomObject]@{ - components = [PSCustomObject]@{ - schemas = [PSCustomObject]@{ - Widget = [PSCustomObject]@{ - type = 'object' - properties = [PSCustomObject]@{ - color = [PSCustomObject]@{ type = 'string'; description = 'The widget color. Valid values are `red`, `blue`, and `green`.' } - count = [PSCustomObject]@{ type = 'integer'; format = 'int64'; description = "Count of widgets available`nin this pool. Additional prose about counting follows here." } - tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ type = 'string' }; description = 'Tag list. Additional prose about tags follows this first sentence.' } - ref_tags = [PSCustomObject]@{ type = 'array'; items = [PSCustomObject]@{ '$ref' = '#/components/schemas/_tagRef' } } - linked = [PSCustomObject]@{ '$ref' = '#/components/schemas/_linkedRef' } - bare = [PSCustomObject]@{ type = 'string' } - } - } - _linkedRef = [PSCustomObject]@{ type = 'string'; description = 'Should never be read directly off Widget.linked (PIN: this function reads only the OWNER schema''s own declared property node, never following the property''s own $ref).' } - } - } - } - } + # $enrichmentSpec is set in the file-level BeforeAll (top of file) -- it is shared with + # the Get-PfbBodyPropertyEnrichment Describe below, so it must not be re-declared here. It 'Get-PfbBodyPropertyArrayItemType resolves an inline items.type/format' { $result = Get-PfbBodyPropertyArrayItemType -Spec $enrichmentSpec -OwnerSchema 'Widget' -FieldName 'tags' @@ -907,6 +948,56 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de @(Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'no_such_field').Count | Should -Be 0 } + It 'treats a literal "*" in an endpoint annotation''s match value as a literal character, not a live -like wildcard' { + # A future endpoint-type annotation could legitimately contain a literal '*'. An + # unescaped `-like "*$($_.match)*"` would treat it as "match anything" instead of + # a literal asterisk character. + $wildcardFixturePath = Join-Path $TestDrive 'drift-annotations-wildcard-star.fixture.json' + Set-Content -Path $wildcardFixturePath -Value @' +{ + "schemaVersion": 1, + "annotations": [ + { "matchType": "endpoint", "match": "widgets*prod", "kind": "liveTestingHazard", "note": "literal-asterisk regression fixture", "reference": null } + ] +} +'@ + $annotations = Get-PfbDriftAnnotations -Path $wildcardFixturePath + + # Endpoint contains the literal substring "widgets*prod" -- must match. + (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets*prod-fixture').Count | Should -Be 1 + + # Endpoint contains "widgets" ... "prod" but NOT the literal "widgets*prod" + # substring -- an unescaped -like ("*widgets*prod*") would still match this (the + # '*' matching "anything" in between), so a miss here proves the match string is + # treated as a literal substring, not a wildcard pattern. + (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets-are-in-prod').Count | Should -Be 0 + } + + It 'treats a literal "[" in an endpoint annotation''s match value as a literal character, not a live -like character class' { + # An unescaped `-like "*$($_.match)*"` would treat "[0]" as a character class + # (matching a single literal '0' character) rather than the literal 3-character + # text "[0]". + $wildcardFixturePath = Join-Path $TestDrive 'drift-annotations-wildcard-bracket.fixture.json' + Set-Content -Path $wildcardFixturePath -Value @' +{ + "schemaVersion": 1, + "annotations": [ + { "matchType": "endpoint", "match": "prod[0]", "kind": "liveTestingHazard", "note": "literal-bracket regression fixture", "reference": null } + ] +} +'@ + $annotations = Get-PfbDriftAnnotations -Path $wildcardFixturePath + + # Endpoint contains the literal substring "prod[0]" -- must match. + (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod[0]-real').Count | Should -Be 1 + + # Endpoint contains "prod" immediately followed by "0" (no brackets) -- an + # unescaped -like would still match this (the "[0]" character class matching that + # literal '0'), so a miss here proves the match string is treated as a literal + # substring, not a wildcard pattern. + (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod0-fixture').Count | Should -Be 0 + } + It 'returns $null (never throws) when -Path does not exist' { Get-PfbDriftAnnotations -Path (Join-Path $TestDrive 'does-not-exist.json') | Should -BeNullOrEmpty } diff --git a/tools/Build-PfbApiDriftReport.ps1 b/tools/Build-PfbApiDriftReport.ps1 index b32a4af..ce0c5c5 100644 --- a/tools/Build-PfbApiDriftReport.ps1 +++ b/tools/Build-PfbApiDriftReport.ps1 @@ -495,7 +495,7 @@ $availableSpecVersions = @($historyResult.ProcessedVersions) $versionDiffCount = @(Compare-Object -ReferenceObject $analysedVersions -DifferenceObject $availableSpecVersions).Count $versionSetsDiverge = $versionDiffCount -gt 0 $versionDivergenceWarning = if ($versionSetsDiverge) { - "analysedVersions ($($analysedVersions.Count) versions, through $($analysedVersions[-1])) and availableSpecVersions ($($availableSpecVersions.Count) versions, through $($availableSpecVersions[-1])) disagree -- rebuild Data/PfbCapabilityMap.json (tools/Build-PfbCapabilityMap.ps1) to bring the analysed set back in step with the specs on disk. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set." + "analysedVersions ($($analysedVersions.Count) versions, through $($analysedVersions[-1])) and availableSpecVersions ($($availableSpecVersions.Count) versions, through $($availableSpecVersions[-1])) disagree -- this is expected while Data/PfbCapabilityMap.json is deliberately pinned to a specific REST version; rebuild it (tools/Build-PfbCapabilityMap.ps1) only when intentionally adopting the newer spec. Every gap/phantom-field/systemic-gap category in this report is scoped to analysedVersions; validateSetDrift and newValidateSetCandidates (Task 5's enum join) use availableSpecVersions, the fresher on-disk set." } else { $null } diff --git a/tools/README.md b/tools/README.md index 00203c6..9d3ca7a 100644 --- a/tools/README.md +++ b/tools/README.md @@ -514,6 +514,16 @@ fixture and a squash-mode-gotcha fixture (see "Value-enum extraction" above). Th manifest checks skip gracefully if `tools/specs/` or `Reports/PfbValueEnumMap.json` aren't present. +**The one known, persistent failure.** When `tools/specs/` is locally cached past the +version `Data/PfbCapabilityMap.json` is pinned to, one real-manifest check in +`Tests/Build-PfbValueEnumMap.Tests.ps1` fails: it validates the value-enum map against +whatever spec version is newest on disk (`fb2.28`, as of this writing), not against the +2.27 version the capability map is deliberately pinned to (see item 2's `-MaxVersion` note +above). This is a pre-existing condition of the local dev environment, not a regression +from any task in this plan -- none of this plan's tasks touched value-enum extraction -- +and it does not reproduce in CI, which always fetches specs fresh rather than relying on a +locally-cached, possibly-ahead-of-pin `tools/specs/`. + ## CI `.github/workflows/update-api-capability-map.yml` runs this pipeline weekly (and on diff --git a/tools/lib/PfbApiDriftTools.ps1 b/tools/lib/PfbApiDriftTools.ps1 index c674f04..4f10588 100644 --- a/tools/lib/PfbApiDriftTools.ps1 +++ b/tools/lib/PfbApiDriftTools.ps1 @@ -889,8 +889,8 @@ function Get-PfbSystemicGaps { Decision 7: collapses Get-PfbParameterCoverageGaps's per-endpoint MissingQueryParameters/MissingBodyProperties lists into ONE finding PER DISTINCT WIRE NAME, across every endpoint AND both lists together -- e.g. `context_names` - showing up as a missing query parameter on 252 different endpoints becomes a - SINGLE finding with an EndpointCount of 252, not 252 separate per-endpoint rows. + showing up as a missing query parameter on 253 different endpoints becomes a + SINGLE finding with an EndpointCount of 253, not 253 separate per-endpoint rows. This is what turns hundreds of individual gap rows into a handful of real, actionable decisions. .DESCRIPTION @@ -1116,7 +1116,8 @@ function Find-PfbDriftAnnotation { return @($Annotations.annotations | Where-Object { ($_.matchType -eq 'field' -and $FieldName -and $_.match -eq $FieldName) -or - ($_.matchType -eq 'endpoint' -and $Endpoint -and $Endpoint -like "*$($_.match)*") + ($_.matchType -eq 'endpoint' -and $Endpoint -and + $Endpoint -like "*$([System.Management.Automation.WildcardPattern]::Escape($_.match))*") }) } diff --git a/tools/lib/PfbCmdletParamTools.ps1 b/tools/lib/PfbCmdletParamTools.ps1 index 467307d..143c41a 100644 --- a/tools/lib/PfbCmdletParamTools.ps1 +++ b/tools/lib/PfbCmdletParamTools.ps1 @@ -843,6 +843,14 @@ function Get-PfbCmdletBodyInsertionTarget { $hash -and $hash.KeyValuePairs.Count -gt 0 }) + # A genuine TIE (indexAssignments.Count -eq literalAssignments.Count, both > 0) + # falls through to this 'literal' branch silently -- there is no distinct 'tie' + # outcome. Measured across the real high-confidence gap population: 274 + # attributesOnly / 95 unknown / 25 index / 1 literal / 7 unresolved, i.e. a true + # tie is essentially unreachable in practice today. That is a measured-safe + # observation about current data, not a design guarantee -- a future cmdlet could + # legitimately produce a tie, and it would resolve to 'literal' without any flag + # that the detection was actually ambiguous. if ($indexAssignments.Count -gt $literalAssignments.Count) { $assignmentStyle = 'index' } elseif ($literalAssignments.Count -gt 0) { $assignmentStyle = 'literal' } else { $assignmentStyle = 'unknown' } From 8531c4c21abb07c79794c5c8cde054b9ab5f4b49 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 10:12:37 -0700 Subject: [PATCH 15/17] docs(tools): document systemicGaps/conventionStrength high-confidence-only scope limitation Records that systemicGaps/conventionStrength aggregate over high-confidence endpoints only, deliberately, per the false-positive procedure -- but that this silently omits 54 field names that appear only on partial-confidence rows, and undercounts names that do appear (context_names is 253 in systemicGaps but 289 across all confidence levels). Follow-up tracked separately; not fixed here since it would re-baseline every pinned figure this effort measured. Co-Authored-By: Claude Sonnet 5 --- tools/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/README.md b/tools/README.md index 9d3ca7a..ae792b7 100644 --- a/tools/README.md +++ b/tools/README.md @@ -312,6 +312,25 @@ Run in this order: endpoint (`parameterGaps[].annotations`) -- the file is optional; its absence degrades every lookup to "no annotations" rather than failing report generation. + **Known limitation: `systemicGaps`/`conventionStrength` only aggregate over high-confidence + endpoints, silently omitting field names that appear ONLY on `'partial'`-confidence rows.** + This is a deliberate choice, not an oversight -- a partial-confidence endpoint's gap list can + contain false positives (see the false-positive procedure above), so folding it into a systemic + FINDING would overstate a confidence the endpoint's own row already warns against. But the + consequence is real: as of this writing, **54 distinct wire field names appear only on + partial-confidence rows and are therefore absent from both `systemicGaps` and + `conventionStrength` entirely** (e.g. `base_dn`, `bind_password`, `domain`, `nameservers`, + `qos_policy`, `storage_class`, `owner`, ...), and a name that DOES appear can still undercount: + `context_names`'s pinned `systemicGaps` figure is 253 (high-confidence only), but its true + cross-confidence total across every endpoint is 289. No individual endpoint's own + `missingQueryParameters`/`missingBodyProperties` row is affected -- this is purely a gap in the + *aggregated triage view*, not in the underlying per-endpoint data. A future revisit should + aggregate `systemicGaps`/`conventionStrength` across ALL confidence levels, carrying the current + high-confidence-only count as `endpointCount` alongside a separate `partialEndpointCount`, rather + than silently dropping names or re-baselining `endpointCount` itself. Not fixed here because doing + so moves the `context_names`/`allow_errors`/etc. figures this whole effort measured and pinned + throughout every task. + **`phantomFieldCount` -- two correct, differently-scoped numbers.** How many `(endpoint, field)` pairs were silently dropped from every gap/read-only list because the field is accumulated in the capability map's `parameters`/`bodyProperties` dictionaries but absent from From 90ff370df71820538c9a547bcbf17ebf671f4657 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 10:20:10 -0700 Subject: [PATCH 16/17] fix(tools): guard Get-PfbDriftAnnotations' ConvertFrom-Json -Depth for PS 5.1 ConvertFrom-Json has no -Depth parameter on Windows PowerShell 5.1 (added in PS6) -- Get-PfbDriftAnnotations called it unconditionally, breaking the Windows PowerShell 5.1 CI job (ParameterBindingException on every test that touches docs/drift-annotations.json). Apply the same version-gated guard already used by Private/Get-PfbCapabilityMap.ps1 and Private/Get-PfbVersionMap.ps1 for the identical gotcha. This file's shape (schemaVersion + a flat annotation array) is far shallower than 5.1's own recursion limit, same as those two. Co-Authored-By: Claude Sonnet 5 --- tools/lib/PfbApiDriftTools.ps1 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/lib/PfbApiDriftTools.ps1 b/tools/lib/PfbApiDriftTools.ps1 index 4f10588..73af50f 100644 --- a/tools/lib/PfbApiDriftTools.ps1 +++ b/tools/lib/PfbApiDriftTools.ps1 @@ -1088,7 +1088,15 @@ function Get-PfbDriftAnnotations { ) if (-not (Test-Path $Path)) { return $null } - return Get-Content -Path $Path -Raw | ConvertFrom-Json -Depth 10 + $json = Get-Content -Path $Path -Raw + # ConvertFrom-Json has no -Depth parameter on Windows PowerShell 5.1 (added in PS6) -- + # this file's own shape (schemaVersion + a flat array of annotation records) is far + # shallower than 5.1's own recursion limit (100), same reasoning as + # Private/Get-PfbCapabilityMap.ps1's identical guard. + if ($PSVersionTable.PSVersion.Major -ge 6) { + return $json | ConvertFrom-Json -Depth 10 + } + return $json | ConvertFrom-Json } function Find-PfbDriftAnnotation { From 5407adbc4707f777bf81b64a839ee991e737fb40 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 10:42:20 -0700 Subject: [PATCH 17/17] fix(tests): wrap Find-PfbDriftAnnotation calls in @() before .Count checks Every failing assertion crossed the function-call boundary with a bare, un-array-wrapped result whenever exactly one annotation matched. PowerShell always unwraps a single-element pipeline result on return regardless of the function's own internal @() wrapping -- PowerShell 7+ masks this because it adds an automatic .Count/.Length property to every object (including bare scalars), but Windows PowerShell 5.1 has no such property, so .Count on the unwrapped scalar silently returns $null instead of 1. Confirmed live under real Windows PowerShell 5.1 (installed locally): reproduced "Expected 1, but got $null" on every affected assertion before this fix, then reran the full file (97 passed / 0 failed / 9 skipped -- the 9 are a pre-existing, intentional PS7+-only skip unrelated to this fix) and the full suite (461 passed, 23 pre-existing failures confined to Connect-PfbArray/Get-PfbApiTokenViaSsh/New-PfbJwtToken -- files this branch never touches, caused by a local Microsoft.PowerShell.Security module-load conflict, not present in the clean CI runner) after. Production code was never affected -- both real call sites in tools/Build-PfbApiDriftReport.ps1 already wrap Find-PfbDriftAnnotation in @(...). This was a test-file-only gap. Co-Authored-By: Claude Sonnet 5 --- Tests/PfbApiDriftTools.Tests.ps1 | 36 ++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index bc33025..276b685 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -921,8 +921,16 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de } It 'loads the file and finds a field-keyed annotation by exact wire name' { + # @(...) wraps the call itself, not just its consumption -- a single-match result + # is a bare PSCustomObject crossing the function-call boundary (PowerShell always + # unwraps a one-element pipeline result on return, @() inside the function's own + # `return` notwithstanding). PowerShell 7+ masks this with an automatic .Count/ + # .Length property on every object, so `$found.Count` reads 1 there regardless -- + # but Windows PowerShell 5.1 has no such property and .Count silently returns + # $null on a bare object. Confirmed live under real 5.1: without this wrap here, + # this exact assertion fails with "Expected 1, but got $null." $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath - $found = Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'context_names' + $found = @(Find-PfbDriftAnnotation -Annotations $annotations -FieldName 'context_names') $found.Count | Should -Be 1 $found[0].kind | Should -Be 'designDecision' $found[0].reference | Should -Be 'docs/design/fusion-context-injection.md' @@ -937,7 +945,7 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de It 'finds an endpoint-keyed annotation via case-insensitive substring match against the endpoint key' { $annotations = Get-PfbDriftAnnotations -Path $annotationsFixturePath - $found = Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'POST /management-access-policies' + $found = @(Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'POST /management-access-policies') $found.Count | Should -Be 1 $found[0].kind | Should -Be 'liveTestingHazard' $found[0].note | Should -Match '403' @@ -963,14 +971,16 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de '@ $annotations = Get-PfbDriftAnnotations -Path $wildcardFixturePath - # Endpoint contains the literal substring "widgets*prod" -- must match. - (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets*prod-fixture').Count | Should -Be 1 + # Endpoint contains the literal substring "widgets*prod" -- must match. @(...) + # wraps the call itself -- see the file-keyed test above for why a bare single-match + # result silently fails .Count on Windows PowerShell 5.1. + @(Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets*prod-fixture').Count | Should -Be 1 # Endpoint contains "widgets" ... "prod" but NOT the literal "widgets*prod" # substring -- an unescaped -like ("*widgets*prod*") would still match this (the # '*' matching "anything" in between), so a miss here proves the match string is # treated as a literal substring, not a wildcard pattern. - (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets-are-in-prod').Count | Should -Be 0 + @(Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /widgets-are-in-prod').Count | Should -Be 0 } It 'treats a literal "[" in an endpoint annotation''s match value as a literal character, not a live -like character class' { @@ -988,14 +998,16 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de '@ $annotations = Get-PfbDriftAnnotations -Path $wildcardFixturePath - # Endpoint contains the literal substring "prod[0]" -- must match. - (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod[0]-real').Count | Should -Be 1 + # Endpoint contains the literal substring "prod[0]" -- must match. @(...) wraps + # the call itself -- see the file-keyed test above for why a bare single-match + # result silently fails .Count on Windows PowerShell 5.1. + @(Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod[0]-real').Count | Should -Be 1 # Endpoint contains "prod" immediately followed by "0" (no brackets) -- an # unescaped -like would still match this (the "[0]" character class matching that # literal '0'), so a miss here proves the match string is treated as a literal # substring, not a wildcard pattern. - (Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod0-fixture').Count | Should -Be 0 + @(Find-PfbDriftAnnotation -Annotations $annotations -Endpoint 'GET /prod0-fixture').Count | Should -Be 0 } It 'returns $null (never throws) when -Path does not exist' { @@ -1009,10 +1021,12 @@ Describe 'Get-PfbDriftAnnotations / Find-PfbDriftAnnotation (Task 6: recorded de It 'the real checked-in docs/drift-annotations.json loads and carries both required seed entries' { $realPath = Join-Path $repoRoot 'docs/drift-annotations.json' Test-Path $realPath | Should -BeTrue + # @(...) wraps each call itself -- see the file-keyed test above for why a bare + # single-match result silently fails .Count on Windows PowerShell 5.1. $realAnnotations = Get-PfbDriftAnnotations -Path $realPath - (Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'context_names').Count | Should -Be 1 - (Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'allow_errors').Count | Should -Be 1 - (Find-PfbDriftAnnotation -Annotations $realAnnotations -Endpoint 'DELETE /management-access-policies').Count | Should -Be 1 + @(Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'context_names').Count | Should -Be 1 + @(Find-PfbDriftAnnotation -Annotations $realAnnotations -FieldName 'allow_errors').Count | Should -Be 1 + @(Find-PfbDriftAnnotation -Annotations $realAnnotations -Endpoint 'DELETE /management-access-policies').Count | Should -Be 1 } }