From 1e350530a29a7cb0dafcfb8be231d917d7a509d3 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 17:07:56 -0700 Subject: [PATCH 01/90] feat(tools): resolve array-of-references projections to their outer wire key Co-Authored-By: Claude Opus 5 --- Tests/PfbCmdletParamTools.Tests.ps1 | 158 ++++++++++++++++++++++++++-- tools/lib/PfbCmdletParamTools.ps1 | 101 +++++++++++++++++- 2 files changed, 246 insertions(+), 13 deletions(-) diff --git a/Tests/PfbCmdletParamTools.Tests.ps1 b/Tests/PfbCmdletParamTools.Tests.ps1 index 33c45e0..eafe658 100644 --- a/Tests/PfbCmdletParamTools.Tests.ps1 +++ b/Tests/PfbCmdletParamTools.Tests.ps1 @@ -453,14 +453,14 @@ Describe 'Get-PfbCmdletParameterInventory' { $rec.Surface | Should -Be 'Typed' } - It 'classifies a parameter fed through a pipeline transform as AttributesOnly, not a guessed wire name' { - # $AttachedServers is assigned via `@($AttachedServers | ForEach-Object { @{ name = $_ } })` - # -- deliberately NOT matched by the simple-assignment resolver. Since this cmdlet also - # has an -Attributes escape hatch, it must be classified AttributesOnly, not silently - # dropped and not force-matched to a wrong wire name. + It 'resolves a parameter fed through an array projection to its OUTER key' { + # $AttachedServers is assigned via `@($AttachedServers | ForEach-Object { @{ name = $_ } })`. + # PR #60 deliberately refused this shape rather than guess; the projection resolver now + # credits it with the outer key (`attached_servers`), which is the only name the + # capability map knows -- there is no `attached_servers.name` field in it. $rec = $inventory | Where-Object { $_.Cmdlet -eq 'New-PfbFixtureNetworkInterface' -and $_.Parameter -eq 'AttachedServers' } - $rec.WireName | Should -BeNullOrEmpty - $rec.Surface | Should -Be 'AttributesOnly' + $rec.WireName | Should -Be 'attached_servers' + $rec.Surface | Should -Be 'Typed' } It 'resolves a parameter with no -Attributes escape hatch via a simple assignment' { @@ -839,12 +839,16 @@ Describe 'Nested single-key reference-object awareness' { Get-PfbNestedReferenceWireNameForParameter -FunctionAst $funcAst -ParameterName 'Policy' | Should -BeNullOrEmpty } - It 'refuses a nested value produced by a pipeline transform rather than referencing the parameter' { + It 'resolves a nested value produced by an array projection of the parameter' { + # Was 'refuses a nested value produced by a pipeline transform' under PR #60. The + # projection shape is now recognised; the shapes that genuinely cannot be attributed + # (multi-key items, $_.Member, filtered pipelines) are covered in the + # 'Array-of-references projection awareness' Describe block. $tokens = $null; $errs = $null $ast = [System.Management.Automation.Language.Parser]::ParseInput( 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } }) }', [ref]$tokens, [ref]$errs) $funcAst = $ast.FindAll({ param($n) $n -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) | Select-Object -First 1 - Get-PfbNestedReferenceWireNameForParameter -FunctionAst $funcAst -ParameterName 'Servers' | Should -BeNullOrEmpty + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $funcAst -ParameterName 'Servers').WireName | Should -Be 'attached_servers' } It 'refuses a non-literal outer key' { @@ -856,6 +860,142 @@ Describe 'Nested single-key reference-object awareness' { } } +Describe 'Array-of-references projection awareness' { + # The API models a LIST of references as an array of single-key sub-objects, and the + # module builds it with `@($Param | ForEach-Object { @{ name = $_ } })`. The parameter's + # identity is the pipeline SOURCE -- the innermost value is $_, which names nothing -- + # so this cannot route through Test-PfbWireValueIsParameter like the scalar form does. + # As with the scalar form, the wire name is the OUTER key. + + BeforeAll { + function Get-TestFunctionAst { + param([string]$Source) + $tokens = $null; $errs = $null + $ast = [System.Management.Automation.Language.Parser]::ParseInput($Source, [ref]$tokens, [ref]$errs) + $ast.FindAll({ param($n) $n -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) | Select-Object -First 1 + } + } + + It 'resolves an index-assigned projection to its outer key' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } }) }' + $result = Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' + $result.WireName | Should -Be 'attached_servers' + $result.TargetVariable | Should -Be 'body' + } + + It 'resolves a projection inside a hashtable-literal initializer' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$DnsName) $body = @{ dns = @($DnsName | ForEach-Object { @{ name = $_ } }) } }' + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'DnsName').WireName | Should -Be 'dns' + } + + It 'resolves a projection that is not wrapped in @()' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = $Servers | ForEach-Object { @{ name = $_ } } }' + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers').WireName | Should -Be 'attached_servers' + } + + It 'accepts the % alias for ForEach-Object' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | % { @{ name = $_ } }) }' + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers').WireName | Should -Be 'attached_servers' + } + + It 'does not require the inner key to be "name"' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Ids) $body = @{}; $body["ports"] = @($Ids | ForEach-Object { @{ id = $_ } }) }' + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Ids').WireName | Should -Be 'ports' + } + + It 'reports queryParams as the target variable when the projection is keyed there' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $queryParams = @{}; $queryParams["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } }) }' + (Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers').TargetVariable | Should -Be 'queryParams' + } + + It 'refuses a MULTI-key projection hashtable, whose per-field ownership cannot be attributed to one parameter' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([object[]]$Tags) $body = @{}; $body["tags"] = @($Tags | ForEach-Object { @{ key = $_; value = 1 } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Tags' | Should -BeNullOrEmpty + } + + It 'refuses an innermost value that is a member access rather than the bare $_' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([object[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_.Name } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses an innermost value that is a bare variable OTHER than $_' { + # Mutation-table coverage (Step 7, "innermost is $_" guard): the member-access test + # above is caught earlier, by the VariableExpressionAst cast itself failing on + # `$_.Name`. This shape's innermost value IS a bare VariableExpressionAst, just not + # named `_` -- so only the UserPath -eq '_' check stops a constant, non-per-element + # value (here, a sibling parameter) from being wrongly credited to $Servers. + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers, [string]$Other) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $Other } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a projection whose pipeline source is a DIFFERENT parameter' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers, [string[]]$Other) $body = @{}; $body["attached_servers"] = @($Other | ForEach-Object { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a projection whose pipeline source is not a bare variable' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @("literal" | ForEach-Object { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a FILTERED pipeline -- the wire value is a subset, so the parameter does not cover the field' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | Where-Object { $_ } | ForEach-Object { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a ForEach-Object carrying arguments other than its script block' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object -Process { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a projection keyed into a variable that is neither body nor queryParams' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $nfsBody = @{}; $nfsBody["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a projection under a non-literal outer key' { + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers, [string]$Key) $body = @{}; $body[$Key] = @($Servers | ForEach-Object { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'lets a DIRECT assignment win over a projection for the same parameter, whatever the source order' { + # The ordering guarantee that keeps this change strictly additive: projection matching + # lives inside the nested resolver, which runs as its own pass AFTER both direct- + # assignment passes, so it can only turn an unresolved parameter Typed -- never rename + # an already-resolved wire name. Mirrors the scalar-form test above. + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } }); $body["servers"] = @($Servers) }' + (Get-PfbWireNameForParameter -FunctionAst $f -ParameterName 'Servers').WireName | Should -Be 'servers' + } + + It 'refuses a pipeline with a trailing step after ForEach-Object' { + # Mutation-table coverage (Step 7, "pipeline length" guard): the FILTERED-pipeline + # test above puts its extra stage BEFORE ForEach-Object, so it is (redundantly) + # also caught by the command-name check on element[1]. This shape puts the extra + # stage AFTER ForEach-Object, so element[1] genuinely IS ForEach-Object and only the + # pipeline-length check (`-ne 2`, not `-lt 2`) stops it being wrongly credited. + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } } | Sort-Object) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a ForEach-Object script block followed by a trailing named argument' { + # Mutation-table coverage (Step 7, "command arg count" guard): the existing + # `-Process { ... }` test above puts its extra argument BEFORE the script block, so + # index 1 is a CommandParameterAst and is (redundantly) also caught by the + # scriptBlockExpr cast. This shape puts the extra argument AFTER the script block, so + # index 1 genuinely IS the script block, and only the CommandElements.Count check + # (`-ne 2`, not `-lt 2`) stops it being wrongly credited. + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | ForEach-Object { @{ name = $_ } } -ErrorAction Stop) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } + + It 'refuses a projection piped through a command other than ForEach-Object/%' { + # Mutation-table coverage (Step 7, "command name" guard): dropping the + # -notin @('ForEach-Object','%') check would let any command through, e.g. `Get-Item`. + $f = Get-TestFunctionAst 'function Test-Fixture { param([string[]]$Servers) $body = @{}; $body["attached_servers"] = @($Servers | Get-Item { @{ name = $_ } }) }' + Get-PfbNestedReferenceWireNameForParameter -FunctionAst $f -ParameterName 'Servers' | Should -BeNullOrEmpty + } +} + Describe 'Find-PfbAccumulatorVariable' { It 'returns $null when the parameter has no foreach loop over it at all' { $tokens = $null; $errs = $null diff --git a/tools/lib/PfbCmdletParamTools.ps1 b/tools/lib/PfbCmdletParamTools.ps1 index 143c41a..85e582d 100644 --- a/tools/lib/PfbCmdletParamTools.ps1 +++ b/tools/lib/PfbCmdletParamTools.ps1 @@ -158,7 +158,11 @@ function Test-PfbWireValueIsParameter { 'literal' -- ONLY for a [switch] whose mere presence is keyed to a hardcoded string, and only inside an `if ($Param)` guard Refused (correctly, per this file's "never guess" contract): anything else, e.g. - `@($Param | ForEach-Object { ... })` or `"$Param"`. + `"$Param"`. The array-projection shape `@($Param | ForEach-Object { @{ name = $_ } })` + is also refused HERE by design -- it is matched by the sibling + Test-PfbWireValueIsParameterProjection, and only ever from the nested-reference + resolver, which credits the OUTER key. Matching it in this predicate would let the + direct resolvers credit the INNER key instead, naming a field that does not exist. #> [CmdletBinding()] param( @@ -190,6 +194,87 @@ function Test-PfbWireValueIsParameter { return $false } +function Test-PfbWireValueIsParameterProjection { + <# + .SYNOPSIS + True if -ValueAst is an array PROJECTION of the named parameter into single-key + sub-objects -- `@($Param | ForEach-Object { @{ name = $_ } })` -- the idiom this + module uses to build an array-of-references body field from a friendly [string[]]. + .DESCRIPTION + Sibling of Test-PfbWireValueIsParameter, deliberately kept separate rather than + folded into it. The two answer different questions: that one asks "does this value + hand the parameter to the wire as-is", this one asks "does this value hand each + ELEMENT of the parameter to the wire wrapped in a sub-object". Only the nested- + reference resolver may act on the second, because only it credits the OUTER key -- + the direct resolvers would have nowhere correct to attribute it, and would name an + `attached_servers.name` field that does not exist in the capability map. + + Shape-exact, matching this file's "never guess" contract. Accepted: + @($Param | ForEach-Object { @{ key = $_ } }) + $Param | ForEach-Object { @{ key = $_ } } -- unwrapped + @($Param | % { @{ key = $_ } }) -- alias + The inner key need not be literally 'name' (see the scalar resolver's + eradication_config precedent). Refused: a multi-key projection hashtable (a + composite, whose per-field ownership cannot be attributed to one parameter); an + innermost value that is anything but the bare $_ (`@{ name = $_.Name }`); a + pipeline source that is not the bare parameter; a longer pipeline (a Where-Object + filter in between means the wire value is a SUBSET, so the parameter does not cover + the field); and a ForEach-Object carrying any argument other than its script block. + #> + [CmdletBinding()] + param( + [Parameter(Mandatory)] + [System.Management.Automation.Language.Ast]$ValueAst, + + [Parameter(Mandatory)] + [string]$ParameterName + ) + + $candidate = Resolve-PfbSingleExpression -Ast $ValueAst + + # `@( ... )` wraps the pipeline in an ArrayExpressionAst; the unwrapped form arrives as + # the PipelineAst itself (Resolve-PfbSingleExpression returns a multi-element pipeline + # unchanged -- it only peels SINGLE-element ones). + $pipeline = $null + if ($candidate -is [System.Management.Automation.Language.ArrayExpressionAst]) { + if ($candidate.SubExpression.Statements.Count -ne 1) { return $false } + $pipeline = $candidate.SubExpression.Statements[0] -as [System.Management.Automation.Language.PipelineAst] + } + else { + $pipeline = $candidate -as [System.Management.Automation.Language.PipelineAst] + } + if (-not $pipeline -or $pipeline.PipelineElements.Count -ne 2) { return $false } + + # Element 1: the bare parameter, and nothing else. This is where the parameter's identity + # comes from -- the innermost value is $_, which names nothing. + $source = $pipeline.PipelineElements[0] -as [System.Management.Automation.Language.CommandExpressionAst] + if (-not $source) { return $false } + $sourceVar = $source.Expression -as [System.Management.Automation.Language.VariableExpressionAst] + if (-not $sourceVar -or $sourceVar.VariablePath.UserPath -ne $ParameterName) { return $false } + + # Element 2: ForEach-Object with exactly one argument, a script block. + $command = $pipeline.PipelineElements[1] -as [System.Management.Automation.Language.CommandAst] + if (-not $command -or $command.CommandElements.Count -ne 2) { return $false } + $commandName = $command.CommandElements[0] -as [System.Management.Automation.Language.StringConstantExpressionAst] + if (-not $commandName -or $commandName.Value -notin @('ForEach-Object', '%')) { return $false } + $scriptBlockExpr = $command.CommandElements[1] -as [System.Management.Automation.Language.ScriptBlockExpressionAst] + if (-not $scriptBlockExpr) { return $false } + + # Script block body: exactly one statement, a single-string-key hashtable literal whose + # one value is the bare pipeline variable. + $scriptBlock = $scriptBlockExpr.ScriptBlock + if ($scriptBlock.BeginBlock -or $scriptBlock.ProcessBlock -or $scriptBlock.DynamicParamBlock) { return $false } + if (-not $scriptBlock.EndBlock -or $scriptBlock.EndBlock.Statements.Count -ne 1) { return $false } + + $hash = (Resolve-PfbSingleExpression -Ast $scriptBlock.EndBlock.Statements[0]) -as [System.Management.Automation.Language.HashtableAst] + if (-not $hash -or $hash.KeyValuePairs.Count -ne 1) { return $false } + if (-not ($hash.KeyValuePairs[0].Item1 -as [System.Management.Automation.Language.StringConstantExpressionAst])) { return $false } + + $innerValue = Resolve-PfbSingleExpression -Ast $hash.KeyValuePairs[0].Item2 + $innerVar = $innerValue -as [System.Management.Automation.Language.VariableExpressionAst] + return ($null -ne $innerVar -and $innerVar.VariablePath.UserPath -eq '_') +} + function Get-PfbCommonQueryParamMap { <# .SYNOPSIS @@ -487,9 +572,13 @@ function Get-PfbNestedReferenceWireNameForParameter { -- a multi-key sub-object is a composite whose per-field ownership cannot be attributed to one parameter; - only ONE level of nesting is descended; - - the innermost value must satisfy the same Test-PfbWireValueIsParameter used by - both direct paths, so a pipeline transform (New-PfbNetworkInterface's - `@($AttachedServers | ForEach-Object { @{ name = $_ } })`) is still refused. + - the innermost value must satisfy either Test-PfbWireValueIsParameter (the scalar + form, `@{ name = $Account }`) or Test-PfbWireValueIsParameterProjection (the + array form, New-PfbNetworkInterface's `@($AttachedServers | ForEach-Object + { @{ name = $_ } })`). Shapes that still cannot be attributed to one parameter + remain refused: a multi-key projection item, an innermost `$_.Member` rather than + the bare `$_`, and a filtered pipeline, whose wire value is a SUBSET of the + parameter. Deliberately invoked LAST of the three literal forms by Get-PfbWireNameForParameter, after both direct-assignment resolvers: it can then @@ -514,6 +603,10 @@ function Get-PfbNestedReferenceWireNameForParameter { # hands $ParameterName to the wire? $isReferenceObjectFor = { param($Candidate) + # Array-of-references projection: the parameter's identity is the pipeline SOURCE, so + # this cannot route through Test-PfbWireValueIsParameter the way the scalar form does. + if (Test-PfbWireValueIsParameterProjection -ValueAst $Candidate -ParameterName $ParameterName) { return $true } + $hash = (Resolve-PfbSingleExpression -Ast $Candidate) -as [System.Management.Automation.Language.HashtableAst] if (-not $hash) { return $false } if ($hash.KeyValuePairs.Count -ne 1) { return $false } From 4e10a13cef81a4e3e7d1d738c89906a4641f6054 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 18:45:36 -0700 Subject: [PATCH 02/90] chore(reports): regenerate field-cmdlet map and drift report Picks up the array-of-references projection resolver from the parent commit: attributesOnly 68 -> 65, typedUnresolved unchanged at 37, with exactly the three predicted entries moving to Typed -- New-PfbServer/DnsName, Update-PfbServer/DnsName and New-PfbNetworkInterface/AttachedServers. PATCH /servers and POST /network-interfaces promote from partial to high confidence and drop their phantom dns / attached_servers body gaps. POST /servers keeps its dns gap removed but stays partial: CreateDirectoryService is assigned from a local ($createDs), a separate unresolved shape that is deliberately out of scope here. Rebased onto the repo-relative-path fix and regenerated from scratch, so this diff no longer carries the ~174 lines of absolute-path churn the previous version of this commit did. The artifact diff is now only the semantic change. Co-Authored-By: Claude Opus 5 --- Reports/PfbApiDriftReport.json | 109 ++++++++++++------------------- Reports/PfbApiDriftReport.md | 14 ++-- Reports/PfbFieldCmdletMap.json | 42 ++++++++---- Reports/PfbFieldCmdletMapping.md | 7 +- 4 files changed, 78 insertions(+), 94 deletions(-) diff --git a/Reports/PfbApiDriftReport.json b/Reports/PfbApiDriftReport.json index aad27cd..15f37fb 100644 --- a/Reports/PfbApiDriftReport.json +++ b/Reports/PfbApiDriftReport.json @@ -10357,33 +10357,6 @@ }, "annotations": [] }, - { - "endpoint": "PATCH /servers", - "cmdlets": [ - "Update-PfbServer" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - "dns" - ], - "readOnlyFields": [], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "DnsName", - "surface": "AttributesOnly", - "file": "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": [ @@ -14800,8 +14773,23 @@ ], "missingQueryParameters": [], "missingBodyProperties": [ - "attached_servers", - "rdma_enabled" + { + "name": "rdma_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/New-PfbNetworkInterface.ps1", + "paramBlockLine": 66, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } ], "readOnlyFields": [ "id", @@ -14809,19 +14797,10 @@ "realms" ], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "AttachedServers", - "surface": "AttributesOnly", - "file": "Public/Network/New-PfbNetworkInterface.ps1", - "line": 55 - } - ], - "escapeHatchOnly": [ - "AttachedServers" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, @@ -16518,9 +16497,7 @@ "create_ds", "create_local_directory_service" ], - "missingBodyProperties": [ - "dns" - ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "partial", @@ -16530,17 +16507,10 @@ "surface": "AttributesOnly", "file": "Public/Server/New-PfbServer.ps1", "line": 40 - }, - { - "parameter": "DnsName", - "surface": "AttributesOnly", - "file": "Public/Server/New-PfbServer.ps1", - "line": 34 } ], "escapeHatchOnly": [ - "CreateDirectoryService", - "DnsName" + "CreateDirectoryService" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, @@ -19895,6 +19865,17 @@ ], "annotations": [] }, + { + "name": "rdma_enabled", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /network-interfaces", + "POST /network-interfaces" + ], + "annotations": [] + }, { "name": "read", "endpointCount": 2, @@ -21217,16 +21198,6 @@ ], "annotations": [] }, - { - "name": "rdma_enabled", - "endpointCount": 1, - "queryEndpointCount": 0, - "bodyEndpointCount": 1, - "endpoints": [ - "PATCH /network-interfaces" - ], - "annotations": [] - }, { "name": "refresh", "endpointCount": 1, @@ -23334,6 +23305,13 @@ "New-PfbBucket" ] }, + { + "name": "attached_servers", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNetworkInterface" + ] + }, { "name": "bucket", "cmdletCount": 1, @@ -23594,11 +23572,6 @@ "cmdletCount": 0, "cmdlets": [] }, - { - "name": "attached_servers", - "cmdletCount": 0, - "cmdlets": [] - }, { "name": "authorization_model", "cmdletCount": 0, diff --git a/Reports/PfbApiDriftReport.md b/Reports/PfbApiDriftReport.md index a5643f9..de305a0 100644 --- a/Reports/PfbApiDriftReport.md +++ b/Reports/PfbApiDriftReport.md @@ -21,12 +21,12 @@ This report accepts **false positives in order to eliminate false negatives**. A ## Summary - Uncovered endpoints: 117 -- Endpoints with parameter gaps: 433 -- Missing body properties (addable): 609 +- Endpoints with parameter gaps: 432 +- Missing body properties (addable): 606 - Missing query parameters (addable): 1004 - Read-only body fields (not addable -- see the Read-only fields section below): 367 - Phantom fields silently excluded (accumulated in the capability map, absent from the newest analysed spec): 40 -- Partial-confidence endpoints (see `How to read this report` above, and each row's marker in the Parameter gaps table): 56 +- Partial-confidence endpoints (see `How to read this report` above, and each row's marker in the Parameter gaps table): 54 - Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): 312 - ValidateSet drift: 0 - New ValidateSet candidates: 1 @@ -381,7 +381,6 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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) | | @@ -451,7 +450,7 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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, rdma_enabled | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | +| `POST /network-interfaces` | New-PfbNetworkInterface | | rdma_enabled | `high` | | | `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` | | @@ -483,7 +482,7 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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 /servers` | New-PfbServer | create_ds, create_local_directory_service | | `partial` -- /!\ 1 unresolved param (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) | | @@ -550,7 +549,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `PATCH /realms` | `-Destroyed` | AttributesOnly | `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 | `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 | `Public/Policy/Update-PfbS3ExportPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `PATCH /servers` | `-DnsName` | AttributesOnly | `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 | `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 | `Public/Policy/Update-PfbSmbSharePolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `PATCH /workloads` | `-Destroyed` | TypedUnresolved | `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 | @@ -579,7 +577,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `POST /file-systems` | `-Writable` | AttributesOnly | `Public/FileSystem/New-PfbFileSystem.ps1:150` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /fleets` | `-Name` | AttributesOnly | `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 | `Public/Misc/New-PfbLag.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `POST /network-interfaces` | `-AttachedServers` | AttributesOnly | `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 | `Public/Policy/New-PfbNfsExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /node-groups` | `-Name` | AttributesOnly | `Public/Node/New-PfbNodeGroup.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /policies` | `-Enabled` | AttributesOnly | `Public/Policy/New-PfbPolicy.ps1:23` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | @@ -588,7 +585,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `POST /quotas/users` | `-UserName` | AttributesOnly | `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 | `Public/Policy/New-PfbS3ExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /servers` | `-CreateDirectoryService` | AttributesOnly | `Public/Server/New-PfbServer.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `POST /servers` | `-DnsName` | AttributesOnly | `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 | `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 | `Public/Policy/New-PfbSmbSharePolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /snmp-managers` | `-Name` | AttributesOnly | `Public/Monitoring/New-PfbSnmpManager.ps1:33` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | diff --git a/Reports/PfbFieldCmdletMap.json b/Reports/PfbFieldCmdletMap.json index 514ee2c..edbe71d 100644 --- a/Reports/PfbFieldCmdletMap.json +++ b/Reports/PfbFieldCmdletMap.json @@ -8512,6 +8512,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "New-PfbNetworkInterface", + "parameter": "AttachedServers", + "wireName": "attached_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", "parameter": "MemberName", @@ -15847,6 +15857,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "New-PfbServer", + "parameter": "DnsName", + "wireName": "dns", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "New-PfbServer", "parameter": "LocalDirectoryService", @@ -15897,6 +15917,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbServer", + "parameter": "DnsName", + "wireName": "dns", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbServer", "parameter": "LocalDirectoryService", @@ -16585,10 +16615,6 @@ "cmdlet": "New-PfbDns", "parameter": "Name" }, - { - "cmdlet": "New-PfbNetworkInterface", - "parameter": "AttachedServers" - }, { "cmdlet": "New-PfbNodeGroup", "parameter": "Name" @@ -16709,17 +16735,9 @@ "cmdlet": "New-PfbTarget", "parameter": "Name" }, - { - "cmdlet": "New-PfbServer", - "parameter": "DnsName" - }, { "cmdlet": "New-PfbServer", "parameter": "CreateDirectoryService" - }, - { - "cmdlet": "Update-PfbServer", - "parameter": "DnsName" } ], "typedUnresolved": [ diff --git a/Reports/PfbFieldCmdletMapping.md b/Reports/PfbFieldCmdletMapping.md index 1381ee2..379a01d 100644 --- a/Reports/PfbFieldCmdletMapping.md +++ b/Reports/PfbFieldCmdletMapping.md @@ -9,7 +9,7 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` - matched: 1 - collision: 0 - not-found-in-resource: 3 -- no-spec-enum-found: 1637 +- no-spec-enum-found: 1640 | Cmdlet | Parameter | Wire name | Status | Spec values | Recommendation | |---|---|---|---|---|---| @@ -18,7 +18,7 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` | `Update-PfbPresetWorkload` | `-NewName` | name | not-found-in-resource | | | | `Update-PfbWorkload` | `-NewName` | name | not-found-in-resource | | | -## Attributes-only parameters (no typed field to attach either mechanism to): 68 +## Attributes-only parameters (no typed field to attach either mechanism to): 65 - `Update-PfbAlert -Flagged` - `Update-PfbAlertWatcher -Enabled` @@ -54,7 +54,6 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` - `New-PfbSnmpManager -Name` - `New-PfbSyslogServer -Name` - `New-PfbDns -Name` -- `New-PfbNetworkInterface -AttachedServers` - `New-PfbNodeGroup -Name` - `New-PfbAuditFileSystemPolicy -Enabled` - `New-PfbAuditObjectStorePolicy -Enabled` @@ -85,9 +84,7 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` - `Update-PfbRealm -Destroyed` - `New-PfbFleet -Name` - `New-PfbTarget -Name` -- `New-PfbServer -DnsName` - `New-PfbServer -CreateDirectoryService` -- `Update-PfbServer -DnsName` ## Typed but unresolved wire name (needs manual inspection): 37 From f061e3cee32bf668e64dd4bbc1083298807f01e0 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 16:51:15 -0700 Subject: [PATCH 03/90] feat(admin): add typed body params to Update-PfbAdmin (#31) Canonical reference implementation for issue #31. Adds -AuthorizationModel, -Locked, -ManagementAccessPolicies, -OldPassword, -Password and -PublicKey in a new *Individual parameter set, with -Attributes moved into a parallel *Attributes set so the binder rejects a mixed invocation. The deprecated 'role' body field is deliberately not exposed (constraint 9). Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbAdmin.ps1 | 106 +++++++++++++++++++++++++++---- Tests/Update-PfbAdmin.Tests.ps1 | 99 +++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+), 13 deletions(-) create mode 100644 Tests/Update-PfbAdmin.Tests.ps1 diff --git a/Public/Admin/Update-PfbAdmin.ps1 b/Public/Admin/Update-PfbAdmin.ps1 index 66b5258..2a49a1d 100644 --- a/Public/Admin/Update-PfbAdmin.ps1 +++ b/Public/Admin/Update-PfbAdmin.ps1 @@ -4,36 +4,92 @@ function Update-PfbAdmin { Updates a FlashBlade administrator account. .DESCRIPTION The Update-PfbAdmin cmdlet modifies attributes of an existing administrator account - on the connected Pure Storage FlashBlade. The target administrator can be identified - by name or ID. Common updates include role changes and password resets. Supports - pipeline input and ShouldProcess for confirmation prompts. + on the connected Everpure FlashBlade. The target administrator can be identified + by name or ID. Common updates include password resets and access-policy changes. + Supports pipeline input and ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the administrator account to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the administrator account to update. + .PARAMETER AuthorizationModel + The location for access policies mapping. + .PARAMETER Locked + If set to $false, the specified user is unlocked. + .PARAMETER ManagementAccessPolicies + Names of the management access policies associated with the statically-authorized + administrator. + .PARAMETER OldPassword + Old user password. + .PARAMETER Password + New user password. + .PARAMETER PublicKey + Public key for SSH access. .PARAMETER Attributes - A hashtable of administrator attributes to modify (e.g., role, password). + A hashtable of administrator attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbAdmin -Name "pureuser" -Attributes @{ role = @{ name = "array_admin" } } + Update-PfbAdmin -Name "ops-admin" -Password "N3wP@ssw0rd!" -Locked $false + + Resets the password for "ops-admin" and unlocks the account using typed parameters. + .EXAMPLE + Update-PfbAdmin -Name "ops-admin" -ManagementAccessPolicies "array-admin","readonly" - Assigns the array_admin role to the administrator account named "pureuser". + Assigns two management access policies to the administrator named "ops-admin". .EXAMPLE Update-PfbAdmin -Name "ops-admin" -Attributes @{ password = "N3wP@ssw0rd!" } Updates the password for the administrator account named "ops-admin". .EXAMPLE - Update-PfbAdmin -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ role = @{ name = "readonly" } } + Update-PfbAdmin -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ locked = $false } - Changes the role of the administrator identified by ID to readonly. + Unlocks the administrator identified by ID. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$AuthorizationModel, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Locked, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$ManagementAccessPolicies, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$OldPassword, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Password, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$PublicKey, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -44,9 +100,33 @@ function Update-PfbAdmin { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($AuthorizationModel) { $body['authorization_model'] = $AuthorizationModel } + if ($OldPassword) { $body['old_password'] = $OldPassword } + if ($Password) { $body['password'] = $Password } + if ($PublicKey) { $body['public_key'] = $PublicKey } + + # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus + # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] + # cast here, which would break the wire-name trace and buys nothing. + if ($PSBoundParameters.ContainsKey('Locked')) { $body['locked'] = $Locked } + + # Constraint 8(b): management_access_policies is an ARRAY OF REFERENCES (item + # schema is {id, name, resource_type}), so the parameter is [string[]] and the + # projection is assigned INLINE -- constraint 7 forbids a $policyRefs local. + if ($ManagementAccessPolicies) { + $body['management_access_policies'] = @($ManagementAccessPolicies | ForEach-Object { @{ name = $_ } }) + } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update admin')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'admins' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'admins' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbAdmin.Tests.ps1 b/Tests/Update-PfbAdmin.Tests.ps1 new file mode 100644 index 0000000..4eac4f9 --- /dev/null +++ b/Tests/Update-PfbAdmin.Tests.ps1 @@ -0,0 +1,99 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbAdmin - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends password and public_key as body fields' { + Update-PfbAdmin -Name 'ops' -Password 'N3wP@ss!' -PublicKey 'ssh-rsa AAAA' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'admins' -and + $QueryParams['names'] -eq 'ops' -and + $Body['password'] -eq 'N3wP@ss!' -and + $Body['public_key'] -eq 'ssh-rsa AAAA' + } + } + + It 'sends authorization_model and old_password as body fields' { + Update-PfbAdmin -Name 'ops' -AuthorizationModel 'static' -OldPassword '0ld!' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['authorization_model'] -eq 'static' -and + $Body['old_password'] -eq '0ld!' + } + } + + It 'sends an explicit -Locked:$false (ContainsKey semantics, not truthiness)' { + Update-PfbAdmin -Name 'ops' -Locked $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('locked') -and $Body['locked'] -eq $false + } + } + + It 'omits locked entirely when -Locked is not supplied' { + Update-PfbAdmin -Name 'ops' -Password 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('locked') + } + } + + It 'builds management_access_policies as name-reference objects' { + Update-PfbAdmin -Name 'ops' -ManagementAccessPolicies 'pol-a','pol-b' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['management_access_policies'].Count -eq 2 -and + $Body['management_access_policies'][0].name -eq 'pol-a' -and + $Body['management_access_policies'][1].name -eq 'pol-b' + } + } + + It 'targets the admin by id when -Id is used' { + Update-PfbAdmin -Id 'admin-1' -Password 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'admin-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbAdmin -Name 'ops' -Attributes @{ password = 'raw' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['password'] -eq 'raw' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbAdmin -Name 'ops' -Password 'x' -Attributes @{ password = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'deprecated fields are not exposed (constraint 9)' { + It 'has no -Role parameter' { + (Get-Command Update-PfbAdmin).Parameters.Keys | Should -Not -Contain 'Role' + } + } +} From eeffce9cd8cfc7e06488bbb2040077ed22edb7ed Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 16:53:00 -0700 Subject: [PATCH 04/90] feat(admin): add typed body params to Update-PfbApiClient (#31) Adds -Enabled in a new *Individual parameter set, with -Attributes moved into a parallel *Attributes set so the binder rejects a mixed invocation. PATCH /api-clients reuses the full ApiClient resource schema, in which every property except 'enabled' is readOnly, so 'enabled' is the only settable field. The deprecated 'max_role' field is deliberately not exposed (constraint 9). Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbApiClient.ps1 | 61 ++++++++++++++++------ Tests/Update-PfbApiClient.Tests.ps1 | 75 ++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 Tests/Update-PfbApiClient.Tests.ps1 diff --git a/Public/Admin/Update-PfbApiClient.ps1 b/Public/Admin/Update-PfbApiClient.ps1 index 37428eb..0aa3a9f 100644 --- a/Public/Admin/Update-PfbApiClient.ps1 +++ b/Public/Admin/Update-PfbApiClient.ps1 @@ -4,38 +4,57 @@ function Update-PfbApiClient { Updates an API client on the FlashBlade. .DESCRIPTION The Update-PfbApiClient cmdlet modifies an existing API client on the connected - Pure Storage FlashBlade. Properties that can be updated include the public key, - maximum role, and enabled state. + Everpure FlashBlade. + + Note that `PATCH /api-clients` reuses the full ApiClient resource schema, in which + every property except `enabled` is read-only. `enabled` is therefore the only + settable field this cmdlet exposes as a typed parameter. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the API client to update. .PARAMETER Id The ID of the API client to update. + .PARAMETER Enabled + If $true, the API client is permitted to exchange ID Tokens for access tokens. .PARAMETER Attributes - A hashtable of properties to update on the API client. + A hashtable of properties to update on the API client. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbApiClient -Name 'automation-client' -Attributes @{ enabled = $true } + Update-PfbApiClient -Name 'automation-client' -Enabled $true - Enables the API client named 'automation-client'. + Enables the API client named 'automation-client' using a typed parameter. .EXAMPLE - Update-PfbApiClient -Name 'automation-client' -Attributes @{ max_role = @{ name = 'readonly' } } + Update-PfbApiClient -Name 'automation-client' -Attributes @{ enabled = $true } - Changes the maximum role of the API client to read-only. + Enables the API client named 'automation-client'. .EXAMPLE - Update-PfbApiClient -Id '12345678-abcd-efgh-ijkl-123456789012' -Attributes @{ public_key = $newKey } + Update-PfbApiClient -Id '12345678-abcd-efgh-ijkl-123456789012' -Enabled $false - Updates the public key of an API client by ID. + Disables an API client by ID. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,13 +65,25 @@ function Update-PfbApiClient { } process { - $target = if ($Name) { $Name } else { $Id } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + + # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus + # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] + # cast here, which would break the wire-name trace and buys nothing. + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update API client')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'api-clients' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'api-clients' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbApiClient.Tests.ps1 b/Tests/Update-PfbApiClient.Tests.ps1 new file mode 100644 index 0000000..4a2c6cb --- /dev/null +++ b/Tests/Update-PfbApiClient.Tests.ps1 @@ -0,0 +1,75 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbApiClient - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends an explicit -Enabled:$true' { + Update-PfbApiClient -Name 'automation' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'api-clients' -and + $QueryParams['names'] -eq 'automation' -and + $Body['enabled'] -eq $true + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbApiClient -Name 'automation' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'omits enabled entirely when -Enabled is not supplied' { + Update-PfbApiClient -Id 'client-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'client-1' -and -not $Body.ContainsKey('enabled') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbApiClient -Name 'automation' -Attributes @{ enabled = $true } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbApiClient -Name 'automation' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'excluded fields are not exposed' { + It 'has no -MaxRole parameter (deprecated, constraint 9)' { + (Get-Command Update-PfbApiClient).Parameters.Keys | Should -Not -Contain 'MaxRole' + } + + It 'exposes no read-only field as a parameter (constraint 11)' { + $paramNames = (Get-Command Update-PfbApiClient).Parameters.Keys + foreach ($readOnly in 'AccessPolicies', 'AccessTokenTtlInMs', 'Issuer', 'KeyId', 'PublicKey') { + $paramNames | Should -Not -Contain $readOnly + } + } + } +} From ddb522893ed1c6d1709eace635c99e4232c2a805 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 16:54:53 -0700 Subject: [PATCH 05/90] feat(admin): add typed body params to Update-PfbManagementAccessPolicy (#31) Adds -AggregationStrategy, -Enabled, -Location, -PolicyName and -Rules in a new *Individual parameter set, with -Attributes moved into a parallel *Attributes set so the binder rejects a mixed invocation. Per constraint 8's item-schema test, 'location' is a scalar reference (_fixedReference) and gets a [string] name parameter, but 'rules' is an array of COMPOSITE objects -- ManagementAccessPolicyRuleInPolicy carries role/scope/index beyond {id, name, resource_type} and its own 'name' is readOnly -- so it is a [hashtable[]] passed straight through. Projecting it into @{ name = ... } would write a field the schema does not accept. No ValidateSet on -AggregationStrategy: the spec documents its two values in prose only, not as a schema enum (constraint 3). Co-Authored-By: Claude Opus 5 --- .../Update-PfbManagementAccessPolicy.ps1 | 105 +++++++++++++++-- ...Update-PfbManagementAccessPolicy.Tests.ps1 | 108 ++++++++++++++++++ 2 files changed, 203 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbManagementAccessPolicy.Tests.ps1 diff --git a/Public/Admin/Update-PfbManagementAccessPolicy.ps1 b/Public/Admin/Update-PfbManagementAccessPolicy.ps1 index cd459e2..8bd6f43 100644 --- a/Public/Admin/Update-PfbManagementAccessPolicy.ps1 +++ b/Public/Admin/Update-PfbManagementAccessPolicy.ps1 @@ -4,20 +4,50 @@ function Update-PfbManagementAccessPolicy { Updates an existing management access policy on the FlashBlade. .DESCRIPTION The Update-PfbManagementAccessPolicy cmdlet modifies attributes of an existing management - access policy on the connected Pure Storage FlashBlade. The target policy can be identified + access policy on the connected Everpure FlashBlade. The target policy can be identified by name or ID. Supports ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the management access policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the management access policy to update. + .PARAMETER AggregationStrategy + 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. When this is set to `all-permissions`, any users to whom this policy applies + are capable of receiving additional access rights from other policies that apply to + them. + .PARAMETER Enabled + If $true, the policy is enabled. + .PARAMETER Location + Name of the array where the policy is defined. + .PARAMETER PolicyName + A new user-specified name for the policy. Named -PolicyName rather than -Name because + -Name already identifies which policy to update. + .PARAMETER Rules + All of the rules that are part of this policy, in evaluation order. Each rule is a + hashtable with `role` and `scope` sub-objects, for example + @{ role = @{ name = 'viewer' }; scope = @{ name = 'array-1'; resource_type = 'arrays' } }. .PARAMETER Attributes - A hashtable of policy attributes to modify. + A hashtable of policy attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbManagementAccessPolicy -Name "ops-policy" -Attributes @{ allowed_operations = @("read","write") } + Update-PfbManagementAccessPolicy -Name "ops-policy" -Enabled $true -AggregationStrategy "least-common-permissions" + + Enables the "ops-policy" management access policy and restricts its aggregation + strategy, using typed parameters. + .EXAMPLE + Update-PfbManagementAccessPolicy -Name "ops-policy" -Rules @( + @{ role = @{ name = "viewer" }; scope = @{ name = "array-1"; resource_type = "arrays" } } + ) - Updates the operations allowed by the "ops-policy" management access policy. + Replaces the policy's rule list with a single viewer rule scoped to "array-1". .EXAMPLE Update-PfbManagementAccessPolicy -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ enabled = $true } @@ -27,12 +57,41 @@ function Update-PfbManagementAccessPolicy { Shows what would happen if the policy were updated without making changes. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$AggregationStrategy, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$PolicyName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable[]]$Rules, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +103,36 @@ function Update-PfbManagementAccessPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } - $target = if ($Name) { $Name } else { $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($AggregationStrategy) { $body['aggregation_strategy'] = $AggregationStrategy } + if ($PolicyName) { $body['name'] = $PolicyName } + + # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus + # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] + # cast here, which would break the wire-name trace and buys nothing. + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + + # Constraint 8(a): location is a SCALAR REFERENCE (_fixedReference, properties are + # exactly {id, name, resource_type}), so the parameter is [string] and the + # reference object is built INLINE -- constraint 7 forbids a $locationRef local. + if ($Location) { $body['location'] = @{ name = $Location } } + + # Constraint 8(c): rules is an array of COMPOSITE objects, not references -- the + # item schema (ManagementAccessPolicyRuleInPolicy) carries `role`, `scope` and + # `index` beyond {id, name, resource_type}, and its own `name` is readOnly. So it + # is passed straight through rather than projected into @{ name = ... }, which + # would write a field the schema does not accept. + if ($Rules) { $body['rules'] = @($Rules) } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update management access policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'management-access-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'management-access-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 b/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 new file mode 100644 index 0000000..35f7b24 --- /dev/null +++ b/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 @@ -0,0 +1,108 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbManagementAccessPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends aggregation_strategy and the renamed name field' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' ` + -AggregationStrategy 'least-common-permissions' -PolicyName 'ops-policy-v2' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'management-access-policies' -and + $QueryParams['names'] -eq 'ops-policy' -and + $Body['aggregation_strategy'] -eq 'least-common-permissions' -and + $Body['name'] -eq 'ops-policy-v2' + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -Enabled $false ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'omits enabled entirely when -Enabled is not supplied' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -PolicyName 'x' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('enabled') + } + } + + It 'builds location as a single name-reference object (constraint 8a)' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -Location 'array-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'passes rules through unchanged as composite objects (constraint 8c)' { + $rules = @( + @{ role = @{ name = 'viewer' }; scope = @{ name = 'array-1'; resource_type = 'arrays' } }, + @{ role = @{ name = 'admin' }; scope = @{ name = 'realm-1'; resource_type = 'realms' } } + ) + + Update-PfbManagementAccessPolicy -Name 'ops-policy' -Rules $rules ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['rules'].Count -eq 2 -and + $Body['rules'][0].role.name -eq 'viewer' -and + $Body['rules'][1].scope.resource_type -eq 'realms' -and + -not $Body['rules'][0].ContainsKey('name') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -Attributes @{ enabled = $true } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbManagementAccessPolicy -Name 'ops-policy' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -AggregationStrategy (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbManagementAccessPolicy).Parameters['AggregationStrategy'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes no read-only field as a parameter (constraint 11)' { + $paramNames = (Get-Command Update-PfbManagementAccessPolicy).Parameters.Keys + foreach ($readOnly in 'Context', 'IsLocal', 'PolicyType', 'Realms', 'Version') { + $paramNames | Should -Not -Contain $readOnly + } + } + } +} From 9c3b9c441988d88047f139997820949836261aa3 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 16:57:09 -0700 Subject: [PATCH 06/90] feat(admin): add typed body params to Update-PfbOidcIdp (#31) Adds -Enabled, -Idp, -OidcIdpName and -Services in a new *Individual parameter set, with -Attributes moved into a parallel *Attributes set so the binder rejects a mixed invocation. Per constraint 8's item-schema test, 'idp' is a COMPOSITE sub-object (_oidcSsoPostIdp: provider_url plus CA-certificate references) with no 'name' property, so it is a [hashtable] passed straight through rather than projected into @{ name = ... }. The body field 'name' is exposed as -OidcIdpName because -Name already selects which provider to update. No ValidateSet on -Services (constraint 3). Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbOidcIdp.ps1 | 96 +++++++++++++++++++++++++----- Tests/Update-PfbOidcIdp.Tests.ps1 | 87 +++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 14 deletions(-) create mode 100644 Tests/Update-PfbOidcIdp.Tests.ps1 diff --git a/Public/Admin/Update-PfbOidcIdp.ps1 b/Public/Admin/Update-PfbOidcIdp.ps1 index ebebc69..55a4ff7 100644 --- a/Public/Admin/Update-PfbOidcIdp.ps1 +++ b/Public/Admin/Update-PfbOidcIdp.ps1 @@ -4,35 +4,83 @@ function Update-PfbOidcIdp { Updates an existing OIDC identity provider configuration on the FlashBlade. .DESCRIPTION The Update-PfbOidcIdp cmdlet modifies attributes of an existing OIDC (OpenID Connect) - identity provider configuration on the connected Pure Storage FlashBlade. The target + identity provider configuration on the connected Everpure FlashBlade. The target IdP can be identified by name or ID. Supports ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the OIDC identity provider to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the OIDC identity provider to update. + .PARAMETER Enabled + If set to $true, the OIDC SSO configuration is enabled. + .PARAMETER Idp + Properties specific to the identity provider, as a hashtable -- for example + @{ provider_url = 'https://idp.example.com' }. The schema models this as a multi-field + configuration sub-object (`provider_url`, `provider_url_ca_certificate`, + `provider_url_ca_certificate_group`), not as a reference to another resource, so it is + passed through rather than given a name-only parameter. + .PARAMETER OidcIdpName + A new name for the provider. Named -OidcIdpName rather than -Name because -Name + already identifies which IdP to update. + .PARAMETER Services + Services that the OIDC SSO authentication is used for. .PARAMETER Attributes - A hashtable of OIDC IdP attributes to modify (e.g., issuer, client_id, enabled). + A hashtable of OIDC IdP attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbOidcIdp -Name "okta-prod" -Attributes @{ enabled = $false } + Update-PfbOidcIdp -Name "okta-prod" -Enabled $false + + Disables the OIDC identity provider named "okta-prod" using a typed parameter. + .EXAMPLE + Update-PfbOidcIdp -Name "okta-prod" -Idp @{ provider_url = "https://new-idp.example.com" } - Disables the OIDC identity provider named "okta-prod". + Repoints the OIDC identity provider at a new provider URL. .EXAMPLE - Update-PfbOidcIdp -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ issuer = "https://new-issuer.example.com" } + Update-PfbOidcIdp -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ enabled = $false } - Updates the issuer URL for the OIDC IdP identified by ID. + Disables the OIDC IdP identified by ID. .EXAMPLE - Update-PfbOidcIdp -Name "azure-ad" -Attributes @{ client_id = "new-client-id" } -WhatIf + Update-PfbOidcIdp -Name "azure-ad" -OidcIdpName "azure-ad-renamed" -WhatIf - Shows what would happen if the OIDC IdP were updated without making changes. + Shows what would happen if the OIDC IdP were renamed without making changes. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$Idp, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$OidcIdpName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Services, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +92,30 @@ function Update-PfbOidcIdp { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } - $target = if ($Name) { $Name } else { $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($OidcIdpName) { $body['name'] = $OidcIdpName } + if ($Services) { $body['services'] = @($Services) } + + # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus + # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] + # cast here, which would break the wire-name trace and buys nothing. + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + + # Constraint 8(c): idp is a COMPOSITE sub-object (_oidcSsoPostIdp carries + # provider_url and its CA-certificate references), not a reference -- it has no + # `name` property at all, so projecting it into @{ name = ... } would write a + # field the schema does not have. Pass it straight through. + if ($Idp) { $body['idp'] = $Idp } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update OIDC identity provider')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'sso/oidc/idps' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'sso/oidc/idps' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbOidcIdp.Tests.ps1 b/Tests/Update-PfbOidcIdp.Tests.ps1 new file mode 100644 index 0000000..1ffeadd --- /dev/null +++ b/Tests/Update-PfbOidcIdp.Tests.ps1 @@ -0,0 +1,87 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbOidcIdp - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends the renamed name field and services array' { + Update-PfbOidcIdp -Name 'okta-prod' -OidcIdpName 'okta-prod-v2' -Services 'object' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'sso/oidc/idps' -and + $QueryParams['names'] -eq 'okta-prod' -and + $Body['name'] -eq 'okta-prod-v2' -and + $Body['services'].Count -eq 1 -and $Body['services'][0] -eq 'object' + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbOidcIdp -Name 'okta-prod' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'omits enabled entirely when -Enabled is not supplied' { + Update-PfbOidcIdp -Name 'okta-prod' -OidcIdpName 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('enabled') + } + } + + It 'passes idp through as a composite sub-object, NOT a name reference (constraint 8c)' { + Update-PfbOidcIdp -Name 'okta-prod' ` + -Idp @{ provider_url = 'https://idp.example.com' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['idp'].provider_url -eq 'https://idp.example.com' -and + -not $Body['idp'].ContainsKey('name') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbOidcIdp -Name 'okta-prod' -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $false + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbOidcIdp -Name 'okta-prod' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -Services (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbOidcIdp).Parameters['Services'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'does not expose the read-only prn field (constraint 11)' { + (Get-Command Update-PfbOidcIdp).Parameters.Keys | Should -Not -Contain 'Prn' + } + } +} From c1b5ff3697f2726b999c01cbb60bdb1b74a040a7 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 16:59:06 -0700 Subject: [PATCH 07/90] feat(admin): add typed body params to Update-PfbSaml2Idp (#31) Adds -ArrayUrl, -Binding, -Enabled, -Idp, -Management, -Saml2IdpName, -Services and -Sp in a new *Individual parameter set, with -Attributes moved into a parallel *Attributes set so the binder rejects a mixed invocation. Per constraint 8's item-schema test, 'idp', 'management' and 'sp' are all COMPOSITE sub-objects (_saml2SsoIdp, _saml2SsoManagement, _saml2SsoSp) with no 'name' property, so each is a [hashtable] passed straight through rather than projected into @{ name = ... }. The body field 'name' is exposed as -Saml2IdpName because -Name already selects which provider to update. No ValidateSet on -Binding or -Services: the spec documents their values in prose only, not as schema enums (constraint 3). Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbSaml2Idp.ps1 | 123 +++++++++++++++++++++++++--- Tests/Update-PfbSaml2Idp.Tests.ps1 | 106 ++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 13 deletions(-) create mode 100644 Tests/Update-PfbSaml2Idp.Tests.ps1 diff --git a/Public/Admin/Update-PfbSaml2Idp.ps1 b/Public/Admin/Update-PfbSaml2Idp.ps1 index 026933c..2986454 100644 --- a/Public/Admin/Update-PfbSaml2Idp.ps1 +++ b/Public/Admin/Update-PfbSaml2Idp.ps1 @@ -4,35 +4,108 @@ function Update-PfbSaml2Idp { Updates an existing SAML2 identity provider configuration on the FlashBlade. .DESCRIPTION The Update-PfbSaml2Idp cmdlet modifies attributes of an existing SAML2 identity provider - configuration on the connected Pure Storage FlashBlade. The target IdP can be identified + configuration on the connected Everpure FlashBlade. The target IdP can be identified by name or ID. Supports ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the SAML2 identity provider to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the SAML2 identity provider to update. + .PARAMETER ArrayUrl + The URL of the array. + .PARAMETER Binding + SAML2 binding to use for the request from the FlashBlade to the Identity Provider. + .PARAMETER Enabled + If set to $true, the SAML2 SSO configuration is enabled. + .PARAMETER Idp + Properties specific to the identity provider, as a hashtable -- for example + @{ entity_id = 'urn:idp'; metadata_url = 'https://idp.example.com/metadata' }. The + schema models this as a multi-field configuration sub-object, not as a reference to + another resource, so it is passed through rather than given a name-only parameter. + .PARAMETER Management + Properties specific to the management service, as a hashtable -- for example + @{ trust_other_saml_sps_in_fleet = $false }. + .PARAMETER Saml2IdpName + A new user-specified name for the provider. Named -Saml2IdpName rather than -Name + because -Name already identifies which IdP to update. + .PARAMETER Services + Services that the SAML2 SSO authentication is used for. + .PARAMETER Sp + Properties specific to the service provider, as a hashtable -- for example + @{ entity_id = 'urn:sp'; signing_credential = @{ name = 'cert1' } }. .PARAMETER Attributes - A hashtable of SAML2 IdP attributes to modify (e.g., metadata_url, enabled). + A hashtable of SAML2 IdP attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbSaml2Idp -Name "adfs-prod" -Attributes @{ enabled = $false } + Update-PfbSaml2Idp -Name "adfs-prod" -Enabled $false + + Disables the SAML2 identity provider named "adfs-prod" using a typed parameter. + .EXAMPLE + Update-PfbSaml2Idp -Name "adfs-prod" -Idp @{ metadata_url = "https://new-adfs.corp.example.com/metadata" } - Disables the SAML2 identity provider named "adfs-prod". + Updates the metadata URL for the SAML2 identity provider named "adfs-prod". .EXAMPLE - Update-PfbSaml2Idp -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ metadata_url = "https://new-adfs.corp.example.com/metadata" } + Update-PfbSaml2Idp -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ enabled = $false } - Updates the metadata URL for the SAML2 IdP identified by ID. + Disables the SAML2 IdP identified by ID. .EXAMPLE - Update-PfbSaml2Idp -Name "custom-saml" -Attributes @{ sign_in_url = "https://new-idp.example.com/sso" } -WhatIf + Update-PfbSaml2Idp -Name "custom-saml" -ArrayUrl "https://fb.corp.example.com" -WhatIf Shows what would happen if the SAML2 IdP were updated without making changes. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$ArrayUrl, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Binding, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$Idp, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$Management, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Saml2IdpName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Services, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$Sp, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +117,34 @@ function Update-PfbSaml2Idp { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } - $target = if ($Name) { $Name } else { $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($ArrayUrl) { $body['array_url'] = $ArrayUrl } + if ($Binding) { $body['binding'] = $Binding } + if ($Saml2IdpName) { $body['name'] = $Saml2IdpName } + if ($Services) { $body['services'] = @($Services) } + + # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus + # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] + # cast here, which would break the wire-name trace and buys nothing. + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + + # Constraint 8(c): idp, management and sp are all COMPOSITE sub-objects + # (_saml2SsoIdp, _saml2SsoManagement, _saml2SsoSp), not references -- none of them + # has a `name` property, so projecting them into @{ name = ... } would write a + # field the schema does not have. Pass them straight through. + if ($Idp) { $body['idp'] = $Idp } + if ($Management) { $body['management'] = $Management } + if ($Sp) { $body['sp'] = $Sp } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update SAML2 identity provider')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'sso/saml2/idps' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'sso/saml2/idps' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbSaml2Idp.Tests.ps1 b/Tests/Update-PfbSaml2Idp.Tests.ps1 new file mode 100644 index 0000000..54db97f --- /dev/null +++ b/Tests/Update-PfbSaml2Idp.Tests.ps1 @@ -0,0 +1,106 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbSaml2Idp - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends array_url, binding, the renamed name field and services' { + Update-PfbSaml2Idp -Name 'adfs-prod' ` + -ArrayUrl 'https://fb.example.test' -Binding 'http-redirect' ` + -Saml2IdpName 'adfs-prod-v2' -Services 'management','object' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'sso/saml2/idps' -and + $QueryParams['names'] -eq 'adfs-prod' -and + $Body['array_url'] -eq 'https://fb.example.test' -and + $Body['binding'] -eq 'http-redirect' -and + $Body['name'] -eq 'adfs-prod-v2' -and + $Body['services'].Count -eq 2 + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbSaml2Idp -Name 'adfs-prod' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'omits enabled entirely when -Enabled is not supplied' { + Update-PfbSaml2Idp -Name 'adfs-prod' -ArrayUrl 'https://x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('enabled') + } + } + + It 'passes idp, sp and management through as composite sub-objects (constraint 8c)' { + Update-PfbSaml2Idp -Name 'adfs-prod' ` + -Idp @{ entity_id = 'urn:idp'; metadata_url = 'https://idp/meta' } ` + -Sp @{ entity_id = 'urn:sp' } ` + -Management @{ trust_other_saml_sps_in_fleet = $true } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['idp'].entity_id -eq 'urn:idp' -and + $Body['idp'].metadata_url -eq 'https://idp/meta' -and + -not $Body['idp'].ContainsKey('name') -and + $Body['sp'].entity_id -eq 'urn:sp' -and + $Body['management'].trust_other_saml_sps_in_fleet -eq $true + } + } + + It 'targets the IdP by id when -Id is used' { + Update-PfbSaml2Idp -Id 'idp-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'idp-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbSaml2Idp -Name 'adfs-prod' -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $false + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbSaml2Idp -Name 'adfs-prod' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -Binding or -Services (constraint 3, no spec enum)' { + foreach ($p in 'Binding', 'Services') { + $attrs = (Get-Command Update-PfbSaml2Idp).Parameters[$p].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } + + It 'exposes no read-only field as a parameter (constraint 11)' { + (Get-Command Update-PfbSaml2Idp).Parameters.Keys | Should -Not -Contain 'Prn' + } + } +} From dfcb4e18d865078271af63e37181fc9c0c056a12 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 17:01:18 -0700 Subject: [PATCH 08/90] feat(admin): add typed body params to New-PfbApiToken (#31) POST /admins/api-tokens has no request body at all -- all three documented gaps (admin_ids, admin_names, timeout) are QUERY parameters, so this cmdlet gets no Individual/Attributes parameter-set split. BEHAVIOUR CHANGE: -Name and -Id previously sent the 'names' and 'ids' query keys, which this endpoint does not accept. The array silently ignored them, so -Name and -Id had no effect whatsoever. They now send 'admin_names' and 'admin_ids'. Callers that relied on the old no-op behaviour (i.e. that got a token for the authenticated user despite passing -Name) will now correctly target the named admin. Aliases -AdminNames/-AdminIds are added rather than new parameters, since two parameters writing one query key would itself be a bug. -Timeout is genuinely new and typed [long]: the spec declares it integer/int64, and [int] would overflow at ~24.8 days of milliseconds. Co-Authored-By: Claude Opus 5 --- Public/Admin/New-PfbApiToken.ps1 | 39 ++++++++++---- Tests/New-PfbApiToken.Tests.ps1 | 88 ++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 Tests/New-PfbApiToken.Tests.ps1 diff --git a/Public/Admin/New-PfbApiToken.ps1 b/Public/Admin/New-PfbApiToken.ps1 index 7490a25..910d0f0 100644 --- a/Public/Admin/New-PfbApiToken.ps1 +++ b/Public/Admin/New-PfbApiToken.ps1 @@ -4,15 +4,21 @@ function New-PfbApiToken { Creates a new API token for a FlashBlade administrator. .DESCRIPTION The New-PfbApiToken cmdlet generates a new API token for an administrator account on the - connected Pure Storage FlashBlade. The administrator is identified by name or ID. Optional - attributes can be provided to configure token properties. Supports ShouldProcess for - confirmation prompts. + connected Everpure FlashBlade. The administrator is identified by name or ID. Supports + ShouldProcess for confirmation prompts. + + Note that `POST /admins/api-tokens` takes no request body at all -- every field this + endpoint accepts is a query parameter. .PARAMETER Name - The name of the administrator account for which to create an API token. + The name of the administrator account for which to create an API token. Sent as the + `admin_names` query parameter. Also accepts the alias -AdminNames. .PARAMETER Id - The ID of the administrator account for which to create an API token. + The ID of the administrator account for which to create an API token. Sent as the + `admin_ids` query parameter. Also accepts the alias -AdminIds. + .PARAMETER Timeout + The duration of API token validity, in milliseconds. .PARAMETER Attributes - A hashtable of token attributes to set (e.g., timeout duration). + A hashtable of additional token attributes. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -20,9 +26,9 @@ function New-PfbApiToken { Creates a new API token for the administrator named "pureuser". .EXAMPLE - New-PfbApiToken -Name "ops-admin" -Attributes @{ timeout = 86400000 } + New-PfbApiToken -Name "ops-admin" -Timeout 86400000 - Creates a new API token with a custom timeout for the specified administrator. + Creates a new API token for "ops-admin" that is valid for 24 hours. .EXAMPLE New-PfbApiToken -Id "10314f42-020d-7080-8013-000ddt400012" @@ -31,8 +37,14 @@ function New-PfbApiToken { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter(ParameterSetName = 'ByName', ValueFromPipelineByPropertyName)] + [Alias('AdminNames')] [string]$Name, - [Parameter(ParameterSetName = 'ById')] [string]$Id, + + [Parameter(ParameterSetName = 'ById')] + [Alias('AdminIds')] + [string]$Id, + + [Parameter()] [long]$Timeout, [Parameter()] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array ) @@ -42,9 +54,14 @@ function New-PfbApiToken { } process { + # POST /admins/api-tokens accepts admin_names/admin_ids, NOT names/ids. The cmdlet + # previously sent names/ids, which the array silently ignored, so -Name and -Id had + # no effect at all. $queryParams = @{} - if ($Name) { $queryParams['names'] = $Name } - if ($Id) { $queryParams['ids'] = $Id } + if ($Name) { $queryParams['admin_names'] = $Name } + if ($Id) { $queryParams['admin_ids'] = $Id } + if ($PSBoundParameters.ContainsKey('Timeout')) { $queryParams['timeout'] = $Timeout } + $target = if ($Name) { $Name } else { $Id } $body = if ($Attributes) { $Attributes } else { @{} } diff --git a/Tests/New-PfbApiToken.Tests.ps1 b/Tests/New-PfbApiToken.Tests.ps1 new file mode 100644 index 0000000..04e1a0b --- /dev/null +++ b/Tests/New-PfbApiToken.Tests.ps1 @@ -0,0 +1,88 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbApiToken - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'admin selector uses the real wire names (regression: was names/ids)' { + It 'sends -Name as admin_names, NOT names' { + New-PfbApiToken -Name 'ops-admin' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'admins/api-tokens' -and + $QueryParams['admin_names'] -eq 'ops-admin' -and + -not $QueryParams.ContainsKey('names') + } + } + + It 'sends -Id as admin_ids, NOT ids' { + New-PfbApiToken -Id 'admin-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['admin_ids'] -eq 'admin-1' -and + -not $QueryParams.ContainsKey('ids') + } + } + + It 'accepts -AdminNames as an alias of -Name' { + New-PfbApiToken -AdminNames 'ops-admin' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['admin_names'] -eq 'ops-admin' + } + } + + It 'accepts -AdminIds as an alias of -Id' { + New-PfbApiToken -AdminIds 'admin-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['admin_ids'] -eq 'admin-1' + } + } + + It 'exposes no separate -AdminNames/-AdminIds parameters (they are aliases only)' { + $params = (Get-Command New-PfbApiToken).Parameters + $params.Keys | Should -Not -Contain 'AdminNames' + $params.Keys | Should -Not -Contain 'AdminIds' + $params['Name'].Aliases | Should -Contain 'AdminNames' + $params['Id'].Aliases | Should -Contain 'AdminIds' + } + } + + Context '-Timeout query parameter' { + It 'sends timeout when supplied' { + New-PfbApiToken -Name 'ops-admin' -Timeout 86400000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['timeout'] -eq 86400000 + } + } + + It 'omits timeout entirely when not supplied' { + New-PfbApiToken -Name 'ops-admin' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('timeout') + } + } + + It 'accepts a value beyond Int32 range (spec type is int64)' { + New-PfbApiToken -Name 'ops-admin' -Timeout 3000000000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['timeout'] -eq 3000000000 + } + } + } +} From 4a388640ab43c543f14a7ff4b2326f6f2f477d59 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 18:09:07 -0700 Subject: [PATCH 09/90] fix(admin): ContainsKey guards + rename to -NewName (#31 review fixes C1, I1) C1 (critical) -- guard every body parameter with ContainsKey, not truthiness. The canonical template used 'if (\)' / 'if (\)', which silently discards legitimate falsy values the caller explicitly supplied: \False, 0, '' and @() all fail a truthiness test. Verified: -ManagementAccessPolicies @() previously produced a body with no such key, so a list could never be cleared. Constraint 2 only ever spoke about booleans, and this batch happens to contain no integer parameter -- so the defect was invisible here but would have propagated to 49 copies. Downstream the field reference has 30 integer fields where 0 is meaningful, including Update-PfbQosPolicy's max_total_ops_per_sec (0 = unlimited) and New-PfbNfsExportRule's anonuid/anongid (0 = root). Every body assignment across all six cmdlets now uses \System.Management.Automation.PSBoundParametersDictionary.ContainsKey('X'). This does not affect constraint 7: the resolver still resolves 32 of 33 parameters, the sole exception being the already-known ManagementAccessPolicies array projection. Adds falsy-value tests for an array and a string parameter on four cmdlets. I1 (important) -- rename the 'rename this resource' body parameter to -NewName: Update-PfbManagementAccessPolicy -PolicyName -> -NewName Update-PfbOidcIdp -OidcIdpName -> -NewName Update-PfbSaml2Idp -Saml2IdpName -> -NewName Follows existing repo precedent (Update-PfbWorkload, Update-PfbDataEvictionPolicy, Update-PfbPresetWorkload all expose -NewName for this same body field), so the 14 further endpoints with a 'name' body row in later batches have one spelling to copy. The unrelated -PolicyName parameters on the association cmdlets (which map to the policy_names QUERY key) are deliberately untouched. Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbAdmin.ps1 | 27 +++++++++++------- Public/Admin/Update-PfbApiClient.ps1 | 6 ++-- .../Update-PfbManagementAccessPolicy.ps1 | 22 +++++++-------- Public/Admin/Update-PfbOidcIdp.ps1 | 22 +++++++-------- Public/Admin/Update-PfbSaml2Idp.ps1 | 28 +++++++++---------- Tests/Update-PfbAdmin.Tests.ps1 | 25 +++++++++++++++++ ...Update-PfbManagementAccessPolicy.Tests.ps1 | 22 +++++++++++++-- Tests/Update-PfbOidcIdp.Tests.ps1 | 20 +++++++++++-- Tests/Update-PfbSaml2Idp.Tests.ps1 | 18 +++++++++++- 9 files changed, 132 insertions(+), 58 deletions(-) diff --git a/Public/Admin/Update-PfbAdmin.ps1 b/Public/Admin/Update-PfbAdmin.ps1 index 2a49a1d..037c051 100644 --- a/Public/Admin/Update-PfbAdmin.ps1 +++ b/Public/Admin/Update-PfbAdmin.ps1 @@ -105,21 +105,28 @@ function Update-PfbAdmin { $body = $Attributes } else { + # EVERY body parameter is guarded by $PSBoundParameters.ContainsKey, never by + # truthiness. This is deliberate and uniform. `if ($X)` silently discards any + # legitimate falsy value the caller explicitly supplied: $false, 0, '' and an empty + # array all fail a truthiness test. So `-Locked $false` would never unlock, an + # integer field could never be set to a meaningful 0, and + # `-ManagementAccessPolicies @()` could never clear a list. ContainsKey asks the + # only correct question -- did the caller supply this parameter at all? + # + # No [bool] cast on $Locked either: constraint 7 forbids it (it breaks the + # wire-name trace) and [Nullable[bool]] + ContainsKey already sends an explicit + # $false correctly. $body = @{} - if ($AuthorizationModel) { $body['authorization_model'] = $AuthorizationModel } - if ($OldPassword) { $body['old_password'] = $OldPassword } - if ($Password) { $body['password'] = $Password } - if ($PublicKey) { $body['public_key'] = $PublicKey } - - # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus - # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] - # cast here, which would break the wire-name trace and buys nothing. - if ($PSBoundParameters.ContainsKey('Locked')) { $body['locked'] = $Locked } + if ($PSBoundParameters.ContainsKey('AuthorizationModel')) { $body['authorization_model'] = $AuthorizationModel } + if ($PSBoundParameters.ContainsKey('Locked')) { $body['locked'] = $Locked } + if ($PSBoundParameters.ContainsKey('OldPassword')) { $body['old_password'] = $OldPassword } + if ($PSBoundParameters.ContainsKey('Password')) { $body['password'] = $Password } + if ($PSBoundParameters.ContainsKey('PublicKey')) { $body['public_key'] = $PublicKey } # Constraint 8(b): management_access_policies is an ARRAY OF REFERENCES (item # schema is {id, name, resource_type}), so the parameter is [string[]] and the # projection is assigned INLINE -- constraint 7 forbids a $policyRefs local. - if ($ManagementAccessPolicies) { + if ($PSBoundParameters.ContainsKey('ManagementAccessPolicies')) { $body['management_access_policies'] = @($ManagementAccessPolicies | ForEach-Object { @{ name = $_ } }) } } diff --git a/Public/Admin/Update-PfbApiClient.ps1 b/Public/Admin/Update-PfbApiClient.ps1 index 0aa3a9f..f694503 100644 --- a/Public/Admin/Update-PfbApiClient.ps1 +++ b/Public/Admin/Update-PfbApiClient.ps1 @@ -73,11 +73,9 @@ function Update-PfbApiClient { $body = $Attributes } else { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. $body = @{} - - # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus - # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] - # cast here, which would break the wire-name trace and buys nothing. if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } } diff --git a/Public/Admin/Update-PfbManagementAccessPolicy.ps1 b/Public/Admin/Update-PfbManagementAccessPolicy.ps1 index 8bd6f43..33b7d06 100644 --- a/Public/Admin/Update-PfbManagementAccessPolicy.ps1 +++ b/Public/Admin/Update-PfbManagementAccessPolicy.ps1 @@ -25,8 +25,8 @@ function Update-PfbManagementAccessPolicy { If $true, the policy is enabled. .PARAMETER Location Name of the array where the policy is defined. - .PARAMETER PolicyName - A new user-specified name for the policy. Named -PolicyName rather than -Name because + .PARAMETER NewName + A new user-specified name for the policy. Named -NewName rather than -Name because -Name already identifies which policy to update. .PARAMETER Rules All of the rules that are part of this policy, in evaluation order. Each rule is a @@ -82,7 +82,7 @@ function Update-PfbManagementAccessPolicy { [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] - [string]$PolicyName, + [string]$NewName, [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] @@ -108,26 +108,24 @@ function Update-PfbManagementAccessPolicy { $body = $Attributes } else { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. $body = @{} - if ($AggregationStrategy) { $body['aggregation_strategy'] = $AggregationStrategy } - if ($PolicyName) { $body['name'] = $PolicyName } - - # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus - # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] - # cast here, which would break the wire-name trace and buys nothing. - if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('AggregationStrategy')) { $body['aggregation_strategy'] = $AggregationStrategy } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } # Constraint 8(a): location is a SCALAR REFERENCE (_fixedReference, properties are # exactly {id, name, resource_type}), so the parameter is [string] and the # reference object is built INLINE -- constraint 7 forbids a $locationRef local. - if ($Location) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } # Constraint 8(c): rules is an array of COMPOSITE objects, not references -- the # item schema (ManagementAccessPolicyRuleInPolicy) carries `role`, `scope` and # `index` beyond {id, name, resource_type}, and its own `name` is readOnly. So it # is passed straight through rather than projected into @{ name = ... }, which # would write a field the schema does not accept. - if ($Rules) { $body['rules'] = @($Rules) } + if ($PSBoundParameters.ContainsKey('Rules')) { $body['rules'] = @($Rules) } } $target = if ($Name) { $Name } else { $Id } diff --git a/Public/Admin/Update-PfbOidcIdp.ps1 b/Public/Admin/Update-PfbOidcIdp.ps1 index 55a4ff7..537ffc0 100644 --- a/Public/Admin/Update-PfbOidcIdp.ps1 +++ b/Public/Admin/Update-PfbOidcIdp.ps1 @@ -23,8 +23,8 @@ function Update-PfbOidcIdp { configuration sub-object (`provider_url`, `provider_url_ca_certificate`, `provider_url_ca_certificate_group`), not as a reference to another resource, so it is passed through rather than given a name-only parameter. - .PARAMETER OidcIdpName - A new name for the provider. Named -OidcIdpName rather than -Name because -Name + .PARAMETER NewName + A new name for the provider. Named -NewName rather than -Name because -Name already identifies which IdP to update. .PARAMETER Services Services that the OIDC SSO authentication is used for. @@ -46,7 +46,7 @@ function Update-PfbOidcIdp { Disables the OIDC IdP identified by ID. .EXAMPLE - Update-PfbOidcIdp -Name "azure-ad" -OidcIdpName "azure-ad-renamed" -WhatIf + Update-PfbOidcIdp -Name "azure-ad" -NewName "azure-ad-renamed" -WhatIf Shows what would happen if the OIDC IdP were renamed without making changes. #> @@ -71,7 +71,7 @@ function Update-PfbOidcIdp { [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] - [string]$OidcIdpName, + [string]$NewName, [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] @@ -97,20 +97,18 @@ function Update-PfbOidcIdp { $body = $Attributes } else { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. $body = @{} - if ($OidcIdpName) { $body['name'] = $OidcIdpName } - if ($Services) { $body['services'] = @($Services) } - - # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus - # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] - # cast here, which would break the wire-name trace and buys nothing. - if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('Services')) { $body['services'] = @($Services) } # Constraint 8(c): idp is a COMPOSITE sub-object (_oidcSsoPostIdp carries # provider_url and its CA-certificate references), not a reference -- it has no # `name` property at all, so projecting it into @{ name = ... } would write a # field the schema does not have. Pass it straight through. - if ($Idp) { $body['idp'] = $Idp } + if ($PSBoundParameters.ContainsKey('Idp')) { $body['idp'] = $Idp } } $target = if ($Name) { $Name } else { $Id } diff --git a/Public/Admin/Update-PfbSaml2Idp.ps1 b/Public/Admin/Update-PfbSaml2Idp.ps1 index 2986454..d95ec84 100644 --- a/Public/Admin/Update-PfbSaml2Idp.ps1 +++ b/Public/Admin/Update-PfbSaml2Idp.ps1 @@ -29,8 +29,8 @@ function Update-PfbSaml2Idp { .PARAMETER Management Properties specific to the management service, as a hashtable -- for example @{ trust_other_saml_sps_in_fleet = $false }. - .PARAMETER Saml2IdpName - A new user-specified name for the provider. Named -Saml2IdpName rather than -Name + .PARAMETER NewName + A new user-specified name for the provider. Named -NewName rather than -Name because -Name already identifies which IdP to update. .PARAMETER Services Services that the SAML2 SSO authentication is used for. @@ -92,7 +92,7 @@ function Update-PfbSaml2Idp { [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] - [string]$Saml2IdpName, + [string]$NewName, [Parameter(ParameterSetName = 'ByNameIndividual')] [Parameter(ParameterSetName = 'ByIdIndividual')] @@ -122,24 +122,22 @@ function Update-PfbSaml2Idp { $body = $Attributes } else { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. $body = @{} - if ($ArrayUrl) { $body['array_url'] = $ArrayUrl } - if ($Binding) { $body['binding'] = $Binding } - if ($Saml2IdpName) { $body['name'] = $Saml2IdpName } - if ($Services) { $body['services'] = @($Services) } - - # Constraint 2: explicit $false must still be sent. The [Nullable[bool]] type plus - # this ContainsKey guard is what achieves that -- constraint 7 forbids a [bool] - # cast here, which would break the wire-name trace and buys nothing. - if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('ArrayUrl')) { $body['array_url'] = $ArrayUrl } + if ($PSBoundParameters.ContainsKey('Binding')) { $body['binding'] = $Binding } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('Services')) { $body['services'] = @($Services) } # Constraint 8(c): idp, management and sp are all COMPOSITE sub-objects # (_saml2SsoIdp, _saml2SsoManagement, _saml2SsoSp), not references -- none of them # has a `name` property, so projecting them into @{ name = ... } would write a # field the schema does not have. Pass them straight through. - if ($Idp) { $body['idp'] = $Idp } - if ($Management) { $body['management'] = $Management } - if ($Sp) { $body['sp'] = $Sp } + if ($PSBoundParameters.ContainsKey('Idp')) { $body['idp'] = $Idp } + if ($PSBoundParameters.ContainsKey('Management')) { $body['management'] = $Management } + if ($PSBoundParameters.ContainsKey('Sp')) { $body['sp'] = $Sp } } $target = if ($Name) { $Name } else { $Id } diff --git a/Tests/Update-PfbAdmin.Tests.ps1 b/Tests/Update-PfbAdmin.Tests.ps1 index 4eac4f9..837d73b 100644 --- a/Tests/Update-PfbAdmin.Tests.ps1 +++ b/Tests/Update-PfbAdmin.Tests.ps1 @@ -65,6 +65,31 @@ Describe 'Update-PfbAdmin - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -ManagementAccessPolicies @() so a list can be cleared' { + Update-PfbAdmin -Name 'ops' -ManagementAccessPolicies @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('management_access_policies') -and + @($Body['management_access_policies']).Count -eq 0 + } + } + + It 'sends an EMPTY string for -Password "" rather than dropping the key' { + Update-PfbAdmin -Name 'ops' -Password '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('password') -and $Body['password'] -eq '' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbAdmin -Name 'ops' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + It 'targets the admin by id when -Id is used' { Update-PfbAdmin -Id 'admin-1' -Password 'x' -Confirm:$false -Array $fakeArray diff --git a/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 b/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 index 35f7b24..a268d1a 100644 --- a/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 +++ b/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 @@ -18,7 +18,7 @@ Describe 'Update-PfbManagementAccessPolicy - typed body parameters (#31)' { Context 'typed parameters build the body' { It 'sends aggregation_strategy and the renamed name field' { Update-PfbManagementAccessPolicy -Name 'ops-policy' ` - -AggregationStrategy 'least-common-permissions' -PolicyName 'ops-policy-v2' ` + -AggregationStrategy 'least-common-permissions' -NewName 'ops-policy-v2' ` -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { @@ -39,7 +39,7 @@ Describe 'Update-PfbManagementAccessPolicy - typed body parameters (#31)' { } It 'omits enabled entirely when -Enabled is not supplied' { - Update-PfbManagementAccessPolicy -Name 'ops-policy' -PolicyName 'x' ` + Update-PfbManagementAccessPolicy -Name 'ops-policy' -NewName 'x' ` -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { @@ -47,6 +47,24 @@ Describe 'Update-PfbManagementAccessPolicy - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -Rules @() so a rule list can be cleared' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -Rules @() ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('rules') -and @($Body['rules']).Count -eq 0 + } + } + + It 'sends an EMPTY string for -NewName "" rather than dropping the key' { + Update-PfbManagementAccessPolicy -Name 'ops-policy' -NewName '' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('name') -and $Body['name'] -eq '' + } + } + It 'builds location as a single name-reference object (constraint 8a)' { Update-PfbManagementAccessPolicy -Name 'ops-policy' -Location 'array-1' ` -Confirm:$false -Array $fakeArray diff --git a/Tests/Update-PfbOidcIdp.Tests.ps1 b/Tests/Update-PfbOidcIdp.Tests.ps1 index 1ffeadd..b72b41c 100644 --- a/Tests/Update-PfbOidcIdp.Tests.ps1 +++ b/Tests/Update-PfbOidcIdp.Tests.ps1 @@ -17,7 +17,7 @@ Describe 'Update-PfbOidcIdp - typed body parameters (#31)' { Context 'typed parameters build the body' { It 'sends the renamed name field and services array' { - Update-PfbOidcIdp -Name 'okta-prod' -OidcIdpName 'okta-prod-v2' -Services 'object' ` + Update-PfbOidcIdp -Name 'okta-prod' -NewName 'okta-prod-v2' -Services 'object' ` -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { @@ -37,13 +37,29 @@ Describe 'Update-PfbOidcIdp - typed body parameters (#31)' { } It 'omits enabled entirely when -Enabled is not supplied' { - Update-PfbOidcIdp -Name 'okta-prod' -OidcIdpName 'x' -Confirm:$false -Array $fakeArray + Update-PfbOidcIdp -Name 'okta-prod' -NewName 'x' -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { -not $Body.ContainsKey('enabled') } } + It 'sends an EMPTY array for -Services @() so the list can be cleared' { + Update-PfbOidcIdp -Name 'okta-prod' -Services @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('services') -and @($Body['services']).Count -eq 0 + } + } + + It 'sends an EMPTY string for -NewName "" rather than dropping the key' { + Update-PfbOidcIdp -Name 'okta-prod' -NewName '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('name') -and $Body['name'] -eq '' + } + } + It 'passes idp through as a composite sub-object, NOT a name reference (constraint 8c)' { Update-PfbOidcIdp -Name 'okta-prod' ` -Idp @{ provider_url = 'https://idp.example.com' } ` diff --git a/Tests/Update-PfbSaml2Idp.Tests.ps1 b/Tests/Update-PfbSaml2Idp.Tests.ps1 index 54db97f..fbbc917 100644 --- a/Tests/Update-PfbSaml2Idp.Tests.ps1 +++ b/Tests/Update-PfbSaml2Idp.Tests.ps1 @@ -19,7 +19,7 @@ Describe 'Update-PfbSaml2Idp - typed body parameters (#31)' { It 'sends array_url, binding, the renamed name field and services' { Update-PfbSaml2Idp -Name 'adfs-prod' ` -ArrayUrl 'https://fb.example.test' -Binding 'http-redirect' ` - -Saml2IdpName 'adfs-prod-v2' -Services 'management','object' ` + -NewName 'adfs-prod-v2' -Services 'management','object' ` -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { @@ -48,6 +48,22 @@ Describe 'Update-PfbSaml2Idp - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -Services @() so the list can be cleared' { + Update-PfbSaml2Idp -Name 'adfs-prod' -Services @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('services') -and @($Body['services']).Count -eq 0 + } + } + + It 'sends an EMPTY string for -ArrayUrl "" rather than dropping the key' { + Update-PfbSaml2Idp -Name 'adfs-prod' -ArrayUrl '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('array_url') -and $Body['array_url'] -eq '' + } + } + It 'passes idp, sp and management through as composite sub-objects (constraint 8c)' { Update-PfbSaml2Idp -Name 'adfs-prod' ` -Idp @{ entity_id = 'urn:idp'; metadata_url = 'https://idp/meta' } ` From 49cbf3160cc20272b4ff9299fad3873d75527f7f Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 19:52:59 -0700 Subject: [PATCH 10/90] docs(admin): widen guard comment; test explicit -Timeout 0 (#31 review M-1, M-3) M-1: the canonical guard comment in Update-PfbAdmin.ps1 said the ContainsKey rule applies to 'body parameters', while the query-selector lines a few lines above use truthiness -- an apparent contradiction for the nine agents about to copy this file. Reworded to cover every VALUE-CARRYING parameter, body or query, and to name the real exemption: a mandatory [string] selector is safe on truthiness only because the binder rejects '' before any guard runs. Also notes the exemption is about mandatory-ness, not about being a query parameter -- an optional query parameter still needs ContainsKey, as -Timeout in New-PfbApiToken.ps1 demonstrates. M-3: -Timeout is [long] and the only integer parameter in this batch, so the canonical must demonstrate the explicit-zero case Constraint 2 now demands of every integer body field in the nine remaining batches. Asserts 0 actually reaches queryParams['timeout']. Mutation-verified: reverting the guard to 'if (\)' fails exactly this one test, with the diagnostic showing QueryParams @{admin_names='ops-admin'} and no timeout key. Co-Authored-By: Claude Opus 5 --- Public/Admin/Update-PfbAdmin.ps1 | 16 +++++++++++----- Tests/New-PfbApiToken.Tests.ps1 | 8 ++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Public/Admin/Update-PfbAdmin.ps1 b/Public/Admin/Update-PfbAdmin.ps1 index 037c051..db7c2bd 100644 --- a/Public/Admin/Update-PfbAdmin.ps1 +++ b/Public/Admin/Update-PfbAdmin.ps1 @@ -105,14 +105,20 @@ function Update-PfbAdmin { $body = $Attributes } else { - # EVERY body parameter is guarded by $PSBoundParameters.ContainsKey, never by - # truthiness. This is deliberate and uniform. `if ($X)` silently discards any - # legitimate falsy value the caller explicitly supplied: $false, 0, '' and an empty - # array all fail a truthiness test. So `-Locked $false` would never unlock, an - # integer field could never be set to a meaningful 0, and + # EVERY value-carrying parameter -- body OR query -- is guarded by + # $PSBoundParameters.ContainsKey, never by truthiness. `if ($X)` silently discards + # any legitimate falsy value the caller explicitly supplied: $false, 0, '' and an + # empty array all fail a truthiness test. So `-Locked $false` would never unlock, + # an integer field could never be set to a meaningful 0, and # `-ManagementAccessPolicies @()` could never clear a list. ContainsKey asks the # only correct question -- did the caller supply this parameter at all? # + # The one exemption is a MANDATORY [string] selector like -Name/-Id above: the + # binder rejects '' for those before any guard runs, so their falsy branch is + # unreachable and `if ($Name)` is safe. That exemption is about mandatory-ness, + # not about being a query parameter -- an OPTIONAL query parameter still needs + # ContainsKey (see -Timeout in New-PfbApiToken.ps1). + # # No [bool] cast on $Locked either: constraint 7 forbids it (it breaks the # wire-name trace) and [Nullable[bool]] + ContainsKey already sends an explicit # $false correctly. diff --git a/Tests/New-PfbApiToken.Tests.ps1 b/Tests/New-PfbApiToken.Tests.ps1 index 04e1a0b..9f39484 100644 --- a/Tests/New-PfbApiToken.Tests.ps1 +++ b/Tests/New-PfbApiToken.Tests.ps1 @@ -69,6 +69,14 @@ Describe 'New-PfbApiToken - query parameters (#31)' { } } + It 'sends an explicit -Timeout 0 rather than dropping it (constraint 2, integer field)' { + New-PfbApiToken -Name 'ops-admin' -Timeout 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('timeout') -and $QueryParams['timeout'] -eq 0 + } + } + It 'omits timeout entirely when not supplied' { New-PfbApiToken -Name 'ops-admin' -Confirm:$false -Array $fakeArray From fee613eac715ddaf68fa349ae51e8686d2df7a14 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Mon, 27 Jul 2026 23:14:06 -0700 Subject: [PATCH 11/90] fix(admin): correct canonical help and close its constraint-test gap (#31) Three Minor findings from the Task 1 independent audit, fixed in the files the remaining 49 cmdlets are told to copy. M3 Update-PfbApiClient help claimed "every property except enabled is read-only". max_role is readOnly:false -- it is deprecated (constraint 9), not read-only. Seven of nine properties are read-only. The two rules have different justifications and the conflated wording invites agents to generalise wrongly. M4 Tests/Update-PfbAdmin.Tests.ps1 was the weakest of the six test files while being the named reference. Adds a constraint-compliance Context asserting no ValidateSet on any of the six typed body parameters (PATCH /admins declares no enum on any body property) plus a parameter-presence assertion. Mutation-proved: adding [ValidateSet('a','b')] to -AuthorizationModel makes it fail. M6 New-PfbApiToken .PARAMETER Attributes said "additional token attributes" while the DESCRIPTION eleven lines above says the endpoint takes no request body. Five query-only New-Pfb* cmdlets copy this file's shape. Suite 714/8/2, up 7 passed from 707/8/2. Failure count unchanged; all eight are pre-existing stale acceptance pins. --- Public/Admin/New-PfbApiToken.ps1 | 4 +++- Public/Admin/Update-PfbApiClient.ps1 | 7 ++++--- Tests/Update-PfbAdmin.Tests.ps1 | 25 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Public/Admin/New-PfbApiToken.ps1 b/Public/Admin/New-PfbApiToken.ps1 index 910d0f0..da8acdf 100644 --- a/Public/Admin/New-PfbApiToken.ps1 +++ b/Public/Admin/New-PfbApiToken.ps1 @@ -18,7 +18,9 @@ function New-PfbApiToken { .PARAMETER Timeout The duration of API token validity, in milliseconds. .PARAMETER Attributes - A hashtable of additional token attributes. + Retained for backward compatibility only. `POST /admins/api-tokens` accepts no request + body, so nothing supplied here is sent to the array. Use -Timeout to set the token's + validity period. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE diff --git a/Public/Admin/Update-PfbApiClient.ps1 b/Public/Admin/Update-PfbApiClient.ps1 index f694503..ea7157e 100644 --- a/Public/Admin/Update-PfbApiClient.ps1 +++ b/Public/Admin/Update-PfbApiClient.ps1 @@ -6,9 +6,10 @@ function Update-PfbApiClient { The Update-PfbApiClient cmdlet modifies an existing API client on the connected Everpure FlashBlade. - Note that `PATCH /api-clients` reuses the full ApiClient resource schema, in which - every property except `enabled` is read-only. `enabled` is therefore the only - settable field this cmdlet exposes as a typed parameter. + Note that `PATCH /api-clients` reuses the full ApiClient resource schema. Of its nine + properties, seven are read-only and `max_role` is deprecated rather than read-only, + which leaves `enabled` as the only settable field this cmdlet exposes as a typed + parameter. The individual typed parameters and the raw -Attributes hashtable are mutually exclusive: they live in separate parameter sets, so PowerShell rejects a mixed diff --git a/Tests/Update-PfbAdmin.Tests.ps1 b/Tests/Update-PfbAdmin.Tests.ps1 index 837d73b..a5cd4f0 100644 --- a/Tests/Update-PfbAdmin.Tests.ps1 +++ b/Tests/Update-PfbAdmin.Tests.ps1 @@ -121,4 +121,29 @@ Describe 'Update-PfbAdmin - typed body parameters (#31)' { (Get-Command Update-PfbAdmin).Parameters.Keys | Should -Not -Contain 'Role' } } + + Context 'constraint compliance' { + # PATCH /admins declares no enum on any body property, so every typed parameter must + # be free of ValidateSet. This file is the reference the other batches copy, so the + # assertion belongs here even though there is nothing to remove today. + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'AuthorizationModel' } + @{ Parameter = 'Locked' } + @{ Parameter = 'OldPassword' } + @{ Parameter = 'Password' } + @{ Parameter = 'PublicKey' } + @{ Parameter = 'ManagementAccessPolicies' } + ) { + $attrs = (Get-Command Update-PfbAdmin).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts (constraint 11 has no read-only field to exclude here)' { + $keys = (Get-Command Update-PfbAdmin).Parameters.Keys + foreach ($p in 'AuthorizationModel','Locked','OldPassword','Password','PublicKey','ManagementAccessPolicies') { + $keys | Should -Contain $p + } + } + } } From 797958dbb869c69fea166a5d62e581c3fa2a4942 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:30:45 -0700 Subject: [PATCH 12/90] feat(policy): add typed body params to Update-PfbQosPolicy (#31) --- Public/Policy/Update-PfbQosPolicy.ps1 | 80 ++++++++++++++-- Tests/Update-PfbQosPolicy.Tests.ps1 | 130 ++++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbQosPolicy.Tests.ps1 diff --git a/Public/Policy/Update-PfbQosPolicy.ps1 b/Public/Policy/Update-PfbQosPolicy.ps1 index 8d9eb2e..5f6adc9 100644 --- a/Public/Policy/Update-PfbQosPolicy.ps1 +++ b/Public/Policy/Update-PfbQosPolicy.ps1 @@ -4,19 +4,36 @@ function Update-PfbQosPolicy { Updates an existing QoS policy on a FlashBlade array. .DESCRIPTION The Update-PfbQosPolicy cmdlet modifies attributes of an existing QoS policy on the - connected Pure Storage FlashBlade. The policy can be identified by name or ID. + connected Everpure FlashBlade. The policy can be identified by name or ID. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the QoS policy to update. + The name of the QoS policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the QoS policy to update. + .PARAMETER Enabled + If true, the policy is enabled. + .PARAMETER Location + Reference to the array where the policy is defined. + .PARAMETER MaxTotalBytesPerSec + The maximum allowed bytes/s totaled across all the clients. + .PARAMETER MaxTotalOpsPerSec + The maximum allowed operations/s totaled across all the clients. + .PARAMETER NewName + A new name for the QoS policy. .PARAMETER Attributes - A hashtable of QoS policy attributes to modify. + A hashtable of QoS policy attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbQosPolicy -Name "qos-gold" -Attributes @{ max_total_bytes_per_sec = 2147483648 } + Update-PfbQosPolicy -Name "qos-gold" -MaxTotalBytesPerSec 2147483648 - Updates the max bandwidth for the specified QoS policy to 2 GB/s. + Updates the max bandwidth for the specified QoS policy to 2 GB/s using a typed + parameter. .EXAMPLE Update-PfbQosPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ max_total_ops_per_sec = 20000 } @@ -26,11 +43,41 @@ function Update-PfbQosPolicy { Shows what would happen without actually updating the policy. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$MaxTotalBytesPerSec, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$MaxTotalOpsPerSec, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +88,22 @@ function Update-PfbQosPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('MaxTotalBytesPerSec')) { $body['max_total_bytes_per_sec'] = $MaxTotalBytesPerSec } + if ($PSBoundParameters.ContainsKey('MaxTotalOpsPerSec')) { $body['max_total_ops_per_sec'] = $MaxTotalOpsPerSec } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update QoS policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'qos-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'qos-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbQosPolicy.Tests.ps1 b/Tests/Update-PfbQosPolicy.Tests.ps1 new file mode 100644 index 0000000..6ac7c4c --- /dev/null +++ b/Tests/Update-PfbQosPolicy.Tests.ps1 @@ -0,0 +1,130 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbQosPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends enabled as a body field (ContainsKey semantics, not truthiness)' { + Update-PfbQosPolicy -Name 'qos-gold' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'qos-policies' -and + $QueryParams['names'] -eq 'qos-gold' -and + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'builds location as a name-reference object' { + Update-PfbQosPolicy -Name 'qos-gold' -Location 'array-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'sends max_total_bytes_per_sec as a body field' { + Update-PfbQosPolicy -Name 'qos-gold' -MaxTotalBytesPerSec 2147483648 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['max_total_bytes_per_sec'] -eq 2147483648 + } + } + + It 'sends an explicit -MaxTotalOpsPerSec 0 rather than dropping it (constraint 2: 0 means unlimited)' { + Update-PfbQosPolicy -Name 'qos-gold' -MaxTotalOpsPerSec 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('max_total_ops_per_sec') -and $Body['max_total_ops_per_sec'] -eq 0 + } + } + + It 'omits max_total_ops_per_sec entirely when not supplied' { + Update-PfbQosPolicy -Name 'qos-gold' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('max_total_ops_per_sec') + } + } + + It 'sends -NewName as the name body field (rename exception, not -QosPolicyName)' { + Update-PfbQosPolicy -Name 'qos-gold' -NewName 'qos-platinum' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'qos-platinum' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbQosPolicy -Name 'qos-gold' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the policy by id when -Id is used' { + Update-PfbQosPolicy -Id 'policy-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbQosPolicy -Name 'qos-gold' -Attributes @{ enabled = $true } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbQosPolicy -Name 'qos-gold' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never exposed (constraint 11)' { + It 'has no -IsLocal or -PolicyType parameter' { + $keys = (Get-Command Update-PfbQosPolicy).Parameters.Keys + $keys | Should -Not -Contain 'IsLocal' + $keys | Should -Not -Contain 'PolicyType' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Enabled' } + @{ Parameter = 'Location' } + @{ Parameter = 'MaxTotalBytesPerSec' } + @{ Parameter = 'MaxTotalOpsPerSec' } + @{ Parameter = 'NewName' } + ) { + $attrs = (Get-Command Update-PfbQosPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbQosPolicy).Parameters.Keys + foreach ($p in 'Enabled','Location','MaxTotalBytesPerSec','MaxTotalOpsPerSec','NewName') { + $keys | Should -Contain $p + } + } + } +} From d5df269ee9c6804562f237616f37422b1d26f16c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:31:32 -0700 Subject: [PATCH 13/90] feat(objectstore): add typed body params to Update-PfbObjectStoreAccountExport (#31) --- .../Update-PfbObjectStoreAccountExport.ps1 | 52 +++++++-- ...date-PfbObjectStoreAccountExport.Tests.ps1 | 100 ++++++++++++++++++ 2 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 Tests/Update-PfbObjectStoreAccountExport.Tests.ps1 diff --git a/Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1 b/Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1 index 2ef07e1..312fb0c 100644 --- a/Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1 +++ b/Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1 @@ -5,14 +5,28 @@ function Update-PfbObjectStoreAccountExport { .DESCRIPTION Modifies the properties of an existing account export, such as its enabled state or export rules. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the account export to update. .PARAMETER Id The ID of the account export to update. + .PARAMETER ExportEnabled + If set to `true`, the account export is enabled. + .PARAMETER Policy + Reference to the s3 export policy that is used for the export. .PARAMETER Attributes - A hashtable of export properties to update. + A hashtable of export properties to update. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. + .EXAMPLE + Update-PfbObjectStoreAccountExport -Name "nfs-export-1" -ExportEnabled:$false + + Disables the specified account export using a typed parameter. .EXAMPLE Update-PfbObjectStoreAccountExport -Name "nfs-export-1" -Attributes @{ enabled = $false @@ -27,15 +41,27 @@ function Update-PfbObjectStoreAccountExport { Update-PfbObjectStoreAccountExport -Name "export-acct-prod" -Attributes @{} Sends an empty update to refresh the export object. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$ExportEnabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Policy, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,12 +72,24 @@ function Update-PfbObjectStoreAccountExport { } process { - $target = if ($Name) { $Name } else { $Id } - $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('ExportEnabled')) { $body['export_enabled'] = $ExportEnabled } + + # Constraint 8(a): policy is a SCALAR REFERENCE (item schema is {id, name, + # resource_type}), so the parameter is [string] and the projection is assigned + # INLINE -- constraint 7 forbids a local variable here. + if ($PSBoundParameters.ContainsKey('Policy')) { $body['policy'] = @{ name = $Policy } } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update object store account export')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'object-store-account-exports' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbObjectStoreAccountExport.Tests.ps1 b/Tests/Update-PfbObjectStoreAccountExport.Tests.ps1 new file mode 100644 index 0000000..f8f7e0f --- /dev/null +++ b/Tests/Update-PfbObjectStoreAccountExport.Tests.ps1 @@ -0,0 +1,100 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbObjectStoreAccountExport - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends an explicit -ExportEnabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbObjectStoreAccountExport -Name 'export-1' -ExportEnabled:$false ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'object-store-account-exports' -and + $QueryParams['names'] -eq 'export-1' -and + $Body.ContainsKey('export_enabled') -and $Body['export_enabled'] -eq $false + } + } + + It 'omits export_enabled entirely when -ExportEnabled is not supplied' { + Update-PfbObjectStoreAccountExport -Name 'export-1' -Policy 'export-policy' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('export_enabled') + } + } + + It 'builds policy as a name-reference object (constraint 8a, scalar reference)' { + Update-PfbObjectStoreAccountExport -Name 'export-1' -Policy 'export-policy' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['policy'].name -eq 'export-policy' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbObjectStoreAccountExport -Name 'export-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the account export by id when -Id is used' { + Update-PfbObjectStoreAccountExport -Id 'export-id-1' -ExportEnabled:$true ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'export-id-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbObjectStoreAccountExport -Name 'export-1' -Attributes @{ export_enabled = $false } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['export_enabled'] -eq $false + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbObjectStoreAccountExport -Name 'export-1' -ExportEnabled:$false -Attributes @{ export_enabled = $true } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ExportEnabled' } + @{ Parameter = 'Policy' } + ) { + $attrs = (Get-Command Update-PfbObjectStoreAccountExport).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbObjectStoreAccountExport).Parameters.Keys + foreach ($p in 'ExportEnabled','Policy') { + $keys | Should -Contain $p + } + } + } +} From b1c242601ab142d7ff083b7acca23a59191b96a0 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:31:44 -0700 Subject: [PATCH 14/90] feat(hardware): add typed body params to Update-PfbHardware (#31) --- Public/Hardware/Update-PfbHardware.ps1 | 54 +++++++++++++--- Tests/Update-PfbHardware.Tests.ps1 | 85 ++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbHardware.Tests.ps1 diff --git a/Public/Hardware/Update-PfbHardware.ps1 b/Public/Hardware/Update-PfbHardware.ps1 index bbe148c..b530b96 100644 --- a/Public/Hardware/Update-PfbHardware.ps1 +++ b/Public/Hardware/Update-PfbHardware.ps1 @@ -4,21 +4,30 @@ function Update-PfbHardware { Updates a hardware component on a FlashBlade array. .DESCRIPTION The Update-PfbHardware cmdlet modifies attributes of a hardware component on the - connected Pure Storage FlashBlade. The component can be identified by name or ID. + connected Everpure FlashBlade. The component can be identified by name or ID. Common updates include enabling or disabling visual identification LEDs. Supports ShouldProcess for -WhatIf and -Confirm. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the hardware component to update. + The name of the hardware component to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the hardware component to update. + .PARAMETER IdentifyEnabled + State of an LED used to visually identify the component. .PARAMETER Attributes - A hashtable of hardware attributes to modify, such as identify_enabled. + A hashtable of hardware attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbHardware -Name "CH1.FB1" -Attributes @{ identify_enabled = $true } + Update-PfbHardware -Name "CH1.FB1" -IdentifyEnabled $true - Enables the identification LED on the specified hardware component. + Enables the identification LED on the specified hardware component using a typed + parameter. .EXAMPLE Update-PfbHardware -Id "10314f42-020d-7080-8013-000ddt400001" -Attributes @{ identify_enabled = $false } @@ -28,11 +37,25 @@ function Update-PfbHardware { Shows what would happen without applying the change. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$IdentifyEnabled, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,9 +65,20 @@ function Update-PfbHardware { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('IdentifyEnabled')) { $body['identify_enabled'] = $IdentifyEnabled } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update hardware')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'hardware' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'hardware' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbHardware.Tests.ps1 b/Tests/Update-PfbHardware.Tests.ps1 new file mode 100644 index 0000000..583db3c --- /dev/null +++ b/Tests/Update-PfbHardware.Tests.ps1 @@ -0,0 +1,85 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbHardware - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends identify_enabled as a body field' { + Update-PfbHardware -Name 'CH1.FB1' -IdentifyEnabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'hardware' -and + $QueryParams['names'] -eq 'CH1.FB1' -and + $Body['identify_enabled'] -eq $true + } + } + + It 'sends an explicit -IdentifyEnabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbHardware -Name 'CH1.FB1' -IdentifyEnabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('identify_enabled') -and $Body['identify_enabled'] -eq $false + } + } + + It 'omits identify_enabled entirely when not supplied' { + Update-PfbHardware -Name 'CH1.FB1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('identify_enabled') + } + } + + It 'targets the component by id when -Id is used' { + Update-PfbHardware -Id 'hw-1' -IdentifyEnabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'hw-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbHardware -Name 'CH1.FB1' -Attributes @{ identify_enabled = $true } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['identify_enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbHardware -Name 'CH1.FB1' -IdentifyEnabled $true -Attributes @{ identify_enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -IdentifyEnabled (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbHardware).Parameters['IdentifyEnabled'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'does not expose any of the 15 read-only fields as parameters (constraint 11)' { + $keys = (Get-Command Update-PfbHardware).Parameters.Keys + foreach ($ro in 'DataMac','Details','Index','ManagementMac','Model','PartNumber','SensorReadings','Serial','Slot','Speed','Status','Temperature','Type') { + $keys | Should -Not -Contain $ro + } + } + } +} From c56a80ff12e3000116243ec25d4cf586b02f19fc Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:32:45 -0700 Subject: [PATCH 15/90] feat(policy): add typed body params to Update-PfbSshCaPolicy (#31) --- Public/Policy/Update-PfbSshCaPolicy.ps1 | 83 +++++++++++++-- Tests/Update-PfbSshCaPolicy.Tests.ps1 | 133 ++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbSshCaPolicy.Tests.ps1 diff --git a/Public/Policy/Update-PfbSshCaPolicy.ps1 b/Public/Policy/Update-PfbSshCaPolicy.ps1 index 5c9d1e5..c6c8613 100644 --- a/Public/Policy/Update-PfbSshCaPolicy.ps1 +++ b/Public/Policy/Update-PfbSshCaPolicy.ps1 @@ -4,19 +4,37 @@ function Update-PfbSshCaPolicy { Updates an existing SSH certificate authority policy on a FlashBlade array. .DESCRIPTION The Update-PfbSshCaPolicy cmdlet modifies attributes of an existing SSH CA policy on - the connected Pure Storage FlashBlade. The policy can be identified by name or ID. + the connected Everpure FlashBlade. The policy can be identified by name or ID. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the SSH CA policy to update. + The name of the SSH CA policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the SSH CA policy to update. + .PARAMETER Enabled + If true, the policy is enabled. + .PARAMETER Location + Reference to the array where the policy is defined. + .PARAMETER NewName + A new name for the SSH CA policy. + .PARAMETER SigningAuthority + A reference to the authority that will digitally sign user SSH certificates that + will be used to access the system. + .PARAMETER StaticAuthorizedPrincipals + 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 principal. .PARAMETER Attributes - A hashtable of SSH CA policy attributes to modify. + A hashtable of SSH CA policy attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbSshCaPolicy -Name "ssh-ca-prod" -Attributes @{ enabled = $true } + Update-PfbSshCaPolicy -Name "ssh-ca-prod" -Enabled $true - Enables the SSH CA policy named "ssh-ca-prod". + Enables the SSH CA policy named "ssh-ca-prod" using a typed parameter. .EXAMPLE Update-PfbSshCaPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ public_key = "ssh-rsa NEW..." } @@ -26,11 +44,41 @@ function Update-PfbSshCaPolicy { Shows what would happen without actually updating the policy. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$SigningAuthority, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$StaticAuthorizedPrincipals, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +89,24 @@ function Update-PfbSshCaPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('SigningAuthority')) { $body['signing_authority'] = @{ name = $SigningAuthority } } + if ($PSBoundParameters.ContainsKey('StaticAuthorizedPrincipals')) { + $body['static_authorized_principals'] = @($StaticAuthorizedPrincipals) + } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update SSH CA policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'ssh-certificate-authority-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'ssh-certificate-authority-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbSshCaPolicy.Tests.ps1 b/Tests/Update-PfbSshCaPolicy.Tests.ps1 new file mode 100644 index 0000000..4d4b8b4 --- /dev/null +++ b/Tests/Update-PfbSshCaPolicy.Tests.ps1 @@ -0,0 +1,133 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbSshCaPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends enabled as a body field (ContainsKey semantics, not truthiness)' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'ssh-certificate-authority-policies' -and + $QueryParams['names'] -eq 'ssh-ca-prod' -and + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'builds location as a name-reference object' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -Location 'array-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'sends -NewName as the name body field (rename exception, not -SshCaPolicyName)' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -NewName 'ssh-ca-prod-2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'ssh-ca-prod-2' + } + } + + It 'builds signing_authority as a name-reference object' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -SigningAuthority 'ca-cert-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['signing_authority'].name -eq 'ca-cert-1' + } + } + + It 'sends static_authorized_principals as a plain string array' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -StaticAuthorizedPrincipals 'alice','bob' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['static_authorized_principals']).Count -eq 2 -and + $Body['static_authorized_principals'][0] -eq 'alice' -and + $Body['static_authorized_principals'][1] -eq 'bob' + } + } + + It 'sends an EMPTY array for -StaticAuthorizedPrincipals @() so a list can be cleared' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -StaticAuthorizedPrincipals @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('static_authorized_principals') -and + @($Body['static_authorized_principals']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the policy by id when -Id is used' { + Update-PfbSshCaPolicy -Id 'policy-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -Attributes @{ enabled = $true } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbSshCaPolicy -Name 'ssh-ca-prod' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never exposed (constraint 11)' { + It 'has no -IsLocal or -PolicyType parameter' { + $keys = (Get-Command Update-PfbSshCaPolicy).Parameters.Keys + $keys | Should -Not -Contain 'IsLocal' + $keys | Should -Not -Contain 'PolicyType' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Enabled' } + @{ Parameter = 'Location' } + @{ Parameter = 'NewName' } + @{ Parameter = 'SigningAuthority' } + @{ Parameter = 'StaticAuthorizedPrincipals' } + ) { + $attrs = (Get-Command Update-PfbSshCaPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbSshCaPolicy).Parameters.Keys + foreach ($p in 'Enabled','Location','NewName','SigningAuthority','StaticAuthorizedPrincipals') { + $keys | Should -Contain $p + } + } + } +} From b21712958bd7780e3f94e6e121b86fb666987322 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:32:56 -0700 Subject: [PATCH 16/90] feat(misc): add typed query params to New-PfbLegalHoldEntity (#31) --- Public/Misc/New-PfbLegalHoldEntity.ps1 | 51 ++++++++++++- Tests/New-PfbLegalHoldEntity.Tests.ps1 | 99 ++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 Tests/New-PfbLegalHoldEntity.Tests.ps1 diff --git a/Public/Misc/New-PfbLegalHoldEntity.ps1 b/Public/Misc/New-PfbLegalHoldEntity.ps1 index 56aec9d..5544504 100644 --- a/Public/Misc/New-PfbLegalHoldEntity.ps1 +++ b/Public/Misc/New-PfbLegalHoldEntity.ps1 @@ -10,8 +10,23 @@ function New-PfbLegalHoldEntity { The name of the legal hold. .PARAMETER MemberName The name of the entity to place under legal hold. + .PARAMETER FileSystemIds + The IDs of the file systems to place under legal hold. + .PARAMETER FileSystemNames + The names of the file systems to place under legal hold. + .PARAMETER Ids + The IDs of the held entities to create. + .PARAMETER Names + The names of the held entities to create. + .PARAMETER Paths + The paths to place under legal hold. + .PARAMETER Recursive + If set to `true`, the legal hold is applied recursively to the specified path or + file system. .PARAMETER Attributes - A hashtable of additional attributes for the held-entity body. + A hashtable of additional attributes for the held-entity body. `POST + /legal-holds/held-entities` accepts no request body, so nothing supplied here is + sent to the array. Use the typed query parameters above instead. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -19,9 +34,9 @@ function New-PfbLegalHoldEntity { Places file system "fs1" under the legal hold "litigation-hold-2024". .EXAMPLE - New-PfbLegalHoldEntity -HoldName "litigation-hold-2024" -MemberName "fs1" -Attributes @{ type = 'file-system' } + New-PfbLegalHoldEntity -HoldName "litigation-hold-2024" -Paths "/dir1" -Recursive $true - Adds a held entity with explicit type attribute. + Recursively places everything under "/dir1" under the specified legal hold. .EXAMPLE New-PfbLegalHoldEntity -HoldName "sec-investigation" -MemberName "bucket1" -Confirm:$false @@ -35,6 +50,24 @@ function New-PfbLegalHoldEntity { [Parameter()] [string]$MemberName, + [Parameter()] + [string[]]$FileSystemIds, + + [Parameter()] + [string[]]$FileSystemNames, + + [Parameter()] + [string[]]$Ids, + + [Parameter()] + [string[]]$Names, + + [Parameter()] + [string[]]$Paths, + + [Parameter()] + [Nullable[bool]]$Recursive, + [Parameter()] [hashtable]$Attributes, @@ -43,12 +76,24 @@ function New-PfbLegalHoldEntity { Assert-PfbConnection -Array ([ref]$Array) + # POST /legal-holds/held-entities accepts no request body at all -- everything this + # endpoint accepts is a query parameter (see New-PfbApiToken.ps1 for the identical shape). $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($HoldName) { $queryParams['hold_names'] = $HoldName } if ($MemberName) { $queryParams['member_names'] = $MemberName } + # Every newly added query parameter is guarded by ContainsKey, never truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. An array field's `@()` must still reach the + # wire so a caller can send an explicitly empty list. + if ($PSBoundParameters.ContainsKey('FileSystemIds')) { $queryParams['file_system_ids'] = $FileSystemIds -join ',' } + if ($PSBoundParameters.ContainsKey('FileSystemNames')) { $queryParams['file_system_names'] = $FileSystemNames -join ',' } + if ($PSBoundParameters.ContainsKey('Ids')) { $queryParams['ids'] = $Ids -join ',' } + if ($PSBoundParameters.ContainsKey('Names')) { $queryParams['names'] = $Names -join ',' } + if ($PSBoundParameters.ContainsKey('Paths')) { $queryParams['paths'] = $Paths -join ',' } + if ($PSBoundParameters.ContainsKey('Recursive')) { $queryParams['recursive'] = $Recursive } + $target = "${HoldName}:${MemberName}" if ($PSCmdlet.ShouldProcess($target, 'Add legal hold entity')) { diff --git a/Tests/New-PfbLegalHoldEntity.Tests.ps1 b/Tests/New-PfbLegalHoldEntity.Tests.ps1 new file mode 100644 index 0000000..df44d16 --- /dev/null +++ b/Tests/New-PfbLegalHoldEntity.Tests.ps1 @@ -0,0 +1,99 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing hold/member selectors (regression, unchanged)' { + It 'still sends -HoldName as hold_names and -MemberName as member_names' { + New-PfbLegalHoldEntity -HoldName 'litigation-hold-2024' -MemberName 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'legal-holds/held-entities' -and + $QueryParams['hold_names'] -eq 'litigation-hold-2024' -and + $QueryParams['member_names'] -eq 'fs1' + } + } + } + + Context 'new query parameters' { + It 'joins -FileSystemIds and -FileSystemNames with commas' { + New-PfbLegalHoldEntity -FileSystemIds 'fsid-1', 'fsid-2' -FileSystemNames 'fs1', 'fs2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['file_system_ids'] -eq 'fsid-1,fsid-2' -and + $QueryParams['file_system_names'] -eq 'fs1,fs2' + } + } + + It 'joins -Ids and -Names with commas' { + New-PfbLegalHoldEntity -Ids 'id-1', 'id-2' -Names 'e1', 'e2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'id-1,id-2' -and + $QueryParams['names'] -eq 'e1,e2' + } + } + + It 'sends an EMPTY array for -Ids @() so the query key still reaches the wire (constraint 2)' { + New-PfbLegalHoldEntity -Ids @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('ids') -and @($QueryParams['ids'] -split ',' | Where-Object { $_ }).Count -eq 0 + } + } + + It 'joins -Paths with commas' { + New-PfbLegalHoldEntity -Paths '/dir1', '/dir2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['paths'] -eq '/dir1,/dir2' + } + } + + It 'sends an explicit -Recursive:$false (ContainsKey semantics, not truthiness)' { + New-PfbLegalHoldEntity -MemberName 'fs1' -Recursive $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('recursive') -and $QueryParams['recursive'] -eq $false + } + } + + It 'sends -Recursive:$true when supplied' { + New-PfbLegalHoldEntity -MemberName 'fs1' -Recursive $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['recursive'] -eq $true + } + } + + It 'omits recursive entirely when not supplied' { + New-PfbLegalHoldEntity -MemberName 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('recursive') + } + } + } + + Context 'endpoint accepts no request body' { + It 'sends an empty body when -Attributes is not supplied' { + New-PfbLegalHoldEntity -MemberName 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From 10bec48ca9c2dedacb53f073b6c41fcb1ba5ee43 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:33:30 -0700 Subject: [PATCH 17/90] feat(objectstore): add typed body params to Update-PfbObjectStoreRemoteCredential (#31) --- .../Update-PfbObjectStoreRemoteCredential.ps1 | 71 +++++++++- ...e-PfbObjectStoreRemoteCredential.Tests.ps1 | 125 ++++++++++++++++++ 2 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 diff --git a/Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1 b/Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1 index a1d4340..3e787a3 100644 --- a/Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1 +++ b/Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1 @@ -6,15 +6,34 @@ function Update-PfbObjectStoreRemoteCredential { Modifies the properties of an existing remote credential, such as rotating the access key or secret key used for replication to an external S3-compatible target. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the remote credential to update. .PARAMETER Id The ID of the remote credential to update. + .PARAMETER AccessKeyId + Access Key ID to be used when connecting to a remote object store. + .PARAMETER NewName + A new user-specified name for the remote credential. + .PARAMETER Remote + Reference to the associated remote, which can either be a target or remote array. + .PARAMETER SecretAccessKey + Secret Access Key to be used when connecting to a remote object store. Treated as + sensitive: never logged or echoed via -Verbose. .PARAMETER Attributes A hashtable of credential properties to update, such as access_key_id - and secret_access_key. + and secret_access_key. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. + .EXAMPLE + Update-PfbObjectStoreRemoteCredential -Name "s3-repl-cred" -SecretAccessKey "newSecretKeyValue12345EXAMPLEKEY" + + Rotates the secret access key using a typed parameter. .EXAMPLE Update-PfbObjectStoreRemoteCredential -Name "s3-repl-cred" -Attributes @{ secret_access_key = "newSecretKeyValue12345EXAMPLEKEY" @@ -32,15 +51,38 @@ function Update-PfbObjectStoreRemoteCredential { } Updates the access key ID for the backup-target credential. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$AccessKeyId, + + # EXCEPTION: the wire field is literally `name` (a rename), so the parameter is + # -NewName, never -RemoteCredentialName -- see Global Constraint on the `name` field. + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Remote, + + # Sensitive: no default value, never echoed via Write-Verbose. + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$SecretAccessKey, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -51,12 +93,27 @@ function Update-PfbObjectStoreRemoteCredential { } process { - $target = if ($Name) { $Name } else { $Id } - $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('AccessKeyId')) { $body['access_key_id'] = $AccessKeyId } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + + # Constraint 8(a): remote is a SCALAR REFERENCE (item schema is {id, name, + # resource_type}), so the parameter is [string] and the projection is assigned + # INLINE -- constraint 7 forbids a local variable here. + if ($PSBoundParameters.ContainsKey('Remote')) { $body['remote'] = @{ name = $Remote } } + + if ($PSBoundParameters.ContainsKey('SecretAccessKey')) { $body['secret_access_key'] = $SecretAccessKey } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update object store remote credential')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'object-store-remote-credentials' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 new file mode 100644 index 0000000..7a46c0c --- /dev/null +++ b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 @@ -0,0 +1,125 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbObjectStoreRemoteCredential - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends access_key_id and secret_access_key as body fields' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -AccessKeyId 'AKIAIOSFODNN7EXAMPLE' ` + -SecretAccessKey 'newSecretKeyValue12345EXAMPLEKEY' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'object-store-remote-credentials' -and + $QueryParams['names'] -eq 's3-repl-cred' -and + $Body['access_key_id'] -eq 'AKIAIOSFODNN7EXAMPLE' -and + $Body['secret_access_key'] -eq 'newSecretKeyValue12345EXAMPLEKEY' + } + } + + It 'sends an EMPTY string for -AccessKeyId "" rather than dropping the key' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -AccessKeyId '' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('access_key_id') -and $Body['access_key_id'] -eq '' + } + } + + It 'sends -NewName as the name body field (rename exception, not -RemoteCredentialName)' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -NewName 'renamed-cred' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'renamed-cred' + } + } + + It 'builds remote as a name-reference object (constraint 8a, scalar reference)' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -Remote 'target-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remote'].name -eq 'target-1' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the remote credential by id when -Id is used' { + Update-PfbObjectStoreRemoteCredential -Id 'cred-id-1' -AccessKeyId 'x' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'cred-id-1' -and -not $QueryParams.ContainsKey('names') + } + } + + It 'has no -SecretAccessKey default value (sensitive field)' { + (Get-Command Update-PfbObjectStoreRemoteCredential).Parameters['SecretAccessKey'].Attributes | + Where-Object { $_ -is [System.Management.Automation.PSDefaultValueAttribute] } | + Should -BeNullOrEmpty + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -Attributes @{ secret_access_key = 'raw' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['secret_access_key'] -eq 'raw' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -AccessKeyId 'x' -Attributes @{ access_key_id = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'AccessKeyId' } + @{ Parameter = 'NewName' } + @{ Parameter = 'Remote' } + @{ Parameter = 'SecretAccessKey' } + ) { + $attrs = (Get-Command Update-PfbObjectStoreRemoteCredential).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbObjectStoreRemoteCredential).Parameters.Keys + foreach ($p in 'AccessKeyId','NewName','Remote','SecretAccessKey') { + $keys | Should -Contain $p + } + } + + It 'has no read-only field parameters (constraint 11: context, id, realms)' { + $keys = (Get-Command Update-PfbObjectStoreRemoteCredential).Parameters.Keys + foreach ($p in 'Context','Realms') { + $keys | Should -Not -Contain $p + } + } + } +} From 1ffcd16475f20e933e4694090308ab581d3ef85f Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:33:31 -0700 Subject: [PATCH 18/90] feat(certificate): add typed body params to Update-PfbCertificate (#31) Adds all 16 settable CertificatePatch body fields plus the generate_new_key query parameter as typed, ContainsKey-guarded parameters in new ByNameIndividual/ ByIdIndividual parameter sets, mutually exclusive with -Attributes. The six read-only fields (issued_by, issued_to, realms, status, valid_from, valid_to) are excluded per the field reference. generate_new_key stays a bare parameter since it is a query field orthogonal to the body. Co-Authored-By: Claude Sonnet 5 --- Public/Certificate/Update-PfbCertificate.ps1 | 189 ++++++++++++++-- Tests/Update-PfbCertificate.Tests.ps1 | 224 +++++++++++++++++++ 2 files changed, 399 insertions(+), 14 deletions(-) create mode 100644 Tests/Update-PfbCertificate.Tests.ps1 diff --git a/Public/Certificate/Update-PfbCertificate.ps1 b/Public/Certificate/Update-PfbCertificate.ps1 index ede8cd0..17ba7ca 100644 --- a/Public/Certificate/Update-PfbCertificate.ps1 +++ b/Public/Certificate/Update-PfbCertificate.ps1 @@ -1,25 +1,75 @@ function Update-PfbCertificate { <# .SYNOPSIS - Updates an existing SSL/TLS certificate on a Pure Storage FlashBlade. + Updates an existing SSL/TLS certificate on an Everpure FlashBlade. .DESCRIPTION The Update-PfbCertificate cmdlet modifies an existing certificate on the FlashBlade. - The certificate can be identified by name or by ID. The Attributes hashtable contains - the updated certificate data such as a renewed certificate body or a new private key. - This cmdlet supports pipeline input by property name and the ShouldProcess pattern. + The certificate can be identified by name or by ID. Use the individual typed + parameters for a specific certificate field, or the Attributes hashtable to supply + several updated certificate properties at once, such as a renewed certificate body + or a new private key. This cmdlet supports pipeline input by property name and the + ShouldProcess pattern. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. -GenerateNewKey is a query parameter and is orthogonal + to the body, so it can be combined freely with either. .PARAMETER Name The name of the certificate to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the certificate to update. + .PARAMETER GenerateNewKey + If set to $true, a new private key is generated when generating a new certificate + with the specified attributes. This may not be set to $true when importing a + certificate and private key, and may not be set to $false when generating a new + self-signed certificate to replace a certificate that was imported. Default is + $false. Sent as the 'generate_new_key' query parameter. + .PARAMETER Certificate + The text of the certificate. + .PARAMETER CertificateType + The type of certificate. Certificates of type 'appliance' are used by the array to + verify its identity to clients. Certificates of type 'external' are used by the + array to identify external servers to which it is configured to communicate. This + field may only be specified at certificate creation time. + .PARAMETER CommonName + The common name field listed in the certificate. + .PARAMETER Country + The country field listed in the certificate. + .PARAMETER Days + The number of days that the self-signed certificate is valid. + .PARAMETER Email + The email field listed in the certificate. + .PARAMETER IntermediateCertificate + Intermediate certificate chains. + .PARAMETER KeyAlgorithm + The key algorithm used to generate the certificate. + .PARAMETER KeySize + The size (in bits) of the private key for the certificate. + .PARAMETER Locality + The locality field listed in the certificate. + .PARAMETER Organization + The organization field listed in the certificate. + .PARAMETER OrganizationalUnit + The organizational unit field listed in the certificate. + .PARAMETER Passphrase + The passphrase used to encrypt -PrivateKey. + .PARAMETER PrivateKey + The text of the private key. + .PARAMETER State + The state/province field listed in the certificate. + .PARAMETER SubjectAlternativeNames + The alternative names that are secured by this certificate. .PARAMETER Attributes - A hashtable containing the updated certificate data. Supported keys include 'certificate', - 'key', and 'intermediate_certificate'. + A hashtable containing the updated certificate data. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbCertificate -Name 'web-cert' -Attributes @{ certificate = $newCertPem; key = $newKeyPem } + Update-PfbCertificate -Name 'web-cert' -Certificate $newCertPem -PrivateKey $newKeyPem - Updates the certificate named 'web-cert' with a renewed certificate and key. + Updates the certificate named 'web-cert' with a renewed certificate and private key + using typed parameters. .EXAMPLE Update-PfbCertificate -Id '10314f42-020d-7080-8013-000ddt400090' -Attributes @{ certificate = $certPem } @@ -29,11 +79,93 @@ function Update-PfbCertificate { Pipes a certificate object to update its intermediate certificate chain. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + # Constraint 17: generate_new_key is a QUERY parameter, orthogonal to the request + # body, so it is declared bare rather than scoped to the *Individual sets. Placing + # it there would make `-Attributes ... -GenerateNewKey` fail with + # AmbiguousParameterSet for no reason -- it has nothing to do with the body. + [Parameter()] + [Nullable[bool]]$GenerateNewKey, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Certificate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('appliance', 'external')] + [string]$CertificateType, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CommonName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Country, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [int]$Days, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Email, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$IntermediateCertificate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$KeyAlgorithm, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [int]$KeySize, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Locality, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Organization, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$OrganizationalUnit, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Passphrase, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$PrivateKey, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$State, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$SubjectAlternativeNames, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -43,10 +175,39 @@ function Update-PfbCertificate { process { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } - if ($Id) { $queryParams['ids'] = $Id } + if ($Id) { $queryParams['ids'] = $Id } + if ($PSBoundParameters.ContainsKey('GenerateNewKey')) { $queryParams['generate_new_key'] = $GenerateNewKey } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # EVERY value-carrying parameter is guarded with $PSBoundParameters.ContainsKey, + # never truthiness -- an integer field (Days/KeySize) must be able to reach the + # wire as an explicit 0, and -SubjectAlternativeNames @() must be able to clear + # the list. + $body = @{} + if ($PSBoundParameters.ContainsKey('Certificate')) { $body['certificate'] = $Certificate } + if ($PSBoundParameters.ContainsKey('CertificateType')) { $body['certificate_type'] = $CertificateType } + if ($PSBoundParameters.ContainsKey('CommonName')) { $body['common_name'] = $CommonName } + if ($PSBoundParameters.ContainsKey('Country')) { $body['country'] = $Country } + if ($PSBoundParameters.ContainsKey('Days')) { $body['days'] = $Days } + if ($PSBoundParameters.ContainsKey('Email')) { $body['email'] = $Email } + if ($PSBoundParameters.ContainsKey('IntermediateCertificate')) { $body['intermediate_certificate'] = $IntermediateCertificate } + if ($PSBoundParameters.ContainsKey('KeyAlgorithm')) { $body['key_algorithm'] = $KeyAlgorithm } + if ($PSBoundParameters.ContainsKey('KeySize')) { $body['key_size'] = $KeySize } + if ($PSBoundParameters.ContainsKey('Locality')) { $body['locality'] = $Locality } + if ($PSBoundParameters.ContainsKey('Organization')) { $body['organization'] = $Organization } + if ($PSBoundParameters.ContainsKey('OrganizationalUnit')) { $body['organizational_unit'] = $OrganizationalUnit } + if ($PSBoundParameters.ContainsKey('Passphrase')) { $body['passphrase'] = $Passphrase } + if ($PSBoundParameters.ContainsKey('PrivateKey')) { $body['private_key'] = $PrivateKey } + if ($PSBoundParameters.ContainsKey('State')) { $body['state'] = $State } + if ($PSBoundParameters.ContainsKey('SubjectAlternativeNames')) { $body['subject_alternative_names'] = @($SubjectAlternativeNames) } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update certificate')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'certificates' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'certificates' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbCertificate.Tests.ps1 b/Tests/Update-PfbCertificate.Tests.ps1 new file mode 100644 index 0000000..ebc42ee --- /dev/null +++ b/Tests/Update-PfbCertificate.Tests.ps1 @@ -0,0 +1,224 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbCertificate - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends certificate, certificate_type, common_name and country as body fields' { + Update-PfbCertificate -Name 'web-cert' -Certificate '-----BEGIN CERTIFICATE-----' ` + -CertificateType 'appliance' -CommonName 'www.example.com' -Country 'Canada' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'certificates' -and + $QueryParams['names'] -eq 'web-cert' -and + $Body['certificate'] -eq '-----BEGIN CERTIFICATE-----' -and + $Body['certificate_type'] -eq 'appliance' -and + $Body['common_name'] -eq 'www.example.com' -and + $Body['country'] -eq 'Canada' + } + } + + It 'sends email, intermediate_certificate, key_algorithm and locality as body fields' { + Update-PfbCertificate -Name 'web-cert' -Email 'ops@example.com' ` + -IntermediateCertificate '-----BEGIN CHAIN-----' -KeyAlgorithm 'rsa' -Locality 'Toronto' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['email'] -eq 'ops@example.com' -and + $Body['intermediate_certificate'] -eq '-----BEGIN CHAIN-----' -and + $Body['key_algorithm'] -eq 'rsa' -and + $Body['locality'] -eq 'Toronto' + } + } + + It 'sends organization, organizational_unit, passphrase, private_key and state as body fields' { + Update-PfbCertificate -Name 'web-cert' -Organization 'Veridian Dynamics' ` + -OrganizationalUnit 'R&D' -Passphrase 's3cr3t' -PrivateKey '-----BEGIN PRIVATE KEY-----' ` + -State 'Ontario' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['organization'] -eq 'Veridian Dynamics' -and + $Body['organizational_unit'] -eq 'R&D' -and + $Body['passphrase'] -eq 's3cr3t' -and + $Body['private_key'] -eq '-----BEGIN PRIVATE KEY-----' -and + $Body['state'] -eq 'Ontario' + } + } + + It 'sends an explicit -Days 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbCertificate -Name 'web-cert' -Days 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('days') -and $Body['days'] -eq 0 + } + } + + It 'sends an explicit -KeySize 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbCertificate -Name 'web-cert' -KeySize 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('key_size') -and $Body['key_size'] -eq 0 + } + } + + It 'omits days and key_size entirely when not supplied' { + Update-PfbCertificate -Name 'web-cert' -Certificate 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('days') -and -not $Body.ContainsKey('key_size') + } + } + + It 'sends subject_alternative_names as a plain string array' { + Update-PfbCertificate -Name 'web-cert' -SubjectAlternativeNames 'alt1.example.com', 'alt2.example.com' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['subject_alternative_names']).Count -eq 2 -and + $Body['subject_alternative_names'][0] -eq 'alt1.example.com' + } + } + + It 'sends an EMPTY array for -SubjectAlternativeNames @() so a list can be cleared' { + Update-PfbCertificate -Name 'web-cert' -SubjectAlternativeNames @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('subject_alternative_names') -and + @($Body['subject_alternative_names']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbCertificate -Name 'web-cert' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the certificate by id when -Id is used' { + Update-PfbCertificate -Id 'cert-1' -Certificate 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'cert-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-GenerateNewKey query parameter (constraint 17: bare, not in *Individual sets)' { + It 'sends generate_new_key when supplied' { + Update-PfbCertificate -Name 'web-cert' -GenerateNewKey $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('generate_new_key') -and $QueryParams['generate_new_key'] -eq $true + } + } + + It 'sends an explicit -GenerateNewKey:$false rather than dropping it' { + Update-PfbCertificate -Name 'web-cert' -GenerateNewKey $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('generate_new_key') -and $QueryParams['generate_new_key'] -eq $false + } + } + + It 'omits generate_new_key entirely when not supplied' { + Update-PfbCertificate -Name 'web-cert' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('generate_new_key') + } + } + + It 'is usable alongside -Attributes without an AmbiguousParameterSet error (query params are orthogonal to the body)' { + { Update-PfbCertificate -Name 'web-cert' -Attributes @{ certificate = 'x' } -GenerateNewKey $true ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | Should -Not -Throw + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['generate_new_key'] -eq $true -and $Body['certificate'] -eq 'x' + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbCertificate -Name 'web-cert' -Attributes @{ certificate = 'raw-cert' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['certificate'] -eq 'raw-cert' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbCertificate -Name 'web-cert' -Certificate 'x' -Attributes @{ certificate = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never added as parameters (constraint 11)' { + It 'has no - parameter' -ForEach @( + @{ Parameter = 'IssuedBy' } + @{ Parameter = 'IssuedTo' } + @{ Parameter = 'Realms' } + @{ Parameter = 'Status' } + @{ Parameter = 'ValidFrom' } + @{ Parameter = 'ValidTo' } + ) { + (Get-Command Update-PfbCertificate).Parameters.Keys | Should -Not -Contain $Parameter + } + } + + Context 'constraint compliance' { + It 'puts ValidateSet on -CertificateType with exactly appliance,external in order' { + $validateSet = (Get-Command Update-PfbCertificate).Parameters['CertificateType'].Attributes | + Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $validateSet.ValidValues | Should -Be @('appliance', 'external') + } + + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Certificate' } + @{ Parameter = 'CommonName' } + @{ Parameter = 'Country' } + @{ Parameter = 'Days' } + @{ Parameter = 'Email' } + @{ Parameter = 'IntermediateCertificate' } + @{ Parameter = 'KeyAlgorithm' } + @{ Parameter = 'KeySize' } + @{ Parameter = 'Locality' } + @{ Parameter = 'Organization' } + @{ Parameter = 'OrganizationalUnit' } + @{ Parameter = 'Passphrase' } + @{ Parameter = 'PrivateKey' } + @{ Parameter = 'State' } + @{ Parameter = 'SubjectAlternativeNames' } + ) { + $attrs = (Get-Command Update-PfbCertificate).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts (constraint 11)' { + $keys = (Get-Command Update-PfbCertificate).Parameters.Keys + foreach ($p in 'Certificate', 'CertificateType', 'CommonName', 'Country', 'Days', 'Email', + 'IntermediateCertificate', 'KeyAlgorithm', 'KeySize', 'Locality', 'Organization', + 'OrganizationalUnit', 'Passphrase', 'PrivateKey', 'State', 'SubjectAlternativeNames') { + $keys | Should -Contain $p + } + } + } +} From 339f19d64b11d50f349b08000d7a8efc3c8ba35c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:33:37 -0700 Subject: [PATCH 19/90] feat(hardware): add typed body params to Update-PfbHardwareConnector (#31) --- .../Hardware/Update-PfbHardwareConnector.ps1 | 75 +++++++++-- Tests/Update-PfbHardwareConnector.Tests.ps1 | 118 ++++++++++++++++++ 2 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbHardwareConnector.Tests.ps1 diff --git a/Public/Hardware/Update-PfbHardwareConnector.ps1 b/Public/Hardware/Update-PfbHardwareConnector.ps1 index 826f792..6da96ca 100644 --- a/Public/Hardware/Update-PfbHardwareConnector.ps1 +++ b/Public/Hardware/Update-PfbHardwareConnector.ps1 @@ -4,20 +4,34 @@ function Update-PfbHardwareConnector { Updates a hardware connector on a FlashBlade array. .DESCRIPTION The Update-PfbHardwareConnector cmdlet modifies attributes of a hardware connector on - the connected Pure Storage FlashBlade. The connector can be identified by name or ID. + the connected Everpure FlashBlade. The connector can be identified by name or ID. Supports ShouldProcess for -WhatIf and -Confirm. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the hardware connector to update. + The name of the hardware connector to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the hardware connector to update. + .PARAMETER LaneSpeed + Configured speed of each lane in the connector in bits-per-second. + .PARAMETER LanesPerPort + Configured number of lanes comprising each port in the connector. + .PARAMETER PortCount + Configured number of ports in the connector (1/2/4 for QSFP). + .PARAMETER PortSpeed + Configured speed of each port in the connector in bits-per-second. .PARAMETER Attributes - A hashtable of connector attributes to modify. + A hashtable of connector attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbHardwareConnector -Name "CH1.FM1.ETH1" -Attributes @{ port_speed = 40000000000 } + Update-PfbHardwareConnector -Name "CH1.FM1.ETH1" -PortSpeed 40000000000 - Updates the port speed on the specified hardware connector. + Updates the port speed on the specified hardware connector using a typed parameter. .EXAMPLE Update-PfbHardwareConnector -Id "10314f42-020d-7080-8013-000ddt400088" -Attributes @{ enabled = $true } @@ -27,11 +41,37 @@ function Update-PfbHardwareConnector { Shows what would happen without applying the change. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$LaneSpeed, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$LanesPerPort, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$PortCount, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$PortSpeed, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +81,24 @@ function Update-PfbHardwareConnector { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. All four fields here are + # integers, so each needs an explicit-0 test (constraint 2). + $body = @{} + if ($PSBoundParameters.ContainsKey('LaneSpeed')) { $body['lane_speed'] = $LaneSpeed } + if ($PSBoundParameters.ContainsKey('LanesPerPort')) { $body['lanes_per_port'] = $LanesPerPort } + if ($PSBoundParameters.ContainsKey('PortCount')) { $body['port_count'] = $PortCount } + if ($PSBoundParameters.ContainsKey('PortSpeed')) { $body['port_speed'] = $PortSpeed } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update hardware connector')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'hardware-connectors' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'hardware-connectors' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbHardwareConnector.Tests.ps1 b/Tests/Update-PfbHardwareConnector.Tests.ps1 new file mode 100644 index 0000000..a00b866 --- /dev/null +++ b/Tests/Update-PfbHardwareConnector.Tests.ps1 @@ -0,0 +1,118 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbHardwareConnector - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends lane_speed, lanes_per_port, port_count and port_speed as body fields' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -LaneSpeed 25000000000 -LanesPerPort 4 ` + -PortCount 1 -PortSpeed 100000000000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'hardware-connectors' -and + $QueryParams['names'] -eq 'CH1.FM1.ETH1' -and + $Body['lane_speed'] -eq 25000000000 -and + $Body['lanes_per_port'] -eq 4 -and + $Body['port_count'] -eq 1 -and + $Body['port_speed'] -eq 100000000000 + } + } + + It 'sends an explicit -LaneSpeed 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -LaneSpeed 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('lane_speed') -and $Body['lane_speed'] -eq 0 + } + } + + It 'sends an explicit -LanesPerPort 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -LanesPerPort 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('lanes_per_port') -and $Body['lanes_per_port'] -eq 0 + } + } + + It 'sends an explicit -PortCount 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -PortCount 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('port_count') -and $Body['port_count'] -eq 0 + } + } + + It 'sends an explicit -PortSpeed 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -PortSpeed 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('port_speed') -and $Body['port_speed'] -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the connector by id when -Id is used' { + Update-PfbHardwareConnector -Id 'conn-1' -PortSpeed 40000000000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'conn-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -Attributes @{ port_speed = 40000000000 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['port_speed'] -eq 40000000000 + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbHardwareConnector -Name 'CH1.FM1.ETH1' -PortSpeed 40000000000 -Attributes @{ port_speed = 1 } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'LaneSpeed' } + @{ Parameter = 'LanesPerPort' } + @{ Parameter = 'PortCount' } + @{ Parameter = 'PortSpeed' } + ) { + $attrs = (Get-Command Update-PfbHardwareConnector).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'does not expose any of the 4 read-only fields as parameters (constraint 11)' { + $keys = (Get-Command Update-PfbHardwareConnector).Parameters.Keys + foreach ($ro in 'ConnectorType','TransceiverType') { + $keys | Should -Not -Contain $ro + } + } + } +} From 35f58b2f697392a309990833c03d71394c410123 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:34:47 -0700 Subject: [PATCH 20/90] feat(misc): add typed query params to Update-PfbLegalHoldEntity (#31) --- Public/Misc/Update-PfbLegalHoldEntity.ps1 | 56 ++++++++++++-- Tests/Update-PfbLegalHoldEntity.Tests.ps1 | 90 +++++++++++++++++++++++ 2 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 Tests/Update-PfbLegalHoldEntity.Tests.ps1 diff --git a/Public/Misc/Update-PfbLegalHoldEntity.ps1 b/Public/Misc/Update-PfbLegalHoldEntity.ps1 index 5ab5198..517f230 100644 --- a/Public/Misc/Update-PfbLegalHoldEntity.ps1 +++ b/Public/Misc/Update-PfbLegalHoldEntity.ps1 @@ -8,28 +8,61 @@ function Update-PfbLegalHoldEntity { held entity by name and supply the changed properties via Attributes. .PARAMETER Name The name of the held entity to update. + .PARAMETER FileSystemIds + The IDs of the file systems whose held entities to update. + .PARAMETER FileSystemNames + The names of the file systems whose held entities to update. + .PARAMETER Ids + The IDs of the held entities to update. + .PARAMETER Paths + The paths of the held entities to update. + .PARAMETER Recursive + If set to `true`, the update is applied recursively to the specified path or file + system. + .PARAMETER Released + If set to `true`, the held entity is released from its legal hold. .PARAMETER Attributes - A hashtable of attributes to update on the held entity. + A hashtable of attributes to update on the held entity. `PATCH + /legal-holds/held-entities` accepts no request body, so nothing supplied here is sent + to the array. Use the typed query parameters above instead. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbLegalHoldEntity -Name "fs1" -Attributes @{ description = 'Updated hold reason' } + Update-PfbLegalHoldEntity -Name "fs1" -Released $true - Updates the description on the held entity named "fs1". + Releases the held entity named "fs1" from its legal hold. .EXAMPLE - Update-PfbLegalHoldEntity -Name "bucket1" -Attributes @{ enabled = $false } + Update-PfbLegalHoldEntity -Name "bucket1" -Recursive $false - Disables the held entity named "bucket1". + Updates the held entity named "bucket1" without applying the change recursively. .EXAMPLE Update-PfbLegalHoldEntity -Name "fs1" -Attributes @{ hold_type = 'litigation' } - Updates the hold type on the specified held entity. + Updates the held entity using a raw attributes hashtable. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, + [Parameter()] + [string[]]$FileSystemIds, + + [Parameter()] + [string[]]$FileSystemNames, + + [Parameter()] + [string[]]$Ids, + + [Parameter()] + [string[]]$Paths, + + [Parameter()] + [Nullable[bool]]$Recursive, + + [Parameter()] + [Nullable[bool]]$Released, + [Parameter()] [hashtable]$Attributes, @@ -41,11 +74,22 @@ function Update-PfbLegalHoldEntity { } process { + # PATCH /legal-holds/held-entities accepts no request body at all -- everything this + # endpoint accepts is a query parameter (see New-PfbApiToken.ps1 for the identical shape). $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } + # Every newly added query parameter is guarded by ContainsKey, never truthiness -- see + # the canonical explanation in Update-PfbAdmin.ps1. + if ($PSBoundParameters.ContainsKey('FileSystemIds')) { $queryParams['file_system_ids'] = $FileSystemIds -join ',' } + if ($PSBoundParameters.ContainsKey('FileSystemNames')) { $queryParams['file_system_names'] = $FileSystemNames -join ',' } + if ($PSBoundParameters.ContainsKey('Ids')) { $queryParams['ids'] = $Ids -join ',' } + if ($PSBoundParameters.ContainsKey('Paths')) { $queryParams['paths'] = $Paths -join ',' } + if ($PSBoundParameters.ContainsKey('Recursive')) { $queryParams['recursive'] = $Recursive } + if ($PSBoundParameters.ContainsKey('Released')) { $queryParams['released'] = $Released } + if ($PSCmdlet.ShouldProcess($Name, 'Update legal hold entity')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'legal-holds/held-entities' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbLegalHoldEntity.Tests.ps1 b/Tests/Update-PfbLegalHoldEntity.Tests.ps1 new file mode 100644 index 0000000..04d63fa --- /dev/null +++ b/Tests/Update-PfbLegalHoldEntity.Tests.ps1 @@ -0,0 +1,90 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLegalHoldEntity - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Name selector (regression, unchanged)' { + It 'still sends -Name as names' { + Update-PfbLegalHoldEntity -Name 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'legal-holds/held-entities' -and + $QueryParams['names'] -eq 'fs1' + } + } + } + + Context 'new query parameters' { + It 'joins -FileSystemIds and -FileSystemNames with commas' { + Update-PfbLegalHoldEntity -Name 'fs1' -FileSystemIds 'fsid-1', 'fsid-2' -FileSystemNames 'fs1', 'fs2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['file_system_ids'] -eq 'fsid-1,fsid-2' -and + $QueryParams['file_system_names'] -eq 'fs1,fs2' + } + } + + It 'joins -Ids and -Paths with commas' { + Update-PfbLegalHoldEntity -Name 'fs1' -Ids 'id-1', 'id-2' -Paths '/dir1', '/dir2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'id-1,id-2' -and + $QueryParams['paths'] -eq '/dir1,/dir2' + } + } + + It 'sends an EMPTY array for -Ids @() so the query key still reaches the wire (constraint 2)' { + Update-PfbLegalHoldEntity -Name 'fs1' -Ids @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('ids') -and @($QueryParams['ids'] -split ',' | Where-Object { $_ }).Count -eq 0 + } + } + + It 'sends an explicit -Recursive:$false (ContainsKey semantics, not truthiness)' { + Update-PfbLegalHoldEntity -Name 'fs1' -Recursive $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('recursive') -and $QueryParams['recursive'] -eq $false + } + } + + It 'sends an explicit -Released:$true so a hold can be released' { + Update-PfbLegalHoldEntity -Name 'fs1' -Released $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('released') -and $QueryParams['released'] -eq $true + } + } + + It 'omits recursive and released entirely when not supplied' { + Update-PfbLegalHoldEntity -Name 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('recursive') -and -not $QueryParams.ContainsKey('released') + } + } + } + + Context 'endpoint accepts no request body' { + It 'sends an empty body when -Attributes is not supplied' { + Update-PfbLegalHoldEntity -Name 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From 7246a04adb9c98f03d22bfb9fd10d4886a4fedcb Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:34:53 -0700 Subject: [PATCH 21/90] feat(policy): add typed body params to Update-PfbStorageClassTieringPolicy (#31) --- .../Update-PfbStorageClassTieringPolicy.ps1 | 82 ++++++++++-- ...ate-PfbStorageClassTieringPolicy.Tests.ps1 | 126 ++++++++++++++++++ 2 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 diff --git a/Public/Policy/Update-PfbStorageClassTieringPolicy.ps1 b/Public/Policy/Update-PfbStorageClassTieringPolicy.ps1 index a05431b..5c8ca4e 100644 --- a/Public/Policy/Update-PfbStorageClassTieringPolicy.ps1 +++ b/Public/Policy/Update-PfbStorageClassTieringPolicy.ps1 @@ -4,19 +4,35 @@ function Update-PfbStorageClassTieringPolicy { Updates an existing storage class tiering policy on a FlashBlade array. .DESCRIPTION The Update-PfbStorageClassTieringPolicy cmdlet modifies attributes of an existing - storage class tiering policy on the connected Pure Storage FlashBlade. + storage class tiering policy on the connected Everpure FlashBlade. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the tiering policy to update. + The name of the tiering policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the tiering policy to update. + .PARAMETER ArchivalRules + The list of archival rules for this policy. + .PARAMETER Enabled + If true, the policy is enabled. + .PARAMETER Location + Reference to the array where the policy is defined. + .PARAMETER NewName + A new name for the tiering policy. + .PARAMETER RetrievalRules + The list of retrieval rules for this policy. .PARAMETER Attributes - A hashtable of tiering policy attributes to modify. + A hashtable of tiering policy attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbStorageClassTieringPolicy -Name "tier-to-archive" -Attributes @{ enabled = $false } + Update-PfbStorageClassTieringPolicy -Name "tier-to-archive" -Enabled $false - Disables the tiering policy. + Disables the tiering policy using a typed parameter. .EXAMPLE Update-PfbStorageClassTieringPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ cooldown_period = 172800000 } @@ -26,11 +42,41 @@ function Update-PfbStorageClassTieringPolicy { Shows what would happen without actually updating the policy. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable[]]$ArchivalRules, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable[]]$RetrievalRules, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +87,25 @@ function Update-PfbStorageClassTieringPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 8(c): archival_rules/retrieval_rules are composite objects (they carry + # properties outside {id, name, resource_type}), so the parameter is [hashtable[]] + # and the value is passed straight through -- no @{ name = ... } projection. + $body = @{} + if ($PSBoundParameters.ContainsKey('ArchivalRules')) { $body['archival_rules'] = @($ArchivalRules) } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('RetrievalRules')) { $body['retrieval_rules'] = @($RetrievalRules) } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update storage class tiering policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'storage-class-tiering-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'storage-class-tiering-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 new file mode 100644 index 0000000..3da2dbb --- /dev/null +++ b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 @@ -0,0 +1,126 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbStorageClassTieringPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends archival_rules as a composite hashtable array, passed straight through' { + $rules = @(@{ after = 86400000 }) + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -ArchivalRules $rules -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'storage-class-tiering-policies' -and + $QueryParams['names'] -eq 'tier-to-archive' -and + @($Body['archival_rules']).Count -eq 1 -and + $Body['archival_rules'][0].after -eq 86400000 + } + } + + It 'sends enabled as a body field (ContainsKey semantics, not truthiness)' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'builds location as a name-reference object' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Location 'array-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'sends -NewName as the name body field (rename exception, not -StorageClassTieringPolicyName)' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -NewName 'tier-to-glacier' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'tier-to-glacier' + } + } + + It 'sends retrieval_rules as a composite hashtable array, passed straight through' { + $rules = @(@{ priority = 'standard' }) + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -RetrievalRules $rules -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['retrieval_rules']).Count -eq 1 -and + $Body['retrieval_rules'][0].priority -eq 'standard' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the policy by id when -Id is used' { + Update-PfbStorageClassTieringPolicy -Id 'policy-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Attributes @{ enabled = $true } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never exposed (constraint 11)' { + It 'has no -IsLocal or -PolicyType parameter' { + $keys = (Get-Command Update-PfbStorageClassTieringPolicy).Parameters.Keys + $keys | Should -Not -Contain 'IsLocal' + $keys | Should -Not -Contain 'PolicyType' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ArchivalRules' } + @{ Parameter = 'Enabled' } + @{ Parameter = 'Location' } + @{ Parameter = 'NewName' } + @{ Parameter = 'RetrievalRules' } + ) { + $attrs = (Get-Command Update-PfbStorageClassTieringPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbStorageClassTieringPolicy).Parameters.Keys + foreach ($p in 'ArchivalRules','Enabled','Location','NewName','RetrievalRules') { + $keys | Should -Contain $p + } + } + } +} From f40dfd2e36a80499a7a70820c4c344405e427588 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:34:55 -0700 Subject: [PATCH 22/90] feat(policy): add typed body params to New-PfbNetworkAccessRule (#31) --- Public/Policy/New-PfbNetworkAccessRule.ps1 | 78 +++++++++++- Tests/New-PfbNetworkAccessRule.Tests.ps1 | 140 +++++++++++++++++++++ 2 files changed, 213 insertions(+), 5 deletions(-) create mode 100644 Tests/New-PfbNetworkAccessRule.Tests.ps1 diff --git a/Public/Policy/New-PfbNetworkAccessRule.ps1 b/Public/Policy/New-PfbNetworkAccessRule.ps1 index 4310c20..bd6bf95 100644 --- a/Public/Policy/New-PfbNetworkAccessRule.ps1 +++ b/Public/Policy/New-PfbNetworkAccessRule.ps1 @@ -5,14 +5,42 @@ function New-PfbNetworkAccessRule { .DESCRIPTION Adds a new rule to a network access policy. Rules define network-level access control including client IP ranges, interfaces, protocols, and effect (allow/deny). + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER PolicyName The name of the network access policy to add the rule to. .PARAMETER PolicyId The ID of the network access policy to add the rule to. + .PARAMETER Client + Specifies the clients that will be permitted or denied access to the interface. + .PARAMETER Effect + If set to `allow`, the specified client will be permitted to access the specified + interfaces. + .PARAMETER Index + The index within the policy. + .PARAMETER Interfaces + Specifies which product interfaces this rule applies to, whether it is permitting + or denying access. .PARAMETER Attributes A hashtable defining the rule properties (client, effect, interfaces, protocols, etc.). + Mutually exclusive with the individual typed parameters above. + .PARAMETER BeforeRuleId + The ID of the rule to insert this rule before. Cannot be combined with -BeforeRuleName. + .PARAMETER BeforeRuleName + The name of the rule to insert this rule before. Cannot be combined with -BeforeRuleId. + .PARAMETER Versions + A list of versions used for concurrency control. Ordering matches the policy + names/IDs query parameter. Fails with a 412 if the resource's current version + does not match. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. + .EXAMPLE + New-PfbNetworkAccessRule -PolicyName "network-access-01" -Client "10.0.0.0/8" -Effect "allow" + + Creates a new rule allowing access from the specified subnet using typed parameters. .EXAMPLE New-PfbNetworkAccessRule -PolicyName "network-access-01" -Attributes @{ client = "10.0.0.0/8"; effect = "allow" } @@ -22,17 +50,43 @@ function New-PfbNetworkAccessRule { Creates a rule denying access to management interfaces from all clients. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByPolicyNameIndividual')] param( - [Parameter(ParameterSetName = 'ByPolicyName', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory, Position = 0)] [string]$PolicyName, - [Parameter(ParameterSetName = 'ByPolicyId', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [string]$PolicyId, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Client, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('allow', 'deny')] + [string]$Effect, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [int]$Index, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('management-ssh', 'management-rest-api', 'management-web-ui', 'snmp', 'local-network-superuser-password-access')] + [string[]]$Interfaces, + + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [hashtable]$Attributes, + [Parameter()] [string]$BeforeRuleId, + [Parameter()] [string]$BeforeRuleName, + [Parameter()] [string[]]$Versions, + [Parameter()] [PSCustomObject]$Array ) @@ -41,10 +95,24 @@ function New-PfbNetworkAccessRule { $queryParams = @{} if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } + if ($PSBoundParameters.ContainsKey('BeforeRuleId')) { $queryParams['before_rule_id'] = $BeforeRuleId } + if ($PSBoundParameters.ContainsKey('BeforeRuleName')) { $queryParams['before_rule_name'] = $BeforeRuleName } + if ($PSBoundParameters.ContainsKey('Versions')) { $queryParams['versions'] = $Versions -join ',' } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Client')) { $body['client'] = $Client } + if ($PSBoundParameters.ContainsKey('Effect')) { $body['effect'] = $Effect } + if ($PSBoundParameters.ContainsKey('Index')) { $body['index'] = $Index } + if ($PSBoundParameters.ContainsKey('Interfaces')) { $body['interfaces'] = @($Interfaces) } + } $target = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess($target, 'Create network access rule')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'network-access-policies/rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'network-access-policies/rules' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbNetworkAccessRule.Tests.ps1 b/Tests/New-PfbNetworkAccessRule.Tests.ps1 new file mode 100644 index 0000000..3a53d58 --- /dev/null +++ b/Tests/New-PfbNetworkAccessRule.Tests.ps1 @@ -0,0 +1,140 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbNetworkAccessRule - typed body/query params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Attributes path still works' { + It 'POSTs with -Attributes hashtable unchanged' { + New-PfbNetworkAccessRule -PolicyName 'network-access-01' -Attributes @{ client = '10.0.0.0/8'; effect = 'allow' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'network-access-policies/rules' -and + $QueryParams['policy_names'] -eq 'network-access-01' -and + $Body['client'] -eq '10.0.0.0/8' -and $Body['effect'] -eq 'allow' + } + } + } + + Context 'typed body parameters' { + It 'sends -Client as client' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Client '10.0.0.0/8' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['client'] -eq '10.0.0.0/8' + } + } + + It 'sends -Effect as effect' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Effect 'deny' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['effect'] -eq 'deny' + } + } + + It 'rejects an -Effect value outside the enum' { + { New-PfbNetworkAccessRule -PolicyName 'p1' -Effect 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -Index as index, including an explicit 0 (constraint 2, integer field)' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Index 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('index') -and $Body['index'] -eq 0 + } + } + + It 'sends -Interfaces as interfaces' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Interfaces @('management-ssh', 'snmp') -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['interfaces'].Count -eq 2 -and + $Body['interfaces'][0] -eq 'management-ssh' -and + $Body['interfaces'][1] -eq 'snmp' + } + } + + It 'sends an explicit empty -Interfaces @() (constraint 2, array field)' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Interfaces @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('interfaces') -and $Body['interfaces'].Count -eq 0 + } + } + + It 'rejects an -Interfaces value outside the enum' { + { New-PfbNetworkAccessRule -PolicyName 'p1' -Interfaces @('bogus') -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'omits fields that were not supplied' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Client 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('effect') -and -not $Body.ContainsKey('index') -and -not $Body.ContainsKey('interfaces') + } + } + } + + Context 'typed query parameters' { + It 'sends -BeforeRuleId as before_rule_id' { + New-PfbNetworkAccessRule -PolicyName 'p1' -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['before_rule_id'] -eq 'rule-1' + } + } + + It 'sends -BeforeRuleName as before_rule_name' { + New-PfbNetworkAccessRule -PolicyName 'p1' -BeforeRuleName 'rule-name' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['before_rule_name'] -eq 'rule-name' + } + } + + It 'sends -Versions as a joined versions query param' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Versions @('1', '2') -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['versions'] -eq '1,2' + } + } + + It 'allows a query parameter alongside -Attributes (query is orthogonal to body, constraint 17)' { + New-PfbNetworkAccessRule -PolicyName 'p1' -Attributes @{ client = 'x' } -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['before_rule_id'] -eq 'rule-1' -and $Body['client'] -eq 'x' + } + } + } + + Context 'parameter set mutual exclusion' { + It 'rejects mixing a typed body parameter with -Attributes' { + { New-PfbNetworkAccessRule -PolicyName 'p1' -Client 'x' -Attributes @{ client = 'x' } -Confirm:$false -Array $fakeArray } | + Should -Throw '*Parameter set cannot be resolved*' + } + } + + Context 'ById selector still works' { + It 'supports -PolicyId with typed params' { + New-PfbNetworkAccessRule -PolicyId 'pid-1' -Client 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'pid-1' -and $Body['client'] -eq 'x' + } + } + } +} From 13d1b8273e7e8879bcc796191bac617351cb39ab Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:35:09 -0700 Subject: [PATCH 23/90] feat(certificate): add typed query params to New-PfbCertificateCertificateGroup (#31) Adds -CertificateId/-CertificateGroupId (certificate_ids/certificate_group_ids query parameters) alongside the existing -CertificateName/-CertificateGroupName. This endpoint has no request body, so no body work was needed; the existing name-based wire keys were confirmed already correct and left untouched. Co-Authored-By: Claude Sonnet 5 --- .../New-PfbCertificateCertificateGroup.ps1 | 8 +++ ...w-PfbCertificateCertificateGroup.Tests.ps1 | 68 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 Tests/New-PfbCertificateCertificateGroup.Tests.ps1 diff --git a/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 b/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 index 7480bb3..13f2f11 100644 --- a/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 +++ b/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 @@ -7,8 +7,12 @@ function New-PfbCertificateCertificateGroup { certificate and a certificate group on the connected Pure Storage FlashBlade. .PARAMETER CertificateName The certificate name. + .PARAMETER CertificateId + The certificate ID. Sent as the 'certificate_ids' query parameter. .PARAMETER CertificateGroupName The certificate group name. + .PARAMETER CertificateGroupId + The certificate group ID. Sent as the 'certificate_group_ids' query parameter. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -27,7 +31,9 @@ function New-PfbCertificateCertificateGroup { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter()] [string]$CertificateName, + [Parameter()] [string]$CertificateId, [Parameter()] [string]$CertificateGroupName, + [Parameter()] [string]$CertificateGroupId, [Parameter()] [PSCustomObject]$Array ) @@ -35,7 +41,9 @@ function New-PfbCertificateCertificateGroup { $queryParams = @{} if ($CertificateName) { $queryParams['certificate_names'] = $CertificateName } + if ($PSBoundParameters.ContainsKey('CertificateId')) { $queryParams['certificate_ids'] = $CertificateId } if ($CertificateGroupName) { $queryParams['certificate_group_names'] = $CertificateGroupName } + if ($PSBoundParameters.ContainsKey('CertificateGroupId')) { $queryParams['certificate_group_ids'] = $CertificateGroupId } $target = "${CertificateName}:${CertificateGroupName}" diff --git a/Tests/New-PfbCertificateCertificateGroup.Tests.ps1 b/Tests/New-PfbCertificateCertificateGroup.Tests.ps1 new file mode 100644 index 0000000..020c681 --- /dev/null +++ b/Tests/New-PfbCertificateCertificateGroup.Tests.ps1 @@ -0,0 +1,68 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbCertificateCertificateGroup - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing name-based query parameters (confirmed already correct, not touched)' { + It 'still sends -CertificateName as certificate_names' { + New-PfbCertificateCertificateGroup -CertificateName 'cert-prod' -CertificateGroupName 'group-prod' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'certificates/certificate-groups' -and + $QueryParams['certificate_names'] -eq 'cert-prod' -and + $QueryParams['certificate_group_names'] -eq 'group-prod' + } + } + } + + Context '-CertificateId and -CertificateGroupId query parameters' { + It 'sends -CertificateId as certificate_ids' { + New-PfbCertificateCertificateGroup -CertificateId 'cert-1' -CertificateGroupName 'group-prod' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['certificate_ids'] -eq 'cert-1' -and -not $QueryParams.ContainsKey('certificate_names') + } + } + + It 'sends -CertificateGroupId as certificate_group_ids' { + New-PfbCertificateCertificateGroup -CertificateName 'cert-prod' -CertificateGroupId 'group-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['certificate_group_ids'] -eq 'group-1' -and -not $QueryParams.ContainsKey('certificate_group_names') + } + } + + It 'sends both id-based selectors together' { + New-PfbCertificateCertificateGroup -CertificateId 'cert-1' -CertificateGroupId 'group-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['certificate_ids'] -eq 'cert-1' -and $QueryParams['certificate_group_ids'] -eq 'group-1' + } + } + + It 'omits certificate_ids and certificate_group_ids entirely when not supplied' { + New-PfbCertificateCertificateGroup -CertificateName 'cert-prod' -CertificateGroupName 'group-prod' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('certificate_ids') -and -not $QueryParams.ContainsKey('certificate_group_ids') + } + } + } +} From 4889966fab9213a3a3c427337d40457266d347f8 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:35:12 -0700 Subject: [PATCH 24/90] feat(directoryservice): add typed body params to Update-PfbActiveDirectory (#31) --- .../Update-PfbActiveDirectory.ps1 | 126 +++++++++++++-- Tests/Update-PfbActiveDirectory.Tests.ps1 | 145 ++++++++++++++++++ 2 files changed, 259 insertions(+), 12 deletions(-) create mode 100644 Tests/Update-PfbActiveDirectory.Tests.ps1 diff --git a/Public/DirectoryService/Update-PfbActiveDirectory.ps1 b/Public/DirectoryService/Update-PfbActiveDirectory.ps1 index 4b87c17..13059d2 100644 --- a/Public/DirectoryService/Update-PfbActiveDirectory.ps1 +++ b/Public/DirectoryService/Update-PfbActiveDirectory.ps1 @@ -4,35 +4,117 @@ function Update-PfbActiveDirectory { Updates an existing Active Directory configuration on a FlashBlade array. .DESCRIPTION The Update-PfbActiveDirectory cmdlet modifies attributes of an existing Active Directory - configuration on the connected Pure Storage FlashBlade. The target configuration can be + configuration on the connected Everpure FlashBlade. The target configuration can be identified by name or ID. Common updates include changing directory servers, encryption types, and service principal names. Supports pipeline input and ShouldProcess. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the Active Directory configuration to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the Active Directory configuration to update. + .PARAMETER CaCertificate + Name of the Certificate Authority (CA) certificate that signed the certificates of the + configured servers, which is used to validate the authenticity of those servers. + .PARAMETER CaCertificateGroup + Name of a certificate group containing CA certificates that can be used to validate the + authenticity of the configured servers. + .PARAMETER DirectoryServers + A list of directory servers that will be used for lookups related to user authorization. + .PARAMETER EncryptionTypes + The encryption types that will be supported for use by clients for Kerberos authentication. + .PARAMETER Fqdns + A list of fully qualified domain names to use to register service principal names for the + machine account. + .PARAMETER GlobalCatalogServers + A list of global catalog servers that will be used for lookups related to user authorization. + .PARAMETER JoinOu + The relative distinguished name of the organizational unit in which the computer account + should be created when joining the domain. + .PARAMETER KerberosServers + A list of key distribution servers to use for Kerberos protocol. + .PARAMETER ServicePrincipalNames + A list of service principal names to register for the machine account, which can be used + for the creation of keys for Kerberos authentication. .PARAMETER Attributes - A hashtable of Active Directory attributes to modify. + A hashtable of Active Directory attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbActiveDirectory -Name "ad1" -Attributes @{ directory_servers = @("dc02.corp.example.com") } + Update-PfbActiveDirectory -Name "ad1" -DirectoryServers "dc02.corp.example.com" + + Updates the directory servers for the Active Directory configuration named "ad1" using + typed parameters. + .EXAMPLE + Update-PfbActiveDirectory -Id "10314f42-020d-7080-8013-000ddt400055" -EncryptionTypes "aes256-cts-hmac-sha1-96" - Updates the directory servers for the Active Directory configuration named "ad1". + Updates the encryption types for the Active Directory configuration identified by ID. .EXAMPLE - Update-PfbActiveDirectory -Name "ad-prod" -Attributes @{ computer_name = "FLASHBLADE02" } + Update-PfbActiveDirectory -Name "ad1" -Attributes @{ directory_servers = @("dc02.corp.example.com") } - Changes the computer account name for the "ad-prod" Active Directory configuration. + Updates the directory servers for the Active Directory configuration named "ad1" using + the raw -Attributes hashtable. .EXAMPLE Update-PfbActiveDirectory -Id "10314f42-020d-7080-8013-000ddt400055" -Attributes @{ encryption_types = @("aes256-cts-hmac-sha1-96") } Updates the encryption types for the Active Directory configuration identified by ID. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificateGroup, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$DirectoryServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('aes256-cts-hmac-sha1-96', 'aes128-cts-hmac-sha1-96', 'arcfour-hmac')] + [string[]]$EncryptionTypes, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Fqdns, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$GlobalCatalogServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$JoinOu, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$KerberosServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$ServicePrincipalNames, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,10 +124,30 @@ function Update-PfbActiveDirectory { process { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } - if ($Id) { $queryParams['ids'] = $Id } + if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 8(a): ca_certificate/ca_certificate_group are SCALAR references (item + # schema is {id, name, resource_type}), so the parameter is [string] and the + # assignment is INLINE -- constraint 7 forbids a $caCertRef local. + $body = @{} + if ($PSBoundParameters.ContainsKey('CaCertificate')) { $body['ca_certificate'] = @{ name = $CaCertificate } } + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + if ($PSBoundParameters.ContainsKey('DirectoryServers')) { $body['directory_servers'] = $DirectoryServers } + if ($PSBoundParameters.ContainsKey('EncryptionTypes')) { $body['encryption_types'] = $EncryptionTypes } + if ($PSBoundParameters.ContainsKey('Fqdns')) { $body['fqdns'] = $Fqdns } + if ($PSBoundParameters.ContainsKey('GlobalCatalogServers')) { $body['global_catalog_servers'] = $GlobalCatalogServers } + if ($PSBoundParameters.ContainsKey('JoinOu')) { $body['join_ou'] = $JoinOu } + if ($PSBoundParameters.ContainsKey('KerberosServers')) { $body['kerberos_servers'] = $KerberosServers } + if ($PSBoundParameters.ContainsKey('ServicePrincipalNames')) { $body['service_principal_names'] = $ServicePrincipalNames } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update Active Directory')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'active-directory' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'active-directory' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbActiveDirectory.Tests.ps1 b/Tests/Update-PfbActiveDirectory.Tests.ps1 new file mode 100644 index 0000000..2df028d --- /dev/null +++ b/Tests/Update-PfbActiveDirectory.Tests.ps1 @@ -0,0 +1,145 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbActiveDirectory - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends ca_certificate and ca_certificate_group as name-reference objects' { + Update-PfbActiveDirectory -Name 'ad1' -CaCertificate 'ca1' -CaCertificateGroup 'cagrp1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'active-directory' -and + $QueryParams['names'] -eq 'ad1' -and + $Body['ca_certificate'].name -eq 'ca1' -and + $Body['ca_certificate_group'].name -eq 'cagrp1' + } + } + + It 'sends join_ou as a plain body field' { + Update-PfbActiveDirectory -Name 'ad1' -JoinOu 'OU=Storage,DC=corp,DC=example,DC=com' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['join_ou'] -eq 'OU=Storage,DC=corp,DC=example,DC=com' + } + } + + It 'sends directory_servers, fqdns, global_catalog_servers, kerberos_servers, and service_principal_names as arrays' { + Update-PfbActiveDirectory -Name 'ad1' ` + -DirectoryServers 'dc1.corp.example.com','dc2.corp.example.com' ` + -Fqdns 'fb.corp.example.com' ` + -GlobalCatalogServers 'gc1.corp.example.com' ` + -KerberosServers 'kdc1.corp.example.com' ` + -ServicePrincipalNames 'HOST/fb1','HOST/fb2' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['directory_servers']).Count -eq 2 -and $Body['directory_servers'][0] -eq 'dc1.corp.example.com' -and + @($Body['fqdns']) -contains 'fb.corp.example.com' -and + @($Body['global_catalog_servers']) -contains 'gc1.corp.example.com' -and + @($Body['kerberos_servers']) -contains 'kdc1.corp.example.com' -and + @($Body['service_principal_names']).Count -eq 2 + } + } + + It 'sends an EMPTY array for -DirectoryServers @() so a list can be cleared' { + Update-PfbActiveDirectory -Name 'ad1' -DirectoryServers @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('directory_servers') -and @($Body['directory_servers']).Count -eq 0 + } + } + + It 'sends encryption_types from the fixed enum set' { + Update-PfbActiveDirectory -Name 'ad1' -EncryptionTypes 'aes256-cts-hmac-sha1-96','arcfour-hmac' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['encryption_types']) -contains 'aes256-cts-hmac-sha1-96' -and + @($Body['encryption_types']) -contains 'arcfour-hmac' + } + } + + It 'rejects an -EncryptionTypes value outside the fixed enum set' { + { Update-PfbActiveDirectory -Name 'ad1' -EncryptionTypes 'des-cbc-crc' ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | Should -Throw + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbActiveDirectory -Name 'ad1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the configuration by id when -Id is used' { + Update-PfbActiveDirectory -Id 'ad-1' -JoinOu 'OU=Storage' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'ad-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbActiveDirectory -Name 'ad1' -Attributes @{ join_ou = 'OU=Raw' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['join_ou'] -eq 'OU=Raw' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbActiveDirectory -Name 'ad1' -JoinOu 'OU=X' -Attributes @{ join_ou = 'OU=Y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'CaCertificate' } + @{ Parameter = 'CaCertificateGroup' } + @{ Parameter = 'DirectoryServers' } + @{ Parameter = 'Fqdns' } + @{ Parameter = 'GlobalCatalogServers' } + @{ Parameter = 'JoinOu' } + @{ Parameter = 'KerberosServers' } + @{ Parameter = 'ServicePrincipalNames' } + ) { + $attrs = (Get-Command Update-PfbActiveDirectory).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'puts the exact fixed ValidateSet on -EncryptionTypes' { + $attrs = (Get-Command Update-PfbActiveDirectory).Parameters['EncryptionTypes'].Attributes + $validateSet = $attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $validateSet.ValidValues | Should -Be @('aes256-cts-hmac-sha1-96', 'aes128-cts-hmac-sha1-96', 'arcfour-hmac') + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbActiveDirectory).Parameters.Keys + foreach ($p in 'CaCertificate','CaCertificateGroup','DirectoryServers','EncryptionTypes','Fqdns', + 'GlobalCatalogServers','JoinOu','KerberosServers','ServicePrincipalNames') { + $keys | Should -Contain $p + } + } + } +} From 0a72f19cc07c4b4d8eb0e63d13265fab1b758648 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:35:27 -0700 Subject: [PATCH 25/90] feat(objectstore): add typed body params to Update-PfbObjectStoreRole (#31) --- .../ObjectStore/Update-PfbObjectStoreRole.ps1 | 55 ++++++-- Tests/Update-PfbObjectStoreRole.Tests.ps1 | 118 ++++++++++++++++++ 2 files changed, 166 insertions(+), 7 deletions(-) create mode 100644 Tests/Update-PfbObjectStoreRole.Tests.ps1 diff --git a/Public/ObjectStore/Update-PfbObjectStoreRole.ps1 b/Public/ObjectStore/Update-PfbObjectStoreRole.ps1 index 6824b22..7699352 100644 --- a/Public/ObjectStore/Update-PfbObjectStoreRole.ps1 +++ b/Public/ObjectStore/Update-PfbObjectStoreRole.ps1 @@ -5,14 +5,28 @@ function Update-PfbObjectStoreRole { .DESCRIPTION Modifies the properties of an existing object store role, such as its description or assume-role policy document. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the role to update. .PARAMETER Id The ID of the role to update. + .PARAMETER Account + Reference of the associated account. + .PARAMETER MaxSessionDuration + The maximum session duration for the role in milliseconds. .PARAMETER Attributes - A hashtable of role properties to update. + A hashtable of role properties to update. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. + .EXAMPLE + Update-PfbObjectStoreRole -Name "s3-admin-role" -MaxSessionDuration 3600000 + + Sets the maximum session duration for the role using a typed parameter. .EXAMPLE Update-PfbObjectStoreRole -Name "s3-admin-role" -Attributes @{ description = "Updated admin role description" @@ -27,15 +41,27 @@ function Update-PfbObjectStoreRole { Update-PfbObjectStoreRole -Name "replication-role" -Attributes @{} Sends an empty update to refresh the role object. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Account, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [int]$MaxSessionDuration, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,12 +72,27 @@ function Update-PfbObjectStoreRole { } process { - $target = if ($Name) { $Name } else { $Id } - $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + + # Constraint 8(a): account is a SCALAR REFERENCE (item schema is {id, name, + # resource_type}), so the parameter is [string] and the projection is assigned + # INLINE -- constraint 7 forbids a local variable here. + if ($PSBoundParameters.ContainsKey('Account')) { $body['account'] = @{ name = $Account } } + + # Constraint 2: integer body field -- guarded by ContainsKey, not truthiness, so + # an explicit -MaxSessionDuration 0 still reaches the wire. + if ($PSBoundParameters.ContainsKey('MaxSessionDuration')) { $body['max_session_duration'] = $MaxSessionDuration } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update object store role')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'object-store-roles' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbObjectStoreRole.Tests.ps1 b/Tests/Update-PfbObjectStoreRole.Tests.ps1 new file mode 100644 index 0000000..a8e12ec --- /dev/null +++ b/Tests/Update-PfbObjectStoreRole.Tests.ps1 @@ -0,0 +1,118 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbObjectStoreRole - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'builds account as a name-reference object (constraint 8a, scalar reference)' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -Account 'obj-account-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'object-store-roles' -and + $QueryParams['names'] -eq 's3-admin-role' -and + $Body['account'].name -eq 'obj-account-1' + } + } + + It 'sends an explicit -MaxSessionDuration 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -MaxSessionDuration 0 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('max_session_duration') -and $Body['max_session_duration'] -eq 0 + } + } + + It 'sends max_session_duration when supplied a non-zero value' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -MaxSessionDuration 3600000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['max_session_duration'] -eq 3600000 + } + } + + It 'omits max_session_duration entirely when not supplied' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -Account 'obj-account-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('max_session_duration') + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the role by id when -Id is used' { + Update-PfbObjectStoreRole -Id 'role-id-1' -MaxSessionDuration 3600000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'role-id-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbObjectStoreRole -Name 's3-admin-role' -Attributes @{ max_session_duration = 7200000 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['max_session_duration'] -eq 7200000 + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbObjectStoreRole -Name 's3-admin-role' -MaxSessionDuration 3600000 -Attributes @{ max_session_duration = 7200000 } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'deprecated / read-only fields are not exposed (constraint 9 and 11)' { + It 'has no -Name -- wait, -Name is the selector; has no -Created/-Prn/-TrustedEntities parameter' { + $keys = (Get-Command Update-PfbObjectStoreRole).Parameters.Keys + foreach ($p in 'Created', 'Prn', 'TrustedEntities') { + $keys | Should -Not -Contain $p + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Account' } + @{ Parameter = 'MaxSessionDuration' } + ) { + $attrs = (Get-Command Update-PfbObjectStoreRole).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbObjectStoreRole).Parameters.Keys + foreach ($p in 'Account','MaxSessionDuration') { + $keys | Should -Contain $p + } + } + } +} From 489388744ff70d1660f3e48f64a576b8daefb083 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:35:28 -0700 Subject: [PATCH 26/90] feat(monitoring): add typed body params to Update-PfbAsyncLog (#31) --- Public/Monitoring/Update-PfbAsyncLog.ps1 | 68 ++++++++++--- Tests/Update-PfbAsyncLog.Tests.ps1 | 119 +++++++++++++++++++++++ 2 files changed, 176 insertions(+), 11 deletions(-) create mode 100644 Tests/Update-PfbAsyncLog.Tests.ps1 diff --git a/Public/Monitoring/Update-PfbAsyncLog.ps1 b/Public/Monitoring/Update-PfbAsyncLog.ps1 index 74137ca..bf1605d 100644 --- a/Public/Monitoring/Update-PfbAsyncLog.ps1 +++ b/Public/Monitoring/Update-PfbAsyncLog.ps1 @@ -4,20 +4,33 @@ function Update-PfbAsyncLog { Updates an asynchronous log collection job on the FlashBlade. .DESCRIPTION The Update-PfbAsyncLog cmdlet modifies an asynchronous log collection job on the - connected Pure Storage FlashBlade. Identify the job by name or ID and supply the + connected Everpure FlashBlade. Identify the job by name or ID and supply the changed properties via Attributes or individual parameters. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the async log job to update. + The name of the async log job to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the async log job to update. + .PARAMETER EndTime + When the time window ends (in milliseconds since epoch). + .PARAMETER HardwareComponents + All of the hardware components for which logs are being processed. + .PARAMETER StartTime + When the time window starts (in milliseconds since epoch). .PARAMETER Attributes - A hashtable of attributes to update on the async log job. + A hashtable of attributes to update on the async log job. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbAsyncLog -Name "log-job-1" -Attributes @{ status = 'cancelled' } + Update-PfbAsyncLog -Name "log-job-1" -StartTime 1700000000000 -EndTime 1700003600000 - Cancels the async log job named "log-job-1". + Sets the processing time window for the async log job named "log-job-1" using typed + parameters. .EXAMPLE Update-PfbAsyncLog -Id "12345" -Attributes @{ status = 'cancelled' } @@ -27,15 +40,31 @@ function Update-PfbAsyncLog { Updates the retention time for the specified async log job. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$EndTime, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$HardwareComponents, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$StartTime, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,11 +75,28 @@ function Update-PfbAsyncLog { } process { - $body = if ($Attributes) { $Attributes } else { @{} } - $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('EndTime')) { $body['end_time'] = $EndTime } + if ($PSBoundParameters.ContainsKey('StartTime')) { $body['start_time'] = $StartTime } + + # Constraint 8(b): hardware_components is an ARRAY OF REFERENCES (item schema is + # {id, name, resource_type}), so the parameter is [string[]] and the projection is + # assigned INLINE -- constraint 7 forbids an intermediate local. + if ($PSBoundParameters.ContainsKey('HardwareComponents')) { + $body['hardware_components'] = @($HardwareComponents | ForEach-Object { @{ name = $_ } }) + } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update async log job')) { diff --git a/Tests/Update-PfbAsyncLog.Tests.ps1 b/Tests/Update-PfbAsyncLog.Tests.ps1 new file mode 100644 index 0000000..7d09817 --- /dev/null +++ b/Tests/Update-PfbAsyncLog.Tests.ps1 @@ -0,0 +1,119 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbAsyncLog - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends end_time and start_time as body fields' { + Update-PfbAsyncLog -Name 'log-job-1' -StartTime 1700000000000 -EndTime 1700003600000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'logs-async' -and + $QueryParams['names'] -eq 'log-job-1' -and + $Body['start_time'] -eq 1700000000000 -and + $Body['end_time'] -eq 1700003600000 + } + } + + It 'sends an explicit -StartTime 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbAsyncLog -Name 'log-job-1' -StartTime 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('start_time') -and $Body['start_time'] -eq 0 + } + } + + It 'sends an explicit -EndTime 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbAsyncLog -Name 'log-job-1' -EndTime 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('end_time') -and $Body['end_time'] -eq 0 + } + } + + It 'builds hardware_components as name-reference objects' { + Update-PfbAsyncLog -Name 'log-job-1' -HardwareComponents 'CH1.FB1','CH1.FB2' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['hardware_components'].Count -eq 2 -and + $Body['hardware_components'][0].name -eq 'CH1.FB1' -and + $Body['hardware_components'][1].name -eq 'CH1.FB2' + } + } + + It 'sends an EMPTY array for -HardwareComponents @() so the list can be cleared' { + Update-PfbAsyncLog -Name 'log-job-1' -HardwareComponents @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('hardware_components') -and + @($Body['hardware_components']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbAsyncLog -Name 'log-job-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the job by id when -Id is used' { + Update-PfbAsyncLog -Id 'log-1' -StartTime 1 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'log-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbAsyncLog -Name 'log-job-1' -Attributes @{ status = 'cancelled' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['status'] -eq 'cancelled' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbAsyncLog -Name 'log-job-1' -StartTime 1 -Attributes @{ status = 'cancelled' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'EndTime' } + @{ Parameter = 'StartTime' } + @{ Parameter = 'HardwareComponents' } + ) { + $attrs = (Get-Command Update-PfbAsyncLog).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'does not expose any of the 6 read-only fields as parameters (constraint 11)' { + $keys = (Get-Command Update-PfbAsyncLog).Parameters.Keys + foreach ($ro in 'AvailableFiles','LastRequestTime','Processing','Progress') { + $keys | Should -Not -Contain $ro + } + } + } +} From d59f95499779cd4297b08d1648cbfc4a919cbdb9 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:36:58 -0700 Subject: [PATCH 27/90] feat(misc): add typed body params to Update-PfbKmip (#31) --- Public/Misc/Update-PfbKmip.ps1 | 62 ++++++++++++++++++++---- Tests/Update-PfbKmip.Tests.ps1 | 88 ++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 9 deletions(-) create mode 100644 Tests/Update-PfbKmip.Tests.ps1 diff --git a/Public/Misc/Update-PfbKmip.ps1 b/Public/Misc/Update-PfbKmip.ps1 index 0596c2f..94cbb4b 100644 --- a/Public/Misc/Update-PfbKmip.ps1 +++ b/Public/Misc/Update-PfbKmip.ps1 @@ -10,16 +10,26 @@ function Update-PfbKmip { The name of the KMIP server configuration to update. .PARAMETER Id The ID of the KMIP server configuration to update. + .PARAMETER CaCertificate + The name of the CA certificate used to validate the authenticity of the configured + KMIP servers. + .PARAMETER CaCertificateGroup + The name of the certificate group containing CA certificates that can be used to + validate the authenticity of the configured KMIP servers. + .PARAMETER Uris + The list of URIs for the configured KMIP servers, in the format + [protocol://]hostname:port. .PARAMETER Attributes - A hashtable of properties to update on the KMIP configuration. + A hashtable of properties to update on the KMIP configuration. Mutually exclusive + with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbKmip -Name 'kmip-server-1' -Attributes @{ uris = @('kmip.example.com:5696') } + Update-PfbKmip -Name 'kmip-server-1' -Uris 'kmip.example.com:5696' - Updates the KMIP server URI. + Updates the KMIP server URI using a typed parameter. .EXAMPLE - Update-PfbKmip -Name 'kmip-server-1' -Attributes @{ ca_certificate_group = @{ name = 'kmip-certs' } } + Update-PfbKmip -Name 'kmip-server-1' -CaCertificateGroup 'kmip-certs' Updates the CA certificate group used by the KMIP server. .EXAMPLE @@ -27,15 +37,31 @@ function Update-PfbKmip { Updates the KMIP configuration without prompting for confirmation. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificateGroup, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Uris, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -51,8 +77,26 @@ function Update-PfbKmip { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never truthiness -- see + # the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + + # Constraint 8(a): ca_certificate/ca_certificate_group are SCALAR REFERENCES (item + # schema is {id, name, resource_type}), so the parameter is [string] taking the + # name and the projection is assigned INLINE -- constraint 7 forbids a local. + if ($PSBoundParameters.ContainsKey('CaCertificate')) { $body['ca_certificate'] = @{ name = $CaCertificate } } + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + + # uris is a plain string array, not a reference -- no name-projection needed. + if ($PSBoundParameters.ContainsKey('Uris')) { $body['uris'] = @($Uris) } + } + if ($PSCmdlet.ShouldProcess($target, 'Update KMIP configuration')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'kmip' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'kmip' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbKmip.Tests.ps1 b/Tests/Update-PfbKmip.Tests.ps1 new file mode 100644 index 0000000..c94c960 --- /dev/null +++ b/Tests/Update-PfbKmip.Tests.ps1 @@ -0,0 +1,88 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbKmip - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends -CaCertificate as a scalar name reference' { + Update-PfbKmip -Name 'kmip-server-1' -CaCertificate 'cert-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'kmip' -and + $QueryParams['names'] -eq 'kmip-server-1' -and + $Body['ca_certificate'].name -eq 'cert-1' + } + } + + It 'sends -CaCertificateGroup as a scalar name reference' { + Update-PfbKmip -Name 'kmip-server-1' -CaCertificateGroup 'kmip-certs' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate_group'].name -eq 'kmip-certs' + } + } + + It 'sends -Uris as a plain string array' { + Update-PfbKmip -Name 'kmip-server-1' -Uris 'kmip1.example.com:5696', 'kmip2.example.com:5696' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['uris'].Count -eq 2 -and + $Body['uris'][0] -eq 'kmip1.example.com:5696' -and + $Body['uris'][1] -eq 'kmip2.example.com:5696' + } + } + + It 'sends an EMPTY array for -Uris @() so the list can be cleared (constraint 2)' { + Update-PfbKmip -Name 'kmip-server-1' -Uris @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('uris') -and @($Body['uris']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbKmip -Name 'kmip-server-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the KMIP config by id when -Id is used' { + Update-PfbKmip -Id 'kmip-1' -Uris 'kmip1.example.com:5696' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'kmip-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbKmip -Name 'kmip-server-1' -Attributes @{ uris = @('raw.example.com:5696') } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['uris'][0] -eq 'raw.example.com:5696' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbKmip -Name 'kmip-server-1' -Uris 'x.example.com:5696' -Attributes @{ uris = @('y') } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } +} From 6694ffbbd8f74432758df57192b53e9c2644963a Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:07 -0700 Subject: [PATCH 28/90] feat(policy): add typed body params to Update-PfbTlsPolicy (#31) --- Public/Policy/Update-PfbTlsPolicy.ps1 | 125 +++++++++++++++-- Tests/Update-PfbTlsPolicy.Tests.ps1 | 190 ++++++++++++++++++++++++++ 2 files changed, 303 insertions(+), 12 deletions(-) create mode 100644 Tests/Update-PfbTlsPolicy.Tests.ps1 diff --git a/Public/Policy/Update-PfbTlsPolicy.ps1 b/Public/Policy/Update-PfbTlsPolicy.ps1 index f81a53f..6b5c0e5 100644 --- a/Public/Policy/Update-PfbTlsPolicy.ps1 +++ b/Public/Policy/Update-PfbTlsPolicy.ps1 @@ -4,33 +4,114 @@ function Update-PfbTlsPolicy { Updates an existing TLS policy on a FlashBlade array. .DESCRIPTION The Update-PfbTlsPolicy cmdlet modifies attributes of an existing TLS policy on the - connected Pure Storage FlashBlade. The policy can be identified by name or ID. + connected Everpure FlashBlade. The policy can be identified by name or ID. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the TLS policy to update. + The name of the TLS policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the TLS policy to update. + .PARAMETER ApplianceCertificate + 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. + .PARAMETER ClientCertificatesRequired + If true, then all clients negotiating TLS connections with network interfaces to + which this policy applies will be required to provide their client certificate. + .PARAMETER DisabledTlsCiphers + If specified, disables the specific TLS ciphers. + .PARAMETER Enabled + If true, the policy is enabled. + .PARAMETER EnabledTlsCiphers + If specified, enables only the specified TLS ciphers. + .PARAMETER Location + Reference to the array where the policy is defined. + .PARAMETER MinTlsVersion + The minimum TLS version that will be allowed for inbound connections on IPs to + which this policy applies. + .PARAMETER NewName + A new name for the TLS policy. + .PARAMETER TrustedClientCertificateAuthority + A reference to a certificate or certificate group. + .PARAMETER VerifyClientCertificateTrust + If true, then any certificate presented by a client in TLS negotiation will undergo + strict trust verification using the certificate(s) referenced by + -TrustedClientCertificateAuthority. .PARAMETER Attributes - A hashtable of TLS policy attributes to modify. + A hashtable of TLS policy attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbTlsPolicy -Name "tls-strict" -Attributes @{ min_version = "1.3" } + Update-PfbTlsPolicy -Name "tls-strict" -MinTlsVersion "1.3" - Updates the minimum TLS version for the specified policy. + Updates the minimum TLS version for the specified policy using a typed parameter. .EXAMPLE - Update-PfbTlsPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ min_version = "1.2" } + Update-PfbTlsPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ min_tls_version = "1.2" } Updates the TLS policy by ID. .EXAMPLE - Update-PfbTlsPolicy -Name "tls-strict" -Attributes @{ min_version = "1.3" } -WhatIf + Update-PfbTlsPolicy -Name "tls-strict" -Attributes @{ min_tls_version = "1.3" } -WhatIf Shows what would happen without actually updating the policy. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$ApplianceCertificate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$ClientCertificatesRequired, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$DisabledTlsCiphers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$EnabledTlsCiphers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$MinTlsVersion, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$TrustedClientCertificateAuthority, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$VerifyClientCertificateTrust, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +122,29 @@ function Update-PfbTlsPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('ApplianceCertificate')) { $body['appliance_certificate'] = @{ name = $ApplianceCertificate } } + if ($PSBoundParameters.ContainsKey('ClientCertificatesRequired')) { $body['client_certificates_required'] = $ClientCertificatesRequired } + if ($PSBoundParameters.ContainsKey('DisabledTlsCiphers')) { $body['disabled_tls_ciphers'] = @($DisabledTlsCiphers) } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('EnabledTlsCiphers')) { $body['enabled_tls_ciphers'] = @($EnabledTlsCiphers) } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('MinTlsVersion')) { $body['min_tls_version'] = $MinTlsVersion } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('TrustedClientCertificateAuthority')) { + $body['trusted_client_certificate_authority'] = @{ name = $TrustedClientCertificateAuthority } + } + if ($PSBoundParameters.ContainsKey('VerifyClientCertificateTrust')) { $body['verify_client_certificate_trust'] = $VerifyClientCertificateTrust } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update TLS policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'tls-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'tls-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbTlsPolicy.Tests.ps1 b/Tests/Update-PfbTlsPolicy.Tests.ps1 new file mode 100644 index 0000000..57e6d61 --- /dev/null +++ b/Tests/Update-PfbTlsPolicy.Tests.ps1 @@ -0,0 +1,190 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbTlsPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'builds appliance_certificate as a name-reference object' { + Update-PfbTlsPolicy -Name 'tls-strict' -ApplianceCertificate 'cert-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'tls-policies' -and + $QueryParams['names'] -eq 'tls-strict' -and + $Body['appliance_certificate'].name -eq 'cert-1' + } + } + + It 'sends an explicit -ClientCertificatesRequired:$false (ContainsKey semantics, not truthiness)' { + Update-PfbTlsPolicy -Name 'tls-strict' -ClientCertificatesRequired $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('client_certificates_required') -and $Body['client_certificates_required'] -eq $false + } + } + + It 'sends disabled_tls_ciphers as a plain string array' { + Update-PfbTlsPolicy -Name 'tls-strict' -DisabledTlsCiphers 'RC4','3DES' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['disabled_tls_ciphers']).Count -eq 2 -and + $Body['disabled_tls_ciphers'][0] -eq 'RC4' -and + $Body['disabled_tls_ciphers'][1] -eq '3DES' + } + } + + It 'sends an EMPTY array for -DisabledTlsCiphers @() so a list can be cleared' { + Update-PfbTlsPolicy -Name 'tls-strict' -DisabledTlsCiphers @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('disabled_tls_ciphers') -and + @($Body['disabled_tls_ciphers']).Count -eq 0 + } + } + + It 'sends enabled as a body field' { + Update-PfbTlsPolicy -Name 'tls-strict' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['enabled'] -eq $true + } + } + + It 'sends enabled_tls_ciphers as a plain string array' { + Update-PfbTlsPolicy -Name 'tls-strict' -EnabledTlsCiphers 'TLS_AES_128_GCM_SHA256' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['enabled_tls_ciphers']).Count -eq 1 -and + $Body['enabled_tls_ciphers'][0] -eq 'TLS_AES_128_GCM_SHA256' + } + } + + It 'sends an EMPTY array for -EnabledTlsCiphers @() so a list can be cleared' { + Update-PfbTlsPolicy -Name 'tls-strict' -EnabledTlsCiphers @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled_tls_ciphers') -and + @($Body['enabled_tls_ciphers']).Count -eq 0 + } + } + + It 'builds location as a name-reference object' { + Update-PfbTlsPolicy -Name 'tls-strict' -Location 'array-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'sends min_tls_version as a body field' { + Update-PfbTlsPolicy -Name 'tls-strict' -MinTlsVersion '1.3' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['min_tls_version'] -eq '1.3' + } + } + + It 'sends -NewName as the name body field (rename exception, not -TlsPolicyName)' { + Update-PfbTlsPolicy -Name 'tls-strict' -NewName 'tls-modern' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'tls-modern' + } + } + + It 'builds trusted_client_certificate_authority as a name-reference object' { + Update-PfbTlsPolicy -Name 'tls-strict' -TrustedClientCertificateAuthority 'ca-group-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['trusted_client_certificate_authority'].name -eq 'ca-group-1' + } + } + + It 'sends an explicit -VerifyClientCertificateTrust:$false (ContainsKey semantics, not truthiness)' { + Update-PfbTlsPolicy -Name 'tls-strict' -VerifyClientCertificateTrust $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('verify_client_certificate_trust') -and $Body['verify_client_certificate_trust'] -eq $false + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbTlsPolicy -Name 'tls-strict' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the policy by id when -Id is used' { + Update-PfbTlsPolicy -Id 'policy-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbTlsPolicy -Name 'tls-strict' -Attributes @{ min_tls_version = '1.2' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['min_tls_version'] -eq '1.2' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbTlsPolicy -Name 'tls-strict' -Enabled $true -Attributes @{ enabled = $false } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never exposed (constraint 11)' { + It 'has no -IsLocal or -PolicyType parameter' { + $keys = (Get-Command Update-PfbTlsPolicy).Parameters.Keys + $keys | Should -Not -Contain 'IsLocal' + $keys | Should -Not -Contain 'PolicyType' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ApplianceCertificate' } + @{ Parameter = 'ClientCertificatesRequired' } + @{ Parameter = 'DisabledTlsCiphers' } + @{ Parameter = 'Enabled' } + @{ Parameter = 'EnabledTlsCiphers' } + @{ Parameter = 'Location' } + @{ Parameter = 'MinTlsVersion' } + @{ Parameter = 'NewName' } + @{ Parameter = 'TrustedClientCertificateAuthority' } + @{ Parameter = 'VerifyClientCertificateTrust' } + ) { + $attrs = (Get-Command Update-PfbTlsPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbTlsPolicy).Parameters.Keys + foreach ($p in 'ApplianceCertificate','ClientCertificatesRequired','DisabledTlsCiphers','Enabled', + 'EnabledTlsCiphers','Location','MinTlsVersion','NewName', + 'TrustedClientCertificateAuthority','VerifyClientCertificateTrust') { + $keys | Should -Contain $p + } + } + } +} From 82233cec06c8a0520832f7053e2f21add004ce65 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:15 -0700 Subject: [PATCH 29/90] feat(bucket): add typed body params to Update-PfbBucketAuditFilter (#31) Adds -Actions/-S3Prefixes (the only two BucketAuditFilterPost body fields) in new ByMemberNameIndividual/ByMemberIdIndividual sets, mutually exclusive with -Attributes. Also fixes a real wire-correctness bug found via the OpenAPI spec: the endpoint's query parameters are bucket_ids/bucket_names, not the member_ids/member_names this cmdlet previously sent (which do not exist on this endpoint at all), and the endpoint requires a 'names' query parameter on every PATCH that this cmdlet never sent -- new -FilterNames, defaulted from -MemberName for backward compatibility. Co-Authored-By: Claude Sonnet 5 --- Public/Bucket/Update-PfbBucketAuditFilter.ps1 | 107 +++++++++++--- Tests/Update-PfbBucketAuditFilter.Tests.ps1 | 131 ++++++++++++++++++ 2 files changed, 219 insertions(+), 19 deletions(-) create mode 100644 Tests/Update-PfbBucketAuditFilter.Tests.ps1 diff --git a/Public/Bucket/Update-PfbBucketAuditFilter.ps1 b/Public/Bucket/Update-PfbBucketAuditFilter.ps1 index a8bab2d..09fe2a4 100644 --- a/Public/Bucket/Update-PfbBucketAuditFilter.ps1 +++ b/Public/Bucket/Update-PfbBucketAuditFilter.ps1 @@ -4,39 +4,89 @@ function Update-PfbBucketAuditFilter { Updates an existing bucket audit filter on the FlashBlade. .DESCRIPTION Modifies an existing audit filter for a bucket identified by member name - or member ID. Use the Attributes parameter to supply the properties to - update as a hashtable. + or member ID. Use the individual typed parameters for a specific audit + filter field, or the Attributes parameter to supply several properties + to update at once as a hashtable. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. -FilterNames is a query parameter and is orthogonal + to the body, so it can be combined freely with either. .PARAMETER MemberName - The name of the bucket whose audit filter should be updated. + The name of the bucket whose audit filter should be updated. Sent as the + 'bucket_names' query parameter. .PARAMETER MemberId - The ID of the bucket whose audit filter should be updated. + The ID of the bucket whose audit filter should be updated. Sent as the + 'bucket_ids' query parameter. + .PARAMETER FilterNames + The audit filter's own name(s), sent as the required 'names' query parameter. + When not explicitly supplied, this defaults to -MemberName (audit filters are + named after their owning bucket), so existing -MemberName-only callers keep + working. If you only have -MemberId and the filter's name differs from the + bucket's name, supply -FilterNames explicitly. + .PARAMETER Actions + The list of ops to be audited by this filter (e.g. 's3:GetObject'). No fixed + value set is documented in the spec, so this is not validated against a closed + list. + .PARAMETER S3Prefixes + The list of object name prefixes; ops in -Actions are audited only for objects + matching these prefixes. .PARAMETER Attributes - A hashtable of audit filter properties to update. - Only specified properties are changed. + A hashtable of audit filter properties to update. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbBucketAuditFilter -MemberName "mybucket" -Attributes @{ actions = @("s3.GetObject","s3.PutObject") } + Update-PfbBucketAuditFilter -MemberName "mybucket" -Actions "s3:GetObject","s3:PutObject" - Updates the audit filter for 'mybucket' to log GetObject and PutObject operations. + Updates the audit filter for 'mybucket' to log GetObject and PutObject operations + using typed parameters. .EXAMPLE - Update-PfbBucketAuditFilter -MemberId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -Attributes @{ actions = @("s3.DeleteObject") } + Update-PfbBucketAuditFilter -MemberId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -FilterNames "mybucket" -Actions "s3:DeleteObject" - Updates the audit filter by bucket ID. + Updates the audit filter by bucket ID, explicitly supplying the filter's own name. .EXAMPLE - Update-PfbBucketAuditFilter -MemberName "mybucket" -Attributes @{ enabled = $true } + Update-PfbBucketAuditFilter -MemberName "mybucket" -Attributes @{ actions = @("s3:GetObject","s3:PutObject") } - Enables the audit filter for the specified bucket. + Updates the audit filter for 'mybucket' using a raw attribute hashtable. + .NOTES + Wire-correctness fix: the real `PATCH /buckets/audit-filters` endpoint's query + parameters are `bucket_ids`/`bucket_names` (confirmed directly against the real + OpenAPI spec) -- not `member_ids`/`member_names`, which this cmdlet previously sent + and which do not exist on this endpoint at all. -MemberName/-MemberId now map to the + correct wire keys. Separately, the endpoint also requires a `names` query parameter + on every PATCH (identifying the audit-filter resource itself) -- new -FilterNames + parameter, defaulted from -MemberName for backward compatibility. `actions` and + `s3_prefixes` are the only two real body properties on `BucketAuditFilterPost`; + `bucket_ids`/`bucket_names`/`names` are query parameters only, never body fields. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByMemberNameIndividual')] param( - [Parameter(ParameterSetName = 'ByMemberName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByMemberNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByMemberNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$MemberName, - [Parameter(ParameterSetName = 'ByMemberId', Mandatory)] + [Parameter(ParameterSetName = 'ByMemberIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByMemberIdAttributes', Mandatory)] [string]$MemberId, - [Parameter(Mandatory)] + # Constraint 17: `names` is a QUERY parameter, orthogonal to the request body, so + # -FilterNames is declared bare rather than scoped to the *Individual sets. + [Parameter()] + [string[]]$FilterNames, + + [Parameter(ParameterSetName = 'ByMemberNameIndividual')] + [Parameter(ParameterSetName = 'ByMemberIdIndividual')] + [string[]]$Actions, + + [Parameter(ParameterSetName = 'ByMemberNameIndividual')] + [Parameter(ParameterSetName = 'ByMemberIdIndividual')] + [string[]]$S3Prefixes, + + [Parameter(ParameterSetName = 'ByMemberNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByMemberIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -48,13 +98,32 @@ function Update-PfbBucketAuditFilter { process { $queryParams = @{} - if ($MemberName) { $queryParams['member_names'] = $MemberName } - if ($MemberId) { $queryParams['member_ids'] = $MemberId } + if ($MemberName) { $queryParams['bucket_names'] = $MemberName } + if ($MemberId) { $queryParams['bucket_ids'] = $MemberId } + + if ($PSBoundParameters.ContainsKey('FilterNames')) { + $queryParams['names'] = @($FilterNames) + } + elseif ($MemberName) { + # The real endpoint requires 'names' on every PATCH. Default to -MemberName + # (audit filters are named after their owning bucket) so existing + # -MemberName-only callers keep working without a breaking change. + $queryParams['names'] = $MemberName + } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Actions')) { $body['actions'] = @($Actions) } + if ($PSBoundParameters.ContainsKey('S3Prefixes')) { $body['s3_prefixes'] = @($S3Prefixes) } + } $target = if ($MemberName) { $MemberName } else { $MemberId } if ($PSCmdlet.ShouldProcess($target, 'Update bucket audit filter')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'buckets/audit-filters' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'buckets/audit-filters' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbBucketAuditFilter.Tests.ps1 b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 new file mode 100644 index 0000000..80908d6 --- /dev/null +++ b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 @@ -0,0 +1,131 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbBucketAuditFilter - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends actions and s3_prefixes as body fields' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Actions 's3:GetObject', 's3:PutObject' ` + -S3Prefixes 'prefix1', 'prefix2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'buckets/audit-filters' -and + @($Body['actions']).Count -eq 2 -and $Body['actions'][0] -eq 's3:GetObject' -and + @($Body['s3_prefixes']).Count -eq 2 -and $Body['s3_prefixes'][1] -eq 'prefix2' + } + } + + It 'sends an EMPTY array for -Actions @() so a list can be cleared (constraint 2, array field)' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Actions @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('actions') -and @($Body['actions']).Count -eq 0 + } + } + + It 'sends an EMPTY array for -S3Prefixes @() so a list can be cleared (constraint 2, array field)' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -S3Prefixes @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('s3_prefixes') -and @($Body['s3_prefixes']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } + + Context 'query parameters (wire-correctness fix: bucket_names/bucket_ids, not member_names/member_ids)' { + It 'sends -MemberName as bucket_names, NOT member_names' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['bucket_names'] -eq 'mybucket' -and -not $QueryParams.ContainsKey('member_names') + } + } + + It 'sends -MemberId as bucket_ids, NOT member_ids' { + Update-PfbBucketAuditFilter -MemberId 'bucket-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['bucket_ids'] -eq 'bucket-1' -and -not $QueryParams.ContainsKey('member_ids') -and + -not $QueryParams.ContainsKey('bucket_names') + } + } + + It 'defaults the required "names" query parameter from -MemberName when -FilterNames is not supplied' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['names'] -eq 'mybucket' + } + } + + It 'sends -FilterNames as names when explicitly supplied, overriding the -MemberName default' { + Update-PfbBucketAuditFilter -MemberId 'bucket-1' -FilterNames 'custom-filter-name' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($QueryParams['names']).Count -eq 1 -and @($QueryParams['names'])[0] -eq 'custom-filter-name' + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbBucketAuditFilter -MemberName 'mybucket' -Attributes @{ actions = @('s3:GetObject') } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['actions'])[0] -eq 's3:GetObject' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbBucketAuditFilter -MemberName 'mybucket' -Actions @('s3:GetObject') ` + -Attributes @{ actions = @('s3:PutObject') } -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + + It 'rejects an unresolved selector plus typed parameter plus -Attributes' { + { Update-PfbBucketAuditFilter -MemberId 'bucket-1' -S3Prefixes @('p1') ` + -Attributes @{ s3_prefixes = @('p2') } -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Actions' } + @{ Parameter = 'S3Prefixes' } + ) { + $attrs = (Get-Command Update-PfbBucketAuditFilter).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbBucketAuditFilter).Parameters.Keys + foreach ($p in 'Actions', 'S3Prefixes') { + $keys | Should -Contain $p + } + } + } +} From 87abc912d56a8dad5c6dbfe8cbca340a0ddae185 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:16 -0700 Subject: [PATCH 30/90] feat(directoryservice): add typed body params to Update-PfbDirectoryServiceRole (#31) --- .../Update-PfbDirectoryServiceRole.ps1 | 71 ++++++++-- .../Update-PfbDirectoryServiceRole.Tests.ps1 | 129 ++++++++++++++++++ 2 files changed, 191 insertions(+), 9 deletions(-) create mode 100644 Tests/Update-PfbDirectoryServiceRole.Tests.ps1 diff --git a/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 index 805ac2d..69052de 100644 --- a/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 +++ b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 @@ -4,20 +4,37 @@ function Update-PfbDirectoryServiceRole { Updates an existing directory service role on the FlashBlade. .DESCRIPTION The Update-PfbDirectoryServiceRole cmdlet modifies attributes of an existing directory - service role on the connected Pure Storage FlashBlade. The target role can be identified + service role on the connected Everpure FlashBlade. The target role can be identified by name or ID. Supports ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the directory service role to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the directory service role to update. + .PARAMETER Group + Common Name (CN) of the directory service group containing users with authority level of + the specified role name. + .PARAMETER GroupBase + Specifies where the configured group is located in the directory tree. + .PARAMETER RoleIds + A comma-separated list of role IDs used to select the role(s) to update. Cannot be + provided together with -Name, -Id, or -RoleNames. + .PARAMETER RoleNames + A comma-separated list of role names used to select the role(s) to update. Cannot be + provided together with -Name, -Id, or -RoleIds. .PARAMETER Attributes - A hashtable of role attributes to modify (e.g., group, group_base). + A hashtable of role attributes to modify (e.g., group, group_base). Mutually exclusive + with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbDirectoryServiceRole -Name "ad-admins" -Attributes @{ group = "CN=FB-SuperAdmins,OU=Groups,DC=corp,DC=example,DC=com" } + Update-PfbDirectoryServiceRole -Name "ad-admins" -Group "CN=FB-SuperAdmins,OU=Groups,DC=corp,DC=example,DC=com" - Updates the group mapping for the directory service role "ad-admins". + Updates the group mapping for the directory service role "ad-admins" using a typed parameter. .EXAMPLE Update-PfbDirectoryServiceRole -Id "abc12345-6789-0abc-def0-123456789abc" -Attributes @{ group_base = "DC=corp,DC=example,DC=com" } @@ -27,12 +44,32 @@ function Update-PfbDirectoryServiceRole { Shows what would happen if the role were updated without making changes. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Group, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$GroupBase, + + [Parameter()] [string[]]$RoleIds, + [Parameter()] [string[]]$RoleNames, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +81,26 @@ function Update-PfbDirectoryServiceRole { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + # Constraint 17: role_ids/role_names are QUERY parameters declared bare, not in the + # *Individual sets, because they are orthogonal alternate selectors that must stay + # usable alongside -Attributes. + if ($PSBoundParameters.ContainsKey('RoleIds')) { $queryParams['role_ids'] = $RoleIds -join ',' } + if ($PSBoundParameters.ContainsKey('RoleNames')) { $queryParams['role_names'] = $RoleNames -join ',' } + $target = if ($Name) { $Name } else { $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Group')) { $body['group'] = $Group } + if ($PSBoundParameters.ContainsKey('GroupBase')) { $body['group_base'] = $GroupBase } + } + if ($PSCmdlet.ShouldProcess($target, 'Update directory service role')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'directory-services/roles' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'directory-services/roles' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 new file mode 100644 index 0000000..2cae4d3 --- /dev/null +++ b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 @@ -0,0 +1,129 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbDirectoryServiceRole - typed body + query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends group and group_base as body fields' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -Group 'CN=FB-SuperAdmins,OU=Groups,DC=corp,DC=example,DC=com' ` + -GroupBase 'DC=corp,DC=example,DC=com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'directory-services/roles' -and + $QueryParams['names'] -eq 'ad-admins' -and + $Body['group'] -eq 'CN=FB-SuperAdmins,OU=Groups,DC=corp,DC=example,DC=com' -and + $Body['group_base'] -eq 'DC=corp,DC=example,DC=com' + } + } + + It 'sends an EMPTY string for -Group "" rather than dropping the key' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -Group '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('group') -and $Body['group'] -eq '' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the role by id when -Id is used' { + Update-PfbDirectoryServiceRole -Id 'role-1' -Group 'g' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'role-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-RoleIds/-RoleNames query parameters (constraint 17, bare and orthogonal)' { + It 'sends -RoleNames as the role_names query parameter alongside -Attributes' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -RoleNames 'array_admin' -Attributes @{ group = 'g' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['role_names'] -eq 'array_admin' -and $Body['group'] -eq 'g' + } + } + + It 'sends -RoleIds as the role_ids query parameter' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -RoleIds 'role-abc' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['role_ids'] -eq 'role-abc' + } + } + + It 'omits role_ids/role_names entirely when not supplied' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('role_ids') -and -not $QueryParams.ContainsKey('role_names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbDirectoryServiceRole -Name 'ad-admins' -Attributes @{ group = 'raw-group' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['group'] -eq 'raw-group' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbDirectoryServiceRole -Name 'ad-admins' -Group 'g' -Attributes @{ group = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'deprecated fields are not exposed (constraint 9)' { + It 'has no -Role parameter' { + (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys | Should -Not -Contain 'Role' + } + } + + Context 'read-only fields are not exposed (constraint 11)' { + It 'has no -ManagementAccessPolicies parameter' { + (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys | Should -Not -Contain 'ManagementAccessPolicies' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Group' } + @{ Parameter = 'GroupBase' } + ) { + $attrs = (Get-Command Update-PfbDirectoryServiceRole).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys + foreach ($p in 'Group', 'GroupBase', 'RoleIds', 'RoleNames') { + $keys | Should -Contain $p + } + } + } +} From 968debdac10f6701248e16be1a55d6aadc6d88ac Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:19 -0700 Subject: [PATCH 31/90] feat(objectstore): add typed body params to Update-PfbObjectStoreVirtualHost (#31) --- .../Update-PfbObjectStoreVirtualHost.ps1 | 82 ++++++++++- ...Update-PfbObjectStoreVirtualHost.Tests.ps1 | 130 ++++++++++++++++++ 2 files changed, 205 insertions(+), 7 deletions(-) create mode 100644 Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 diff --git a/Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1 b/Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1 index 9f2f12f..c95c558 100644 --- a/Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1 +++ b/Public/ObjectStore/Update-PfbObjectStoreVirtualHost.ps1 @@ -5,14 +5,34 @@ function Update-PfbObjectStoreVirtualHost { .DESCRIPTION Modifies the properties of an existing object store virtual host, such as its enabled state or associated access policies. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the virtual host to update. .PARAMETER Id The ID of the virtual host to update. + .PARAMETER AddAttachedServers + A list of new servers which are allowed to use this virtual host. + .PARAMETER AttachedServers + A list of servers which are allowed to use this virtual host. + .PARAMETER Hostname + A hostname by which the array can be addressed for virtual hosted-style S3 requests. + .PARAMETER NewName + A new user-specified name for the virtual host. + .PARAMETER RemoveAttachedServers + A list of servers which will no longer be allowed to use this virtual host. .PARAMETER Attributes - A hashtable of virtual host properties to update. + A hashtable of virtual host properties to update. Mutually exclusive with + the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. + .EXAMPLE + Update-PfbObjectStoreVirtualHost -Name "s3.example.com" -Hostname "s3.myarray.com" + + Sets the hostname for the specified virtual host using a typed parameter. .EXAMPLE Update-PfbObjectStoreVirtualHost -Name "s3.example.com" -Attributes @{ enabled = $true @@ -27,15 +47,41 @@ function Update-PfbObjectStoreVirtualHost { Update-PfbObjectStoreVirtualHost -Name "data.example.com" -Attributes @{} Sends an empty update to refresh the virtual host object. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$AddAttachedServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$AttachedServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Hostname, + + # EXCEPTION: the wire field is literally `name` (a rename), so the parameter is + # -NewName, never -VirtualHostName -- see Global Constraint on the `name` field. + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$RemoveAttachedServers, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,12 +92,34 @@ function Update-PfbObjectStoreVirtualHost { } process { - $target = if ($Name) { $Name } else { $Id } - $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + + # Constraint 8(b): add_attached_servers/attached_servers/remove_attached_servers + # are ARRAYS OF REFERENCES (item schema is {id, name, resource_type}), so the + # parameters are [string[]] and each projection is assigned INLINE -- constraint 7 + # forbids an intermediate local variable here. + if ($PSBoundParameters.ContainsKey('AddAttachedServers')) { + $body['add_attached_servers'] = @($AddAttachedServers | ForEach-Object { @{ name = $_ } }) + } + if ($PSBoundParameters.ContainsKey('AttachedServers')) { + $body['attached_servers'] = @($AttachedServers | ForEach-Object { @{ name = $_ } }) + } + if ($PSBoundParameters.ContainsKey('Hostname')) { $body['hostname'] = $Hostname } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('RemoveAttachedServers')) { + $body['remove_attached_servers'] = @($RemoveAttachedServers | ForEach-Object { @{ name = $_ } }) + } + } + + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update object store virtual host')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'object-store-virtual-hosts' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 new file mode 100644 index 0000000..69254f0 --- /dev/null +++ b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 @@ -0,0 +1,130 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbObjectStoreVirtualHost - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends hostname and -NewName as body fields (rename exception, not -VirtualHostName)' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -Hostname 's3.myarray.com' -NewName 'renamed-vhost' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'object-store-virtual-hosts' -and + $QueryParams['names'] -eq 's3.example.com' -and + $Body['hostname'] -eq 's3.myarray.com' -and + $Body['name'] -eq 'renamed-vhost' + } + } + + It 'builds attached_servers as name-reference objects (constraint 8b, array of references)' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -AttachedServers 'srv-a','srv-b' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['attached_servers'].Count -eq 2 -and + $Body['attached_servers'][0].name -eq 'srv-a' -and + $Body['attached_servers'][1].name -eq 'srv-b' + } + } + + It 'sends an EMPTY array for -AttachedServers @() so a list can be cleared' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -AttachedServers @() ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('attached_servers') -and + @($Body['attached_servers']).Count -eq 0 + } + } + + It 'builds add_attached_servers as name-reference objects' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -AddAttachedServers 'srv-c' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['add_attached_servers'][0].name -eq 'srv-c' + } + } + + It 'builds remove_attached_servers as name-reference objects' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -RemoveAttachedServers 'srv-d' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remove_attached_servers'][0].name -eq 'srv-d' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the virtual host by id when -Id is used' { + Update-PfbObjectStoreVirtualHost -Id 'vhost-id-1' -Hostname 's3.myarray.com' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'vhost-id-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -Attributes @{ hostname = 'raw.example.com' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['hostname'] -eq 'raw.example.com' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -Hostname 'x.example.com' -Attributes @{ hostname = 'y.example.com' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'AddAttachedServers' } + @{ Parameter = 'AttachedServers' } + @{ Parameter = 'Hostname' } + @{ Parameter = 'NewName' } + @{ Parameter = 'RemoveAttachedServers' } + ) { + $attrs = (Get-Command Update-PfbObjectStoreVirtualHost).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbObjectStoreVirtualHost).Parameters.Keys + foreach ($p in 'AddAttachedServers','AttachedServers','Hostname','NewName','RemoveAttachedServers') { + $keys | Should -Contain $p + } + } + + It 'has no read-only field parameter (constraint 11: id)' { + $keys = (Get-Command Update-PfbObjectStoreVirtualHost).Parameters.Keys + $keys | Should -Not -Contain 'IdField' + } + } +} From 11cd457de2c58ea3a73c95302e7e1a267283a16e Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:22 -0700 Subject: [PATCH 32/90] feat(monitoring): add typed body params to Update-PfbLogTargetFileSystem (#31) --- .../Update-PfbLogTargetFileSystem.ps1 | 81 ++++++++++--- Tests/Update-PfbLogTargetFileSystem.Tests.ps1 | 111 ++++++++++++++++++ 2 files changed, 178 insertions(+), 14 deletions(-) create mode 100644 Tests/Update-PfbLogTargetFileSystem.Tests.ps1 diff --git a/Public/Monitoring/Update-PfbLogTargetFileSystem.ps1 b/Public/Monitoring/Update-PfbLogTargetFileSystem.ps1 index a7a83b5..150a8ec 100644 --- a/Public/Monitoring/Update-PfbLogTargetFileSystem.ps1 +++ b/Public/Monitoring/Update-PfbLogTargetFileSystem.ps1 @@ -4,38 +4,75 @@ function Update-PfbLogTargetFileSystem { Updates a log-target file-system configuration on the FlashBlade. .DESCRIPTION The Update-PfbLogTargetFileSystem cmdlet modifies a log-target file-system - configuration on the connected Pure Storage FlashBlade. Identify the target by - name or ID and supply the changed properties via Attributes. + configuration on the connected Everpure FlashBlade. Identify the target by + name or ID and supply the changed properties via Attributes or individual parameters. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the log-target file system to update. + The name of the log-target file system to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the log-target file system to update. + .PARAMETER FileSystem + The target filesystem where audit logs will be stored. + .PARAMETER KeepFor + Specifies the period that audit logs are retained before they are deleted, in + milliseconds. + .PARAMETER KeepSize + Specifies the maximum size of audit logs to be retained. + .PARAMETER NewName + A new user-specified name for the log target. Named -NewName rather than -Name + because -Name already identifies which log target to update. .PARAMETER Attributes - A hashtable of attributes to update on the configuration. + A hashtable of attributes to update on the configuration. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbLogTargetFileSystem -Name "log-fs-target1" -Attributes @{ path = '/new-path' } + Update-PfbLogTargetFileSystem -Name "log-fs-target1" -KeepFor 86400000 - Updates the path on the log-target file-system configuration. + Updates the audit-log retention period on the log-target file-system configuration + using a typed parameter. .EXAMPLE Update-PfbLogTargetFileSystem -Id "12345" -Attributes @{ enabled = $true } Enables the log-target file system identified by ID. .EXAMPLE - Update-PfbLogTargetFileSystem -Name "log-fs-target1" -Attributes @{ file_system = @{ name = 'new-fs' } } + Update-PfbLogTargetFileSystem -Name "log-fs-target1" -FileSystem 'new-fs' - Updates the underlying file system reference. + Updates the underlying file system reference using a typed parameter. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$FileSystem, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$KeepFor, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$KeepSize, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,11 +83,27 @@ function Update-PfbLogTargetFileSystem { } process { - $body = if ($Attributes) { $Attributes } else { @{} } - $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('KeepFor')) { $body['keep_for'] = $KeepFor } + if ($PSBoundParameters.ContainsKey('KeepSize')) { $body['keep_size'] = $KeepSize } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + + # Constraint 8(a): file_system is a SCALAR REFERENCE (item schema is + # {id, name, resource_type}), so the parameter is [string] taking the name and the + # projection is assigned INLINE -- constraint 7 forbids an intermediate local. + if ($PSBoundParameters.ContainsKey('FileSystem')) { $body['file_system'] = @{ name = $FileSystem } } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update log-target file system')) { diff --git a/Tests/Update-PfbLogTargetFileSystem.Tests.ps1 b/Tests/Update-PfbLogTargetFileSystem.Tests.ps1 new file mode 100644 index 0000000..cee80bf --- /dev/null +++ b/Tests/Update-PfbLogTargetFileSystem.Tests.ps1 @@ -0,0 +1,111 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLogTargetFileSystem - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends keep_for, keep_size and name as body fields' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -KeepFor 86400000 -KeepSize 1000000 ` + -NewName 'renamed-target' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'log-targets/file-systems' -and + $QueryParams['names'] -eq 'log-fs-target1' -and + $Body['keep_for'] -eq 86400000 -and + $Body['keep_size'] -eq 1000000 -and + $Body['name'] -eq 'renamed-target' + } + } + + It 'sends an explicit -KeepFor 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -KeepFor 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('keep_for') -and $Body['keep_for'] -eq 0 + } + } + + It 'sends an explicit -KeepSize 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -KeepSize 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('keep_size') -and $Body['keep_size'] -eq 0 + } + } + + It 'builds file_system as a name-reference object (constraint 8a, scalar reference)' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -FileSystem 'fs1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['file_system'].name -eq 'fs1' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the log target by id when -Id is used' { + Update-PfbLogTargetFileSystem -Id 'lt-1' -KeepFor 1 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'lt-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -Attributes @{ keep_for = 86400000 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['keep_for'] -eq 86400000 + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbLogTargetFileSystem -Name 'log-fs-target1' -KeepFor 1 -Attributes @{ keep_for = 2 } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'FileSystem' } + @{ Parameter = 'KeepFor' } + @{ Parameter = 'KeepSize' } + @{ Parameter = 'NewName' } + ) { + $attrs = (Get-Command Update-PfbLogTargetFileSystem).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'has no -LogTargetFileSystemName parameter (the "name" body field uses -NewName per the exception)' { + (Get-Command Update-PfbLogTargetFileSystem).Parameters.Keys | Should -Not -Contain 'LogTargetFileSystemName' + } + + It 'does not expose the read-only id field as a parameter (constraint 11)' { + (Get-Command Update-PfbLogTargetFileSystem).Parameters.Keys | Should -Not -Contain 'IdField' + } + } +} From 1edfde8ae75b2888c662d2761dac450ddaf1c687 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:43 -0700 Subject: [PATCH 33/90] feat(policy): add typed body params to New-PfbNfsExportRule (#31) --- Public/Policy/New-PfbNfsExportRule.ps1 | 137 ++++++++++++++++++- Tests/New-PfbNfsExportRule.Tests.ps1 | 179 +++++++++++++++++++++++++ 2 files changed, 311 insertions(+), 5 deletions(-) create mode 100644 Tests/New-PfbNfsExportRule.Tests.ps1 diff --git a/Public/Policy/New-PfbNfsExportRule.ps1 b/Public/Policy/New-PfbNfsExportRule.ps1 index a680ee7..8dc4068 100644 --- a/Public/Policy/New-PfbNfsExportRule.ps1 +++ b/Public/Policy/New-PfbNfsExportRule.ps1 @@ -5,14 +5,60 @@ function New-PfbNfsExportRule { .DESCRIPTION Adds a new rule to an NFS export policy. Rules define client access permissions for NFS exports including client IP/hostname patterns, access level, and security. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER PolicyName The name of the NFS export policy to add the rule to. .PARAMETER PolicyId The ID of the NFS export policy to add the rule to. + .PARAMETER Access + Specifies access control for the export. + .PARAMETER Anongid + Any user whose GID is affected by an `access` of `root_squash` or `all_squash` will + have their GID mapped to `anongid`. + .PARAMETER Anonuid + Any user whose UID is affected by an `access` of `root_squash` or `all_squash` will + have their UID mapped to `anonuid`. + .PARAMETER Atime + If `true`, after a read operation has occurred, the inode access time is updated + only under certain conditions. + .PARAMETER Client + Specifies the clients that will be permitted to access the export. + .PARAMETER Fileid32bit + Whether the file id is 32 bits or not. + .PARAMETER Index + The index within the policy. + .PARAMETER Permission + Specifies which read-write client access permissions are allowed for the export. + .PARAMETER Policy + The name of the policy to which this rule belongs. + .PARAMETER RequiredTransportSecurity + Specifies the minimum transport security required for clients to access the export. + .PARAMETER Secure + If `true`, prevents NFS access to client connections coming from non-reserved ports. + .PARAMETER Security + The security flavors to use for accessing files on this mount point. .PARAMETER Attributes A hashtable defining the rule properties (client, access, permission, security, etc.). + Mutually exclusive with the individual typed parameters above. + .PARAMETER BeforeRuleId + The ID of the rule to insert this rule before. Cannot be combined with -BeforeRuleName. + .PARAMETER BeforeRuleName + The name of the rule to insert this rule before. Cannot be combined with -BeforeRuleId. + .PARAMETER Versions + A list of versions used for concurrency control. Ordering matches the policy + names/IDs query parameter. Fails with a 412 if the resource's current version + does not match. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. + .EXAMPLE + New-PfbNfsExportRule -PolicyName "nfs-export-01" -Client "*" -Access "root-squash" -Permission "rw" + + Creates a new rule allowing all clients with root-squash and read-write access using + typed parameters. .EXAMPLE New-PfbNfsExportRule -PolicyName "nfs-export-01" -Attributes @{ client = "*"; access = "root-squash"; permission = "rw" } @@ -22,17 +68,76 @@ function New-PfbNfsExportRule { Creates a rule for a specific subnet with no root squash. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByPolicyNameIndividual')] param( - [Parameter(ParameterSetName = 'ByPolicyName', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory, Position = 0)] [string]$PolicyName, - [Parameter(ParameterSetName = 'ByPolicyId', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [string]$PolicyId, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('root-squash', 'all-squash', 'no-squash')] + [string]$Access, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [long]$Anongid, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [long]$Anonuid, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [Nullable[bool]]$Atime, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Client, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [Nullable[bool]]$Fileid32bit, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [int]$Index, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('rw', 'ro')] + [string]$Permission, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Policy, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('tls', 'mutual-tls', 'none')] + [string]$RequiredTransportSecurity, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [Nullable[bool]]$Secure, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string[]]$Security, + + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [hashtable]$Attributes, + [Parameter()] [string]$BeforeRuleId, + [Parameter()] [string]$BeforeRuleName, + [Parameter()] [string[]]$Versions, + [Parameter()] [PSCustomObject]$Array ) @@ -41,10 +146,32 @@ function New-PfbNfsExportRule { $queryParams = @{} if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } + if ($PSBoundParameters.ContainsKey('BeforeRuleId')) { $queryParams['before_rule_id'] = $BeforeRuleId } + if ($PSBoundParameters.ContainsKey('BeforeRuleName')) { $queryParams['before_rule_name'] = $BeforeRuleName } + if ($PSBoundParameters.ContainsKey('Versions')) { $queryParams['versions'] = $Versions -join ',' } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Access')) { $body['access'] = $Access } + if ($PSBoundParameters.ContainsKey('Anongid')) { $body['anongid'] = $Anongid } + if ($PSBoundParameters.ContainsKey('Anonuid')) { $body['anonuid'] = $Anonuid } + if ($PSBoundParameters.ContainsKey('Atime')) { $body['atime'] = $Atime } + if ($PSBoundParameters.ContainsKey('Client')) { $body['client'] = $Client } + if ($PSBoundParameters.ContainsKey('Fileid32bit')) { $body['fileid_32bit'] = $Fileid32bit } + if ($PSBoundParameters.ContainsKey('Index')) { $body['index'] = $Index } + if ($PSBoundParameters.ContainsKey('Permission')) { $body['permission'] = $Permission } + if ($PSBoundParameters.ContainsKey('Policy')) { $body['policy'] = @{ name = $Policy } } + if ($PSBoundParameters.ContainsKey('RequiredTransportSecurity')) { $body['required_transport_security'] = $RequiredTransportSecurity } + if ($PSBoundParameters.ContainsKey('Secure')) { $body['secure'] = $Secure } + if ($PSBoundParameters.ContainsKey('Security')) { $body['security'] = @($Security) } + } $target = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess($target, 'Create NFS export rule')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'nfs-export-policies/rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'nfs-export-policies/rules' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbNfsExportRule.Tests.ps1 b/Tests/New-PfbNfsExportRule.Tests.ps1 new file mode 100644 index 0000000..a31f466 --- /dev/null +++ b/Tests/New-PfbNfsExportRule.Tests.ps1 @@ -0,0 +1,179 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbNfsExportRule - typed body/query params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Attributes path still works' { + It 'POSTs with -Attributes hashtable unchanged' { + New-PfbNfsExportRule -PolicyName 'nfs-export-01' -Attributes @{ client = '*'; access = 'root-squash' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'nfs-export-policies/rules' -and + $QueryParams['policy_names'] -eq 'nfs-export-01' -and + $Body['client'] -eq '*' -and $Body['access'] -eq 'root-squash' + } + } + } + + Context 'typed body parameters - strings and enums' { + It 'sends -Client as client' { + New-PfbNfsExportRule -PolicyName 'p1' -Client '10.0.0.0/8' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['client'] -eq '10.0.0.0/8' } + } + + It 'sends -Access as access' { + New-PfbNfsExportRule -PolicyName 'p1' -Access 'no-squash' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['access'] -eq 'no-squash' } + } + + It 'rejects an -Access value outside the enum' { + { New-PfbNfsExportRule -PolicyName 'p1' -Access 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -Permission as permission' { + New-PfbNfsExportRule -PolicyName 'p1' -Permission 'ro' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['permission'] -eq 'ro' } + } + + It 'rejects a -Permission value outside the enum' { + { New-PfbNfsExportRule -PolicyName 'p1' -Permission 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -RequiredTransportSecurity as required_transport_security (3-value enum, not boolean)' { + New-PfbNfsExportRule -PolicyName 'p1' -RequiredTransportSecurity 'mutual-tls' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['required_transport_security'] -eq 'mutual-tls' } + } + + It 'rejects a -RequiredTransportSecurity value outside the 3-value enum' { + { New-PfbNfsExportRule -PolicyName 'p1' -RequiredTransportSecurity 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + } + + Context 'typed body parameters - integers (constraint 2: explicit 0)' { + It 'sends -Anongid as anongid, including an explicit 0 (root)' { + New-PfbNfsExportRule -PolicyName 'p1' -Anongid 0 -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('anongid') -and $Body['anongid'] -eq 0 + } + } + + It 'sends -Anonuid as anonuid, including an explicit 0 (root)' { + New-PfbNfsExportRule -PolicyName 'p1' -Anonuid 0 -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('anonuid') -and $Body['anonuid'] -eq 0 + } + } + + It 'sends -Index as index, including an explicit 0' { + New-PfbNfsExportRule -PolicyName 'p1' -Index 0 -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('index') -and $Body['index'] -eq 0 + } + } + + It 'accepts -Anonuid values beyond Int32 range (spec type is int64)' { + New-PfbNfsExportRule -PolicyName 'p1' -Anonuid 3000000000 -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['anonuid'] -eq 3000000000 } + } + } + + Context 'typed body parameters - booleans (explicit $false must reach the wire)' { + It 'sends -Atime $false explicitly' { + New-PfbNfsExportRule -PolicyName 'p1' -Atime $false -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('atime') -and $Body['atime'] -eq $false + } + } + + It 'sends -Fileid32bit $false explicitly' { + New-PfbNfsExportRule -PolicyName 'p1' -Fileid32bit $false -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('fileid_32bit') -and $Body['fileid_32bit'] -eq $false + } + } + + It 'sends -Secure $false explicitly' { + New-PfbNfsExportRule -PolicyName 'p1' -Secure $false -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('secure') -and $Body['secure'] -eq $false + } + } + } + + Context 'typed body parameters - array (constraint 2: explicit @())' { + It 'sends -Security as security' { + New-PfbNfsExportRule -PolicyName 'p1' -Security @('sys', 'krb5') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['security'].Count -eq 2 -and $Body['security'][0] -eq 'sys' -and $Body['security'][1] -eq 'krb5' + } + } + + It 'sends an explicit empty -Security @()' { + New-PfbNfsExportRule -PolicyName 'p1' -Security @() -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('security') -and $Body['security'].Count -eq 0 + } + } + } + + Context 'typed body parameter - scalar reference (constraint 8a)' { + It 'sends -Policy as a { name = ... } reference object' { + New-PfbNfsExportRule -PolicyName 'p1' -Policy 'other-policy' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['policy']['name'] -eq 'other-policy' + } + } + } + + Context 'typed query parameters' { + It 'sends -BeforeRuleId as before_rule_id' { + New-PfbNfsExportRule -PolicyName 'p1' -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['before_rule_id'] -eq 'rule-1' } + } + + It 'sends -BeforeRuleName as before_rule_name' { + New-PfbNfsExportRule -PolicyName 'p1' -BeforeRuleName 'rule-name' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['before_rule_name'] -eq 'rule-name' } + } + + It 'sends -Versions as a joined versions query param' { + New-PfbNfsExportRule -PolicyName 'p1' -Versions @('3', '4') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['versions'] -eq '3,4' } + } + + It 'allows a query parameter alongside -Attributes (constraint 17)' { + New-PfbNfsExportRule -PolicyName 'p1' -Attributes @{ client = 'x' } -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['before_rule_id'] -eq 'rule-1' -and $Body['client'] -eq 'x' + } + } + } + + Context 'parameter set mutual exclusion' { + It 'rejects mixing a typed body parameter with -Attributes' { + { New-PfbNfsExportRule -PolicyName 'p1' -Client 'x' -Attributes @{ client = 'x' } -Confirm:$false -Array $fakeArray } | + Should -Throw '*Parameter set cannot be resolved*' + } + } + + Context 'ById selector still works' { + It 'supports -PolicyId with typed params' { + New-PfbNfsExportRule -PolicyId 'pid-1' -Client 'x' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'pid-1' -and $Body['client'] -eq 'x' + } + } + } +} From e8a25f17a6229cef00df40a17776c2cbfd6d014e Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:37:55 -0700 Subject: [PATCH 34/90] feat(network): add typed body params to New-PfbNetworkInterfaceTlsPolicy (#31) --- .../New-PfbNetworkInterfaceTlsPolicy.ps1 | 42 ++++++++++--- ...New-PfbNetworkInterfaceTlsPolicy.Tests.ps1 | 60 +++++++++++++++++++ 2 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 Tests/New-PfbNetworkInterfaceTlsPolicy.Tests.ps1 diff --git a/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 b/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 index 82b75d8..0c76e9c 100644 --- a/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 +++ b/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 @@ -7,9 +7,19 @@ function New-PfbNetworkInterfaceTlsPolicy { interface and a TLS policy on the connected Pure Storage FlashBlade. This controls the TLS settings used for connections on the specified interface. .PARAMETER MemberName - The name of the network interface to associate with the TLS policy. + The name of the network interface to associate with the TLS policy. Sent as the + `member_names` query parameter. Mutually exclusive with -MemberId in effect (the + array rejects both being provided together), but both are declared as plain optional + parameters so either alone resolves the target interface. + .PARAMETER MemberId + The ID of the network interface to associate with the TLS policy. Sent as the + `member_ids` query parameter. .PARAMETER PolicyName - The name of the TLS policy to apply to the network interface. + The name of the TLS policy to apply to the network interface. Sent as the + `policy_names` query parameter. + .PARAMETER PolicyId + The ID of the TLS policy to apply to the network interface. Sent as the `policy_ids` + query parameter. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -24,21 +34,39 @@ function New-PfbNetworkInterfaceTlsPolicy { New-PfbNetworkInterfaceTlsPolicy -MemberName "repl-vip1" -PolicyName "tls-1.2-compat" Associates the tls-1.2-compat policy with the repl-vip1 interface. + .EXAMPLE + New-PfbNetworkInterfaceTlsPolicy -MemberId "10314f42-020d-7080-8013-000ddt400012" -PolicyId "10314f42-020d-7080-8013-000ddt400099" + + Associates the TLS policy and network interface identified by ID. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( - [Parameter(Mandatory)] [string]$MemberName, - [Parameter(Mandatory)] [string]$PolicyName, + # -MemberName/-MemberId and -PolicyName/-PolicyId are both plain optional parameters + # rather than parameter sets: `POST /network-interfaces/tls-policies` documents that + # member_ids/member_names (and policy_ids/policy_names) cannot be provided together, + # but there is no request body here to multiply a selector axis against (constraint 4 + # is about the -Attributes axis, which this cmdlet does not have). Making either of + # -MemberName/-MemberId mandatory would make the other permanently unusable, so both + # stay optional -- the same shape already shipped on the sibling cmdlet + # New-PfbQosPolicyMember. + [Parameter()] [string]$MemberName, + [Parameter()] [string]$MemberId, + [Parameter()] [string]$PolicyName, + [Parameter()] [string]$PolicyId, [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) $queryParams = @{} - $queryParams['member_names'] = $MemberName - $queryParams['policy_names'] = $PolicyName + if ($PSBoundParameters.ContainsKey('MemberName')) { $queryParams['member_names'] = $MemberName } + if ($PSBoundParameters.ContainsKey('MemberId')) { $queryParams['member_ids'] = $MemberId } + if ($PSBoundParameters.ContainsKey('PolicyName')) { $queryParams['policy_names'] = $PolicyName } + if ($PSBoundParameters.ContainsKey('PolicyId')) { $queryParams['policy_ids'] = $PolicyId } - $target = "${MemberName}:${PolicyName}" + $memberTarget = if ($PSBoundParameters.ContainsKey('MemberName')) { $MemberName } else { $MemberId } + $policyTarget = if ($PSBoundParameters.ContainsKey('PolicyName')) { $PolicyName } else { $PolicyId } + $target = "${memberTarget}:${policyTarget}" if ($PSCmdlet.ShouldProcess($target, 'Add TLS policy to network interface')) { Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'network-interfaces/tls-policies' -QueryParams $queryParams diff --git a/Tests/New-PfbNetworkInterfaceTlsPolicy.Tests.ps1 b/Tests/New-PfbNetworkInterfaceTlsPolicy.Tests.ps1 new file mode 100644 index 0000000..4167617 --- /dev/null +++ b/Tests/New-PfbNetworkInterfaceTlsPolicy.Tests.ps1 @@ -0,0 +1,60 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbNetworkInterfaceTlsPolicy - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing name-based selectors still work (non-issue confirmed, keys already correct)' { + It 'sends -MemberName as member_names and -PolicyName as policy_names' { + New-PfbNetworkInterfaceTlsPolicy -MemberName 'data-vip1' -PolicyName 'strict-tls-1.3' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'network-interfaces/tls-policies' -and + $QueryParams['member_names'] -eq 'data-vip1' -and + $QueryParams['policy_names'] -eq 'strict-tls-1.3' + } + } + } + + Context '-MemberId / -PolicyId query parameters (missing query params)' { + It 'sends -MemberId as member_ids' { + New-PfbNetworkInterfaceTlsPolicy -MemberId 'iface-1' -PolicyName 'strict-tls-1.3' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['member_ids'] -eq 'iface-1' -and -not $QueryParams.ContainsKey('member_names') + } + } + + It 'sends -PolicyId as policy_ids' { + New-PfbNetworkInterfaceTlsPolicy -MemberName 'data-vip1' -PolicyId 'policy-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('policy_names') + } + } + + It 'can select both member and policy purely by id, with no name parameters at all' { + New-PfbNetworkInterfaceTlsPolicy -MemberId 'iface-1' -PolicyId 'policy-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['member_ids'] -eq 'iface-1' -and $QueryParams['policy_ids'] -eq 'policy-1' -and + -not $QueryParams.ContainsKey('member_names') -and -not $QueryParams.ContainsKey('policy_names') + } + } + } +} From cb4686a8d361a1135bfbe7faf19f2006785d76ad Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:38:45 -0700 Subject: [PATCH 35/90] feat(misc): add typed body params to Update-PfbLag (#31) --- Public/Misc/Update-PfbLag.ps1 | 63 +++++++++++++++++++++---- Tests/Update-PfbLag.Tests.ps1 | 88 +++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbLag.Tests.ps1 diff --git a/Public/Misc/Update-PfbLag.ps1 b/Public/Misc/Update-PfbLag.ps1 index 6a8cc06..43f6416 100644 --- a/Public/Misc/Update-PfbLag.ps1 +++ b/Public/Misc/Update-PfbLag.ps1 @@ -9,28 +9,57 @@ function Update-PfbLag { The name of the LAG to update. .PARAMETER Id The ID of the LAG to update. + .PARAMETER AddPorts + Names of the ports to add to the LAG. + .PARAMETER Ports + Names of the ports that make up the LAG, replacing the existing port list. + .PARAMETER RemovePorts + Names of the ports to remove from the LAG. .PARAMETER Attributes - A hashtable of LAG attributes to update, such as ports or LACP mode. + A hashtable of LAG attributes to update, such as ports or LACP mode. Mutually + exclusive with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, uses the default connection. .EXAMPLE - Update-PfbLag -Name "lag1" -Attributes @{ ports = @(@{ name = "CH1.FM1.ETH1" }, @{ name = "CH1.FM1.ETH3" }) } + Update-PfbLag -Name "lag1" -Ports "CH1.FM1.ETH1", "CH1.FM1.ETH3" - Updates the ports assigned to the LAG named 'lag1'. + Updates the ports assigned to the LAG named 'lag1' using typed parameters. .EXAMPLE Update-PfbLag -Name "lag1" -Attributes @{ lacp_mode = "passive" } Changes the LACP mode of 'lag1' to passive. .EXAMPLE - Update-PfbLag -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ lacp_mode = "active" } + Update-PfbLag -Id "10314f42-020d-7080-8013-000ddt400012" -AddPorts "CH1.FM1.ETH5" - Updates the LAG with the specified ID to active LACP mode. + Adds a port to the LAG with the specified ID. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$AddPorts, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Ports, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$RemovePorts, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,8 +71,22 @@ function Update-PfbLag { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } $target = if ($Name) { $Name } else { $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 8(b): add_ports/ports/remove_ports are ARRAYS OF REFERENCES (item + # schema is {id, name, resource_type}), so each parameter is [string[]] and the + # projection is assigned INLINE -- constraint 7 forbids an intermediate local. + $body = @{} + if ($PSBoundParameters.ContainsKey('AddPorts')) { $body['add_ports'] = @($AddPorts | ForEach-Object { @{ name = $_ } }) } + if ($PSBoundParameters.ContainsKey('Ports')) { $body['ports'] = @($Ports | ForEach-Object { @{ name = $_ } }) } + if ($PSBoundParameters.ContainsKey('RemovePorts')) { $body['remove_ports'] = @($RemovePorts | ForEach-Object { @{ name = $_ } }) } + } + if ($PSCmdlet.ShouldProcess($target, 'Update LAG')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'link-aggregation-groups' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'link-aggregation-groups' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbLag.Tests.ps1 b/Tests/Update-PfbLag.Tests.ps1 new file mode 100644 index 0000000..302fa82 --- /dev/null +++ b/Tests/Update-PfbLag.Tests.ps1 @@ -0,0 +1,88 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLag - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'builds ports as name-reference objects' { + Update-PfbLag -Name 'lag1' -Ports 'CH1.FM1.ETH1', 'CH1.FM1.ETH3' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'link-aggregation-groups' -and + $QueryParams['names'] -eq 'lag1' -and + $Body['ports'].Count -eq 2 -and + $Body['ports'][0].name -eq 'CH1.FM1.ETH1' -and + $Body['ports'][1].name -eq 'CH1.FM1.ETH3' + } + } + + It 'builds add_ports as name-reference objects' { + Update-PfbLag -Name 'lag1' -AddPorts 'CH1.FM1.ETH5' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['add_ports'].Count -eq 1 -and $Body['add_ports'][0].name -eq 'CH1.FM1.ETH5' + } + } + + It 'builds remove_ports as name-reference objects' { + Update-PfbLag -Name 'lag1' -RemovePorts 'CH1.FM1.ETH5' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remove_ports'].Count -eq 1 -and $Body['remove_ports'][0].name -eq 'CH1.FM1.ETH5' + } + } + + It 'sends an EMPTY array for -Ports @() so a list can be cleared (constraint 2)' { + Update-PfbLag -Name 'lag1' -Ports @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('ports') -and @($Body['ports']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbLag -Name 'lag1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the LAG by id when -Id is used' { + Update-PfbLag -Id 'lag-1' -Ports 'CH1.FM1.ETH1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'lag-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbLag -Name 'lag1' -Attributes @{ lacp_mode = 'passive' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['lacp_mode'] -eq 'passive' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbLag -Name 'lag1' -Ports 'CH1.FM1.ETH1' -Attributes @{ ports = @() } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } +} From 1f79eddc2cef42dbfa1cd5d286c8987c2aed6cbf Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:39:18 -0700 Subject: [PATCH 36/90] feat(monitoring): add typed body params to Update-PfbLogTargetObjectStore (#31) --- .../Update-PfbLogTargetObjectStore.ps1 | 85 +++++++++++--- .../Update-PfbLogTargetObjectStore.Tests.ps1 | 107 ++++++++++++++++++ 2 files changed, 178 insertions(+), 14 deletions(-) create mode 100644 Tests/Update-PfbLogTargetObjectStore.Tests.ps1 diff --git a/Public/Monitoring/Update-PfbLogTargetObjectStore.ps1 b/Public/Monitoring/Update-PfbLogTargetObjectStore.ps1 index 2a47b4f..3c50ea0 100644 --- a/Public/Monitoring/Update-PfbLogTargetObjectStore.ps1 +++ b/Public/Monitoring/Update-PfbLogTargetObjectStore.ps1 @@ -4,38 +4,74 @@ function Update-PfbLogTargetObjectStore { Updates a log-target object-store configuration on the FlashBlade. .DESCRIPTION The Update-PfbLogTargetObjectStore cmdlet modifies a log-target object-store - configuration on the connected Pure Storage FlashBlade. Identify the target by - name or ID and supply the changed properties via Attributes. + configuration on the connected Everpure FlashBlade. Identify the target by + name or ID and supply the changed properties via Attributes or individual parameters. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name - The name of the log-target object store to update. + The name of the log-target object store to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the log-target object store to update. + .PARAMETER Bucket + Reference to the bucket where audit logs will be stored. + .PARAMETER LogNamePrefix + The prefix of the audit log object. + .PARAMETER LogRotate + The threshold after which the audit log object will be rotated. + .PARAMETER NewName + A new user-specified name for the log target. Named -NewName rather than -Name + because -Name already identifies which log target to update. .PARAMETER Attributes - A hashtable of attributes to update on the configuration. + A hashtable of attributes to update on the configuration. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbLogTargetObjectStore -Name "log-obj-target1" -Attributes @{ prefix = '/new-prefix' } + Update-PfbLogTargetObjectStore -Name "log-obj-target1" -LogNamePrefix @{ prefix = 's3auditlog' } - Updates the prefix on the log-target object-store configuration. + Updates the audit-log object-name prefix on the log-target object-store configuration + using a typed parameter. .EXAMPLE Update-PfbLogTargetObjectStore -Id "12345" -Attributes @{ enabled = $true } Enables the log-target object store identified by ID. .EXAMPLE - Update-PfbLogTargetObjectStore -Name "log-obj-target1" -Attributes @{ bucket = 'new-bucket' } + Update-PfbLogTargetObjectStore -Name "log-obj-target1" -Bucket 'new-bucket' - Updates the bucket reference on the log-target object store. + Updates the bucket reference on the log-target object store using a typed parameter. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Bucket, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$LogNamePrefix, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$LogRotate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,11 +82,32 @@ function Update-PfbLogTargetObjectStore { } process { - $body = if ($Attributes) { $Attributes } else { @{} } - $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + + # Constraint 8(a): bucket is a SCALAR REFERENCE (item schema is + # {id, name, resource_type}), so the parameter is [string] taking the name and the + # projection is assigned INLINE -- constraint 7 forbids an intermediate local. + if ($PSBoundParameters.ContainsKey('Bucket')) { $body['bucket'] = @{ name = $Bucket } } + + # Constraint 8(c): log_name_prefix and log_rotate are COMPOSITE sub-objects + # (_auditLogNamePrefix, _auditLogRotate), not references -- neither has a `name` + # property, so projecting them into @{ name = ... } would write a field the schema + # does not have. Pass them straight through. + if ($PSBoundParameters.ContainsKey('LogNamePrefix')) { $body['log_name_prefix'] = $LogNamePrefix } + if ($PSBoundParameters.ContainsKey('LogRotate')) { $body['log_rotate'] = $LogRotate } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update log-target object store')) { diff --git a/Tests/Update-PfbLogTargetObjectStore.Tests.ps1 b/Tests/Update-PfbLogTargetObjectStore.Tests.ps1 new file mode 100644 index 0000000..b5d04a5 --- /dev/null +++ b/Tests/Update-PfbLogTargetObjectStore.Tests.ps1 @@ -0,0 +1,107 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLogTargetObjectStore - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends name as a body field' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -NewName 'renamed-target' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'log-targets/object-store' -and + $QueryParams['names'] -eq 'log-obj-target1' -and + $Body['name'] -eq 'renamed-target' + } + } + + It 'builds bucket as a name-reference object (constraint 8a, scalar reference)' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -Bucket 'bucket1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['bucket'].name -eq 'bucket1' + } + } + + It 'passes log_name_prefix through as a composite hashtable (constraint 8c)' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -LogNamePrefix @{ prefix = 's3auditlog' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['log_name_prefix']['prefix'] -eq 's3auditlog' + } + } + + It 'passes log_rotate through as a composite hashtable (constraint 8c)' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -LogRotate @{ duration = 300000 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['log_rotate']['duration'] -eq 300000 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the log target by id when -Id is used' { + Update-PfbLogTargetObjectStore -Id 'lt-1' -NewName 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'lt-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -Attributes @{ bucket = @{ name = 'raw-bucket' } } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['bucket']['name'] -eq 'raw-bucket' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbLogTargetObjectStore -Name 'log-obj-target1' -NewName 'x' -Attributes @{ name = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Bucket' } + @{ Parameter = 'LogNamePrefix' } + @{ Parameter = 'LogRotate' } + @{ Parameter = 'NewName' } + ) { + $attrs = (Get-Command Update-PfbLogTargetObjectStore).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'has no -LogTargetObjectStoreName parameter (the "name" body field uses -NewName per the exception)' { + (Get-Command Update-PfbLogTargetObjectStore).Parameters.Keys | Should -Not -Contain 'LogTargetObjectStoreName' + } + } +} From e36784cdfcbb63a162c11162c661f9fae9a121f8 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:39:30 -0700 Subject: [PATCH 37/90] feat(policy): add typed body params to Update-PfbWormPolicy (#31) --- Public/Policy/Update-PfbWormPolicy.ps1 | 103 ++++++++++++++-- Tests/Update-PfbWormPolicy.Tests.ps1 | 159 +++++++++++++++++++++++++ 2 files changed, 252 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbWormPolicy.Tests.ps1 diff --git a/Public/Policy/Update-PfbWormPolicy.ps1 b/Public/Policy/Update-PfbWormPolicy.ps1 index dcbae28..12eb9e3 100644 --- a/Public/Policy/Update-PfbWormPolicy.ps1 +++ b/Public/Policy/Update-PfbWormPolicy.ps1 @@ -4,19 +4,43 @@ function Update-PfbWormPolicy { Updates an existing WORM data policy on a FlashBlade array. .DESCRIPTION The Update-PfbWormPolicy cmdlet modifies attributes of an existing WORM data policy - on the connected Pure Storage FlashBlade. The policy can be identified by name or ID. + on the connected Everpure FlashBlade. The policy can be identified by name or ID. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. This cmdlet is compliance-critical: -Mode, + -RetentionLock, -MinRetention, -MaxRetention and -DefaultRetention govern WORM + retention-lock behavior. No additional mutual-exclusion guard is added beyond the + parameter sets themselves -- they already make a silent override impossible. .PARAMETER Name - The name of the WORM policy to update. + The name of the WORM policy to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the WORM policy to update. + .PARAMETER DefaultRetention + Default retention period, in milliseconds. + .PARAMETER Enabled + If true, the policy is enabled. + .PARAMETER Location + Reference to the array where the policy is defined. + .PARAMETER MaxRetention + Maximum retention period, in milliseconds. + .PARAMETER MinRetention + Minimum retention period, in milliseconds. + .PARAMETER Mode + The type of the retention lock. + .PARAMETER RetentionLock + If set to `locked`, then the value of retention attributes or policy attributes + are not allowed to change. .PARAMETER Attributes - A hashtable of WORM policy attributes to modify. + A hashtable of WORM policy attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbWormPolicy -Name "worm-compliance" -Attributes @{ min_retention = "P90D" } + Update-PfbWormPolicy -Name "worm-compliance" -MinRetention 7776000000 - Updates the minimum retention period for the WORM policy. + Updates the minimum retention period for the WORM policy using a typed parameter. .EXAMPLE Update-PfbWormPolicy -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{ enabled = $true } @@ -26,11 +50,50 @@ function Update-PfbWormPolicy { Shows what would happen without actually updating the policy. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$DefaultRetention, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Location, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$MaxRetention, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$MinRetention, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Mode, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('unlocked', 'locked')] + [string]$RetentionLock, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -41,9 +104,29 @@ function Update-PfbWormPolicy { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 2: default_retention/max_retention/min_retention are integer body + # fields, guarded with ContainsKey (not truthiness) so an explicit 0 reaches the + # wire. Constraint 5: no extra mutual-exclusion throw is added here even though + # these fields are compliance-critical -- the parameter sets above already make + # a silent override across -Attributes and the typed parameters impossible. + $body = @{} + if ($PSBoundParameters.ContainsKey('DefaultRetention')) { $body['default_retention'] = $DefaultRetention } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('Location')) { $body['location'] = @{ name = $Location } } + if ($PSBoundParameters.ContainsKey('MaxRetention')) { $body['max_retention'] = $MaxRetention } + if ($PSBoundParameters.ContainsKey('MinRetention')) { $body['min_retention'] = $MinRetention } + if ($PSBoundParameters.ContainsKey('Mode')) { $body['mode'] = $Mode } + if ($PSBoundParameters.ContainsKey('RetentionLock')) { $body['retention_lock'] = $RetentionLock } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update WORM data policy')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'worm-data-policies' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'worm-data-policies' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbWormPolicy.Tests.ps1 b/Tests/Update-PfbWormPolicy.Tests.ps1 new file mode 100644 index 0000000..624c61e --- /dev/null +++ b/Tests/Update-PfbWormPolicy.Tests.ps1 @@ -0,0 +1,159 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbWormPolicy - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends an explicit -DefaultRetention 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbWormPolicy -Name 'worm-compliance' -DefaultRetention 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'worm-data-policies' -and + $QueryParams['names'] -eq 'worm-compliance' -and + $Body.ContainsKey('default_retention') -and $Body['default_retention'] -eq 0 + } + } + + It 'sends default_retention as a body field when non-zero' { + Update-PfbWormPolicy -Name 'worm-compliance' -DefaultRetention 7776000000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['default_retention'] -eq 7776000000 + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbWormPolicy -Name 'worm-compliance' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'builds location as a name-reference object' { + Update-PfbWormPolicy -Name 'worm-compliance' -Location 'array-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['location'].name -eq 'array-1' + } + } + + It 'sends an explicit -MaxRetention 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbWormPolicy -Name 'worm-compliance' -MaxRetention 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('max_retention') -and $Body['max_retention'] -eq 0 + } + } + + It 'sends an explicit -MinRetention 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbWormPolicy -Name 'worm-compliance' -MinRetention 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('min_retention') -and $Body['min_retention'] -eq 0 + } + } + + It 'sends mode as a body field' { + Update-PfbWormPolicy -Name 'worm-compliance' -Mode 'regulatory' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['mode'] -eq 'regulatory' + } + } + + It 'sends retention_lock as a body field' { + Update-PfbWormPolicy -Name 'worm-compliance' -RetentionLock 'locked' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['retention_lock'] -eq 'locked' + } + } + + It 'rejects an invalid -RetentionLock value via ValidateSet (constraint 3)' { + { Update-PfbWormPolicy -Name 'worm-compliance' -RetentionLock 'bogus' ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | Should -Throw + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbWormPolicy -Name 'worm-compliance' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the policy by id when -Id is used' { + Update-PfbWormPolicy -Id 'policy-1' -Enabled $true -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'policy-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbWormPolicy -Name 'worm-compliance' -Attributes @{ retention_lock = 'locked' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['retention_lock'] -eq 'locked' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time (constraint 5: parameter sets, no extra throw)' { + { Update-PfbWormPolicy -Name 'worm-compliance' -Mode 'regulatory' -Attributes @{ mode = 'regulatory' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are never exposed (constraint 11)' { + It 'has no -IsLocal, -PolicyType, or -NewName parameter (name is read-only on this endpoint)' { + $keys = (Get-Command Update-PfbWormPolicy).Parameters.Keys + $keys | Should -Not -Contain 'IsLocal' + $keys | Should -Not -Contain 'PolicyType' + $keys | Should -Not -Contain 'NewName' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'DefaultRetention' } + @{ Parameter = 'Enabled' } + @{ Parameter = 'Location' } + @{ Parameter = 'MaxRetention' } + @{ Parameter = 'MinRetention' } + @{ Parameter = 'Mode' } + ) { + $attrs = (Get-Command Update-PfbWormPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'puts exactly the spec ValidateSet on -RetentionLock' { + $attrs = (Get-Command Update-PfbWormPolicy).Parameters['RetentionLock'].Attributes + $validateSet = $attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $validateSet.ValidValues | Should -Be @('unlocked', 'locked') + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbWormPolicy).Parameters.Keys + foreach ($p in 'DefaultRetention','Enabled','Location','MaxRetention','MinRetention','Mode','RetentionLock') { + $keys | Should -Contain $p + } + } + } +} From 983b35e5ddd719236828ac28a063484eda4caaea Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:39:43 -0700 Subject: [PATCH 38/90] feat(filesystem): add typed body params to Update-PfbFileSystemExport (#31) --- .../FileSystem/Update-PfbFileSystemExport.ps1 | 70 +++++++++-- Tests/Update-PfbFileSystemExport.Tests.ps1 | 114 ++++++++++++++++++ 2 files changed, 176 insertions(+), 8 deletions(-) create mode 100644 Tests/Update-PfbFileSystemExport.Tests.ps1 diff --git a/Public/FileSystem/Update-PfbFileSystemExport.ps1 b/Public/FileSystem/Update-PfbFileSystemExport.ps1 index 81d23a2..3ea23d8 100644 --- a/Public/FileSystem/Update-PfbFileSystemExport.ps1 +++ b/Public/FileSystem/Update-PfbFileSystemExport.ps1 @@ -5,17 +5,34 @@ function Update-PfbFileSystemExport { .DESCRIPTION Modifies file system export attributes such as rules, enabled state, and other export properties. Identify the export by name or ID. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the file system export to update. .PARAMETER Id The ID of the file system export to update. + .PARAMETER ExportName + The name of the export used by clients to mount the file system. + .PARAMETER Member + Name of the file system the policy is applied to. + .PARAMETER Policy + Name of the NFS export policy or SMB client policy. + .PARAMETER Server + Name of the server the export will be visible on. + .PARAMETER SharePolicy + Name of the SMB share policy (only used for SMB). .PARAMETER Attributes - A hashtable of attributes to update on the export. + A hashtable of attributes to update on the export. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, uses the default connection. .EXAMPLE - Update-PfbFileSystemExport -Name "export1" -Attributes @{ rules = "*(ro)" } - Updates the export rules to read-only. + Update-PfbFileSystemExport -Name "export1" -ExportName "/fs1" + + Renames the export used by clients to mount the file system, using a typed parameter. .EXAMPLE Update-PfbFileSystemExport -Id "abc-123" -Attributes @{ enabled = $false } Disables the specified export by ID. @@ -23,15 +40,39 @@ function Update-PfbFileSystemExport { Update-PfbFileSystemExport -Name "export1" -Attributes @{ rules = "10.0.0.0/8(rw,no_root_squash)" } Updates the export with network-restricted rules. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$ExportName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Member, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Policy, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Server, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$SharePolicy, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] @@ -43,7 +84,20 @@ function Update-PfbFileSystemExport { } process { - $body = if ($Attributes) { $Attributes } else { @{} } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 8(a): member/policy/server/share_policy are all SCALAR references + # (item schema is {id, name, resource_type}), so the parameter is [string] and + # the assignment is INLINE -- constraint 7 forbids a local like $memberRef. + $body = @{} + if ($PSBoundParameters.ContainsKey('ExportName')) { $body['export_name'] = $ExportName } + if ($PSBoundParameters.ContainsKey('Member')) { $body['member'] = @{ name = $Member } } + if ($PSBoundParameters.ContainsKey('Policy')) { $body['policy'] = @{ name = $Policy } } + if ($PSBoundParameters.ContainsKey('Server')) { $body['server'] = @{ name = $Server } } + if ($PSBoundParameters.ContainsKey('SharePolicy')) { $body['share_policy'] = @{ name = $SharePolicy } } + } $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } diff --git a/Tests/Update-PfbFileSystemExport.Tests.ps1 b/Tests/Update-PfbFileSystemExport.Tests.ps1 new file mode 100644 index 0000000..6928d9f --- /dev/null +++ b/Tests/Update-PfbFileSystemExport.Tests.ps1 @@ -0,0 +1,114 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbFileSystemExport - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends export_name as a plain body field' { + Update-PfbFileSystemExport -Name 'export1' -ExportName '/fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'file-system-exports' -and + $QueryParams['names'] -eq 'export1' -and + $Body['export_name'] -eq '/fs1' + } + } + + It 'sends an EMPTY string for -ExportName "" rather than dropping the key' { + Update-PfbFileSystemExport -Name 'export1' -ExportName '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('export_name') -and $Body['export_name'] -eq '' + } + } + + It 'sends member, policy, server, and share_policy as name-reference objects' { + Update-PfbFileSystemExport -Name 'export1' -Member 'fs1' -Policy 'nfs-default' ` + -Server 'server1' -SharePolicy 'share-default' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['member'].name -eq 'fs1' -and + $Body['policy'].name -eq 'nfs-default' -and + $Body['server'].name -eq 'server1' -and + $Body['share_policy'].name -eq 'share-default' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbFileSystemExport -Name 'export1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the export by id when -Id is used' { + Update-PfbFileSystemExport -Id 'export-1' -ExportName '/fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'export-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbFileSystemExport -Name 'export1' -Attributes @{ rules = '*(ro)' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['rules'] -eq '*(ro)' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbFileSystemExport -Name 'export1' -ExportName '/fs1' -Attributes @{ export_name = '/fs2' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are not exposed (constraint 11)' { + It 'has none of the read-only field parameters' -ForEach @( + @{ Parameter = 'Context' } + @{ Parameter = 'Enabled' } + @{ Parameter = 'PolicyType' } + @{ Parameter = 'Status' } + ) { + (Get-Command Update-PfbFileSystemExport).Parameters.Keys | Should -Not -Contain $Parameter + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ExportName' } + @{ Parameter = 'Member' } + @{ Parameter = 'Policy' } + @{ Parameter = 'Server' } + @{ Parameter = 'SharePolicy' } + ) { + $attrs = (Get-Command Update-PfbFileSystemExport).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbFileSystemExport).Parameters.Keys + foreach ($p in 'ExportName', 'Member', 'Policy', 'Server', 'SharePolicy') { + $keys | Should -Contain $p + } + } + } +} From 5b3617f206254318e0391434ecdaddb88285edaa Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:39:53 -0700 Subject: [PATCH 39/90] fix(policy): correct wire query keys on New-PfbPolicyFileSystemReplicaLink (#31) --- .../New-PfbPolicyFileSystemReplicaLink.ps1 | 44 ++++++---- ...w-PfbPolicyFileSystemReplicaLink.Tests.ps1 | 81 +++++++++++++++++++ 2 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 diff --git a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 index 43a5cdc..94510a1 100644 --- a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 +++ b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 @@ -5,35 +5,49 @@ function New-PfbPolicyFileSystemReplicaLink { .DESCRIPTION The New-PfbPolicyFileSystemReplicaLink cmdlet creates an association between a policy and a file system replica link on the connected Pure Storage FlashBlade. + + Bug fix (#31): `POST /policies/file-system-replica-links` has no `member_names`/ + `member_ids` query parameters at all -- those were previously sent and silently + ignored by the array, so -MemberName/-MemberId never had any effect. The endpoint's + real query parameters identify the replica link by its local file system + (`local_file_system_names`/`local_file_system_ids`) and its remote side + (`remote_names`/`remote_ids`), so -MemberName/-MemberId are replaced with + -LocalFileSystemName/-LocalFileSystemId and -RemoteName/-RemoteId. .PARAMETER PolicyName The policy name. .PARAMETER PolicyId The policy ID. - .PARAMETER MemberName - The file system replica link name. - .PARAMETER MemberId - The file system replica link ID. + .PARAMETER LocalFileSystemName + The name of the local file system side of the replica link. + .PARAMETER LocalFileSystemId + The ID of the local file system side of the replica link. + .PARAMETER RemoteName + The name of the remote side of the replica link. + .PARAMETER RemoteId + The ID of the remote side of the replica link. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - New-PfbPolicyFileSystemReplicaLink -PolicyName "daily-snap" -MemberName "fs1/remote-fb" + New-PfbPolicyFileSystemReplicaLink -PolicyName "daily-snap" -LocalFileSystemName "fs1" -RemoteName "remote-fb" - Associates the policy with the replica link. + Associates the policy with the replica link identified by local file system and remote. .EXAMPLE - New-PfbPolicyFileSystemReplicaLink -PolicyName "daily-snap" -MemberName "fs1/remote-fb" -WhatIf + New-PfbPolicyFileSystemReplicaLink -PolicyName "daily-snap" -LocalFileSystemName "fs1" -RemoteName "remote-fb" -WhatIf Shows what would happen without actually creating the association. .EXAMPLE - New-PfbPolicyFileSystemReplicaLink -PolicyName "hourly-snap" -MemberName "fs2/remote-fb" + New-PfbPolicyFileSystemReplicaLink -PolicyName "hourly-snap" -LocalFileSystemId "lfs-2" -RemoteId "remote-2" - Associates the hourly snapshot policy with the specified replica link. + Associates the hourly snapshot policy with the specified replica link using IDs. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter()] [string]$PolicyName, [Parameter()] [string]$PolicyId, - [Parameter()] [string]$MemberName, - [Parameter()] [string]$MemberId, + [Parameter()] [string]$LocalFileSystemName, + [Parameter()] [string]$LocalFileSystemId, + [Parameter()] [string]$RemoteName, + [Parameter()] [string]$RemoteId, [Parameter()] [PSCustomObject]$Array ) @@ -42,10 +56,12 @@ function New-PfbPolicyFileSystemReplicaLink { $queryParams = @{} if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } - if ($MemberName) { $queryParams['member_names'] = $MemberName } - if ($MemberId) { $queryParams['member_ids'] = $MemberId } + if ($PSBoundParameters.ContainsKey('LocalFileSystemName')) { $queryParams['local_file_system_names'] = $LocalFileSystemName } + if ($PSBoundParameters.ContainsKey('LocalFileSystemId')) { $queryParams['local_file_system_ids'] = $LocalFileSystemId } + if ($PSBoundParameters.ContainsKey('RemoteName')) { $queryParams['remote_names'] = $RemoteName } + if ($PSBoundParameters.ContainsKey('RemoteId')) { $queryParams['remote_ids'] = $RemoteId } - $target = "${PolicyName}:${MemberName}" + $target = "${PolicyName}:${LocalFileSystemName}" if ($PSCmdlet.ShouldProcess($target, 'Add policy to file system replica link')) { Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'policies/file-system-replica-links' -QueryParams $queryParams diff --git a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 new file mode 100644 index 0000000..1ac3cd5 --- /dev/null +++ b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 @@ -0,0 +1,81 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbPolicyFileSystemReplicaLink - correct query wire keys (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'policy selector unchanged' { + It 'sends -PolicyName as policy_names' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['policy_names'] -eq 'daily-snap' } + } + + It 'sends -PolicyId as policy_ids' { + New-PfbPolicyFileSystemReplicaLink -PolicyId 'p-1' -LocalFileSystemId 'lfs-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['policy_ids'] -eq 'p-1' } + } + } + + Context 'regression: real bug -- endpoint has no member_names/member_ids query params at all' { + It 'sends -LocalFileSystemName as local_file_system_names, NOT member_names' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1/remote-fb' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['local_file_system_names'] -eq 'fs1/remote-fb' -and + -not $QueryParams.ContainsKey('member_names') + } + } + + It 'sends -LocalFileSystemId as local_file_system_ids, NOT member_ids' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemId 'lfs-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['local_file_system_ids'] -eq 'lfs-1' -and + -not $QueryParams.ContainsKey('member_ids') + } + } + + It 'no longer exposes the incorrectly-wired -MemberName/-MemberId parameters' { + $params = (Get-Command New-PfbPolicyFileSystemReplicaLink).Parameters + $params.Keys | Should -Not -Contain 'MemberName' + $params.Keys | Should -Not -Contain 'MemberId' + } + } + + Context 'new remote query parameters' { + It 'sends -RemoteName as remote_names' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -RemoteName 'remote-fb' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['remote_names'] -eq 'remote-fb' } + } + + It 'sends -RemoteId as remote_ids' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -RemoteId 'remote-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['remote_ids'] -eq 'remote-1' } + } + } + + Context 'no request body' { + It 'sends no Body parameter to Invoke-PfbApiRequest' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $null -eq $Body } + } + } + + Context 'honors -WhatIf' { + It 'makes no call under -WhatIf' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1' -WhatIf -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 0 -Exactly + } + } +} From f93f23f9f95e12f08dc3e453298c676ac62677bf Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:40:10 -0700 Subject: [PATCH 40/90] feat(network): add typed body params to Update-PfbDns (#31) --- Public/Network/Update-PfbDns.ps1 | 99 ++++++++++++++++-- Tests/Update-PfbDns.Tests.ps1 | 172 +++++++++++++++++++++++++++++++ 2 files changed, 261 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbDns.Tests.ps1 diff --git a/Public/Network/Update-PfbDns.ps1 b/Public/Network/Update-PfbDns.ps1 index 50f01bd..1e87f60 100644 --- a/Public/Network/Update-PfbDns.ps1 +++ b/Public/Network/Update-PfbDns.ps1 @@ -2,35 +2,114 @@ function Update-PfbDns { <# .SYNOPSIS Updates FlashBlade DNS configuration. + .DESCRIPTION + The Update-PfbDns cmdlet modifies attributes of a DNS configuration on the connected + Everpure FlashBlade. Supports pipeline input and ShouldProcess for confirmation + prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. The -Name and -Id selectors are declared separately from + those sets, since they are query parameters orthogonal to the request body and stay + usable alongside either. + .PARAMETER Name + Selects the DNS configuration by name. Sent as the `names` query parameter. + .PARAMETER Id + Selects the DNS configuration by ID. Sent as the `ids` query parameter. .PARAMETER Domain The DNS domain name. .PARAMETER Nameservers An array of DNS nameserver IP addresses. + .PARAMETER CaCertificate + A reference to the certificate to use for validating nameservers with https + connections. + .PARAMETER CaCertificateGroup + A reference to the certificate group to use for validating nameservers with https + connections. + .PARAMETER NewName + A new user-specified name for the DNS configuration. + .PARAMETER Services + The list of services utilizing the DNS configuration. + .PARAMETER Sources + The network interfaces used for communication with the DNS server. .PARAMETER Attributes - A hashtable of DNS attributes to update. + A hashtable of DNS attributes to update. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. .EXAMPLE Update-PfbDns -Domain "example.com" -Nameservers "10.0.0.1", "10.0.0.2" + + Updates the domain and nameservers using typed parameters. + .EXAMPLE + Update-PfbDns -Name "mgmt-dns" -Sources "vir0" + + Restricts the mgmt-dns configuration to use the vir0 network interface. + .EXAMPLE + Update-PfbDns -Attributes @{ domain = "example.com" } + + Updates the domain using the raw -Attributes hashtable. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', DefaultParameterSetName = 'Individual')] param( - [Parameter()] [string]$Domain, - [Parameter()] [string[]]$Nameservers, - [Parameter()] [hashtable]$Attributes, + [Parameter()] [string]$Name, + [Parameter()] [string]$Id, + + [Parameter(ParameterSetName = 'Individual')] [string]$Domain, + [Parameter(ParameterSetName = 'Individual')] [string[]]$Nameservers, + [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificate, + [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificateGroup, + [Parameter(ParameterSetName = 'Individual')] [string]$NewName, + [Parameter(ParameterSetName = 'Individual')] [string[]]$Services, + [Parameter(ParameterSetName = 'Individual')] [string[]]$Sources, + + [Parameter(ParameterSetName = 'Attributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) - if ($Attributes) { $body = $Attributes } + if ($PSCmdlet.ParameterSetName -eq 'Attributes') { + $body = $Attributes + } else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, never by + # truthiness -- see Update-PfbAdmin.ps1 for the full rationale. -Domain, -NewName, and + # -CaCertificate/-CaCertificateGroup are all optional [string]s, so an empty string is + # a legitimate explicit value that truthiness would silently drop. $body = @{} - if ($Domain) { $body['domain'] = $Domain } - if ($Nameservers) { $body['nameservers'] = $Nameservers } + if ($PSBoundParameters.ContainsKey('Domain')) { $body['domain'] = $Domain } + if ($PSBoundParameters.ContainsKey('Nameservers')) { $body['nameservers'] = @($Nameservers) } + + # Constraint 8(a): ca_certificate/ca_certificate_group are SCALAR references (item + # schema is {id, name, resource_type}), so the parameter is [string] and the + # projection is assigned INLINE as a name-reference hashtable -- constraint 7 forbids + # an intermediate local. + if ($PSBoundParameters.ContainsKey('CaCertificate')) { $body['ca_certificate'] = @{ name = $CaCertificate } } + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + + # Exception: the body field is literally `name` (renames the resource), so the + # parameter is -NewName, never -DnsName -- see Update-PfbWorkload / Update-PfbDataEvictionPolicy. + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + + if ($PSBoundParameters.ContainsKey('Services')) { $body['services'] = @($Services) } + + # Constraint 8(b): sources is an ARRAY OF REFERENCES (item schema is + # {id, name, resource_type}), so the parameter is [string[]] and the projection is + # assigned INLINE. + if ($PSBoundParameters.ContainsKey('Sources')) { $body['sources'] = @($Sources | ForEach-Object { @{ name = $_ } }) } } - if ($PSCmdlet.ShouldProcess('DNS', 'Update DNS configuration')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'dns' -Body $body + # -Name/-Id are declared bare (not in the Individual/Attributes sets, constraint 17): they + # are query parameters, orthogonal to the request body, and must stay usable alongside + # -Attributes. + $queryParams = @{} + if ($PSBoundParameters.ContainsKey('Name')) { $queryParams['names'] = $Name } + if ($PSBoundParameters.ContainsKey('Id')) { $queryParams['ids'] = $Id } + + $target = if ($PSBoundParameters.ContainsKey('Name')) { $Name } elseif ($PSBoundParameters.ContainsKey('Id')) { $Id } else { 'DNS' } + if ($PSCmdlet.ShouldProcess($target, 'Update DNS configuration')) { + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'dns' -Body $body -QueryParams $queryParams } } diff --git a/Tests/Update-PfbDns.Tests.ps1 b/Tests/Update-PfbDns.Tests.ps1 new file mode 100644 index 0000000..2f22c73 --- /dev/null +++ b/Tests/Update-PfbDns.Tests.ps1 @@ -0,0 +1,172 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbDns - typed body and query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'pre-existing typed parameters now guarded by ContainsKey (constraint 16 fix)' { + It 'sends domain and nameservers as body fields' { + Update-PfbDns -Domain 'example.com' -Nameservers '10.0.0.1', '10.0.0.2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'dns' -and + $Body['domain'] -eq 'example.com' -and + @($Body['nameservers']).Count -eq 2 + } + } + + It 'sends an EMPTY array for -Nameservers @() so the list can be cleared' { + Update-PfbDns -Nameservers @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('nameservers') -and @($Body['nameservers']).Count -eq 0 + } + } + + It 'rejects -Domain combined with -Attributes at bind time (moved into Individual set)' { + { Update-PfbDns -Domain 'example.com' -Attributes @{ domain = 'other.com' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'new typed body parameters (missing body properties)' { + It 'sends ca_certificate as a name-reference object' { + Update-PfbDns -CaCertificate 'my-ca-cert' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate'].name -eq 'my-ca-cert' + } + } + + It 'sends ca_certificate_group as a name-reference object' { + Update-PfbDns -CaCertificateGroup 'my-ca-group' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate_group'].name -eq 'my-ca-group' + } + } + + It 'sends -NewName as the name body field (exception: name -> -NewName)' { + Update-PfbDns -NewName 'mgmt-dns' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'mgmt-dns' + } + } + + It 'has no -Name body-rename parameter (only the -Name query selector exists)' { + $params = (Get-Command Update-PfbDns).Parameters + $params['Name'].ParameterType.Name | Should -Be 'String' + $params.Keys | Should -Contain 'NewName' + } + + It 'sends services as a plain string array' { + Update-PfbDns -Services 'management', 'data' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['services']) -join ',' -eq 'management,data' + } + } + + It 'sends an EMPTY array for -Services @() so the list can be cleared' { + Update-PfbDns -Services @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('services') -and @($Body['services']).Count -eq 0 + } + } + + It 'builds sources as an array of name-reference objects (constraint 8b)' { + Update-PfbDns -Sources 'vir0', 'vir1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['sources'].Count -eq 2 -and + $Body['sources'][0].name -eq 'vir0' -and + $Body['sources'][1].name -eq 'vir1' + } + } + + It 'sends an EMPTY array for -Sources @() so the list can be cleared' { + Update-PfbDns -Sources @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('sources') -and @($Body['sources']).Count -eq 0 + } + } + } + + Context '-Name / -Id query parameters, declared bare (constraint 17)' { + It 'sends -Name as names' { + Update-PfbDns -Name 'mgmt-dns' -Domain 'example.com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['names'] -eq 'mgmt-dns' + } + } + + It 'sends -Id as ids' { + Update-PfbDns -Id 'dns-1' -Domain 'example.com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'dns-1' + } + } + + It 'combines -Name with -Attributes without a parameter-set conflict (bare, orthogonal to the body)' { + Update-PfbDns -Name 'mgmt-dns' -Attributes @{ domain = 'example.com' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['names'] -eq 'mgmt-dns' -and $Body['domain'] -eq 'example.com' + } + } + + It 'omits names/ids when neither is supplied' { + Update-PfbDns -Domain 'example.com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('names') -and -not $QueryParams.ContainsKey('ids') + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on any new parameter (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'CaCertificate' } + @{ Parameter = 'CaCertificateGroup' } + @{ Parameter = 'NewName' } + @{ Parameter = 'Services' } + @{ Parameter = 'Sources' } + ) { + $attrs = (Get-Command Update-PfbDns).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbDns).Parameters.Keys + foreach ($p in 'Domain','Nameservers','CaCertificate','CaCertificateGroup','NewName','Services','Sources') { + $keys | Should -Contain $p + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbDns -Name 'mgmt-dns' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From 01b35b5383baca0ce31c72acfdbeae6223d3c1b1 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:40:38 -0700 Subject: [PATCH 41/90] feat(misc): add typed body params to Update-PfbLegalHold (#31) --- Public/Misc/Update-PfbLegalHold.ps1 | 37 +++++++++---- Tests/Update-PfbLegalHold.Tests.ps1 | 81 +++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 Tests/Update-PfbLegalHold.Tests.ps1 diff --git a/Public/Misc/Update-PfbLegalHold.ps1 b/Public/Misc/Update-PfbLegalHold.ps1 index 5def732..26f1522 100644 --- a/Public/Misc/Update-PfbLegalHold.ps1 +++ b/Public/Misc/Update-PfbLegalHold.ps1 @@ -10,14 +10,17 @@ function Update-PfbLegalHold { The name of the legal hold to update. .PARAMETER Id The ID of the legal hold to update. + .PARAMETER Description + The description of the legal hold instance. .PARAMETER Attributes - A hashtable of attributes to update on the legal hold. + A hashtable of attributes to update on the legal hold. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbLegalHold -Name "litigation-hold-2024" -Attributes @{ description = 'Updated description' } + Update-PfbLegalHold -Name "litigation-hold-2024" -Description 'Updated description' - Updates the description on the specified legal hold. + Updates the description on the specified legal hold using a typed parameter. .EXAMPLE Update-PfbLegalHold -Id "12345" -Attributes @{ enabled = $false } @@ -27,15 +30,23 @@ function Update-PfbLegalHold { Enables the specified legal hold. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Description, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,13 +57,21 @@ function Update-PfbLegalHold { } process { - $body = if ($Attributes) { $Attributes } else { @{} } - $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } $target = if ($Name) { $Name } else { $Id } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never truthiness -- see + # the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('Description')) { $body['description'] = $Description } + } + if ($PSCmdlet.ShouldProcess($target, 'Update legal hold')) { Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'legal-holds' -Body $body -QueryParams $queryParams } diff --git a/Tests/Update-PfbLegalHold.Tests.ps1 b/Tests/Update-PfbLegalHold.Tests.ps1 new file mode 100644 index 0000000..3d49e6b --- /dev/null +++ b/Tests/Update-PfbLegalHold.Tests.ps1 @@ -0,0 +1,81 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLegalHold - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends -Description as the description body field' { + Update-PfbLegalHold -Name 'litigation-hold-2024' -Description 'Updated description' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'legal-holds' -and + $QueryParams['names'] -eq 'litigation-hold-2024' -and + $Body['description'] -eq 'Updated description' + } + } + + It 'sends an EMPTY string for -Description "" rather than dropping the key' { + Update-PfbLegalHold -Name 'litigation-hold-2024' -Description '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('description') -and $Body['description'] -eq '' + } + } + + It 'omits description entirely when not supplied' { + Update-PfbLegalHold -Name 'litigation-hold-2024' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('description') + } + } + + It 'targets the legal hold by id when -Id is used' { + Update-PfbLegalHold -Id 'hold-1' -Description 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'hold-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbLegalHold -Name 'litigation-hold-2024' -Attributes @{ description = 'raw' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['description'] -eq 'raw' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbLegalHold -Name 'litigation-hold-2024' -Description 'x' -Attributes @{ description = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'an empty write is permitted (constraint 19)' { + It 'resolves cleanly and sends an empty body when no parameter is supplied' { + Update-PfbLegalHold -Name 'litigation-hold-2024' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From ca8824f5d4aa7cd83ab14f058dcc32a7339d7924 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:41:16 -0700 Subject: [PATCH 42/90] feat(replication): add typed body params to New-PfbArrayConnection (#31) --- Public/Replication/New-PfbArrayConnection.ps1 | 70 +++++++++-- Tests/New-PfbArrayConnection.Tests.ps1 | 117 ++++++++++++++++++ 2 files changed, 177 insertions(+), 10 deletions(-) create mode 100644 Tests/New-PfbArrayConnection.Tests.ps1 diff --git a/Public/Replication/New-PfbArrayConnection.ps1 b/Public/Replication/New-PfbArrayConnection.ps1 index 5daacfe..52df95b 100644 --- a/Public/Replication/New-PfbArrayConnection.ps1 +++ b/Public/Replication/New-PfbArrayConnection.ps1 @@ -7,14 +7,32 @@ function New-PfbArrayConnection { local Pure Storage FlashBlade and a remote array. A valid management address and connection key from the remote array are required. The connection can be created using individual parameters or a single Attributes hashtable. Supports ShouldProcess. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER ManagementAddress The management IP address or FQDN of the remote FlashBlade array. .PARAMETER ReplicationAddress The replication IP address or FQDN of the remote FlashBlade array. .PARAMETER ConnectionKey The connection key obtained from the remote FlashBlade array. + .PARAMETER CaCertificateGroup + 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. + .PARAMETER Encrypted + 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. + .PARAMETER Remote + The remote array. + .PARAMETER Throttle + The bandwidth throttling for the array connection, as a hashtable -- for example + @{ default_limit = 1073741824 }. .PARAMETER Attributes - A hashtable of connection attributes. When specified, individual parameters are ignored. + A hashtable of connection attributes. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -29,23 +47,55 @@ function New-PfbArrayConnection { New-PfbArrayConnection -ManagementAddress "fb-dr.example.com" -ReplicationAddress "10.0.4.100" -ConnectionKey "key-456" -WhatIf Shows what would happen if the array connection were created without actually creating it. + .EXAMPLE + New-PfbArrayConnection -ManagementAddress "remote-fb.example.com" -ConnectionKey "key-456" -Encrypted $true -Remote "remote-fb" + + Creates an encrypted array connection using typed parameters, including a reference to the remote array. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'Individual')] param( - [Parameter()] [string]$ManagementAddress, - [Parameter()] [string]$ReplicationAddress, - [Parameter()] [string]$ConnectionKey, - [Parameter()] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'Individual')] [string]$ManagementAddress, + [Parameter(ParameterSetName = 'Individual')] [string]$ReplicationAddress, + [Parameter(ParameterSetName = 'Individual')] [string]$ConnectionKey, + [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificateGroup, + [Parameter(ParameterSetName = 'Individual')] [Nullable[bool]]$Encrypted, + [Parameter(ParameterSetName = 'Individual')] [string]$Remote, + [Parameter(ParameterSetName = 'Individual')] [hashtable]$Throttle, + + [Parameter(ParameterSetName = 'Attributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) - if ($Attributes) { $body = $Attributes } + + if ($PSCmdlet.ParameterSetName -eq 'Attributes') { + $body = $Attributes + } else { + # Constraint 16: these three were previously bare parameters guarded by truthiness + # with no parameter set at all, which let -Attributes silently override an explicitly + # supplied -ManagementAddress/-ReplicationAddress/-ConnectionKey. They now live in the + # 'Individual' set and are guarded by ContainsKey like every other typed parameter. $body = @{} - if ($ManagementAddress) { $body['management_address'] = $ManagementAddress } - if ($ReplicationAddress) { $body['replication_addresses'] = @($ReplicationAddress) } - if ($ConnectionKey) { $body['connection_key'] = $ConnectionKey } + if ($PSBoundParameters.ContainsKey('ManagementAddress')) { $body['management_address'] = $ManagementAddress } + if ($PSBoundParameters.ContainsKey('ReplicationAddress')) { $body['replication_addresses'] = @($ReplicationAddress) } + if ($PSBoundParameters.ContainsKey('ConnectionKey')) { $body['connection_key'] = $ConnectionKey } + + # Constraint 8(a): ca_certificate_group and remote are SCALAR references (item schema + # is {id, name, resource_type}), so the parameter is [string] and the projection is + # assigned inline as a name-reference hashtable. + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + if ($PSBoundParameters.ContainsKey('Encrypted')) { $body['encrypted'] = $Encrypted } + if ($PSBoundParameters.ContainsKey('Remote')) { $body['remote'] = @{ name = $Remote } } + + # Constraint 8(c): throttle is a COMPOSITE sub-object (_throttle: default_limit, window, + # window_limit), not a reference -- it has no `name` property, so it is passed straight + # through rather than projected into @{ name = ... }. + if ($PSBoundParameters.ContainsKey('Throttle')) { $body['throttle'] = $Throttle } } + $target = if ($ManagementAddress) { $ManagementAddress } else { 'array connection' } if ($PSCmdlet.ShouldProcess($target, 'Create array connection')) { Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'array-connections' -Body $body diff --git a/Tests/New-PfbArrayConnection.Tests.ps1 b/Tests/New-PfbArrayConnection.Tests.ps1 new file mode 100644 index 0000000..fad0185 --- /dev/null +++ b/Tests/New-PfbArrayConnection.Tests.ps1 @@ -0,0 +1,117 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbArrayConnection - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'pre-existing typed parameters (constraint 16 -- were in NO parameter set)' { + It 'sends management_address, replication_addresses and connection_key together' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ReplicationAddress '10.0.3.100' ` + -ConnectionKey 'key-123' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'array-connections' -and + $Body['management_address'] -eq '10.0.2.100' -and + @($Body['replication_addresses'])[0] -eq '10.0.3.100' -and + $Body['connection_key'] -eq 'key-123' + } + } + + It 'no longer silently discards -ManagementAddress when combined with -Attributes (regression: was a silent override, now an ambiguous-set error)' { + { New-PfbArrayConnection -ManagementAddress '10.0.2.100' -Attributes @{ connection_key = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'new typed parameters' { + It 'sends encrypted as a body field (ContainsKey semantics, not truthiness)' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ConnectionKey 'k' -Encrypted $false ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('encrypted') -and $Body['encrypted'] -eq $false + } + } + + It 'omits encrypted entirely when not supplied' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ConnectionKey 'k' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('encrypted') + } + } + + It 'builds ca_certificate_group as a name-reference object (constraint 8a, scalar reference)' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ConnectionKey 'k' -CaCertificateGroup 'my-certs' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate_group'].name -eq 'my-certs' + } + } + + It 'builds remote as a name-reference object (constraint 8a, scalar reference)' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ConnectionKey 'k' -Remote 'remote-fb' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remote'].name -eq 'remote-fb' + } + } + + It 'passes throttle straight through as a composite hashtable (constraint 8c)' { + New-PfbArrayConnection -ManagementAddress '10.0.2.100' -ConnectionKey 'k' ` + -Throttle @{ default_limit = 1073741824 } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['throttle']['default_limit'] -eq 1073741824 + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + New-PfbArrayConnection -Attributes @{ management_address = '10.0.2.100'; connection_key = 'k' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['management_address'] -eq '10.0.2.100' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { New-PfbArrayConnection -ConnectionKey 'k' -Attributes @{ connection_key = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ManagementAddress' } + @{ Parameter = 'ReplicationAddress' } + @{ Parameter = 'ConnectionKey' } + @{ Parameter = 'CaCertificateGroup' } + @{ Parameter = 'Encrypted' } + @{ Parameter = 'Remote' } + @{ Parameter = 'Throttle' } + ) { + $attrs = (Get-Command New-PfbArrayConnection).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From df0aad7ce804bdc6931ad6a54b9e838f15a1b81b Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:41:36 -0700 Subject: [PATCH 43/90] feat(monitoring): add typed body params to Update-PfbSnmpManager (#31) --- Public/Monitoring/Update-PfbSnmpManager.ps1 | 106 ++++++++++++-- Tests/Update-PfbSnmpManager.Tests.ps1 | 145 ++++++++++++++++++++ 2 files changed, 237 insertions(+), 14 deletions(-) create mode 100644 Tests/Update-PfbSnmpManager.Tests.ps1 diff --git a/Public/Monitoring/Update-PfbSnmpManager.ps1 b/Public/Monitoring/Update-PfbSnmpManager.ps1 index a0314b5..8e3a368 100644 --- a/Public/Monitoring/Update-PfbSnmpManager.ps1 +++ b/Public/Monitoring/Update-PfbSnmpManager.ps1 @@ -3,36 +3,93 @@ function Update-PfbSnmpManager { .SYNOPSIS Updates an existing SNMP manager (trap host) on a Pure Storage FlashBlade. .DESCRIPTION - The Update-PfbSnmpManager cmdlet modifies an existing SNMP manager entry on the FlashBlade. - The manager can be identified by name or by ID. The Attributes hashtable contains the - configuration properties to update such as the host address, community string, or SNMPv3 - credentials. This cmdlet supports pipeline input by property name and the ShouldProcess pattern. + The Update-PfbSnmpManager cmdlet modifies an existing SNMP manager entry on the connected + Everpure FlashBlade. The manager can be identified by name or by ID. This cmdlet supports + pipeline input by property name and the ShouldProcess pattern. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the SNMP manager to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the SNMP manager to update. + .PARAMETER SnmpHost + 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. Named -SnmpHost rather than -Host + because -Host is a PowerShell common parameter. + .PARAMETER NewName + A new user-specified name for the SNMP manager. Named -NewName rather than -Name + because -Name already identifies which SNMP manager to update. + .PARAMETER Notification + The type of notification the agent will send. + .PARAMETER V2c + The v2c configuration of SNMP, as a hashtable -- for example @{ community = 'public' }. + .PARAMETER V3 + The v3 configuration of SNMP, as a hashtable -- for example @{ auth_protocol = 'SHA' }. + .PARAMETER Version + Version of the SNMP protocol to be used by Purity in communications with the specified + manager. .PARAMETER Attributes - A hashtable containing the SNMP manager attributes to update. + A hashtable containing the SNMP manager attributes to update. Mutually exclusive with + the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbSnmpManager -Name 'snmp-mgr01' -Attributes @{ host = '10.21.100.55' } + Update-PfbSnmpManager -Name 'snmp-mgr01' -SnmpHost '10.21.100.55' - Updates the host address for the SNMP manager named 'snmp-mgr01'. + Updates the host address for the SNMP manager named 'snmp-mgr01' using a typed parameter. .EXAMPLE - Update-PfbSnmpManager -Name 'snmp-mgr01' -Attributes @{ community = 'new-community' } + Update-PfbSnmpManager -Name 'snmp-mgr01' -V2c @{ community = 'new-community' } - Changes the community string for the specified SNMP manager. + Changes the community string for the specified SNMP manager using a typed parameter. .EXAMPLE Get-PfbSnmpManager -Name 'snmp-mgr01' | Update-PfbSnmpManager -Attributes @{ version = 'v2c'; community = 'updated' } Pipes an SNMP manager object to update its version and community string. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$SnmpHost, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('inform', 'trap')] + [string]$Notification, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$V2c, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$V3, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('v2c', 'v3')] + [string]$Version, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -43,9 +100,30 @@ function Update-PfbSnmpManager { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('SnmpHost')) { $body['host'] = $SnmpHost } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + if ($PSBoundParameters.ContainsKey('Notification')) { $body['notification'] = $Notification } + if ($PSBoundParameters.ContainsKey('Version')) { $body['version'] = $Version } + + # Constraint 8(c): v2c and v3 are COMPOSITE sub-objects (_snmp_v2c, _snmp_v3_post), + # not references -- neither has a `name` property, so projecting them into + # @{ name = ... } would write a field the schema does not have. Pass them straight + # through. + if ($PSBoundParameters.ContainsKey('V2c')) { $body['v2c'] = $V2c } + if ($PSBoundParameters.ContainsKey('V3')) { $body['v3'] = $V3 } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update SNMP manager')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'snmp-managers' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'snmp-managers' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbSnmpManager.Tests.ps1 b/Tests/Update-PfbSnmpManager.Tests.ps1 new file mode 100644 index 0000000..65ac0fe --- /dev/null +++ b/Tests/Update-PfbSnmpManager.Tests.ps1 @@ -0,0 +1,145 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbSnmpManager - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends -SnmpHost as the host body field (naming collision with -Host)' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -SnmpHost '10.21.100.55' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'snmp-managers' -and + $QueryParams['names'] -eq 'snmp-mgr01' -and + $Body['host'] -eq '10.21.100.55' + } + } + + It 'has no -Host parameter (would collide with the PowerShell common parameter)' { + (Get-Command Update-PfbSnmpManager).Parameters.Keys | Should -Not -Contain 'Host' + } + + It 'sends name as a body field via -NewName' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -NewName 'snmp-mgr02' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'snmp-mgr02' + } + } + + It 'sends notification as a body field' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -Notification 'trap' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['notification'] -eq 'trap' + } + } + + It 'rejects a -Notification value outside the enum' { + { Update-PfbSnmpManager -Name 'snmp-mgr01' -Notification 'bogus' -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ErrorId 'ParameterArgumentValidationError,Update-PfbSnmpManager' + } + + It 'sends version as a body field' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -Version 'v3' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['version'] -eq 'v3' + } + } + + It 'rejects a -Version value outside the enum' { + { Update-PfbSnmpManager -Name 'snmp-mgr01' -Version 'v1' -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ErrorId 'ParameterArgumentValidationError,Update-PfbSnmpManager' + } + + It 'passes v2c through as a composite hashtable (constraint 8c)' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -V2c @{ community = 'new-community' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['v2c']['community'] -eq 'new-community' + } + } + + It 'passes v3 through as a composite hashtable (constraint 8c)' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -V3 @{ auth_protocol = 'SHA' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['v3']['auth_protocol'] -eq 'SHA' + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the manager by id when -Id is used' { + Update-PfbSnmpManager -Id 'mgr-1' -NewName 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'mgr-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbSnmpManager -Name 'snmp-mgr01' -Attributes @{ host = '10.21.100.55' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['host'] -eq '10.21.100.55' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbSnmpManager -Name 'snmp-mgr01' -SnmpHost '1.2.3.4' -Attributes @{ host = '5.6.7.8' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'SnmpHost' } + @{ Parameter = 'NewName' } + @{ Parameter = 'V2c' } + @{ Parameter = 'V3' } + ) { + $attrs = (Get-Command Update-PfbSnmpManager).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'puts ValidateSet(inform, trap) on -Notification in that order (constraint 3)' { + $attr = (Get-Command Update-PfbSnmpManager).Parameters['Notification'].Attributes | + Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $attr.ValidValues | Should -Be @('inform', 'trap') + } + + It 'puts ValidateSet(v2c, v3) on -Version in that order (constraint 3)' { + $attr = (Get-Command Update-PfbSnmpManager).Parameters['Version'].Attributes | + Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $attr.ValidValues | Should -Be @('v2c', 'v3') + } + + It 'has no -SnmpManagerName parameter (the "name" body field uses -NewName per the exception)' { + (Get-Command Update-PfbSnmpManager).Parameters.Keys | Should -Not -Contain 'SnmpManagerName' + } + } +} From 67a25e4c76430a11d33580a412333e303173936f Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:41:45 -0700 Subject: [PATCH 44/90] feat(policy): add typed query params to New-PfbQosPolicyMember (#31) --- Public/Policy/New-PfbQosPolicyMember.ps1 | 8 +++-- Tests/New-PfbQosPolicyMember.Tests.ps1 | 46 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 Tests/New-PfbQosPolicyMember.Tests.ps1 diff --git a/Public/Policy/New-PfbQosPolicyMember.ps1 b/Public/Policy/New-PfbQosPolicyMember.ps1 index c16cfa2..201cf81 100644 --- a/Public/Policy/New-PfbQosPolicyMember.ps1 +++ b/Public/Policy/New-PfbQosPolicyMember.ps1 @@ -13,6 +13,8 @@ function New-PfbQosPolicyMember { The member name to add to the policy. .PARAMETER MemberId The member ID to add to the policy. + .PARAMETER MemberType + A list of member types to add to the policy. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -24,9 +26,9 @@ function New-PfbQosPolicyMember { Shows what would happen without actually adding the member. .EXAMPLE - New-PfbQosPolicyMember -PolicyName "qos-silver" -MemberName "fs2" + New-PfbQosPolicyMember -PolicyName "qos-silver" -MemberName "fs2" -MemberType "file-systems" - Associates "fs2" with the QoS policy "qos-silver". + Associates "fs2" with the QoS policy "qos-silver", specifying its member type. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( @@ -34,6 +36,7 @@ function New-PfbQosPolicyMember { [Parameter()] [string]$PolicyId, [Parameter()] [string]$MemberName, [Parameter()] [string]$MemberId, + [Parameter()] [string[]]$MemberType, [Parameter()] [PSCustomObject]$Array ) @@ -44,6 +47,7 @@ function New-PfbQosPolicyMember { if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } if ($MemberName) { $queryParams['member_names'] = $MemberName } if ($MemberId) { $queryParams['member_ids'] = $MemberId } + if ($PSBoundParameters.ContainsKey('MemberType')) { $queryParams['member_types'] = $MemberType -join ',' } $target = "${PolicyName}:${MemberName}" diff --git a/Tests/New-PfbQosPolicyMember.Tests.ps1 b/Tests/New-PfbQosPolicyMember.Tests.ps1 new file mode 100644 index 0000000..81c5c2e --- /dev/null +++ b/Tests/New-PfbQosPolicyMember.Tests.ps1 @@ -0,0 +1,46 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbQosPolicyMember - typed query params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing member_names/member_ids wire keys are unchanged (confirmed non-issue)' { + It 'still sends -MemberName as member_names' { + New-PfbQosPolicyMember -PolicyName 'qos-gold' -MemberName 'fs1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['member_names'] -eq 'fs1' } + } + + It 'still sends -MemberId as member_ids' { + New-PfbQosPolicyMember -PolicyName 'qos-gold' -MemberId 'm-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['member_ids'] -eq 'm-1' } + } + } + + Context 'new -MemberType query parameter' { + It 'sends -MemberType as a joined member_types query param' { + New-PfbQosPolicyMember -PolicyName 'qos-gold' -MemberName 'fs1' -MemberType @('file-systems', 'realms') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['member_types'] -eq 'file-systems,realms' } + } + + It 'sends an explicit empty -MemberType @() (constraint 2, array field)' { + New-PfbQosPolicyMember -PolicyName 'qos-gold' -MemberName 'fs1' -MemberType @() -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams.ContainsKey('member_types') -and $QueryParams['member_types'] -eq '' } + } + + It 'omits member_types entirely when not supplied' { + New-PfbQosPolicyMember -PolicyName 'qos-gold' -MemberName 'fs1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { -not $QueryParams.ContainsKey('member_types') } + } + } +} From bec94aece172c24be124f6bc96f41f53b03ada79 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:41:59 -0700 Subject: [PATCH 45/90] feat(realm): add typed body params to Update-PfbRealmDefaults (#31) --- Public/Realm/Update-PfbRealmDefaults.ps1 | 60 ++++++++++--- Tests/Update-PfbRealmDefaults.Tests.ps1 | 102 +++++++++++++++++++++++ 2 files changed, 151 insertions(+), 11 deletions(-) create mode 100644 Tests/Update-PfbRealmDefaults.Tests.ps1 diff --git a/Public/Realm/Update-PfbRealmDefaults.ps1 b/Public/Realm/Update-PfbRealmDefaults.ps1 index e27a8fc..302c3e4 100644 --- a/Public/Realm/Update-PfbRealmDefaults.ps1 +++ b/Public/Realm/Update-PfbRealmDefaults.ps1 @@ -4,19 +4,27 @@ function Update-PfbRealmDefaults { Updates realm default settings on a FlashBlade array. .DESCRIPTION The Update-PfbRealmDefaults cmdlet modifies the default settings for a realm on the - connected Pure Storage FlashBlade. + connected Everpure FlashBlade. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the realm to update defaults for. .PARAMETER Id The ID of the realm to update defaults for. + .PARAMETER ObjectStore + Default configurations for object store. .PARAMETER Attributes - A hashtable of realm default attributes to modify. + A hashtable of realm default attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbRealmDefaults -Name "realm-prod" -Attributes @{ quota_limit = 1099511627776 } + Update-PfbRealmDefaults -Name "realm-prod" -ObjectStore @{ server = @{ name = "obj-server-1" } } - Updates the default quota limit for the specified realm. + Updates the default object store server for the specified realm using a typed parameter. .EXAMPLE Update-PfbRealmDefaults -Id "10314f42-020d-7080-8013-000ddt400012" -Attributes @{} @@ -26,11 +34,25 @@ function Update-PfbRealmDefaults { Shows what would happen without actually updating the defaults. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable[]]$ObjectStore, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -38,12 +60,28 @@ function Update-PfbRealmDefaults { } process { + # Wire-key bug fix (#31): PATCH /realms/defaults only accepts realm_ids/realm_names + # as query parameters -- there is no plain names/ids query parameter on this endpoint. + # The previous code sent names/ids, which the array does not recognize for this + # endpoint, so -Name and -Id had no effect on which realm's defaults were targeted. $queryParams = @{} - if ($Name) { $queryParams['names'] = $Name } - if ($Id) { $queryParams['ids'] = $Id } + if ($Name) { $queryParams['realm_names'] = $Name } + if ($Id) { $queryParams['realm_ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Constraint 8(c): object_store is a COMPOSITE array (item schema has a property, + # `server`, outside {id, name, resource_type}), so the parameter is [hashtable[]] + # and is passed straight through -- constraint 7 forbids a $objectStoreItems local. + $body = @{} + if ($PSBoundParameters.ContainsKey('ObjectStore')) { $body['object_store'] = @($ObjectStore) } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update realm defaults')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'realms/defaults' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'realms/defaults' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbRealmDefaults.Tests.ps1 b/Tests/Update-PfbRealmDefaults.Tests.ps1 new file mode 100644 index 0000000..9c5cda0 --- /dev/null +++ b/Tests/Update-PfbRealmDefaults.Tests.ps1 @@ -0,0 +1,102 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbRealmDefaults - typed body parameters + query wire-key fix (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'query wire-key bug fix: PATCH /realms/defaults only accepts realm_ids/realm_names' { + It 'sends -Name as realm_names, NOT names' { + Update-PfbRealmDefaults -Name 'realm-prod' -Attributes @{} -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'realms/defaults' -and + $QueryParams['realm_names'] -eq 'realm-prod' -and + -not $QueryParams.ContainsKey('names') + } + } + + It 'sends -Id as realm_ids, NOT ids' { + Update-PfbRealmDefaults -Id 'realm-1' -Attributes @{} -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['realm_ids'] -eq 'realm-1' -and -not $QueryParams.ContainsKey('ids') + } + } + } + + Context 'typed parameters build the body' { + It 'sends object_store as a composite array, passed straight through' { + Update-PfbRealmDefaults -Name 'realm-prod' -ObjectStore @{ server = @{ name = 'obj-server-1' } } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['object_store']).Count -eq 1 -and + $Body['object_store'][0].server.name -eq 'obj-server-1' + } + } + + It 'sends an EMPTY array for -ObjectStore @() so the list can be cleared' { + Update-PfbRealmDefaults -Name 'realm-prod' -ObjectStore @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('object_store') -and @($Body['object_store']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbRealmDefaults -Name 'realm-prod' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbRealmDefaults -Name 'realm-prod' -Attributes @{ object_store = @(@{ server = @{ name = 'raw' } }) } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['object_store'][0].server.name -eq 'raw' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbRealmDefaults -Name 'realm-prod' -ObjectStore @() -Attributes @{} ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'read-only fields are not exposed (constraint 11)' { + It 'has no -Context or -Realm parameter' { + $keys = (Get-Command Update-PfbRealmDefaults).Parameters.Keys + $keys | Should -Not -Contain 'Context' + $keys | Should -Not -Contain 'Realm' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -ObjectStore (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbRealmDefaults).Parameters['ObjectStore'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes -ObjectStore as [hashtable[]] (constraint 8c, composite)' { + (Get-Command Update-PfbRealmDefaults).Parameters['ObjectStore'].ParameterType.Name | Should -Be 'Hashtable[]' + } + } +} From 64b8615afb4cf359628e832c87a2126cb6d94de2 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:42:42 -0700 Subject: [PATCH 46/90] feat(network): add typed body params to Update-PfbNetworkInterface (#31) --- Public/Network/Update-PfbNetworkInterface.ps1 | 79 ++++++++-- Tests/Update-PfbNetworkInterface.Tests.ps1 | 140 ++++++++++++++++++ 2 files changed, 210 insertions(+), 9 deletions(-) create mode 100644 Tests/Update-PfbNetworkInterface.Tests.ps1 diff --git a/Public/Network/Update-PfbNetworkInterface.ps1 b/Public/Network/Update-PfbNetworkInterface.ps1 index 048fb23..fb4b9a7 100644 --- a/Public/Network/Update-PfbNetworkInterface.ps1 +++ b/Public/Network/Update-PfbNetworkInterface.ps1 @@ -2,31 +2,76 @@ function Update-PfbNetworkInterface { <# .SYNOPSIS Updates a network interface on the FlashBlade. + .DESCRIPTION + The Update-PfbNetworkInterface cmdlet modifies attributes of a network interface on + the connected Everpure FlashBlade. The target interface can be identified by name or + ID. Supports pipeline input and ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the network interface to update. .PARAMETER Id The ID of the network interface to update. .PARAMETER Address - The new IP address. + The new IPv4 or IPv6 address to associate with the network interface. + .PARAMETER AttachedServers + Servers to be associated with the network interface for data ingress. Pass an empty + array to detach the interface from all servers. + .PARAMETER RdmaEnabled + If `$true`, RDMA is enabled on the network interface. Only supported on interfaces + whose services include `data`. + .PARAMETER Services + Services and protocols that are enabled on the interface. .PARAMETER Attributes - A hashtable of attributes to update. + A hashtable of attributes to update. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. .EXAMPLE Update-PfbNetworkInterface -Name "vir0" -Address "10.0.0.101" + + Updates the address of "vir0" using a typed parameter. + .EXAMPLE + Update-PfbNetworkInterface -Name "vir0" -AttachedServers "CH1.FM1", "CH1.FM2" + + Attaches "vir0" to two servers for data ingress. + .EXAMPLE + Update-PfbNetworkInterface -Name "vir0" -Attributes @{ address = "10.0.0.101" } + + Updates the address of "vir0" using the raw -Attributes hashtable. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] [string]$Address, - [Parameter()] + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$AttachedServers, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$RdmaEnabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Services, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] @@ -38,12 +83,28 @@ function Update-PfbNetworkInterface { } process { - if ($Attributes) { + if ($PSCmdlet.ParameterSetName -like '*Attributes') { $body = $Attributes } else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, + # never by truthiness -- see Update-PfbAdmin.ps1 for the full rationale. -Address + # previously used `if ($Address)`, which silently dropped an explicit + # -Address '' and (combined with living outside any parameter set) let + # -Attributes silently override it -- the exact silent-override failure this + # issue exists to eliminate. $body = @{} - if ($Address) { $body['address'] = $Address } + if ($PSBoundParameters.ContainsKey('Address')) { $body['address'] = $Address } + + # Constraint 8(b): attached_servers is an ARRAY OF REFERENCES (item schema is + # {id, name}), so the parameter is [string[]] and the projection is assigned + # INLINE -- constraint 7 forbids an intermediate local. + if ($PSBoundParameters.ContainsKey('AttachedServers')) { + $body['attached_servers'] = @($AttachedServers | ForEach-Object { @{ name = $_ } }) + } + + if ($PSBoundParameters.ContainsKey('RdmaEnabled')) { $body['rdma_enabled'] = $RdmaEnabled } + if ($PSBoundParameters.ContainsKey('Services')) { $body['services'] = @($Services) } } $queryParams = @{} diff --git a/Tests/Update-PfbNetworkInterface.Tests.ps1 b/Tests/Update-PfbNetworkInterface.Tests.ps1 new file mode 100644 index 0000000..9a84576 --- /dev/null +++ b/Tests/Update-PfbNetworkInterface.Tests.ps1 @@ -0,0 +1,140 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbNetworkInterface - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'pre-existing -Address now guarded by ContainsKey and in the Individual set (constraint 16 fix)' { + It 'sends address as a body field' { + Update-PfbNetworkInterface -Name 'vir0' -Address '10.0.0.101' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'network-interfaces' -and + $QueryParams['names'] -eq 'vir0' -and + $Body['address'] -eq '10.0.0.101' + } + } + + It 'sends an EMPTY string for -Address "" rather than dropping the key' { + Update-PfbNetworkInterface -Name 'vir0' -Address '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('address') -and $Body['address'] -eq '' + } + } + + It 'rejects -Address combined with -Attributes at bind time (real bug: was silently discarding -Address before)' { + { Update-PfbNetworkInterface -Name 'vir0' -Address '10.0.0.101' -Attributes @{ services = @('data') } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'new typed body parameters (missing body properties)' { + It 'builds attached_servers as an array of name-reference objects (constraint 8b)' { + Update-PfbNetworkInterface -Name 'vir0' -AttachedServers 'CH1.FM1', 'CH1.FM2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['attached_servers'].Count -eq 2 -and + $Body['attached_servers'][0].name -eq 'CH1.FM1' -and + $Body['attached_servers'][1].name -eq 'CH1.FM2' + } + } + + It 'sends an EMPTY array for -AttachedServers @() so the list can be cleared' { + Update-PfbNetworkInterface -Name 'vir0' -AttachedServers @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('attached_servers') -and @($Body['attached_servers']).Count -eq 0 + } + } + + It 'sends an explicit -RdmaEnabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbNetworkInterface -Name 'vir0' -RdmaEnabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('rdma_enabled') -and $Body['rdma_enabled'] -eq $false + } + } + + It 'omits rdma_enabled entirely when -RdmaEnabled is not supplied' { + Update-PfbNetworkInterface -Name 'vir0' -Address '10.0.0.101' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('rdma_enabled') + } + } + + It 'sends services as a plain string array' { + Update-PfbNetworkInterface -Name 'vir0' -Services 'data', 'management' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['services']) -join ',' -eq 'data,management' + } + } + + It 'sends an EMPTY array for -Services @() so the list can be cleared' { + Update-PfbNetworkInterface -Name 'vir0' -Services @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('services') -and @($Body['services']).Count -eq 0 + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbNetworkInterface -Name 'vir0' -Attributes @{ address = '10.0.0.99' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['address'] -eq '10.0.0.99' + } + } + + It 'targets the interface by id when -Id is used' { + Update-PfbNetworkInterface -Id 'iface-1' -Attributes @{ address = '10.0.0.99' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'iface-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on any new parameter (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'AttachedServers' } + @{ Parameter = 'RdmaEnabled' } + @{ Parameter = 'Services' } + ) { + $attrs = (Get-Command Update-PfbNetworkInterface).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbNetworkInterface).Parameters.Keys + foreach ($p in 'Address','AttachedServers','RdmaEnabled','Services') { + $keys | Should -Contain $p + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbNetworkInterface -Name 'vir0' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From 9d8ada7651fd0643013af25e7716af0983c5b465 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:43:02 -0700 Subject: [PATCH 47/90] feat(misc): add typed body and query params to Update-PfbLifecycleRule (#31) --- Public/Misc/Update-PfbLifecycleRule.ps1 | 106 +++++++++++++++++-- Tests/Update-PfbLifecycleRule.Tests.ps1 | 129 ++++++++++++++++++++++++ 2 files changed, 225 insertions(+), 10 deletions(-) create mode 100644 Tests/Update-PfbLifecycleRule.Tests.ps1 diff --git a/Public/Misc/Update-PfbLifecycleRule.ps1 b/Public/Misc/Update-PfbLifecycleRule.ps1 index 9292fe4..d3a08c5 100644 --- a/Public/Misc/Update-PfbLifecycleRule.ps1 +++ b/Public/Misc/Update-PfbLifecycleRule.ps1 @@ -9,29 +9,94 @@ function Update-PfbLifecycleRule { The name of the lifecycle rule to update. .PARAMETER Id The ID of the lifecycle rule to update. + .PARAMETER BucketIds + The IDs of the buckets whose lifecycle rules to update. + .PARAMETER BucketNames + The names of the buckets whose lifecycle rules to update. + .PARAMETER ConfirmDate + The confirmation timestamp required to apply a change that affects existing objects. + .PARAMETER AbortIncompleteMultipartUploadsAfter + Duration of time after which incomplete multipart uploads will be aborted. + .PARAMETER Enabled + If set to `true`, this rule will be enabled. + .PARAMETER KeepCurrentVersionFor + Time after which current versions will be marked expired. + .PARAMETER KeepCurrentVersionUntil + Time after which current versions will be marked expired. + .PARAMETER KeepPreviousVersionFor + Time after which previous versions will be marked expired. + .PARAMETER Prefix + Object key prefix identifying one or more objects in the bucket. .PARAMETER Attributes A hashtable of lifecycle rule attributes to update, such as prefix, - keep_previous_version_for, or enabled. + keep_previous_version_for, or enabled. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, uses the default connection. .EXAMPLE - Update-PfbLifecycleRule -Name "expire-logs-30d" -Attributes @{ keep_previous_version_for = 5184000000 } + Update-PfbLifecycleRule -Name "expire-logs-30d" -KeepPreviousVersionFor 5184000000 - Updates the retention period of the lifecycle rule to 60 days. + Updates the retention period of the lifecycle rule to 60 days using a typed parameter. .EXAMPLE - Update-PfbLifecycleRule -Name "cleanup" -Attributes @{ enabled = $false } + Update-PfbLifecycleRule -Name "cleanup" -Enabled $false Disables the lifecycle rule named 'cleanup'. .EXAMPLE - Update-PfbLifecycleRule -Name "archive" -Attributes @{ prefix = "old/"; keep_previous_version_for = 7776000000 } + Update-PfbLifecycleRule -Name "archive" -Prefix "old/" -KeepPreviousVersionFor 7776000000 Updates the prefix filter and retention period of the 'archive' rule. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + # Constraint 17: newly added QUERY parameters are declared bare, NOT in the + # *Individual sets -- they are orthogonal to the request body and must stay usable + # alongside -Attributes. + [Parameter()] + [string[]]$BucketIds, + + [Parameter()] + [string[]]$BucketNames, + + [Parameter()] + [long]$ConfirmDate, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$AbortIncompleteMultipartUploadsAfter, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Enabled, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$KeepCurrentVersionFor, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$KeepCurrentVersionUntil, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$KeepPreviousVersionFor, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Prefix, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,9 +107,30 @@ function Update-PfbLifecycleRule { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + # Every value-carrying query parameter is guarded by ContainsKey, never truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + if ($PSBoundParameters.ContainsKey('BucketIds')) { $queryParams['bucket_ids'] = $BucketIds -join ',' } + if ($PSBoundParameters.ContainsKey('BucketNames')) { $queryParams['bucket_names'] = $BucketNames -join ',' } + if ($PSBoundParameters.ContainsKey('ConfirmDate')) { $queryParams['confirm_date'] = $ConfirmDate } + $target = if ($Name) { $Name } else { $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('AbortIncompleteMultipartUploadsAfter')) { $body['abort_incomplete_multipart_uploads_after'] = $AbortIncompleteMultipartUploadsAfter } + if ($PSBoundParameters.ContainsKey('Enabled')) { $body['enabled'] = $Enabled } + if ($PSBoundParameters.ContainsKey('KeepCurrentVersionFor')) { $body['keep_current_version_for'] = $KeepCurrentVersionFor } + if ($PSBoundParameters.ContainsKey('KeepCurrentVersionUntil')) { $body['keep_current_version_until'] = $KeepCurrentVersionUntil } + if ($PSBoundParameters.ContainsKey('KeepPreviousVersionFor')) { $body['keep_previous_version_for'] = $KeepPreviousVersionFor } + if ($PSBoundParameters.ContainsKey('Prefix')) { $body['prefix'] = $Prefix } + } + if ($PSCmdlet.ShouldProcess($target, 'Update lifecycle rule')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'lifecycle-rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'lifecycle-rules' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbLifecycleRule.Tests.ps1 b/Tests/Update-PfbLifecycleRule.Tests.ps1 new file mode 100644 index 0000000..d1678aa --- /dev/null +++ b/Tests/Update-PfbLifecycleRule.Tests.ps1 @@ -0,0 +1,129 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbLifecycleRule - typed body and query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed body parameters' { + It 'sends -Prefix as the prefix body field' { + Update-PfbLifecycleRule -Name 'archive' -Prefix 'old/' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'lifecycle-rules' -and + $QueryParams['names'] -eq 'archive' -and + $Body['prefix'] -eq 'old/' + } + } + + It 'sends an explicit -Enabled:$false (ContainsKey semantics, not truthiness)' { + Update-PfbLifecycleRule -Name 'cleanup' -Enabled $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('enabled') -and $Body['enabled'] -eq $false + } + } + + It 'sends an explicit -AbortIncompleteMultipartUploadsAfter 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbLifecycleRule -Name 'cleanup' -AbortIncompleteMultipartUploadsAfter 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('abort_incomplete_multipart_uploads_after') -and + $Body['abort_incomplete_multipart_uploads_after'] -eq 0 + } + } + + It 'sends -KeepCurrentVersionFor, -KeepCurrentVersionUntil and -KeepPreviousVersionFor as integer fields' { + Update-PfbLifecycleRule -Name 'cleanup' -KeepCurrentVersionFor 5184000000 ` + -KeepCurrentVersionUntil 7776000000 -KeepPreviousVersionFor 2592000000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['keep_current_version_for'] -eq 5184000000 -and + $Body['keep_current_version_until'] -eq 7776000000 -and + $Body['keep_previous_version_for'] -eq 2592000000 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbLifecycleRule -Name 'cleanup' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the lifecycle rule by id when -Id is used' { + Update-PfbLifecycleRule -Id 'rule-1' -Prefix 'x' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'rule-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context 'typed query parameters (bare, not in Individual sets -- constraint 17)' { + It 'joins -BucketIds and -BucketNames with commas' { + Update-PfbLifecycleRule -Name 'archive' -BucketIds 'b-1', 'b-2' -BucketNames 'bkt1', 'bkt2' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['bucket_ids'] -eq 'b-1,b-2' -and $QueryParams['bucket_names'] -eq 'bkt1,bkt2' + } + } + + It 'sends -ConfirmDate as an explicit 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbLifecycleRule -Name 'archive' -ConfirmDate 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams.ContainsKey('confirm_date') -and $QueryParams['confirm_date'] -eq 0 + } + } + + It 'combines a query parameter with -Attributes without a set conflict' { + Update-PfbLifecycleRule -Name 'archive' -Attributes @{ prefix = 'raw/' } -BucketNames 'bkt1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['prefix'] -eq 'raw/' -and $QueryParams['bucket_names'] -eq 'bkt1' + } + } + + It 'omits bucket_ids, bucket_names and confirm_date entirely when not supplied' { + Update-PfbLifecycleRule -Name 'archive' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('bucket_ids') -and + -not $QueryParams.ContainsKey('bucket_names') -and + -not $QueryParams.ContainsKey('confirm_date') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbLifecycleRule -Name 'archive' -Attributes @{ prefix = 'raw/' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['prefix'] -eq 'raw/' + } + } + + It 'rejects -Attributes combined with a typed BODY parameter at bind time' { + { Update-PfbLifecycleRule -Name 'archive' -Prefix 'x' -Attributes @{ prefix = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } +} From ed613a8b8fc89441dab22a09e469485a8734bd54 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:44:04 -0700 Subject: [PATCH 48/90] feat(monitoring): add typed body params to Update-PfbSyslogServer (#31) --- Public/Monitoring/Update-PfbSyslogServer.ps1 | 70 +++++++++-- Tests/Update-PfbSyslogServer.Tests.ps1 | 121 +++++++++++++++++++ 2 files changed, 183 insertions(+), 8 deletions(-) create mode 100644 Tests/Update-PfbSyslogServer.Tests.ps1 diff --git a/Public/Monitoring/Update-PfbSyslogServer.ps1 b/Public/Monitoring/Update-PfbSyslogServer.ps1 index 035b721..7b4fa46 100644 --- a/Public/Monitoring/Update-PfbSyslogServer.ps1 +++ b/Public/Monitoring/Update-PfbSyslogServer.ps1 @@ -4,20 +4,32 @@ function Update-PfbSyslogServer { Updates an existing syslog server configuration on a FlashBlade array. .DESCRIPTION The Update-PfbSyslogServer cmdlet modifies attributes of an existing syslog server - configuration on the connected Pure Storage FlashBlade. The target server can be + configuration on the connected Everpure FlashBlade. The target server can be identified by name or ID. Supports pipeline input and ShouldProcess for confirmation. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the syslog server to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the syslog server to update. + .PARAMETER Services + Valid values are `data-audit` and `management`. + .PARAMETER Sources + The network interfaces used for communication with the syslog server. + .PARAMETER Uri + The URI of the syslog server in the format PROTOCOL://HOSTNAME:PORT. .PARAMETER Attributes A hashtable of syslog server attributes to modify (e.g., URI, transport protocol). + Mutually exclusive with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - Update-PfbSyslogServer -Name "syslog-prod" -Attributes @{ uri = "tcp://newsyslog.example.com:514" } + Update-PfbSyslogServer -Name "syslog-prod" -Uri "tcp://newsyslog.example.com:514" - Updates the URI of the syslog server named "syslog-prod". + Updates the URI of the syslog server named "syslog-prod" using a typed parameter. .EXAMPLE Update-PfbSyslogServer -Id "10314f42-020d-7080-8013-000ddt400090" -Attributes @{ enabled = $true } @@ -27,11 +39,34 @@ function Update-PfbSyslogServer { Pipes a syslog server object and updates its URI to use TLS transport. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [ValidateSet('data-audit', 'management')] + [string[]]$Services, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Sources, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Uri, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,9 +77,28 @@ function Update-PfbSyslogServer { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # Every value-carrying parameter is guarded by ContainsKey, never by truthiness -- + # see the canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + if ($PSBoundParameters.ContainsKey('Services')) { $body['services'] = @($Services) } + if ($PSBoundParameters.ContainsKey('Uri')) { $body['uri'] = $Uri } + + # Constraint 8(b): sources is an ARRAY OF REFERENCES (item schema is + # {id, name, resource_type}), so the parameter is [string[]] and the projection is + # assigned INLINE -- constraint 7 forbids an intermediate local. + if ($PSBoundParameters.ContainsKey('Sources')) { + $body['sources'] = @($Sources | ForEach-Object { @{ name = $_ } }) + } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update syslog server')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'syslog-servers' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'syslog-servers' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbSyslogServer.Tests.ps1 b/Tests/Update-PfbSyslogServer.Tests.ps1 new file mode 100644 index 0000000..5f4f897 --- /dev/null +++ b/Tests/Update-PfbSyslogServer.Tests.ps1 @@ -0,0 +1,121 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbSyslogServer - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends uri as a body field' { + Update-PfbSyslogServer -Name "syslog-prod" -Uri "tcp://newsyslog.example.com:514" ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'syslog-servers' -and + $QueryParams['names'] -eq 'syslog-prod' -and + $Body['uri'] -eq 'tcp://newsyslog.example.com:514' + } + } + + It 'sends services as a body field' { + Update-PfbSyslogServer -Name "syslog-prod" -Services 'data-audit','management' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['services']).Count -eq 2 -and + $Body['services'][0] -eq 'data-audit' -and + $Body['services'][1] -eq 'management' + } + } + + It 'rejects a -Services value outside the enum' { + { Update-PfbSyslogServer -Name "syslog-prod" -Services 'bogus' -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ErrorId 'ParameterArgumentValidationError,Update-PfbSyslogServer' + } + + It 'sends an EMPTY array for -Services @() so the list can be cleared' { + Update-PfbSyslogServer -Name "syslog-prod" -Services @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('services') -and @($Body['services']).Count -eq 0 + } + } + + It 'builds sources as name-reference objects (constraint 8b, array of references)' { + Update-PfbSyslogServer -Name "syslog-prod" -Sources 'eth0' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['sources'].Count -eq 1 -and $Body['sources'][0].name -eq 'eth0' + } + } + + It 'sends an EMPTY array for -Sources @() so the list can be cleared' { + Update-PfbSyslogServer -Name "syslog-prod" -Sources @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('sources') -and @($Body['sources']).Count -eq 0 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbSyslogServer -Name "syslog-prod" -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the server by id when -Id is used' { + Update-PfbSyslogServer -Id "10314f42-020d-7080-8013-000ddt400090" -Uri 'tcp://x:514' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq '10314f42-020d-7080-8013-000ddt400090' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbSyslogServer -Name "syslog-prod" -Attributes @{ uri = "tls://syslog.corp.com:6514" } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['uri'] -eq 'tls://syslog.corp.com:6514' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbSyslogServer -Name "syslog-prod" -Uri 'tcp://x:514' -Attributes @{ uri = 'tcp://y:514' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Uri' } + @{ Parameter = 'Sources' } + ) { + $attrs = (Get-Command Update-PfbSyslogServer).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'puts ValidateSet(data-audit, management) on -Services in that order (constraint 3)' { + $attr = (Get-Command Update-PfbSyslogServer).Parameters['Services'].Attributes | + Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } + $attr.ValidValues | Should -Be @('data-audit', 'management') + } + } +} From 8181e69c5989f9c6617aceb07abba6c5dbeb3890 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:44:09 -0700 Subject: [PATCH 49/90] feat(replication): add typed body params to Update-PfbArrayConnection (#31) --- .../Replication/Update-PfbArrayConnection.ps1 | 107 ++++++++++- Tests/Update-PfbArrayConnection.Tests.ps1 | 172 ++++++++++++++++++ 2 files changed, 273 insertions(+), 6 deletions(-) create mode 100644 Tests/Update-PfbArrayConnection.Tests.ps1 diff --git a/Public/Replication/Update-PfbArrayConnection.ps1 b/Public/Replication/Update-PfbArrayConnection.ps1 index b488848..fa1fdea 100644 --- a/Public/Replication/Update-PfbArrayConnection.ps1 +++ b/Public/Replication/Update-PfbArrayConnection.ps1 @@ -7,12 +7,38 @@ function Update-PfbArrayConnection { connection on the connected Pure Storage FlashBlade. The target connection can be identified by name or ID. Common updates include changing replication addresses and connection throttling settings. Supports pipeline input and ShouldProcess. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the array connection to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the array connection to update. + .PARAMETER ManagementAddress + Management address of the target array. + .PARAMETER ReplicationAddresses + IP addresses and/or FQDNs of the target arrays. + .PARAMETER CaCertificateGroup + 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. + .PARAMETER Encrypted + 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. + .PARAMETER Remote + The remote array. + .PARAMETER Throttle + The bandwidth throttling for the array connection, as a hashtable -- for example + @{ default_limit = 1073741824 }. + .PARAMETER RemoteId + Performs the operation on the array connection with the specified remote array ID. + .PARAMETER RemoteName + Performs the operation on the array connection with the specified remote array name. .PARAMETER Attributes - A hashtable of array connection attributes to modify. + A hashtable of array connection attributes to modify. Mutually exclusive with the + individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -27,12 +53,57 @@ function Update-PfbArrayConnection { Update-PfbArrayConnection -Id "10314f42-020d-7080-8013-000ddt400077" -Attributes @{ status = "connected" } Updates the status of the array connection identified by the specified ID. + .EXAMPLE + Update-PfbArrayConnection -Name "remote-fb-dc2" -ManagementAddress "10.0.2.101" -Encrypted $true -RemoteId "remote-1" + + Updates the management address and encryption setting for "remote-fb-dc2" using typed + parameters, filtered to the connection whose remote array ID is "remote-1". #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$ManagementAddress, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$ReplicationAddresses, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificateGroup, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [Nullable[bool]]$Encrypted, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Remote, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable]$Throttle, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + + # Constraint 17: remote_ids/remote_names are orthogonal query filters, not body fields, + # so they are declared bare rather than added to the Individual parameter sets -- they + # must stay usable alongside -Attributes. + [Parameter()] [string]$RemoteId, + [Parameter()] [string]$RemoteName, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -43,9 +114,33 @@ function Update-PfbArrayConnection { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + if ($PSBoundParameters.ContainsKey('RemoteId')) { $queryParams['remote_ids'] = $RemoteId } + if ($PSBoundParameters.ContainsKey('RemoteName')) { $queryParams['remote_names'] = $RemoteName } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('ManagementAddress')) { $body['management_address'] = $ManagementAddress } + if ($PSBoundParameters.ContainsKey('ReplicationAddresses')) { $body['replication_addresses'] = @($ReplicationAddresses) } + + # Constraint 8(a): ca_certificate_group and remote are SCALAR references (item + # schema is {id, name, resource_type}), so the parameter is [string] and the + # projection is assigned inline as a name-reference hashtable. + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + if ($PSBoundParameters.ContainsKey('Encrypted')) { $body['encrypted'] = $Encrypted } + if ($PSBoundParameters.ContainsKey('Remote')) { $body['remote'] = @{ name = $Remote } } + + # Constraint 8(c): throttle is a COMPOSITE sub-object (_throttle: default_limit, + # window, window_limit), not a reference -- it has no `name` property, so it is + # passed straight through rather than projected into @{ name = ... }. + if ($PSBoundParameters.ContainsKey('Throttle')) { $body['throttle'] = $Throttle } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update array connection')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'array-connections' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'array-connections' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbArrayConnection.Tests.ps1 b/Tests/Update-PfbArrayConnection.Tests.ps1 new file mode 100644 index 0000000..abd6e84 --- /dev/null +++ b/Tests/Update-PfbArrayConnection.Tests.ps1 @@ -0,0 +1,172 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbArrayConnection - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends management_address as a body field' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -ManagementAddress '10.0.2.101' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'array-connections' -and + $QueryParams['names'] -eq 'remote-fb-dc2' -and + $Body['management_address'] -eq '10.0.2.101' + } + } + + It 'sends replication_addresses as an array (constraint 7 shape 2)' { + Update-PfbArrayConnection -Name 'remote-fb-dr' -ReplicationAddresses '10.0.3.101','10.0.3.102' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['replication_addresses']).Count -eq 2 -and + @($Body['replication_addresses'])[1] -eq '10.0.3.102' + } + } + + It 'sends an EMPTY array for -ReplicationAddresses @() so the list can be cleared' { + Update-PfbArrayConnection -Name 'remote-fb-dr' -ReplicationAddresses @() ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('replication_addresses') -and + @($Body['replication_addresses']).Count -eq 0 + } + } + + It 'sends an explicit -Encrypted:$false (ContainsKey semantics, not truthiness)' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Encrypted $false -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('encrypted') -and $Body['encrypted'] -eq $false + } + } + + It 'omits encrypted entirely when not supplied' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -ManagementAddress '10.0.2.101' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('encrypted') + } + } + + It 'builds ca_certificate_group as a name-reference object (constraint 8a)' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -CaCertificateGroup 'my-certs' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate_group'].name -eq 'my-certs' + } + } + + It 'builds remote as a name-reference object (constraint 8a)' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Remote 'remote-fb' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remote'].name -eq 'remote-fb' + } + } + + It 'passes throttle straight through as a composite hashtable (constraint 8c)' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Throttle @{ window_limit = 2097152 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['throttle']['window_limit'] -eq 2097152 + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the connection by id when -Id is used' { + Update-PfbArrayConnection -Id 'conn-1' -ManagementAddress '10.0.2.101' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'conn-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context 'new query parameters (constraint 17 -- declared bare, not in the Individual sets)' { + It 'sends remote_ids as a bare query parameter alongside -Attributes' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Attributes @{ management_address = '10.0.2.101' } ` + -RemoteId 'remote-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['remote_ids'] -eq 'remote-1' + } + } + + It 'sends remote_names as a bare query parameter alongside a typed parameter' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -ManagementAddress '10.0.2.101' ` + -RemoteName 'remote-array' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['remote_names'] -eq 'remote-array' + } + } + + It 'omits remote_ids/remote_names entirely when not supplied' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('remote_ids') -and -not $QueryParams.ContainsKey('remote_names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbArrayConnection -Name 'remote-fb-dc2' -Attributes @{ management_address = '10.0.2.101' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['management_address'] -eq '10.0.2.101' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbArrayConnection -Name 'remote-fb-dc2' -ManagementAddress '10.0.2.101' ` + -Attributes @{ management_address = 'y' } -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ManagementAddress' } + @{ Parameter = 'ReplicationAddresses' } + @{ Parameter = 'CaCertificateGroup' } + @{ Parameter = 'Encrypted' } + @{ Parameter = 'Remote' } + @{ Parameter = 'Throttle' } + @{ Parameter = 'RemoteId' } + @{ Parameter = 'RemoteName' } + ) { + $attrs = (Get-Command Update-PfbArrayConnection).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From d00d1dbe5ef491f6fb1f6e4c8c06281742d17921 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:45:09 -0700 Subject: [PATCH 50/90] feat(policy): add typed body/query params to New-PfbS3ExportRule (#31) --- Public/Policy/New-PfbS3ExportRule.ps1 | 70 +++++++++++++++++--- Tests/New-PfbS3ExportRule.Tests.ps1 | 94 +++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 10 deletions(-) create mode 100644 Tests/New-PfbS3ExportRule.Tests.ps1 diff --git a/Public/Policy/New-PfbS3ExportRule.ps1 b/Public/Policy/New-PfbS3ExportRule.ps1 index 6544a57..6f4b2e9 100644 --- a/Public/Policy/New-PfbS3ExportRule.ps1 +++ b/Public/Policy/New-PfbS3ExportRule.ps1 @@ -5,37 +5,76 @@ function New-PfbS3ExportRule { .DESCRIPTION Adds a new rule to an S3 export policy. Rules define client access permissions and export settings within the policy. Specify the target - policy by name or ID and provide rule properties via the Attributes parameter. + policy by name or ID and provide rule properties via typed parameters or + the Attributes parameter. + + Unlike the other rule-POST endpoints, `POST /s3-export-policies/rules` requires + the caller to supply the new rule's name via the required `-Name` query + parameter -- the server does not assign it. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER PolicyName The name of the S3 export policy to add the rule to. .PARAMETER PolicyId The ID of the S3 export policy to add the rule to. + .PARAMETER Name + The name(s) to assign to the new rule. Required -- this endpoint does not + server-assign the rule name. + .PARAMETER Actions + The list of actions granted by this rule. + .PARAMETER Effect + Effect of this rule. + .PARAMETER Resources + The list of resources from the account to which this rule applies to. .PARAMETER Attributes A hashtable defining the rule properties (client, access, permission, etc.). + Mutually exclusive with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - New-PfbS3ExportRule -PolicyName "s3-export-01" -Attributes @{ client = "*"; access = "root-squash"; permission = "rw" } + New-PfbS3ExportRule -PolicyName "s3-export-01" -Name "rule-1" -Effect "allow" -Actions "s3:GetObject" -Resources "bucket1/*" - Creates a new rule allowing all clients with root-squash and read-write access. + Creates a new rule granting read access to a bucket using typed parameters. .EXAMPLE - New-PfbS3ExportRule -PolicyName "s3-export-01" -Attributes @{ client = "10.0.0.0/8"; access = "no-root-squash"; permission = "rw" } + New-PfbS3ExportRule -PolicyName "s3-export-01" -Name "rule-1" -Attributes @{ client = "*"; access = "root-squash"; permission = "rw" } - Creates a rule for a specific subnet with no root squash. + Creates a new rule allowing all clients with root-squash and read-write access. .EXAMPLE - New-PfbS3ExportRule -PolicyId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -Attributes @{ client = "*"; permission = "ro" } + New-PfbS3ExportRule -PolicyId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -Name "rule-2" -Attributes @{ client = "*"; permission = "ro" } Creates a read-only rule by policy ID. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByPolicyNameIndividual')] param( - [Parameter(ParameterSetName = 'ByPolicyName', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory, Position = 0)] [string]$PolicyName, - [Parameter(ParameterSetName = 'ByPolicyId', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [string]$PolicyId, [Parameter(Mandatory)] + [string[]]$Name, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string[]]$Actions, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Effect, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string[]]$Resources, + + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -46,10 +85,21 @@ function New-PfbS3ExportRule { $queryParams = @{} if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } + $queryParams['names'] = $Name -join ',' + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Actions')) { $body['actions'] = @($Actions) } + if ($PSBoundParameters.ContainsKey('Effect')) { $body['effect'] = $Effect } + if ($PSBoundParameters.ContainsKey('Resources')) { $body['resources'] = @($Resources) } + } $target = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess($target, 'Create S3 export rule')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 's3-export-policies/rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 's3-export-policies/rules' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbS3ExportRule.Tests.ps1 b/Tests/New-PfbS3ExportRule.Tests.ps1 new file mode 100644 index 0000000..e892605 --- /dev/null +++ b/Tests/New-PfbS3ExportRule.Tests.ps1 @@ -0,0 +1,94 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbS3ExportRule - typed body/query params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Attributes path still works' { + It 'POSTs with -Attributes hashtable unchanged' { + New-PfbS3ExportRule -PolicyName 's3-export-01' -Name 'rule-1' -Attributes @{ effect = 'allow' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 's3-export-policies/rules' -and + $QueryParams['policy_names'] -eq 's3-export-01' -and + $Body['effect'] -eq 'allow' + } + } + } + + Context 'required -Name query parameter (the endpoint requires the new rule name)' { + It 'sends -Name as a joined names query param' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['names'] -eq 'rule-1' } + } + + It 'throws before any API call when -Name is not supplied' { + { New-PfbS3ExportRule -PolicyName 'p1' -Effect 'allow' -Confirm:$false -Array $fakeArray } | Should -Throw + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 0 -Exactly + } + } + + Context 'typed body parameters - arrays (constraint 2: explicit @())' { + It 'sends -Actions as actions' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Actions @('s3:GetObject', 's3:PutObject') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['actions'].Count -eq 2 -and $Body['actions'][0] -eq 's3:GetObject' + } + } + + It 'sends an explicit empty -Actions @()' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Actions @() -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('actions') -and $Body['actions'].Count -eq 0 + } + } + + It 'sends -Resources as resources' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Resources @('bucket1/*') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['resources'].Count -eq 1 -and $Body['resources'][0] -eq 'bucket1/*' + } + } + + It 'sends an explicit empty -Resources @()' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Resources @() -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('resources') -and $Body['resources'].Count -eq 0 + } + } + } + + Context 'typed body parameter - effect string' { + It 'sends -Effect as effect' { + New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Effect 'allow' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['effect'] -eq 'allow' } + } + } + + Context 'parameter set mutual exclusion' { + It 'rejects mixing a typed body parameter with -Attributes' { + { New-PfbS3ExportRule -PolicyName 'p1' -Name 'rule-1' -Effect 'allow' -Attributes @{ effect = 'allow' } -Confirm:$false -Array $fakeArray } | + Should -Throw '*Parameter set cannot be resolved*' + } + } + + Context 'ById selector still works' { + It 'supports -PolicyId with typed params' { + New-PfbS3ExportRule -PolicyId 'pid-1' -Name 'rule-1' -Effect 'allow' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'pid-1' -and $Body['effect'] -eq 'allow' + } + } + } +} From 70876037197d57c0da2243eebc5d3262996805d5 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:45:14 -0700 Subject: [PATCH 51/90] feat(network): add typed body params to Update-PfbNetworkInterfaceConnector (#31) --- .../Update-PfbNetworkInterfaceConnector.ps1 | 71 ++++++++++- ...ate-PfbNetworkInterfaceConnector.Tests.ps1 | 117 ++++++++++++++++++ 2 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 diff --git a/Public/Network/Update-PfbNetworkInterfaceConnector.ps1 b/Public/Network/Update-PfbNetworkInterfaceConnector.ps1 index 406b966..25b73d7 100644 --- a/Public/Network/Update-PfbNetworkInterfaceConnector.ps1 +++ b/Public/Network/Update-PfbNetworkInterfaceConnector.ps1 @@ -4,14 +4,28 @@ function Update-PfbNetworkInterfaceConnector { Updates a network interface connector on a FlashBlade array. .DESCRIPTION The Update-PfbNetworkInterfaceConnector cmdlet modifies attributes of an existing - network interface connector on the connected Pure Storage FlashBlade. The connector + network interface connector on the connected Everpure FlashBlade. The connector can be identified by name or ID. Supports ShouldProcess for -WhatIf and -Confirm. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the network interface connector to update. .PARAMETER Id The ID of the network interface connector to update. + .PARAMETER LaneSpeed + Configured speed of each lane in the connector in bits-per-second. + .PARAMETER LanesPerPort + Configured number of lanes comprising each port in the connector. + .PARAMETER PortCount + Configured number of ports in the connector (1/2/4 for QSFP). + .PARAMETER PortSpeed + Configured speed of each port in the connector in bits-per-second. .PARAMETER Attributes A hashtable of connector attributes to modify, such as enabled state or port speed. + Mutually exclusive with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -26,12 +40,42 @@ function Update-PfbNetworkInterfaceConnector { Update-PfbNetworkInterfaceConnector -Name "CH1.FM1.ETH2" -Attributes @{ enabled = $true } -WhatIf Shows what would happen without applying the change. + .EXAMPLE + Update-PfbNetworkInterfaceConnector -Name "CH1.FM1.ETH1" -LaneSpeed 10000000000 -LanesPerPort 4 + + Sets the lane speed and lanes-per-port using typed parameters. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$LaneSpeed, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$LanesPerPort, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$PortCount, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [long]$PortSpeed, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,8 +86,23 @@ function Update-PfbNetworkInterfaceConnector { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } $target = if ($Name) { $Name } else { $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, + # never by truthiness -- see Update-PfbAdmin.ps1 for the full rationale. All four + # fields here are integers, so an explicit 0 must reach the wire (constraint 2). + $body = @{} + if ($PSBoundParameters.ContainsKey('LaneSpeed')) { $body['lane_speed'] = $LaneSpeed } + if ($PSBoundParameters.ContainsKey('LanesPerPort')) { $body['lanes_per_port'] = $LanesPerPort } + if ($PSBoundParameters.ContainsKey('PortCount')) { $body['port_count'] = $PortCount } + if ($PSBoundParameters.ContainsKey('PortSpeed')) { $body['port_speed'] = $PortSpeed } + } + if ($PSCmdlet.ShouldProcess($target, 'Update network interface connector')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'network-interfaces/connectors' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'network-interfaces/connectors' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 b/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 new file mode 100644 index 0000000..7c6ccda --- /dev/null +++ b/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 @@ -0,0 +1,117 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbNetworkInterfaceConnector - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends lane_speed and port_speed as body fields' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -LaneSpeed 10000000000 -PortSpeed 40000000000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'network-interfaces/connectors' -and + $QueryParams['names'] -eq 'CH1.FM1.ETH1' -and + $Body['lane_speed'] -eq 10000000000 -and + $Body['port_speed'] -eq 40000000000 + } + } + + It 'sends lanes_per_port and port_count as body fields' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -LanesPerPort 4 -PortCount 1 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['lanes_per_port'] -eq 4 -and $Body['port_count'] -eq 1 + } + } + + It 'sends an explicit -LaneSpeed 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -LaneSpeed 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('lane_speed') -and $Body['lane_speed'] -eq 0 + } + } + + It 'sends an explicit -PortCount 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -PortCount 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('port_count') -and $Body['port_count'] -eq 0 + } + } + + It 'omits lane_speed entirely when -LaneSpeed is not supplied' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -PortSpeed 1 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('lane_speed') + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the connector by id when -Id is used' { + Update-PfbNetworkInterfaceConnector -Id 'conn-1' -LaneSpeed 10000000000 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'conn-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -Attributes @{ port_speed = 40000000000 } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['port_speed'] -eq 40000000000 + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -LaneSpeed 1 -Attributes @{ lane_speed = 2 } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on any new parameter (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'LaneSpeed' } + @{ Parameter = 'LanesPerPort' } + @{ Parameter = 'PortCount' } + @{ Parameter = 'PortSpeed' } + ) { + $attrs = (Get-Command Update-PfbNetworkInterfaceConnector).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbNetworkInterfaceConnector).Parameters.Keys + foreach ($p in 'LaneSpeed','LanesPerPort','PortCount','PortSpeed') { + $keys | Should -Contain $p + } + } + } +} From 2d349cf8688c9037fa2368e9716335200790e74c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:46:33 -0700 Subject: [PATCH 52/90] feat(replication): add typed body params to Update-PfbFleet (#31) --- Public/Replication/Update-PfbFleet.ps1 | 48 +++++++++++++-- Tests/Update-PfbFleet.Tests.ps1 | 81 ++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 Tests/Update-PfbFleet.Tests.ps1 diff --git a/Public/Replication/Update-PfbFleet.ps1 b/Public/Replication/Update-PfbFleet.ps1 index 441f82e..3770f99 100644 --- a/Public/Replication/Update-PfbFleet.ps1 +++ b/Public/Replication/Update-PfbFleet.ps1 @@ -6,12 +6,21 @@ function Update-PfbFleet { The Update-PfbFleet cmdlet modifies attributes of an existing fleet on the connected Pure Storage FlashBlade. The fleet can be identified by name or ID. Supports pipeline input and ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the fleet to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the fleet to update. + .PARAMETER NewName + A new user-specified name for the fleet. Named -NewName rather than -Name because + -Name already identifies which fleet to update. .PARAMETER Attributes - A hashtable of fleet attributes to modify. + A hashtable of fleet attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -26,12 +35,30 @@ function Update-PfbFleet { Update-PfbFleet -Name "fleet-prod" -Attributes @{} -WhatIf Shows what would happen without actually updating the fleet. + .EXAMPLE + Update-PfbFleet -Name "fleet-prod" -NewName "fleet-renamed" + + Renames the fleet named "fleet-prod" using the typed parameter. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,9 +69,18 @@ function Update-PfbFleet { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update fleet')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fleets' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'fleets' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbFleet.Tests.ps1 b/Tests/Update-PfbFleet.Tests.ps1 new file mode 100644 index 0000000..cdd3c2c --- /dev/null +++ b/Tests/Update-PfbFleet.Tests.ps1 @@ -0,0 +1,81 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbFleet - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends -NewName as the name body field (rename exception, constraint: name -> -NewName)' { + Update-PfbFleet -Name 'fleet-prod' -NewName 'fleet-renamed' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'fleets' -and + $QueryParams['names'] -eq 'fleet-prod' -and + $Body['name'] -eq 'fleet-renamed' + } + } + + It 'sends an EMPTY string for -NewName "" rather than dropping the key' { + Update-PfbFleet -Name 'fleet-prod' -NewName '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('name') -and $Body['name'] -eq '' + } + } + + It 'has no -Name-shaped body parameter, only -NewName' { + (Get-Command Update-PfbFleet).Parameters.Keys | Should -Not -Contain 'FleetName' + } + + It 'targets the fleet by id when -Id is used' { + Update-PfbFleet -Id 'fleet-1' -NewName 'renamed' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'fleet-1' -and -not $QueryParams.ContainsKey('names') + } + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbFleet -Name 'fleet-prod' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbFleet -Name 'fleet-prod' -Attributes @{ name = 'raw-renamed' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'raw-renamed' + } + } + + It 'rejects -Attributes combined with -NewName at bind time' { + { Update-PfbFleet -Name 'fleet-prod' -NewName 'x' -Attributes @{ name = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -NewName (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbFleet).Parameters['NewName'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From 237bd1ee9b7824df17aa128c7e6c03e5250da712 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:47:49 -0700 Subject: [PATCH 53/90] feat(network): add typed body params to Update-PfbSubnet (#31) --- Public/Network/Update-PfbSubnet.ps1 | 95 +++++++++++++++++++---- Tests/Update-PfbSubnet.Tests.ps1 | 116 ++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+), 15 deletions(-) create mode 100644 Tests/Update-PfbSubnet.Tests.ps1 diff --git a/Public/Network/Update-PfbSubnet.ps1 b/Public/Network/Update-PfbSubnet.ps1 index bad99a7..d15b550 100644 --- a/Public/Network/Update-PfbSubnet.ps1 +++ b/Public/Network/Update-PfbSubnet.ps1 @@ -2,35 +2,83 @@ function Update-PfbSubnet { <# .SYNOPSIS Updates a subnet on the FlashBlade. + .DESCRIPTION + The Update-PfbSubnet cmdlet modifies attributes of a subnet on the connected Everpure + FlashBlade. The target subnet can be identified by name or ID. Supports pipeline + input and ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the subnet to update. .PARAMETER Id The ID of the subnet to update. .PARAMETER Prefix - The new subnet prefix. + The IPv4 or IPv6 address to be associated with the subnet. .PARAMETER Gateway - The new gateway IP address. + The IPv4 or IPv6 address of the gateway through which the subnet communicates with the + network. .PARAMETER Mtu - The new MTU size. + Maximum message transfer unit (packet) size for the subnet in bytes. + .PARAMETER LinkAggregationGroup + A reference to the associated LAG. + .PARAMETER Vlan + The VLAN ID. .PARAMETER Attributes - A hashtable of attributes to update. + A hashtable of attributes to update. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. .EXAMPLE Update-PfbSubnet -Name "subnet1" -Gateway "10.0.0.254" + + Updates the gateway of "subnet1" using a typed parameter. + .EXAMPLE + Update-PfbSubnet -Name "subnet1" -Vlan 100 -LinkAggregationGroup "lag1" + + Sets the VLAN ID and link aggregation group of "subnet1". + .EXAMPLE + Update-PfbSubnet -Name "subnet1" -Attributes @{ mtu = 9000 } + + Updates the MTU of "subnet1" using the raw -Attributes hashtable. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [string]$Id, - [Parameter()] [string]$Prefix, - [Parameter()] [string]$Gateway, - [Parameter()] [int]$Mtu, - [Parameter()] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Prefix, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Gateway, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [int]$Mtu, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$LinkAggregationGroup, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [int]$Vlan, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -39,12 +87,29 @@ function Update-PfbSubnet { } process { - if ($Attributes) { $body = $Attributes } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, + # never by truthiness -- see Update-PfbAdmin.ps1 for the full rationale. -Mtu + # previously used `if ($Mtu -gt 0)`, which could never send an explicit 0 (and, + # combined with living outside any parameter set, let -Attributes silently + # override it -- the exact silent-override failure this issue exists to + # eliminate). $body = @{} - if ($Prefix) { $body['prefix'] = $Prefix } - if ($Gateway) { $body['gateway'] = $Gateway } - if ($Mtu -gt 0) { $body['mtu'] = $Mtu } + if ($PSBoundParameters.ContainsKey('Prefix')) { $body['prefix'] = $Prefix } + if ($PSBoundParameters.ContainsKey('Gateway')) { $body['gateway'] = $Gateway } + if ($PSBoundParameters.ContainsKey('Mtu')) { $body['mtu'] = $Mtu } + + # Constraint 8(a): link_aggregation_group is a SCALAR reference (item schema is + # {id, name, resource_type}), so the parameter is [string] and the projection is + # assigned INLINE as a name-reference hashtable. + if ($PSBoundParameters.ContainsKey('LinkAggregationGroup')) { + $body['link_aggregation_group'] = @{ name = $LinkAggregationGroup } + } + + if ($PSBoundParameters.ContainsKey('Vlan')) { $body['vlan'] = $Vlan } } $queryParams = @{} diff --git a/Tests/Update-PfbSubnet.Tests.ps1 b/Tests/Update-PfbSubnet.Tests.ps1 new file mode 100644 index 0000000..07c27bd --- /dev/null +++ b/Tests/Update-PfbSubnet.Tests.ps1 @@ -0,0 +1,116 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbSubnet - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'pre-existing typed parameters now guarded by ContainsKey and in the Individual set (constraint 16 fix)' { + It 'sends prefix, gateway and mtu as body fields' { + Update-PfbSubnet -Name 'subnet1' -Prefix '10.0.0.0/24' -Gateway '10.0.0.254' -Mtu 9000 ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'subnets' -and + $QueryParams['names'] -eq 'subnet1' -and + $Body['prefix'] -eq '10.0.0.0/24' -and + $Body['gateway'] -eq '10.0.0.254' -and + $Body['mtu'] -eq 9000 + } + } + + It 'sends an explicit -Mtu 0 rather than dropping it (constraint 2, integer field, was -gt 0)' { + Update-PfbSubnet -Name 'subnet1' -Mtu 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('mtu') -and $Body['mtu'] -eq 0 + } + } + + It 'rejects -Prefix combined with -Attributes at bind time (real bug: was silently discarding -Prefix before)' { + { Update-PfbSubnet -Name 'subnet1' -Prefix '10.0.0.0/24' -Attributes @{ mtu = 9000 } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'new typed body parameters (missing body properties)' { + It 'builds link_aggregation_group as a name-reference object (constraint 8a)' { + Update-PfbSubnet -Name 'subnet1' -LinkAggregationGroup 'lag1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['link_aggregation_group'].name -eq 'lag1' + } + } + + It 'sends vlan as a body field' { + Update-PfbSubnet -Name 'subnet1' -Vlan 100 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['vlan'] -eq 100 + } + } + + It 'sends an explicit -Vlan 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbSubnet -Name 'subnet1' -Vlan 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('vlan') -and $Body['vlan'] -eq 0 + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbSubnet -Name 'subnet1' -Attributes @{ mtu = 1500 } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['mtu'] -eq 1500 + } + } + + It 'targets the subnet by id when -Id is used' { + Update-PfbSubnet -Id 'subnet-1' -Attributes @{ mtu = 1500 } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'subnet-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on any new parameter (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'LinkAggregationGroup' } + @{ Parameter = 'Vlan' } + ) { + $attrs = (Get-Command Update-PfbSubnet).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbSubnet).Parameters.Keys + foreach ($p in 'Prefix','Gateway','Mtu','LinkAggregationGroup','Vlan') { + $keys | Should -Contain $p + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbSubnet -Name 'subnet1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} From fd9833b42b8172166bf6ee8b3df12b808269c5ee Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:47:51 -0700 Subject: [PATCH 54/90] feat(policy): add typed body params to New-PfbSmbClientRule (#31) --- Public/Policy/New-PfbSmbClientRule.ps1 | 78 +++++++++++++++++-- Tests/New-PfbSmbClientRule.Tests.ps1 | 100 +++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 Tests/New-PfbSmbClientRule.Tests.ps1 diff --git a/Public/Policy/New-PfbSmbClientRule.ps1 b/Public/Policy/New-PfbSmbClientRule.ps1 index 77d89eb..e48630d 100644 --- a/Public/Policy/New-PfbSmbClientRule.ps1 +++ b/Public/Policy/New-PfbSmbClientRule.ps1 @@ -5,14 +5,40 @@ function New-PfbSmbClientRule { .DESCRIPTION Adds a new rule to an SMB client policy. Rules define client access restrictions for SMB connections including client IP patterns and encryption settings. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER PolicyName The name of the SMB client policy to add the rule to. .PARAMETER PolicyId The ID of the SMB client policy to add the rule to. + .PARAMETER Client + Specifies the clients that will be permitted to access the export. + .PARAMETER Encryption + Specifies whether the remote client is required to use SMB encryption. + .PARAMETER Index + The index within the policy. + .PARAMETER Permission + Specifies which read-write client access permissions are allowed for the export. .PARAMETER Attributes - A hashtable defining the rule properties (client, encryption, etc.). + A hashtable defining the rule properties (client, encryption, etc.). Mutually + exclusive with the individual typed parameters above. + .PARAMETER BeforeRuleId + The ID of the rule to insert this rule before. Cannot be combined with -BeforeRuleName. + .PARAMETER BeforeRuleName + The name of the rule to insert this rule before. Cannot be combined with -BeforeRuleId. + .PARAMETER Versions + A list of versions used for concurrency control. Ordering matches the policy + names/IDs query parameter. Fails with a 412 if the resource's current version + does not match. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. + .EXAMPLE + New-PfbSmbClientRule -PolicyName "smb-client-01" -Client "10.0.0.0/8" -Encryption "required" + + Creates a rule for a specific subnet with required encryption using typed parameters. .EXAMPLE New-PfbSmbClientRule -PolicyName "smb-client-01" -Attributes @{ client = "*" } @@ -22,17 +48,43 @@ function New-PfbSmbClientRule { Creates a rule for a specific subnet with required encryption. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByPolicyNameIndividual')] param( - [Parameter(ParameterSetName = 'ByPolicyName', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory, Position = 0)] [string]$PolicyName, - [Parameter(ParameterSetName = 'ByPolicyId', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [string]$PolicyId, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Client, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('required', 'disabled', 'optional')] + [string]$Encryption, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [int]$Index, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('rw', 'ro')] + [string]$Permission, + + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [hashtable]$Attributes, + [Parameter()] [string]$BeforeRuleId, + [Parameter()] [string]$BeforeRuleName, + [Parameter()] [string[]]$Versions, + [Parameter()] [PSCustomObject]$Array ) @@ -41,10 +93,24 @@ function New-PfbSmbClientRule { $queryParams = @{} if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } + if ($PSBoundParameters.ContainsKey('BeforeRuleId')) { $queryParams['before_rule_id'] = $BeforeRuleId } + if ($PSBoundParameters.ContainsKey('BeforeRuleName')) { $queryParams['before_rule_name'] = $BeforeRuleName } + if ($PSBoundParameters.ContainsKey('Versions')) { $queryParams['versions'] = $Versions -join ',' } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Client')) { $body['client'] = $Client } + if ($PSBoundParameters.ContainsKey('Encryption')) { $body['encryption'] = $Encryption } + if ($PSBoundParameters.ContainsKey('Index')) { $body['index'] = $Index } + if ($PSBoundParameters.ContainsKey('Permission')) { $body['permission'] = $Permission } + } $target = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess($target, 'Create SMB client rule')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'smb-client-policies/rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'smb-client-policies/rules' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbSmbClientRule.Tests.ps1 b/Tests/New-PfbSmbClientRule.Tests.ps1 new file mode 100644 index 0000000..153ad1b --- /dev/null +++ b/Tests/New-PfbSmbClientRule.Tests.ps1 @@ -0,0 +1,100 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbSmbClientRule - typed body/query params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Attributes path still works' { + It 'POSTs with -Attributes hashtable unchanged' { + New-PfbSmbClientRule -PolicyName 'smb-client-01' -Attributes @{ client = '*' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'smb-client-policies/rules' -and + $QueryParams['policy_names'] -eq 'smb-client-01' -and $Body['client'] -eq '*' + } + } + } + + Context 'typed body parameters' { + It 'sends -Client as client' { + New-PfbSmbClientRule -PolicyName 'p1' -Client '10.0.0.0/8' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['client'] -eq '10.0.0.0/8' } + } + + It 'sends -Encryption as encryption' { + New-PfbSmbClientRule -PolicyName 'p1' -Encryption 'required' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['encryption'] -eq 'required' } + } + + It 'rejects an -Encryption value outside the enum' { + { New-PfbSmbClientRule -PolicyName 'p1' -Encryption 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -Index as index, including an explicit 0 (constraint 2, integer field)' { + New-PfbSmbClientRule -PolicyName 'p1' -Index 0 -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('index') -and $Body['index'] -eq 0 + } + } + + It 'sends -Permission as permission' { + New-PfbSmbClientRule -PolicyName 'p1' -Permission 'ro' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['permission'] -eq 'ro' } + } + + It 'rejects a -Permission value outside the enum' { + { New-PfbSmbClientRule -PolicyName 'p1' -Permission 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + } + + Context 'typed query parameters' { + It 'sends -BeforeRuleId as before_rule_id' { + New-PfbSmbClientRule -PolicyName 'p1' -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['before_rule_id'] -eq 'rule-1' } + } + + It 'sends -BeforeRuleName as before_rule_name' { + New-PfbSmbClientRule -PolicyName 'p1' -BeforeRuleName 'rule-name' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['before_rule_name'] -eq 'rule-name' } + } + + It 'sends -Versions as a joined versions query param' { + New-PfbSmbClientRule -PolicyName 'p1' -Versions @('5', '6') -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['versions'] -eq '5,6' } + } + + It 'allows a query parameter alongside -Attributes (constraint 17)' { + New-PfbSmbClientRule -PolicyName 'p1' -Attributes @{ client = 'x' } -BeforeRuleId 'rule-1' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['before_rule_id'] -eq 'rule-1' -and $Body['client'] -eq 'x' + } + } + } + + Context 'parameter set mutual exclusion' { + It 'rejects mixing a typed body parameter with -Attributes' { + { New-PfbSmbClientRule -PolicyName 'p1' -Client 'x' -Attributes @{ client = 'x' } -Confirm:$false -Array $fakeArray } | + Should -Throw '*Parameter set cannot be resolved*' + } + } + + Context 'ById selector still works' { + It 'supports -PolicyId with typed params' { + New-PfbSmbClientRule -PolicyId 'pid-1' -Client 'x' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'pid-1' -and $Body['client'] -eq 'x' + } + } + } +} From 44ce30c21a0a5c63eebfca1d36b4b01c34ed31f2 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:49:35 -0700 Subject: [PATCH 55/90] feat(replication): add typed body params to Update-PfbTarget (#31) --- Public/Replication/Update-PfbTarget.ps1 | 67 +++++++++++++-- Tests/Update-PfbTarget.Tests.ps1 | 105 ++++++++++++++++++++++++ 2 files changed, 166 insertions(+), 6 deletions(-) create mode 100644 Tests/Update-PfbTarget.Tests.ps1 diff --git a/Public/Replication/Update-PfbTarget.ps1 b/Public/Replication/Update-PfbTarget.ps1 index fc9dd75..217a8c6 100644 --- a/Public/Replication/Update-PfbTarget.ps1 +++ b/Public/Replication/Update-PfbTarget.ps1 @@ -7,12 +7,26 @@ function Update-PfbTarget { connected Pure Storage FlashBlade. The target can be identified by name or ID. Common updates include changing the address, credentials, or connection settings. Supports pipeline input and ShouldProcess for confirmation prompts. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the replication target to update. Accepts pipeline input by property name. .PARAMETER Id The ID of the replication target to update. + .PARAMETER Address + IP address or FQDN of the target system. + .PARAMETER CaCertificateGroup + 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. + .PARAMETER NewName + A user-specified name for the target. Named -NewName rather than -Name because -Name + already identifies which target to update. .PARAMETER Attributes - A hashtable of target attributes to modify. + A hashtable of target attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -27,12 +41,38 @@ function Update-PfbTarget { Update-PfbTarget -Id "10314f42-020d-7080-8013-000ddt400099" -Attributes @{ enabled = $true } Enables the replication target identified by the specified ID. + .EXAMPLE + Update-PfbTarget -Name "s3-target-aws" -Address "s3.us-east-1.amazonaws.com" -NewName "s3-target-renamed" + + Updates the address and renames the replication target using typed parameters. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$Address, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$CaCertificateGroup, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -43,9 +83,24 @@ function Update-PfbTarget { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Address')) { $body['address'] = $Address } + + # Constraint 8(a): ca_certificate_group is a SCALAR reference (item schema is + # {id, name, resource_type}), so the parameter is [string] and the projection is + # assigned inline as a name-reference hashtable. + if ($PSBoundParameters.ContainsKey('CaCertificateGroup')) { $body['ca_certificate_group'] = @{ name = $CaCertificateGroup } } + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + } + $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ShouldProcess($target, 'Update target')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'targets' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'targets' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbTarget.Tests.ps1 b/Tests/Update-PfbTarget.Tests.ps1 new file mode 100644 index 0000000..1e68356 --- /dev/null +++ b/Tests/Update-PfbTarget.Tests.ps1 @@ -0,0 +1,105 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbTarget - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends address as a body field' { + Update-PfbTarget -Name 's3-target-aws' -Address 's3.us-east-1.amazonaws.com' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'targets' -and + $QueryParams['names'] -eq 's3-target-aws' -and + $Body['address'] -eq 's3.us-east-1.amazonaws.com' + } + } + + It 'sends an EMPTY string for -Address "" rather than dropping the key' { + Update-PfbTarget -Name 's3-target-aws' -Address '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('address') -and $Body['address'] -eq '' + } + } + + It 'builds ca_certificate_group as a name-reference object (constraint 8a)' { + Update-PfbTarget -Name 's3-target-aws' -CaCertificateGroup 'my-certs' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['ca_certificate_group'].name -eq 'my-certs' + } + } + + It 'sends -NewName as the name body field (rename exception)' { + Update-PfbTarget -Name 's3-target-aws' -NewName 's3-target-renamed' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 's3-target-renamed' + } + } + + It 'has no -TargetName-shaped body parameter, only -NewName' { + (Get-Command Update-PfbTarget).Parameters.Keys | Should -Not -Contain 'TargetName' + } + + It 'omits every body key when no typed body parameter is supplied' { + Update-PfbTarget -Name 's3-target-aws' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the replication target by id when -Id is used' { + Update-PfbTarget -Id 'target-1' -Address 'new.example.com' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'target-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbTarget -Name 's3-target-aws' -Attributes @{ address = 'raw.example.com' } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['address'] -eq 'raw.example.com' + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbTarget -Name 's3-target-aws' -Address 'x.example.com' -Attributes @{ address = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'Address' } + @{ Parameter = 'CaCertificateGroup' } + @{ Parameter = 'NewName' } + ) { + $attrs = (Get-Command Update-PfbTarget).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From 154914111ebb553e080c00446a0ebd82cd473047 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:50:42 -0700 Subject: [PATCH 56/90] fix(node): correct wire keys and add typed query params to New-PfbNodeGroupNode (#31) --- Public/Node/New-PfbNodeGroupNode.ps1 | 36 +++++++++++++--- Tests/New-PfbNodeGroupNode.Tests.ps1 | 64 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 Tests/New-PfbNodeGroupNode.Tests.ps1 diff --git a/Public/Node/New-PfbNodeGroupNode.ps1 b/Public/Node/New-PfbNodeGroupNode.ps1 index d2689f7..aa9be9b 100644 --- a/Public/Node/New-PfbNodeGroupNode.ps1 +++ b/Public/Node/New-PfbNodeGroupNode.ps1 @@ -7,9 +7,15 @@ function New-PfbNodeGroupNode { group on the connected Pure Storage FlashBlade. This assigns the specified node to the target group for workload placement purposes. .PARAMETER GroupName - The name of the node group to add the node to. + The name of the node group to add the node to. Sent as the `node_group_names` query + parameter. + .PARAMETER GroupId + The ID of the node group to add the node to. Sent as the `node_group_ids` query + parameter. .PARAMETER MemberName - The name of the node to add to the group. + The name of the node to add to the group. Sent as the `node_names` query parameter. + .PARAMETER MemberId + The ID of the node to add to the group. Sent as the `node_ids` query parameter. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -24,21 +30,37 @@ function New-PfbNodeGroupNode { New-PfbNodeGroupNode -GroupName "default-group" -MemberName "CH1.FB3" Adds node CH1.FB3 to the default-group. + .EXAMPLE + New-PfbNodeGroupNode -GroupId "10314f42-020d-7080-8013-000ddt400020" -MemberId "10314f42-020d-7080-8013-000ddt400005" + + Adds the node identified by ID to the node group identified by ID. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( - [Parameter(Mandatory)] [string]$GroupName, - [Parameter(Mandatory)] [string]$MemberName, + # -GroupName/-GroupId and -MemberName/-MemberId are plain optional parameters rather + # than parameter sets -- see New-PfbNetworkInterfaceTlsPolicy.ps1 for the identical + # shape and rationale (no request body here to multiply a selector axis against). + [Parameter()] [string]$GroupName, + [Parameter()] [string]$GroupId, + [Parameter()] [string]$MemberName, + [Parameter()] [string]$MemberId, [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) + # Wire-correctness fix: POST /node-groups/nodes documents node_group_ids/node_group_names + # and node_ids/node_names. This cmdlet previously sent group_names/member_names, which the + # array silently ignored -- neither -GroupName nor -MemberName had any effect. $queryParams = @{} - $queryParams['group_names'] = $GroupName - $queryParams['member_names'] = $MemberName + if ($PSBoundParameters.ContainsKey('GroupName')) { $queryParams['node_group_names'] = $GroupName } + if ($PSBoundParameters.ContainsKey('GroupId')) { $queryParams['node_group_ids'] = $GroupId } + if ($PSBoundParameters.ContainsKey('MemberName')) { $queryParams['node_names'] = $MemberName } + if ($PSBoundParameters.ContainsKey('MemberId')) { $queryParams['node_ids'] = $MemberId } - $target = "${GroupName}:${MemberName}" + $groupTarget = if ($PSBoundParameters.ContainsKey('GroupName')) { $GroupName } else { $GroupId } + $memberTarget = if ($PSBoundParameters.ContainsKey('MemberName')) { $MemberName } else { $MemberId } + $target = "${groupTarget}:${memberTarget}" if ($PSCmdlet.ShouldProcess($target, 'Add node to node group')) { Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'node-groups/nodes' -QueryParams $queryParams diff --git a/Tests/New-PfbNodeGroupNode.Tests.ps1 b/Tests/New-PfbNodeGroupNode.Tests.ps1 new file mode 100644 index 0000000..f36ecb3 --- /dev/null +++ b/Tests/New-PfbNodeGroupNode.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbNodeGroupNode - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'wire-key correctness fix: POST /node-groups/nodes documents node_group_*/node_*, not group_*/member_*' { + It 'sends -GroupName as node_group_names, NOT group_names' { + New-PfbNodeGroupNode -GroupName 'analytics-group' -MemberName 'CH1.FB1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'node-groups/nodes' -and + $QueryParams['node_group_names'] -eq 'analytics-group' -and + -not $QueryParams.ContainsKey('group_names') + } + } + + It 'sends -MemberName as node_names, NOT member_names' { + New-PfbNodeGroupNode -GroupName 'analytics-group' -MemberName 'CH1.FB1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['node_names'] -eq 'CH1.FB1' -and + -not $QueryParams.ContainsKey('member_names') + } + } + } + + Context '-GroupId / -MemberId query parameters (missing query params: node_group_ids, node_ids)' { + It 'sends -GroupId as node_group_ids' { + New-PfbNodeGroupNode -GroupId 'group-1' -MemberName 'CH1.FB1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['node_group_ids'] -eq 'group-1' -and -not $QueryParams.ContainsKey('node_group_names') + } + } + + It 'sends -MemberId as node_ids' { + New-PfbNodeGroupNode -GroupName 'analytics-group' -MemberId 'node-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['node_ids'] -eq 'node-1' -and -not $QueryParams.ContainsKey('node_names') + } + } + + It 'can select both group and node purely by id' { + New-PfbNodeGroupNode -GroupId 'group-1' -MemberId 'node-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['node_group_ids'] -eq 'group-1' -and $QueryParams['node_ids'] -eq 'node-1' + } + } + } +} From 9a01812d3c0e92d5119c8d5fa53346ac45a65704 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:50:57 -0700 Subject: [PATCH 57/90] feat(policy): add typed body params to New-PfbSmbShareRule (#31) --- Public/Policy/New-PfbSmbShareRule.ps1 | 62 +++++++++++++++++-- Tests/New-PfbSmbShareRule.Tests.ps1 | 86 +++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 Tests/New-PfbSmbShareRule.Tests.ps1 diff --git a/Public/Policy/New-PfbSmbShareRule.ps1 b/Public/Policy/New-PfbSmbShareRule.ps1 index 2a19603..e3d78e1 100644 --- a/Public/Policy/New-PfbSmbShareRule.ps1 +++ b/Public/Policy/New-PfbSmbShareRule.ps1 @@ -5,14 +5,32 @@ function New-PfbSmbShareRule { .DESCRIPTION Adds a new rule to an SMB share policy. Rules define share-level access control for SMB shares including principal, permission, and change settings. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER PolicyName The name of the SMB share policy to add the rule to. .PARAMETER PolicyId The ID of the SMB share policy to add the rule to. + .PARAMETER Change + The state of the principal's Change access permission. + .PARAMETER FullControl + The state of the principal's Full Control access permission. + .PARAMETER Principal + The user or group who is the subject of this rule, and optionally their domain. + .PARAMETER Read + The state of the principal's Read access permission. .PARAMETER Attributes A hashtable defining the rule properties (principal, change, read, full_control, etc.). + Mutually exclusive with the individual typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. + .EXAMPLE + New-PfbSmbShareRule -PolicyName "smb-share-01" -Principal "Everyone" -Change "allow" + + Creates a new rule granting change access to everyone using typed parameters. .EXAMPLE New-PfbSmbShareRule -PolicyName "smb-share-01" -Attributes @{ principal = "Everyone"; change = "allow" } @@ -22,15 +40,38 @@ function New-PfbSmbShareRule { Creates a rule granting full control to a domain group. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByPolicyNameIndividual')] param( - [Parameter(ParameterSetName = 'ByPolicyName', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual', Mandatory, Position = 0)] + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory, Position = 0)] [string]$PolicyName, - [Parameter(ParameterSetName = 'ByPolicyId', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [string]$PolicyId, - [Parameter(Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('allow', 'deny')] + [string]$Change, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('allow', 'deny')] + [string]$FullControl, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [string]$Principal, + + [Parameter(ParameterSetName = 'ByPolicyNameIndividual')] + [Parameter(ParameterSetName = 'ByPolicyIdIndividual')] + [ValidateSet('allow', 'deny')] + [string]$Read, + + [Parameter(ParameterSetName = 'ByPolicyNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByPolicyIdAttributes', Mandatory)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array @@ -42,9 +83,20 @@ function New-PfbSmbShareRule { if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + $body = @{} + if ($PSBoundParameters.ContainsKey('Change')) { $body['change'] = $Change } + if ($PSBoundParameters.ContainsKey('FullControl')) { $body['full_control'] = $FullControl } + if ($PSBoundParameters.ContainsKey('Principal')) { $body['principal'] = $Principal } + if ($PSBoundParameters.ContainsKey('Read')) { $body['read'] = $Read } + } + $target = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess($target, 'Create SMB share rule')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'smb-share-policies/rules' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'smb-share-policies/rules' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbSmbShareRule.Tests.ps1 b/Tests/New-PfbSmbShareRule.Tests.ps1 new file mode 100644 index 0000000..083cc84 --- /dev/null +++ b/Tests/New-PfbSmbShareRule.Tests.ps1 @@ -0,0 +1,86 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbSmbShareRule - typed body params (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing -Attributes path still works' { + It 'POSTs with -Attributes hashtable unchanged' { + New-PfbSmbShareRule -PolicyName 'smb-share-01' -Attributes @{ principal = 'Everyone'; change = 'allow' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'smb-share-policies/rules' -and + $QueryParams['policy_names'] -eq 'smb-share-01' -and + $Body['principal'] -eq 'Everyone' -and $Body['change'] -eq 'allow' + } + } + } + + Context 'typed body parameters' { + It 'sends -Principal as principal' { + New-PfbSmbShareRule -PolicyName 'p1' -Principal 'DOMAIN\Admins' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['principal'] -eq 'DOMAIN\Admins' } + } + + It 'sends -Change as change' { + New-PfbSmbShareRule -PolicyName 'p1' -Change 'allow' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['change'] -eq 'allow' } + } + + It 'rejects a -Change value outside the enum' { + { New-PfbSmbShareRule -PolicyName 'p1' -Change 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -FullControl as full_control' { + New-PfbSmbShareRule -PolicyName 'p1' -FullControl 'deny' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['full_control'] -eq 'deny' } + } + + It 'rejects a -FullControl value outside the enum' { + { New-PfbSmbShareRule -PolicyName 'p1' -FullControl 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'sends -Read as read' { + New-PfbSmbShareRule -PolicyName 'p1' -Read 'allow' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body['read'] -eq 'allow' } + } + + It 'rejects a -Read value outside the enum' { + { New-PfbSmbShareRule -PolicyName 'p1' -Read 'bogus' -Confirm:$false -Array $fakeArray } | Should -Throw + } + + It 'omits fields that were not supplied' { + New-PfbSmbShareRule -PolicyName 'p1' -Principal 'x' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('change') -and -not $Body.ContainsKey('full_control') -and -not $Body.ContainsKey('read') + } + } + } + + Context 'parameter set mutual exclusion' { + It 'rejects mixing a typed body parameter with -Attributes' { + { New-PfbSmbShareRule -PolicyName 'p1' -Principal 'x' -Attributes @{ principal = 'x' } -Confirm:$false -Array $fakeArray } | + Should -Throw '*Parameter set cannot be resolved*' + } + } + + Context 'ById selector still works' { + It 'supports -PolicyId with typed params' { + New-PfbSmbShareRule -PolicyId 'pid-1' -Principal 'x' -Confirm:$false -Array $fakeArray + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'pid-1' -and $Body['principal'] -eq 'x' + } + } + } +} From e5125c74a031689be0d2a0afa0770f5beecaee6b Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:52:33 -0700 Subject: [PATCH 58/90] fix(replication): correct member_names bug and add query params to New-PfbFileSystemReplicaLinkPolicy (#31) --- .../New-PfbFileSystemReplicaLinkPolicy.ps1 | 48 +++++-- ...w-PfbFileSystemReplicaLinkPolicy.Tests.ps1 | 123 ++++++++++++++++++ 2 files changed, 159 insertions(+), 12 deletions(-) create mode 100644 Tests/New-PfbFileSystemReplicaLinkPolicy.Tests.ps1 diff --git a/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 b/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 index bd6e92d..275a3e0 100644 --- a/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 +++ b/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 @@ -5,44 +5,68 @@ function New-PfbFileSystemReplicaLinkPolicy { .DESCRIPTION Associates an existing policy with a file system replica link by specifying both the policy and replica link (member) names or IDs. + + `POST /file-system-replica-links/policies` accepts `member_ids` but has no + `member_names` query parameter at all -- it identifies the local side of the link by + name via `local_file_system_names` instead. The cmdlet previously sent `-MemberName` as + `member_names`, which this endpoint silently ignores, so name-based member selection + could never have worked. -LocalFileSystemName is the corrected parameter; -MemberName + is kept as a backward-compatible alias of it. .PARAMETER PolicyName The name of the policy to attach. .PARAMETER PolicyId The ID of the policy to attach. - .PARAMETER MemberName - The name of the replica link to attach the policy to. + .PARAMETER LocalFileSystemName + The name of the local file system side of the replica link to attach the policy to. + Sent as the `local_file_system_names` query parameter. Also accepts the alias + -MemberName. + .PARAMETER LocalFileSystemId + The ID of the local file system side of the replica link to attach the policy to. .PARAMETER MemberId - The ID of the replica link to attach the policy to. + The ID of the replica link member to attach the policy to. + .PARAMETER RemoteId + The ID of the remote array associated with the replica link. + .PARAMETER RemoteName + The name of the remote array associated with the replica link. .PARAMETER Array The FlashBlade connection object. If not specified, uses the default connection. .EXAMPLE - New-PfbFileSystemReplicaLinkPolicy -PolicyName "repl-daily" -MemberName "fs01" - Attaches the 'repl-daily' policy to the replica link for 'fs01'. + New-PfbFileSystemReplicaLinkPolicy -PolicyName "repl-daily" -LocalFileSystemName "fs01" + Attaches the 'repl-daily' policy to the replica link for local file system 'fs01'. .EXAMPLE New-PfbFileSystemReplicaLinkPolicy -PolicyId "abc-123" -MemberId "def-456" Attaches a policy to a replica link using IDs. .EXAMPLE - New-PfbFileSystemReplicaLinkPolicy -PolicyName "repl-hourly" -MemberName "fs02" -Confirm:$false + New-PfbFileSystemReplicaLinkPolicy -PolicyName "repl-hourly" -LocalFileSystemName "fs02" -Confirm:$false Attaches the policy without prompting for confirmation. + .EXAMPLE + New-PfbFileSystemReplicaLinkPolicy -PolicyName "repl-daily" -LocalFileSystemName "fs01" -RemoteName "remote-fb" + Attaches the policy, scoping the request to the replica link whose remote array is "remote-fb". #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter()] [string]$PolicyName, [Parameter()] [string]$PolicyId, - [Parameter()] [string]$MemberName, + [Parameter()] [Alias('MemberName')] [string]$LocalFileSystemName, + [Parameter()] [string]$LocalFileSystemId, [Parameter()] [string]$MemberId, + [Parameter()] [string]$RemoteId, + [Parameter()] [string]$RemoteName, [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) $queryParams = @{} - if ($PolicyName) { $queryParams['policy_names'] = $PolicyName } - if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } - if ($MemberName) { $queryParams['member_names'] = $MemberName } - if ($MemberId) { $queryParams['member_ids'] = $MemberId } + if ($PSBoundParameters.ContainsKey('PolicyName')) { $queryParams['policy_names'] = $PolicyName } + if ($PSBoundParameters.ContainsKey('PolicyId')) { $queryParams['policy_ids'] = $PolicyId } + if ($PSBoundParameters.ContainsKey('LocalFileSystemName')) { $queryParams['local_file_system_names'] = $LocalFileSystemName } + if ($PSBoundParameters.ContainsKey('LocalFileSystemId')) { $queryParams['local_file_system_ids'] = $LocalFileSystemId } + if ($PSBoundParameters.ContainsKey('MemberId')) { $queryParams['member_ids'] = $MemberId } + if ($PSBoundParameters.ContainsKey('RemoteId')) { $queryParams['remote_ids'] = $RemoteId } + if ($PSBoundParameters.ContainsKey('RemoteName')) { $queryParams['remote_names'] = $RemoteName } - $target = if ($MemberName) { $MemberName } else { $MemberId } + $target = if ($LocalFileSystemName) { $LocalFileSystemName } elseif ($LocalFileSystemId) { $LocalFileSystemId } else { $MemberId } $policy = if ($PolicyName) { $PolicyName } else { $PolicyId } if ($PSCmdlet.ShouldProcess("$target", "Attach policy '$policy' to replica link")) { diff --git a/Tests/New-PfbFileSystemReplicaLinkPolicy.Tests.ps1 b/Tests/New-PfbFileSystemReplicaLinkPolicy.Tests.ps1 new file mode 100644 index 0000000..5174d74 --- /dev/null +++ b/Tests/New-PfbFileSystemReplicaLinkPolicy.Tests.ps1 @@ -0,0 +1,123 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbFileSystemReplicaLinkPolicy - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'existing selectors (converted to ContainsKey)' { + It 'sends policy_names and member_ids' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -MemberId 'member-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'file-system-replica-links/policies' -and + $QueryParams['policy_names'] -eq 'repl-daily' -and + $QueryParams['member_ids'] -eq 'member-1' + } + } + + It 'sends policy_ids' { + New-PfbFileSystemReplicaLinkPolicy -PolicyId 'policy-1' -MemberId 'member-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['policy_ids'] -eq 'policy-1' + } + } + } + + Context 'member_names does not exist on this endpoint (confirmed bug fix)' { + It 'never sends a member_names query parameter (regression: POST /file-system-replica-links/policies has no member_names)' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -LocalFileSystemName 'fs01' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('member_names') -and + $QueryParams['local_file_system_names'] -eq 'fs01' + } + } + + It 'accepts -MemberName as a backward-compatible alias of -LocalFileSystemName' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -MemberName 'fs01' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['local_file_system_names'] -eq 'fs01' -and + -not $QueryParams.ContainsKey('member_names') + } + } + + It 'exposes no separate -MemberName parameter (alias only)' { + $params = (Get-Command New-PfbFileSystemReplicaLinkPolicy).Parameters + $params.Keys | Should -Not -Contain 'MemberName' + $params['LocalFileSystemName'].Aliases | Should -Contain 'MemberName' + } + } + + Context 'new query parameters' { + It 'sends local_file_system_ids' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -LocalFileSystemId 'fs-id-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['local_file_system_ids'] -eq 'fs-id-1' + } + } + + It 'sends remote_ids' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -RemoteId 'remote-1' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['remote_ids'] -eq 'remote-1' + } + } + + It 'sends remote_names' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -RemoteName 'remote-array' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['remote_names'] -eq 'remote-array' + } + } + + It 'omits all optional query parameters when not supplied' { + New-PfbFileSystemReplicaLinkPolicy -PolicyName 'repl-daily' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('local_file_system_ids') -and + -not $QueryParams.ContainsKey('local_file_system_names') -and + -not $QueryParams.ContainsKey('remote_ids') -and + -not $QueryParams.ContainsKey('remote_names') + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'PolicyName' } + @{ Parameter = 'PolicyId' } + @{ Parameter = 'MemberId' } + @{ Parameter = 'LocalFileSystemName' } + @{ Parameter = 'LocalFileSystemId' } + @{ Parameter = 'RemoteId' } + @{ Parameter = 'RemoteName' } + ) { + $attrs = (Get-Command New-PfbFileSystemReplicaLinkPolicy).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From 5cc9fd75ad41b870a29035a3aca6c876eb54c55a Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:53:36 -0700 Subject: [PATCH 59/90] feat(node): add typed body params to Update-PfbNode (#31) --- Public/Node/Update-PfbNode.ps1 | 79 +++++++++++++++++++++--- Tests/Update-PfbNode.Tests.ps1 | 107 +++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+), 7 deletions(-) create mode 100644 Tests/Update-PfbNode.Tests.ps1 diff --git a/Public/Node/Update-PfbNode.ps1 b/Public/Node/Update-PfbNode.ps1 index 105826e..c8f06c6 100644 --- a/Public/Node/Update-PfbNode.ps1 +++ b/Public/Node/Update-PfbNode.ps1 @@ -3,15 +3,32 @@ function Update-PfbNode { .SYNOPSIS Updates a node on a FlashBlade array. .DESCRIPTION - The Update-PfbNode cmdlet modifies attributes of a node on the connected Pure Storage + The Update-PfbNode cmdlet modifies attributes of a node on the connected Everpure FlashBlade. The node can be identified by name or ID. Supports ShouldProcess for -WhatIf and -Confirm. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the node to update. .PARAMETER Id The ID of the node to update. + .PARAMETER ManagementAddress + The control IP address of the node. A connection is made to this address to get + information on the node, such as the data addresses. + .PARAMETER NewName + A new user-specified name for the node. + .PARAMETER NodeKey + A key used to bootstrap a mTLS connection with the node being connected to. Cannot be + specified together with -ManagementAddress or -SerialNumber. + .PARAMETER SerialNumber + The serial number of the node. If the given serial number does not match the serial + number of the node, the request fails. .PARAMETER Attributes - A hashtable of node attributes to modify. + A hashtable of node attributes to modify. Mutually exclusive with the individual typed + parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE @@ -26,12 +43,42 @@ function Update-PfbNode { Update-PfbNode -Name "CH1.FB1" -Attributes @{ identify_enabled = $true } -WhatIf Shows what would happen without applying the change. + .EXAMPLE + Update-PfbNode -Name "CH1.FB1" -ManagementAddress "10.0.0.5" + + Updates the node's management address using a typed parameter. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$ManagementAddress, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NodeKey, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$SerialNumber, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,8 +89,26 @@ function Update-PfbNode { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } $target = if ($Name) { $Name } else { $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, + # never by truthiness -- see Update-PfbAdmin.ps1 for the full rationale. + $body = @{} + if ($PSBoundParameters.ContainsKey('ManagementAddress')) { $body['management_address'] = $ManagementAddress } + + # Exception: the body field is literally `name` (renames the resource), so the + # parameter is -NewName, never -NodeName -- see Update-PfbWorkload / Update-PfbDataEvictionPolicy. + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + + if ($PSBoundParameters.ContainsKey('NodeKey')) { $body['node_key'] = $NodeKey } + if ($PSBoundParameters.ContainsKey('SerialNumber')) { $body['serial_number'] = $SerialNumber } + } + if ($PSCmdlet.ShouldProcess($target, 'Update node')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'nodes' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'nodes' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbNode.Tests.ps1 b/Tests/Update-PfbNode.Tests.ps1 new file mode 100644 index 0000000..f925c77 --- /dev/null +++ b/Tests/Update-PfbNode.Tests.ps1 @@ -0,0 +1,107 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbNode - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends management_address and serial_number as body fields' { + Update-PfbNode -Name 'CH1.FB1' -ManagementAddress '10.0.0.5' -SerialNumber 'SN12345' ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'nodes' -and + $QueryParams['names'] -eq 'CH1.FB1' -and + $Body['management_address'] -eq '10.0.0.5' -and + $Body['serial_number'] -eq 'SN12345' + } + } + + It 'sends node_key as a body field' { + Update-PfbNode -Name 'CH1.FB1' -NodeKey 'bootstrap-key' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['node_key'] -eq 'bootstrap-key' + } + } + + It 'sends -NewName as the name body field (exception: name -> -NewName)' { + Update-PfbNode -Name 'CH1.FB1' -NewName 'CH1.FB1-renamed' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'CH1.FB1-renamed' + } + } + + It 'sends an EMPTY string for -ManagementAddress "" rather than dropping the key' { + Update-PfbNode -Name 'CH1.FB1' -ManagementAddress '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('management_address') -and $Body['management_address'] -eq '' + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbNode -Name 'CH1.FB1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the node by id when -Id is used' { + Update-PfbNode -Id 'node-1' -NodeKey 'k' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'node-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbNode -Name 'CH1.FB1' -Attributes @{ identify_enabled = $true } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['identify_enabled'] -eq $true + } + } + + It 'rejects -Attributes combined with a typed parameter at bind time' { + { Update-PfbNode -Name 'CH1.FB1' -NodeKey 'k' -Attributes @{ node_key = 'other' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on any new parameter (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'ManagementAddress' } + @{ Parameter = 'NewName' } + @{ Parameter = 'NodeKey' } + @{ Parameter = 'SerialNumber' } + ) { + $attrs = (Get-Command Update-PfbNode).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes every settable body field the endpoint accepts' { + $keys = (Get-Command Update-PfbNode).Parameters.Keys + foreach ($p in 'ManagementAddress','NewName','NodeKey','SerialNumber') { + $keys | Should -Contain $p + } + } + } +} From 4fa33d41842b1742155dabe6035b1d2687e1408f Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:56:05 -0700 Subject: [PATCH 60/90] fix(replication): correct wire contract and add typed params to New-PfbFleetMember (#31) --- Public/Replication/New-PfbFleetMember.ps1 | 62 ++++++++++---- Tests/New-PfbFleetMember.Tests.ps1 | 100 ++++++++++++++++++++++ 2 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 Tests/New-PfbFleetMember.Tests.ps1 diff --git a/Public/Replication/New-PfbFleetMember.ps1 b/Public/Replication/New-PfbFleetMember.ps1 index d27ec3c..8605e28 100644 --- a/Public/Replication/New-PfbFleetMember.ps1 +++ b/Public/Replication/New-PfbFleetMember.ps1 @@ -4,42 +4,68 @@ function New-PfbFleetMember { Adds a member to a fleet on a FlashBlade array. .DESCRIPTION The New-PfbFleetMember cmdlet adds an array as a member of a fleet on the connected - Pure Storage FlashBlade. Both the fleet name and the member name must be specified. + Pure Storage FlashBlade. Per the FlashBlade REST API spec, `POST /fleets/members` must + be called from the array that is joining the fleet, and it identifies the fleet via a + `fleet_ids`/`fleet_names` query parameter plus a request body carrying the fleet key + (generated on any array already in the fleet) and a reference to the joining array + itself. + + CONFIRMED WIRE-CONTRACT BUG (issue #38): this cmdlet previously sent `fleet_names` and + `member_names` as bare query parameters with no request body at all. `member_names` is + not a valid query parameter for this endpoint (only `fleet_ids`/`fleet_names` are, per + the OpenAPI spec's parameter list for POST /fleets/members) and there was no way to + supply the required fleet key or self-identification, so this cmdlet could never have + succeeded against a real array. -MemberName has been removed; -Members now exposes the + actual request body so a caller can supply the correct shape, e.g.: + `-Members @{ key = $fleetKey; member = @{ id = $thisArrayId } }`. + + The fix is verified against the OpenAPI spec (FleetMemberPost schema and the POST + operation's parameter list) but has NOT been live-tested against a real fleet -- that + happens in a later task against a lab array. See docs in issue #38's + issue38-fleetmember-bug-comment.md for the full context. .PARAMETER FleetName - The fleet name to add the member to. - .PARAMETER MemberName - The member array name to add to the fleet. + The fleet name to add the member to. Sent as the `fleet_names` query parameter. + .PARAMETER FleetId + The fleet ID to add the member to. Sent as the `fleet_ids` query parameter. + .PARAMETER Members + Info about the members being added to the fleet, as a hashtable or array of hashtables + -- for example @{ key = ""; member = @{ id = "" } }. + The `key` is the fleet key generated on any array already in the fleet; `member` is a + reference to the array joining the fleet. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - New-PfbFleetMember -FleetName "fleet-prod" -MemberName "array-dc2" + New-PfbFleetMember -FleetName "fleet-prod" -Members @{ key = "1fc6297a-5183-4b7a-8d58-0182af1a2b64"; member = @{ id = "10314f42-020d-7080-8013-000ddt400012" } } - Adds "array-dc2" as a member of "fleet-prod". + Adds this array to "fleet-prod" using the fleet key generated by an existing fleet member. .EXAMPLE - New-PfbFleetMember -FleetName "fleet-dr" -MemberName "array-dc3" -WhatIf + New-PfbFleetMember -FleetId "10314f42-020d-7080-8013-000ddt400099" -Members @{ key = "key-456"; member = @{ id = "this-array-id" } } -WhatIf - Shows what would happen without actually adding the member. - .EXAMPLE - New-PfbFleetMember -FleetName "fleet-prod" -MemberName "array-dc4" -Confirm:$false - - Adds the member without prompting for confirmation. + Shows what would happen without actually adding the member, identifying the fleet by ID. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( - [Parameter(Mandatory)] [string]$FleetName, - [Parameter(Mandatory)] [string]$MemberName, + [Parameter()] [string]$FleetName, + [Parameter()] [string]$FleetId, + [Parameter()] [hashtable[]]$Members, [Parameter()] [PSCustomObject]$Array ) Assert-PfbConnection -Array ([ref]$Array) $queryParams = @{} - $queryParams['fleet_names'] = $FleetName - $queryParams['member_names'] = $MemberName + if ($PSBoundParameters.ContainsKey('FleetName')) { $queryParams['fleet_names'] = $FleetName } + if ($PSBoundParameters.ContainsKey('FleetId')) { $queryParams['fleet_ids'] = $FleetId } + + # Constraint 8(c): each members[] item is {key, member}, where `key` is a plain string + # outside {id, name, resource_type} -- this makes the array COMPOSITE, not an array of + # references, so it is passed straight through rather than projected into @{ name = ... }. + $body = @{} + if ($PSBoundParameters.ContainsKey('Members')) { $body['members'] = @($Members) } - $target = "${FleetName}:${MemberName}" + $target = if ($FleetName) { $FleetName } elseif ($FleetId) { $FleetId } else { 'fleet member' } if ($PSCmdlet.ShouldProcess($target, 'Add fleet member')) { - Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fleets/members' -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'fleets/members' -Body $body -QueryParams $queryParams } } diff --git a/Tests/New-PfbFleetMember.Tests.ps1 b/Tests/New-PfbFleetMember.Tests.ps1 new file mode 100644 index 0000000..ec6c346 --- /dev/null +++ b/Tests/New-PfbFleetMember.Tests.ps1 @@ -0,0 +1,100 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'New-PfbFleetMember - typed body/query parameters (#31, confirmed wire-contract bug)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'confirmed bug (issue #38): POST /fleets/members takes fleet_ids/fleet_names query + a members body, NOT member_names query' { + It 'sends the fleet key and member self-reference in the request body, per the OpenAPI spec (FleetMemberPost)' { + New-PfbFleetMember -FleetName 'fleet-prod' ` + -Members @{ key = 'fleet-key-abc'; member = @{ id = 'this-array-id' } } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'POST' -and $Endpoint -eq 'fleets/members' -and + $QueryParams['fleet_names'] -eq 'fleet-prod' -and + @($Body['members']).Count -eq 1 -and + @($Body['members'])[0]['key'] -eq 'fleet-key-abc' -and + @($Body['members'])[0]['member']['id'] -eq 'this-array-id' + } + } + + It 'never sends a member_names query parameter (regression: POST /fleets/members has no member_names -- confirmed via OpenAPI spec, the endpoint could never have worked with the old shape)' { + New-PfbFleetMember -FleetName 'fleet-prod' ` + -Members @{ key = 'fleet-key-abc'; member = @{ id = 'this-array-id' } } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('member_names') -and -not $QueryParams.ContainsKey('member_ids') + } + } + + It 'has no -MemberName parameter (removed: member_names is not a valid query parameter for POST /fleets/members)' { + (Get-Command New-PfbFleetMember).Parameters.Keys | Should -Not -Contain 'MemberName' + } + } + + Context 'fleet selector' { + It 'sends fleet_ids when -FleetId is used (new query parameter)' { + New-PfbFleetMember -FleetId 'fleet-1' ` + -Members @{ key = 'fleet-key-abc'; member = @{ id = 'this-array-id' } } ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['fleet_ids'] -eq 'fleet-1' -and -not $QueryParams.ContainsKey('fleet_names') + } + } + + It 'omits fleet_names/fleet_ids entirely when neither is supplied (constraint 19, no mandatory throw)' { + New-PfbFleetMember -Members @{ key = 'k'; member = @{ id = 'i' } } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('fleet_names') -and -not $QueryParams.ContainsKey('fleet_ids') + } + } + } + + Context '-Members composite array (constraint 8c: item schema has `key`, outside {id,name,resource_type})' { + It 'accepts multiple member entries' { + New-PfbFleetMember -FleetName 'fleet-prod' -Members @( + @{ key = 'k1'; member = @{ id = 'a1' } }, + @{ key = 'k1'; member = @{ id = 'a2' } } + ) -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + @($Body['members']).Count -eq 2 + } + } + + It 'omits the members body key entirely when not supplied (empty write is permitted, constraint 19)' { + New-PfbFleetMember -FleetName 'fleet-prod' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $Body.ContainsKey('members') + } + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on - (constraint 3, no spec enum)' -ForEach @( + @{ Parameter = 'FleetName' } + @{ Parameter = 'FleetId' } + @{ Parameter = 'Members' } + ) { + $attrs = (Get-Command New-PfbFleetMember).Parameters[$Parameter].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + } +} From 8f7696634dba809379bb39c363be43e228fa6b7b Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 09:56:28 -0700 Subject: [PATCH 61/90] feat(node): add typed body params to Update-PfbNodeGroup (#31) --- Public/Node/Update-PfbNodeGroup.ps1 | 58 +++++++++++++++++---- Tests/Update-PfbNodeGroup.Tests.ps1 | 81 +++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 9 deletions(-) create mode 100644 Tests/Update-PfbNodeGroup.Tests.ps1 diff --git a/Public/Node/Update-PfbNodeGroup.ps1 b/Public/Node/Update-PfbNodeGroup.ps1 index 92b5e10..d343970 100644 --- a/Public/Node/Update-PfbNodeGroup.ps1 +++ b/Public/Node/Update-PfbNodeGroup.ps1 @@ -4,20 +4,28 @@ function Update-PfbNodeGroup { Updates an existing node group on a FlashBlade array. .DESCRIPTION The Update-PfbNodeGroup cmdlet modifies attributes of an existing node group on the - connected Pure Storage FlashBlade. The group can be identified by name or ID. - Supports ShouldProcess for -WhatIf and -Confirm. + connected Everpure FlashBlade. The group can be identified by name or ID. Supports + ShouldProcess for -WhatIf and -Confirm. + + The individual typed parameters and the raw -Attributes hashtable are mutually + exclusive: they live in separate parameter sets, so PowerShell rejects a mixed + invocation at bind time rather than letting -Attributes silently override an + explicitly supplied value. .PARAMETER Name The name of the node group to update. .PARAMETER Id The ID of the node group to update. + .PARAMETER NewName + A new user-specified name for the node group. .PARAMETER Attributes - A hashtable of node group attributes to modify. + A hashtable of node group attributes to modify. Mutually exclusive with the individual + typed parameters above. .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE Update-PfbNodeGroup -Name "analytics-group" -Attributes @{ name = 'analytics-primary' } - Renames the node group. + Renames the node group using the raw -Attributes hashtable. .EXAMPLE Update-PfbNodeGroup -Id "10314f42-020d-7080-8013-000ddt400020" -Attributes @{ priority = 'low' } @@ -26,12 +34,33 @@ function Update-PfbNodeGroup { Update-PfbNodeGroup -Name "test-group" -Attributes @{ name = 'prod-group' } -WhatIf Shows what would happen without applying the change. + .EXAMPLE + Update-PfbNodeGroup -Name "analytics-group" -NewName "analytics-primary" + + Renames the node group using the typed -NewName parameter. #> - [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', + DefaultParameterSetName = 'ByNameIndividual')] param( - [Parameter(ParameterSetName = 'ByName', Mandatory, ValueFromPipelineByPropertyName)] [string]$Name, - [Parameter(ParameterSetName = 'ById', Mandatory)] [string]$Id, - [Parameter(Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'ByNameIndividual', Mandatory, ValueFromPipelineByPropertyName)] + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory, ValueFromPipelineByPropertyName)] + [string]$Name, + + [Parameter(ParameterSetName = 'ByIdIndividual', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [string]$Id, + + # Exception: the body field is literally `name` (renames the resource), so the + # parameter is -NewName, never -NodeGroupName -- see Update-PfbWorkload / + # Update-PfbDataEvictionPolicy. + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string]$NewName, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) begin { @@ -42,8 +71,19 @@ function Update-PfbNodeGroup { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } $target = if ($Name) { $Name } else { $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # EVERY value-carrying parameter is guarded by $PSBoundParameters.ContainsKey, + # never by truthiness -- see Update-PfbAdmin.ps1 for the full rationale. + $body = @{} + if ($PSBoundParameters.ContainsKey('NewName')) { $body['name'] = $NewName } + } + if ($PSCmdlet.ShouldProcess($target, 'Update node group')) { - Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'node-groups' -Body $Attributes -QueryParams $queryParams + Invoke-PfbApiRequest -Array $Array -Method PATCH -Endpoint 'node-groups' -Body $body -QueryParams $queryParams } } } diff --git a/Tests/Update-PfbNodeGroup.Tests.ps1 b/Tests/Update-PfbNodeGroup.Tests.ps1 new file mode 100644 index 0000000..291fe6e --- /dev/null +++ b/Tests/Update-PfbNodeGroup.Tests.ps1 @@ -0,0 +1,81 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $moduleRoot = Split-Path -Parent $PSScriptRoot + $manifest = Join-Path $moduleRoot 'PureStorageFlashBladePowerShell.psd1' + Import-Module $manifest -Force + + $script:fakeArray = [PSCustomObject]@{ Endpoint = 'fb.example.test'; ApiVersion = '2.0'; AuthToken = 'x' } +} + +Describe 'Update-PfbNodeGroup - typed body parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + Context 'typed parameters build the body' { + It 'sends -NewName as the name body field (exception: name -> -NewName)' { + Update-PfbNodeGroup -Name 'analytics-group' -NewName 'analytics-primary' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Method -eq 'PATCH' -and $Endpoint -eq 'node-groups' -and + $QueryParams['names'] -eq 'analytics-group' -and + $Body['name'] -eq 'analytics-primary' + } + } + + It 'sends an EMPTY string for -NewName "" rather than dropping the key' { + Update-PfbNodeGroup -Name 'analytics-group' -NewName '' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('name') -and $Body['name'] -eq '' + } + } + + It 'omits every body key when no typed body parameter is supplied (constraint 19, empty body permitted)' { + Update-PfbNodeGroup -Name 'analytics-group' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + + It 'targets the node group by id when -Id is used' { + Update-PfbNodeGroup -Id 'group-1' -NewName 'renamed' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['ids'] -eq 'group-1' -and -not $QueryParams.ContainsKey('names') + } + } + } + + Context '-Attributes remains supported and is mutually exclusive' { + It 'still sends a raw -Attributes body' { + Update-PfbNodeGroup -Name 'analytics-group' -Attributes @{ name = 'raw-rename' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['name'] -eq 'raw-rename' + } + } + + It 'rejects -Attributes combined with -NewName at bind time' { + { Update-PfbNodeGroup -Name 'analytics-group' -NewName 'x' -Attributes @{ name = 'y' } ` + -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' + } + } + + Context 'constraint compliance' { + It 'puts no ValidateSet on -NewName (constraint 3, no spec enum)' { + $attrs = (Get-Command Update-PfbNodeGroup).Parameters['NewName'].Attributes + @($attrs | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).Count | + Should -Be 0 + } + + It 'exposes the settable body field the endpoint accepts' { + (Get-Command Update-PfbNodeGroup).Parameters.Keys | Should -Contain 'NewName' + } + } +} From 3a6dad46c4b40cb8cc35d7bc85522617685a7b6d Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:22:56 -0700 Subject: [PATCH 62/90] fix(objectstore): replace vacuous sensitive-field test, add verbose-leak and array-clear tests (#31 review) --- ...e-PfbObjectStoreRemoteCredential.Tests.ps1 | 21 ++++++++++--- Tests/Update-PfbObjectStoreRole.Tests.ps1 | 2 +- ...Update-PfbObjectStoreVirtualHost.Tests.ps1 | 31 +++++++++++++++++-- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 index 7a46c0c..ca1abe8 100644 --- a/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 +++ b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 @@ -72,10 +72,23 @@ Describe 'Update-PfbObjectStoreRemoteCredential - typed body parameters (#31)' { } } - It 'has no -SecretAccessKey default value (sensitive field)' { - (Get-Command Update-PfbObjectStoreRemoteCredential).Parameters['SecretAccessKey'].Attributes | - Where-Object { $_ -is [System.Management.Automation.PSDefaultValueAttribute] } | - Should -BeNullOrEmpty + It 'has no -SecretAccessKey default value (sensitive field, AST-based check)' { + # A defaulted [string]$SecretAccessKey = 'leaked' does NOT produce a + # PSDefaultValueAttribute -- .Attributes only ever holds ParameterAttribute / + # ArgumentTypeConverterAttribute. The default value only shows up in the AST, so + # that is what must be inspected to actually prove no default exists. + $paramBlock = (Get-Command Update-PfbObjectStoreRemoteCredential).ScriptBlock.Ast.Body.ParamBlock + $secretParam = $paramBlock.Parameters | Where-Object { $_.Name.VariablePath.UserPath -eq 'SecretAccessKey' } + $secretParam | Should -Not -BeNullOrEmpty + $secretParam.DefaultValue | Should -BeNullOrEmpty + } + + It 'never leaks the secret into Verbose or Debug output' { + $secret = 'S3cr3tValueMustNotLeak-9f8e7d' + $captured = Update-PfbObjectStoreRemoteCredential -Name 's3-repl-cred' -SecretAccessKey $secret ` + -Confirm:$false -Array $fakeArray -Verbose -Debug 4>&1 5>&1 + + ($captured | Out-String) | Should -Not -Match ([regex]::Escape($secret)) } } diff --git a/Tests/Update-PfbObjectStoreRole.Tests.ps1 b/Tests/Update-PfbObjectStoreRole.Tests.ps1 index a8e12ec..2934b7b 100644 --- a/Tests/Update-PfbObjectStoreRole.Tests.ps1 +++ b/Tests/Update-PfbObjectStoreRole.Tests.ps1 @@ -90,7 +90,7 @@ Describe 'Update-PfbObjectStoreRole - typed body parameters (#31)' { } Context 'deprecated / read-only fields are not exposed (constraint 9 and 11)' { - It 'has no -Name -- wait, -Name is the selector; has no -Created/-Prn/-TrustedEntities parameter' { + It 'has no -Created/-Prn/-TrustedEntities parameter' { $keys = (Get-Command Update-PfbObjectStoreRole).Parameters.Keys foreach ($p in 'Created', 'Prn', 'TrustedEntities') { $keys | Should -Not -Contain $p diff --git a/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 index 69254f0..f1596ad 100644 --- a/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 +++ b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 @@ -58,6 +58,16 @@ Describe 'Update-PfbObjectStoreVirtualHost - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -AddAttachedServers @() so a list can be cleared' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -AddAttachedServers @() ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('add_attached_servers') -and + @($Body['add_attached_servers']).Count -eq 0 + } + } + It 'builds remove_attached_servers as name-reference objects' { Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -RemoveAttachedServers 'srv-d' ` -Confirm:$false -Array $fakeArray @@ -67,6 +77,16 @@ Describe 'Update-PfbObjectStoreVirtualHost - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -RemoveAttachedServers @() so a list can be cleared' { + Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -RemoveAttachedServers @() ` + -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('remove_attached_servers') -and + @($Body['remove_attached_servers']).Count -eq 0 + } + } + It 'omits every body key when no typed body parameter is supplied' { Update-PfbObjectStoreVirtualHost -Name 's3.example.com' -Confirm:$false -Array $fakeArray @@ -122,9 +142,14 @@ Describe 'Update-PfbObjectStoreVirtualHost - typed body parameters (#31)' { } } - It 'has no read-only field parameter (constraint 11: id)' { - $keys = (Get-Command Update-PfbObjectStoreVirtualHost).Parameters.Keys - $keys | Should -Not -Contain 'IdField' + It 'exposes no body parameter for the read-only id field (constraint 11) beyond the existing -Id selector' { + # `id` is read-only per the field reference; PascalCase would collide with the + # pre-existing -Id selector, so the only way this field could leak in is via that + # selector feeding the body. Assert the selector's ParameterSetName is confined to + # the ById* sets and never appears bound to a body-only set. + $idParam = (Get-Command Update-PfbObjectStoreVirtualHost).Parameters['Id'] + $idParam.ParameterSets.Keys | Should -Not -Contain 'ByNameIndividual' + $idParam.ParameterSets.Keys | Should -Not -Contain 'ByNameAttributes' } } } From 1d60ffdc89d22142d5e6e34e12cd716683cab420 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:26 -0700 Subject: [PATCH 63/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers while verifying new boolean query parameters. Cross-cutting shared helper, not scoped to a single batch. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From 34871caf199c71c9820a92262426e2e4e2af32ab Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:36 -0700 Subject: [PATCH 64/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From cf0ce22d12f147b6c301ead9884661e0a5655c61 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:38 -0700 Subject: [PATCH 65/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From e1dd1910a0abcca19ee3a4947dbc552893294383 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:39 -0700 Subject: [PATCH 66/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From fd3c8282c9066f490dc981283710477e65ad2774 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:40 -0700 Subject: [PATCH 67/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From 6bbe314735338c5d5bac1a64170b52b3a3ec66cd Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:41 -0700 Subject: [PATCH 68/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From 2e80a7a401ecac853131c4e4542a7168dd0ff691 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:42 -0700 Subject: [PATCH 69/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From 35cffef6720209e3146947db8e745b98dea9b5da Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:43 -0700 Subject: [PATCH 70/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From 8976630b8f230812afd6803be14131ab78895db2 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:47:44 -0700 Subject: [PATCH 71/90] fix(query-string): serialize booleans as lowercase true/false (#31) ConvertTo-PfbQueryString sent [bool] values through .ToString(), producing True/False on the wire instead of the true/false the REST API expects. Found independently by Task 2 and Task 5 reviewers; propagated to every unmerged batch so each branch is self-consistent. --- Private/ConvertTo-PfbQueryString.ps1 | 5 +- Tests/ConvertTo-PfbQueryString.Tests.ps1 | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Tests/ConvertTo-PfbQueryString.Tests.ps1 diff --git a/Private/ConvertTo-PfbQueryString.ps1 b/Private/ConvertTo-PfbQueryString.ps1 index 13f72c4..0358b3d 100644 --- a/Private/ConvertTo-PfbQueryString.ps1 +++ b/Private/ConvertTo-PfbQueryString.ps1 @@ -24,7 +24,10 @@ function ConvertTo-PfbQueryString { continue } - if ($value -is [array]) { + if ($value -is [bool]) { + $value = $value.ToString().ToLowerInvariant() + } + elseif ($value -is [array]) { $value = $value -join ',' } diff --git a/Tests/ConvertTo-PfbQueryString.Tests.ps1 b/Tests/ConvertTo-PfbQueryString.Tests.ps1 new file mode 100644 index 0000000..f1042b1 --- /dev/null +++ b/Tests/ConvertTo-PfbQueryString.Tests.ps1 @@ -0,0 +1,64 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + Import-Module "$PSScriptRoot/../PureStorageFlashBladePowerShell.psd1" -Force +} + +Describe 'ConvertTo-PfbQueryString' { + Context 'Boolean values' { + It 'serializes $true as lowercase true, not True' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $true } + $result | Should -Be '?enabled=true' + } + } + + It 'serializes $false as lowercase false, not False' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ enabled = $false } + $result | Should -Be '?enabled=false' + } + } + } + + Context 'Array values' { + It 'joins array values with commas' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ names = @('a', 'b', 'c') } + $result | Should -Be '?names=a%2Cb%2Cc' + } + } + } + + Context 'Scalar values' { + It 'passes through string values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ name = 'foo' } + $result | Should -Be '?name=foo' + } + } + + It 'passes through integer values unchanged' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ limit = 0 } + $result | Should -Be '?limit=0' + } + } + } + + Context 'Null and empty handling' { + It 'returns an empty string for null or empty parameters' { + InModuleScope PureStorageFlashBladePowerShell { + ConvertTo-PfbQueryString -Parameters @{} | Should -Be '' + ConvertTo-PfbQueryString -Parameters $null | Should -Be '' + } + } + + It 'skips null and empty-string values but keeps other keys' { + InModuleScope PureStorageFlashBladePowerShell { + $result = ConvertTo-PfbQueryString -Parameters @{ a = $null; b = ''; c = 'x' } + $result | Should -Be '?c=x' + } + } + } +} From fe0a8f3efd95e3a94fc5b0e8d32478ae05485de0 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:48:00 -0700 Subject: [PATCH 72/90] fix(certificate): preserve positional binding for pre-existing params (#31) Inserting -CertificateId before -CertificateGroupName shifted the latter from position 1 to position 2, so a caller invoking the cmdlet positionally with two arguments (the pre-#31 calling convention) would silently bind its second argument to the new -CertificateId string parameter instead of -CertificateGroupName. Reordered so both pre-existing parameters keep their original absolute positions; the new -CertificateId/-CertificateGroupId parameters are appended after them, addressable only by name. --- Public/Certificate/New-PfbCertificateCertificateGroup.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 b/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 index 13f2f11..09d6cc9 100644 --- a/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 +++ b/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 @@ -31,8 +31,8 @@ function New-PfbCertificateCertificateGroup { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter()] [string]$CertificateName, - [Parameter()] [string]$CertificateId, [Parameter()] [string]$CertificateGroupName, + [Parameter()] [string]$CertificateId, [Parameter()] [string]$CertificateGroupId, [Parameter()] [PSCustomObject]$Array ) From d407f903d7787c1ba5971fe309f527bacd350c11 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:48:01 -0700 Subject: [PATCH 73/90] fix(network,node): preserve positional binding for pre-existing params (#31) Three cmdlets in this batch inserted new Id/selector parameters before pre-existing positional ones, shifting them out of their historical absolute position: - New-PfbNetworkInterfaceTlsPolicy: -PolicyName shifted by -MemberId - Update-PfbDns: -Domain/-Nameservers shifted by the new -Name/-Id query selectors - New-PfbNodeGroupNode: -MemberName shifted by -GroupId A caller using the pre-#31 positional calling convention would silently bind its argument to the wrong (new) parameter instead of the intended pre-existing one. Reordered so every pre-existing parameter keeps its original absolute position; new parameters are appended after them, addressable only by name. --- Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 | 2 +- Public/Network/Update-PfbDns.ps1 | 5 +++-- Public/Node/New-PfbNodeGroupNode.ps1 | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 b/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 index 0c76e9c..17cc947 100644 --- a/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 +++ b/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 @@ -50,8 +50,8 @@ function New-PfbNetworkInterfaceTlsPolicy { # stay optional -- the same shape already shipped on the sibling cmdlet # New-PfbQosPolicyMember. [Parameter()] [string]$MemberName, - [Parameter()] [string]$MemberId, [Parameter()] [string]$PolicyName, + [Parameter()] [string]$MemberId, [Parameter()] [string]$PolicyId, [Parameter()] [PSCustomObject]$Array ) diff --git a/Public/Network/Update-PfbDns.ps1 b/Public/Network/Update-PfbDns.ps1 index 1e87f60..daa33b0 100644 --- a/Public/Network/Update-PfbDns.ps1 +++ b/Public/Network/Update-PfbDns.ps1 @@ -53,11 +53,12 @@ function Update-PfbDns { #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', DefaultParameterSetName = 'Individual')] param( + [Parameter(ParameterSetName = 'Individual')] [string]$Domain, + [Parameter(ParameterSetName = 'Individual')] [string[]]$Nameservers, + [Parameter()] [string]$Name, [Parameter()] [string]$Id, - [Parameter(ParameterSetName = 'Individual')] [string]$Domain, - [Parameter(ParameterSetName = 'Individual')] [string[]]$Nameservers, [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificate, [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificateGroup, [Parameter(ParameterSetName = 'Individual')] [string]$NewName, diff --git a/Public/Node/New-PfbNodeGroupNode.ps1 b/Public/Node/New-PfbNodeGroupNode.ps1 index aa9be9b..8f49ca2 100644 --- a/Public/Node/New-PfbNodeGroupNode.ps1 +++ b/Public/Node/New-PfbNodeGroupNode.ps1 @@ -41,8 +41,8 @@ function New-PfbNodeGroupNode { # than parameter sets -- see New-PfbNetworkInterfaceTlsPolicy.ps1 for the identical # shape and rationale (no request body here to multiply a selector axis against). [Parameter()] [string]$GroupName, - [Parameter()] [string]$GroupId, [Parameter()] [string]$MemberName, + [Parameter()] [string]$GroupId, [Parameter()] [string]$MemberId, [Parameter()] [PSCustomObject]$Array ) From 0cf66d82b9d8d8a8b874aee3f4a26723d93415fd Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 10:48:30 -0700 Subject: [PATCH 74/90] fix(replication): preserve positional binding for pre-existing params (#31) Inserting -LocalFileSystemId before -MemberId shifted -MemberId from position 3 to position 4, so a caller invoking the cmdlet with the pre-#31 4-positional-argument convention would silently bind its 4th argument to the new -LocalFileSystemId string parameter instead of -MemberId. Reordered so -MemberId keeps its original absolute position; -LocalFileSystemId is appended after it, addressable only by name. --- Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 b/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 index 275a3e0..86a06ca 100644 --- a/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 +++ b/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 @@ -48,8 +48,8 @@ function New-PfbFileSystemReplicaLinkPolicy { [Parameter()] [string]$PolicyName, [Parameter()] [string]$PolicyId, [Parameter()] [Alias('MemberName')] [string]$LocalFileSystemName, - [Parameter()] [string]$LocalFileSystemId, [Parameter()] [string]$MemberId, + [Parameter()] [string]$LocalFileSystemId, [Parameter()] [string]$RemoteId, [Parameter()] [string]$RemoteName, [Parameter()] [PSCustomObject]$Array From bc90e6e7225bb6f73d38f03dfc56191da2e8d552 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:01:18 -0700 Subject: [PATCH 75/90] fix(directoryservice): drop unreachable -RoleIds/-RoleNames, add missing @() coverage (#31 review) Update-PfbDirectoryServiceRole's -RoleIds/-RoleNames were declared bare per Constraint 17, but every parameter set on this cmdlet makes -Name or -Id mandatory, and the spec rejects role_ids/role_names combined with ids/names -- these two parameters were structurally unreachable in any valid invocation. Dropped per the controller's ruling (matches Constraint 9's deprecated-field precedent); replaced the now-invalid query-parameter tests with absence tests. Also added Constraint 2 @() coverage on Update-PfbActiveDirectory for the five array body fields that had none (encryption_types, fqdns, global_catalog_servers, kerberos_servers, service_principal_names) -- mutation-proved against a truthiness guard before landing. --- .../Update-PfbDirectoryServiceRole.ps1 | 15 ---------- Tests/Update-PfbActiveDirectory.Tests.ps1 | 20 +++++++++++++ .../Update-PfbDirectoryServiceRole.Tests.ps1 | 29 ++++--------------- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 index 69052de..5291177 100644 --- a/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 +++ b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 @@ -20,12 +20,6 @@ function Update-PfbDirectoryServiceRole { the specified role name. .PARAMETER GroupBase Specifies where the configured group is located in the directory tree. - .PARAMETER RoleIds - A comma-separated list of role IDs used to select the role(s) to update. Cannot be - provided together with -Name, -Id, or -RoleNames. - .PARAMETER RoleNames - A comma-separated list of role names used to select the role(s) to update. Cannot be - provided together with -Name, -Id, or -RoleIds. .PARAMETER Attributes A hashtable of role attributes to modify (e.g., group, group_base). Mutually exclusive with the individual typed parameters above. @@ -63,9 +57,6 @@ function Update-PfbDirectoryServiceRole { [Parameter(ParameterSetName = 'ByIdIndividual')] [string]$GroupBase, - [Parameter()] [string[]]$RoleIds, - [Parameter()] [string[]]$RoleNames, - [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] [hashtable]$Attributes, @@ -82,12 +73,6 @@ function Update-PfbDirectoryServiceRole { if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } - # Constraint 17: role_ids/role_names are QUERY parameters declared bare, not in the - # *Individual sets, because they are orthogonal alternate selectors that must stay - # usable alongside -Attributes. - if ($PSBoundParameters.ContainsKey('RoleIds')) { $queryParams['role_ids'] = $RoleIds -join ',' } - if ($PSBoundParameters.ContainsKey('RoleNames')) { $queryParams['role_names'] = $RoleNames -join ',' } - $target = if ($Name) { $Name } else { $Id } if ($PSCmdlet.ParameterSetName -like '*Attributes') { diff --git a/Tests/Update-PfbActiveDirectory.Tests.ps1 b/Tests/Update-PfbActiveDirectory.Tests.ps1 index 2df028d..9f34c41 100644 --- a/Tests/Update-PfbActiveDirectory.Tests.ps1 +++ b/Tests/Update-PfbActiveDirectory.Tests.ps1 @@ -63,6 +63,26 @@ Describe 'Update-PfbActiveDirectory - typed body parameters (#31)' { } } + It 'sends an EMPTY array for - @() so a list can be cleared, not omit the key' -ForEach @( + @{ Parameter = 'EncryptionTypes'; WireKey = 'encryption_types' } + @{ Parameter = 'Fqdns'; WireKey = 'fqdns' } + @{ Parameter = 'GlobalCatalogServers'; WireKey = 'global_catalog_servers' } + @{ Parameter = 'KerberosServers'; WireKey = 'kerberos_servers' } + @{ Parameter = 'ServicePrincipalNames'; WireKey = 'service_principal_names' } + ) { + $params = @{ + Name = 'ad1' + $Parameter = @() + Confirm = $false + Array = $fakeArray + } + Update-PfbActiveDirectory @params + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey($WireKey) -and @($Body[$WireKey]).Count -eq 0 + } + } + It 'sends encryption_types from the fixed enum set' { Update-PfbActiveDirectory -Name 'ad1' -EncryptionTypes 'aes256-cts-hmac-sha1-96','arcfour-hmac' ` -Confirm:$false -Array $fakeArray diff --git a/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 index 2cae4d3..63140c7 100644 --- a/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 +++ b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 @@ -53,30 +53,13 @@ Describe 'Update-PfbDirectoryServiceRole - typed body + query parameters (#31)' } } - Context '-RoleIds/-RoleNames query parameters (constraint 17, bare and orthogonal)' { - It 'sends -RoleNames as the role_names query parameter alongside -Attributes' { - Update-PfbDirectoryServiceRole -Name 'ad-admins' -RoleNames 'array_admin' -Attributes @{ group = 'g' } ` - -Confirm:$false -Array $fakeArray - - Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { - $QueryParams['role_names'] -eq 'array_admin' -and $Body['group'] -eq 'g' - } + Context '-RoleIds/-RoleNames are not exposed (constraint 9 precedent: structurally dead field)' { + It 'has no -RoleIds parameter' { + (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys | Should -Not -Contain 'RoleIds' } - It 'sends -RoleIds as the role_ids query parameter' { - Update-PfbDirectoryServiceRole -Name 'ad-admins' -RoleIds 'role-abc' -Confirm:$false -Array $fakeArray - - Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { - $QueryParams['role_ids'] -eq 'role-abc' - } - } - - It 'omits role_ids/role_names entirely when not supplied' { - Update-PfbDirectoryServiceRole -Name 'ad-admins' -Confirm:$false -Array $fakeArray - - Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { - -not $QueryParams.ContainsKey('role_ids') -and -not $QueryParams.ContainsKey('role_names') - } + It 'has no -RoleNames parameter' { + (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys | Should -Not -Contain 'RoleNames' } } @@ -121,7 +104,7 @@ Describe 'Update-PfbDirectoryServiceRole - typed body + query parameters (#31)' It 'exposes every settable body field the endpoint accepts' { $keys = (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys - foreach ($p in 'Group', 'GroupBase', 'RoleIds', 'RoleNames') { + foreach ($p in 'Group', 'GroupBase') { $keys | Should -Contain $p } } From 0eee367cd53424fd566fa83902732a7d3b07ec6f Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:01:19 -0700 Subject: [PATCH 76/90] test(policy): add missing Constraint 2/18 falsy-value coverage (#31 review) Update-PfbQosPolicy had a 0-value test for -MaxTotalOpsPerSec but not -MaxTotalBytesPerSec; added the matching test. Update-PfbStorageClassTieringPolicy's -ArchivalRules/-RetrievalRules are [hashtable[]] arrays, where Constraint 18's composite exemption does not apply (@() is falsy for an array, unlike @{} for a scalar hashtable) -- added @() tests for both. Code already used ContainsKey correctly; this was a test-coverage gap only. Mutation-proved both new tests against a truthiness guard before landing. --- Tests/Update-PfbQosPolicy.Tests.ps1 | 8 ++++++++ ...Update-PfbStorageClassTieringPolicy.Tests.ps1 | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/Tests/Update-PfbQosPolicy.Tests.ps1 b/Tests/Update-PfbQosPolicy.Tests.ps1 index 6ac7c4c..2b1fad1 100644 --- a/Tests/Update-PfbQosPolicy.Tests.ps1 +++ b/Tests/Update-PfbQosPolicy.Tests.ps1 @@ -42,6 +42,14 @@ Describe 'Update-PfbQosPolicy - typed body parameters (#31)' { } } + It 'sends an explicit -MaxTotalBytesPerSec 0 rather than dropping it (constraint 2: 0 means unlimited)' { + Update-PfbQosPolicy -Name 'qos-gold' -MaxTotalBytesPerSec 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('max_total_bytes_per_sec') -and $Body['max_total_bytes_per_sec'] -eq 0 + } + } + It 'sends an explicit -MaxTotalOpsPerSec 0 rather than dropping it (constraint 2: 0 means unlimited)' { Update-PfbQosPolicy -Name 'qos-gold' -MaxTotalOpsPerSec 0 -Confirm:$false -Array $fakeArray diff --git a/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 index 3da2dbb..ee7a891 100644 --- a/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 +++ b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 @@ -28,6 +28,14 @@ Describe 'Update-PfbStorageClassTieringPolicy - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -ArchivalRules @() so the list can be cleared, not omit the key' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -ArchivalRules @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('archival_rules') -and @($Body['archival_rules']).Count -eq 0 + } + } + It 'sends enabled as a body field (ContainsKey semantics, not truthiness)' { Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Enabled $false -Confirm:$false -Array $fakeArray @@ -62,6 +70,14 @@ Describe 'Update-PfbStorageClassTieringPolicy - typed body parameters (#31)' { } } + It 'sends an EMPTY array for -RetrievalRules @() so the list can be cleared, not omit the key' { + Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -RetrievalRules @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('retrieval_rules') -and @($Body['retrieval_rules']).Count -eq 0 + } + } + It 'omits every body key when no typed body parameter is supplied' { Update-PfbStorageClassTieringPolicy -Name 'tier-to-archive' -Confirm:$false -Array $fakeArray From 069e184fb59eb739da00d8f35b39acb525d4d42a Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:01:20 -0700 Subject: [PATCH 77/90] test(replication): add missing -Members @() coverage (#31 review) New-PfbFleetMember's -Members is [hashtable[]], where Constraint 18's composite exemption does not apply. Code already used ContainsKey correctly; this was a test-coverage gap only. Mutation-proved against a truthiness guard before landing. --- Tests/New-PfbFleetMember.Tests.ps1 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tests/New-PfbFleetMember.Tests.ps1 b/Tests/New-PfbFleetMember.Tests.ps1 index ec6c346..974ecea 100644 --- a/Tests/New-PfbFleetMember.Tests.ps1 +++ b/Tests/New-PfbFleetMember.Tests.ps1 @@ -84,6 +84,14 @@ Describe 'New-PfbFleetMember - typed body/query parameters (#31, confirmed wire- -not $Body.ContainsKey('members') } } + + It 'sends an EMPTY array for -Members @() so the list can be cleared, not omit the key (constraint 18: does not apply to [hashtable[]], unlike a scalar [hashtable])' { + New-PfbFleetMember -FleetName 'fleet-prod' -Members @() -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('members') -and @($Body['members']).Count -eq 0 + } + } } Context 'constraint compliance' { From 10a31fb6210b483062790ae762e677fbb99271f9 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:21:44 -0700 Subject: [PATCH 78/90] fix(policy): restore -MemberId, member_ids is a real spec parameter (#31 review) Reviewer found that the original fix's diagnosis was wrong about -MemberId: POST /policies/file-system-replica-links (and its GET/ DELETE siblings) declare member_ids as a real, spec-backed query parameter -- only member_names is genuinely absent. Verified independently against tools/specs/fb2.28.json. The prior fix removed both -MemberName and -MemberId as if both were equally invalid, silently dropping working functionality. Restored -MemberId (-> member_ids), keeping -MemberName removed (member_names is confirmed absent). Also fixed the positional-binding regression this reintroduced: -MemberId's restored declaration initially landed after the new -LocalFileSystemId, one position later than its original pre-#31 slot -- a caller using the old 4-positional- argument convention would have had their previously-working -MemberId value silently redirected to -LocalFileSystemId instead. Reordered so -MemberId keeps its original absolute position. --- .../New-PfbPolicyFileSystemReplicaLink.ps1 | 23 ++++++++++++------ ...w-PfbPolicyFileSystemReplicaLink.Tests.ps1 | 24 +++++++++++++++---- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 index 94510a1..4776bc2 100644 --- a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 +++ b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 @@ -6,13 +6,16 @@ function New-PfbPolicyFileSystemReplicaLink { The New-PfbPolicyFileSystemReplicaLink cmdlet creates an association between a policy and a file system replica link on the connected Pure Storage FlashBlade. - Bug fix (#31): `POST /policies/file-system-replica-links` has no `member_names`/ - `member_ids` query parameters at all -- those were previously sent and silently - ignored by the array, so -MemberName/-MemberId never had any effect. The endpoint's - real query parameters identify the replica link by its local file system - (`local_file_system_names`/`local_file_system_ids`) and its remote side - (`remote_names`/`remote_ids`), so -MemberName/-MemberId are replaced with - -LocalFileSystemName/-LocalFileSystemId and -RemoteName/-RemoteId. + Bug fix (#31, corrected after review): `POST /policies/file-system-replica-links` has + no `member_names` query parameter, but `member_ids` IS a real, spec-declared query + parameter on this endpoint (and its GET/DELETE siblings) -- confirmed directly against + the OpenAPI spec's parameter list, which the original fix missed, causing it to remove + -MemberId entirely as if it were as invalid as -MemberName. The endpoint also identifies + the replica link by its local file system (`local_file_system_names`/ + `local_file_system_ids`) and its remote side (`remote_names`/`remote_ids`), so + -MemberName is replaced with -LocalFileSystemName/-LocalFileSystemId and + -RemoteName/-RemoteId, while -MemberId is kept (mapped to the real `member_ids` key) as + an additional, independent selector alongside them. .PARAMETER PolicyName The policy name. .PARAMETER PolicyId @@ -21,6 +24,10 @@ function New-PfbPolicyFileSystemReplicaLink { The name of the local file system side of the replica link. .PARAMETER LocalFileSystemId The ID of the local file system side of the replica link. + .PARAMETER MemberId + The ID of the replica link member. Sent as the `member_ids` query parameter -- unlike + -MemberName (removed: `member_names` is not a valid query parameter for this endpoint), + `member_ids` is real and spec-declared. .PARAMETER RemoteName The name of the remote side of the replica link. .PARAMETER RemoteId @@ -45,6 +52,7 @@ function New-PfbPolicyFileSystemReplicaLink { [Parameter()] [string]$PolicyName, [Parameter()] [string]$PolicyId, [Parameter()] [string]$LocalFileSystemName, + [Parameter()] [string]$MemberId, [Parameter()] [string]$LocalFileSystemId, [Parameter()] [string]$RemoteName, [Parameter()] [string]$RemoteId, @@ -58,6 +66,7 @@ function New-PfbPolicyFileSystemReplicaLink { if ($PolicyId) { $queryParams['policy_ids'] = $PolicyId } if ($PSBoundParameters.ContainsKey('LocalFileSystemName')) { $queryParams['local_file_system_names'] = $LocalFileSystemName } if ($PSBoundParameters.ContainsKey('LocalFileSystemId')) { $queryParams['local_file_system_ids'] = $LocalFileSystemId } + if ($PSBoundParameters.ContainsKey('MemberId')) { $queryParams['member_ids'] = $MemberId } if ($PSBoundParameters.ContainsKey('RemoteName')) { $queryParams['remote_names'] = $RemoteName } if ($PSBoundParameters.ContainsKey('RemoteId')) { $queryParams['remote_ids'] = $RemoteId } diff --git a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 index 1ac3cd5..68b7268 100644 --- a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 +++ b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 @@ -27,7 +27,7 @@ Describe 'New-PfbPolicyFileSystemReplicaLink - correct query wire keys (#31)' { } } - Context 'regression: real bug -- endpoint has no member_names/member_ids query params at all' { + Context 'regression: member_names does not exist on this endpoint (confirmed via spec), but member_ids does' { It 'sends -LocalFileSystemName as local_file_system_names, NOT member_names' { New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1/remote-fb' -Confirm:$false -Array $fakeArray @@ -46,10 +46,24 @@ Describe 'New-PfbPolicyFileSystemReplicaLink - correct query wire keys (#31)' { } } - It 'no longer exposes the incorrectly-wired -MemberName/-MemberId parameters' { - $params = (Get-Command New-PfbPolicyFileSystemReplicaLink).Parameters - $params.Keys | Should -Not -Contain 'MemberName' - $params.Keys | Should -Not -Contain 'MemberId' + It 'no longer exposes the incorrectly-wired -MemberName parameter' { + (Get-Command New-PfbPolicyFileSystemReplicaLink).Parameters.Keys | Should -Not -Contain 'MemberName' + } + + It 'sends -MemberId as member_ids (real, spec-declared parameter -- restored after review, unlike -MemberName)' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -MemberId 'member-1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['member_ids'] -eq 'member-1' + } + } + + It 'omits member_ids entirely when -MemberId is not supplied' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -LocalFileSystemName 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + -not $QueryParams.ContainsKey('member_ids') + } } } From 2adfb454adfda8d187e02e630ca18129b2979b43 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:24:04 -0700 Subject: [PATCH 79/90] fix(bucket): fail fast when -MemberId is used without a filter name (#31 review) Reviewer found that -MemberId alone (without -MemberName or an explicit -FilterNames) silently omitted the required 'names' query parameter entirely -- the elseif default only covers the -MemberName path. The array would have rejected the resulting request with a confusing 400 and no local indication of why. Added a local throw telling the caller to supply -FilterNames explicitly in that case, and a test proving it (the existing -MemberId test was vacuous about 'names' and has been fixed to supply -FilterNames so it still tests what it originally claimed to). --- Public/Bucket/Update-PfbBucketAuditFilter.ps1 | 7 +++++++ Tests/Update-PfbBucketAuditFilter.Tests.ps1 | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Public/Bucket/Update-PfbBucketAuditFilter.ps1 b/Public/Bucket/Update-PfbBucketAuditFilter.ps1 index 09fe2a4..1d742b1 100644 --- a/Public/Bucket/Update-PfbBucketAuditFilter.ps1 +++ b/Public/Bucket/Update-PfbBucketAuditFilter.ps1 @@ -110,6 +110,13 @@ function Update-PfbBucketAuditFilter { # -MemberName-only callers keep working without a breaking change. $queryParams['names'] = $MemberName } + else { + # -MemberId alone gives no value to infer -FilterNames from (the audit filter's + # own name cannot be derived from the bucket's ID). Fail fast client-side rather + # than send a request the array will reject anyway for missing the required + # 'names' query parameter. + throw "Update-PfbBucketAuditFilter: -FilterNames is required when -MemberId is used without -MemberName -- the audit filter's own name cannot be inferred from an ID alone. Supply -FilterNames explicitly." + } if ($PSCmdlet.ParameterSetName -like '*Attributes') { $body = $Attributes diff --git a/Tests/Update-PfbBucketAuditFilter.Tests.ps1 b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 index 80908d6..72abd49 100644 --- a/Tests/Update-PfbBucketAuditFilter.Tests.ps1 +++ b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 @@ -62,7 +62,7 @@ Describe 'Update-PfbBucketAuditFilter - typed body parameters (#31)' { } It 'sends -MemberId as bucket_ids, NOT member_ids' { - Update-PfbBucketAuditFilter -MemberId 'bucket-1' -Confirm:$false -Array $fakeArray + Update-PfbBucketAuditFilter -MemberId 'bucket-1' -FilterNames 'mybucket' -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['bucket_ids'] -eq 'bucket-1' -and -not $QueryParams.ContainsKey('member_ids') -and @@ -70,6 +70,13 @@ Describe 'Update-PfbBucketAuditFilter - typed body parameters (#31)' { } } + It 'throws when -MemberId is used alone: the required "names" query parameter cannot be inferred from an ID (review finding)' { + { Update-PfbBucketAuditFilter -MemberId 'bucket-1' -Confirm:$false -Array $fakeArray -ErrorAction Stop } | + Should -Throw -ExpectedMessage '*-FilterNames is required*' + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 0 -Exactly + } + It 'defaults the required "names" query parameter from -MemberName when -FilterNames is not supplied' { Update-PfbBucketAuditFilter -MemberName 'mybucket' -Confirm:$false -Array $fakeArray From 48a514643309b177f787f3168a1aac47215d8194 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 11:24:56 -0700 Subject: [PATCH 80/90] test(network): add missing Constraint 2 zero-value coverage (#31 review) Update-PfbNetworkInterfaceConnector had explicit-0 tests for -LaneSpeed/-PortCount but not -LanesPerPort/-PortSpeed, even though the code guards all four integer fields identically and correctly with ContainsKey. Pure test-coverage gap. --- ...Update-PfbNetworkInterfaceConnector.Tests.ps1 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 b/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 index 7c6ccda..e41691e 100644 --- a/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 +++ b/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 @@ -53,6 +53,22 @@ Describe 'Update-PfbNetworkInterfaceConnector - typed body parameters (#31)' { } } + It 'sends an explicit -LanesPerPort 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -LanesPerPort 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('lanes_per_port') -and $Body['lanes_per_port'] -eq 0 + } + } + + It 'sends an explicit -PortSpeed 0 rather than dropping it (constraint 2, integer field)' { + Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -PortSpeed 0 -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.ContainsKey('port_speed') -and $Body['port_speed'] -eq 0 + } + } + It 'omits lane_speed entirely when -LaneSpeed is not supplied' { Update-PfbNetworkInterfaceConnector -Name 'CH1.FM1.ETH1' -PortSpeed 1 -Confirm:$false -Array $fakeArray From 3de324a6bddb8f9872b74d9c2888f177130c0a4c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:14:17 -0700 Subject: [PATCH 81/90] fix(replication): restore positional binding on New-PfbArrayConnection (#31 whole-branch review I-1) Adding a ParameterSetName disables PowerShell's implicit positional binding for the ENTIRE function, not just the parameter that gained one. This cmdlet had no parameter sets before #31, so all of -ManagementAddress/-ReplicationAddress/-ConnectionKey/-Attributes were freely positional; after the Individual/Attributes split, none of them were, breaking any pre-#31 positional call. Restored via explicit Position on each set's own positional parameters. --- Public/Replication/New-PfbArrayConnection.ps1 | 12 ++++++++---- Tests/New-PfbArrayConnection.Tests.ps1 | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Public/Replication/New-PfbArrayConnection.ps1 b/Public/Replication/New-PfbArrayConnection.ps1 index 52df95b..0242694 100644 --- a/Public/Replication/New-PfbArrayConnection.ps1 +++ b/Public/Replication/New-PfbArrayConnection.ps1 @@ -55,15 +55,19 @@ function New-PfbArrayConnection { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', DefaultParameterSetName = 'Individual')] param( - [Parameter(ParameterSetName = 'Individual')] [string]$ManagementAddress, - [Parameter(ParameterSetName = 'Individual')] [string]$ReplicationAddress, - [Parameter(ParameterSetName = 'Individual')] [string]$ConnectionKey, + # Explicit Position restores the pre-#31 positional-calling convention: adding a + # ParameterSetName to any parameter disables PowerShell's default implicit positional + # binding for the WHOLE function (whole-branch review finding I-1), which would + # otherwise have silently broken `New-PfbArrayConnection $mgmt $repl $key`. + [Parameter(ParameterSetName = 'Individual', Position = 0)] [string]$ManagementAddress, + [Parameter(ParameterSetName = 'Individual', Position = 1)] [string]$ReplicationAddress, + [Parameter(ParameterSetName = 'Individual', Position = 2)] [string]$ConnectionKey, [Parameter(ParameterSetName = 'Individual')] [string]$CaCertificateGroup, [Parameter(ParameterSetName = 'Individual')] [Nullable[bool]]$Encrypted, [Parameter(ParameterSetName = 'Individual')] [string]$Remote, [Parameter(ParameterSetName = 'Individual')] [hashtable]$Throttle, - [Parameter(ParameterSetName = 'Attributes', Mandatory)] + [Parameter(ParameterSetName = 'Attributes', Mandatory, Position = 0)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array diff --git a/Tests/New-PfbArrayConnection.Tests.ps1 b/Tests/New-PfbArrayConnection.Tests.ps1 index fad0185..8784fd7 100644 --- a/Tests/New-PfbArrayConnection.Tests.ps1 +++ b/Tests/New-PfbArrayConnection.Tests.ps1 @@ -33,6 +33,24 @@ Describe 'New-PfbArrayConnection - typed body parameters (#31)' { -Confirm:$false -Array $fakeArray -ErrorAction Stop } | Should -Throw -ExpectedMessage '*Parameter set cannot be resolved*' } + + It 'accepts -ManagementAddress/-ReplicationAddress/-ConnectionKey positionally (whole-branch review finding I-1: adding a parameter set disables ALL implicit positional binding, so this must stay explicit)' { + New-PfbArrayConnection '10.0.2.100' '10.0.3.100' 'key-123' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['management_address'] -eq '10.0.2.100' -and + @($Body['replication_addresses'])[0] -eq '10.0.3.100' -and + $Body['connection_key'] -eq 'key-123' + } + } + + It 'accepts -Attributes positionally' { + New-PfbArrayConnection @{ management_address = '10.0.2.100'; connection_key = 'k' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['management_address'] -eq '10.0.2.100' + } + } } Context 'new typed parameters' { From 623d22f7f472cfa02410fe3b660971d65b8d2299 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:14:18 -0700 Subject: [PATCH 82/90] fix(network): restore positional binding on Update-PfbDns (#31 whole-branch review I-1) Same root cause as the New-PfbArrayConnection fix: this cmdlet had no parameter sets before #31, so -Domain/-Nameservers/-Attributes were freely positional; splitting into Individual/Attributes sets silently disabled ALL positional binding for the function. Restored via explicit Position on each set's own positional parameters. --- Public/Network/Update-PfbDns.ps1 | 10 +++++++--- Tests/Update-PfbDns.Tests.ps1 | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Public/Network/Update-PfbDns.ps1 b/Public/Network/Update-PfbDns.ps1 index daa33b0..ea00318 100644 --- a/Public/Network/Update-PfbDns.ps1 +++ b/Public/Network/Update-PfbDns.ps1 @@ -53,8 +53,12 @@ function Update-PfbDns { #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', DefaultParameterSetName = 'Individual')] param( - [Parameter(ParameterSetName = 'Individual')] [string]$Domain, - [Parameter(ParameterSetName = 'Individual')] [string[]]$Nameservers, + # Explicit Position restores the pre-#31 positional-calling convention: adding a + # ParameterSetName to any parameter disables PowerShell's default implicit positional + # binding for the WHOLE function (whole-branch review finding I-1), which would + # otherwise have silently broken `Update-PfbDns $domain $nameservers`. + [Parameter(ParameterSetName = 'Individual', Position = 0)] [string]$Domain, + [Parameter(ParameterSetName = 'Individual', Position = 1)] [string[]]$Nameservers, [Parameter()] [string]$Name, [Parameter()] [string]$Id, @@ -65,7 +69,7 @@ function Update-PfbDns { [Parameter(ParameterSetName = 'Individual')] [string[]]$Services, [Parameter(ParameterSetName = 'Individual')] [string[]]$Sources, - [Parameter(ParameterSetName = 'Attributes', Mandatory)] [hashtable]$Attributes, + [Parameter(ParameterSetName = 'Attributes', Mandatory, Position = 0)] [hashtable]$Attributes, [Parameter()] [PSCustomObject]$Array ) diff --git a/Tests/Update-PfbDns.Tests.ps1 b/Tests/Update-PfbDns.Tests.ps1 index 2f22c73..f3c49b4 100644 --- a/Tests/Update-PfbDns.Tests.ps1 +++ b/Tests/Update-PfbDns.Tests.ps1 @@ -34,6 +34,22 @@ Describe 'Update-PfbDns - typed body and query parameters (#31)' { } } + It 'accepts -Domain/-Nameservers positionally (whole-branch review finding I-1: adding a parameter set disables ALL implicit positional binding, so this must stay explicit)' { + Update-PfbDns 'example.com' @('10.0.0.1', '10.0.0.2') -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['domain'] -eq 'example.com' -and @($Body['nameservers']).Count -eq 2 + } + } + + It 'accepts -Attributes positionally' { + Update-PfbDns @{ domain = 'example.com' } -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['domain'] -eq 'example.com' + } + } + It 'rejects -Domain combined with -Attributes at bind time (moved into Individual set)' { { Update-PfbDns -Domain 'example.com' -Attributes @{ domain = 'other.com' } ` -Confirm:$false -Array $fakeArray -ErrorAction Stop } | From b65faca48b91de54eeb83ab70a0db9aa6fd60c9c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:14:19 -0700 Subject: [PATCH 83/90] fix(misc): remove dead -HoldName/-MemberName wire keys (#31 whole-branch review I-2) hold_names/member_names are not documented query parameters on POST /legal-holds/held-entities in any cached spec version (2.4-2.28) -- confirmed directly against the spec. Verified against the endpoint's description text that -Names/-FileSystemNames (both added by this task, real and spec-backed) already cover the same job these two were attempting, so removing them leaves no functional gap. --- Public/Misc/New-PfbLegalHoldEntity.ps1 | 32 +++++++++++--------------- Tests/New-PfbLegalHoldEntity.Tests.ps1 | 27 ++++++++++++++-------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/Public/Misc/New-PfbLegalHoldEntity.ps1 b/Public/Misc/New-PfbLegalHoldEntity.ps1 index 5544504..2fd5ab9 100644 --- a/Public/Misc/New-PfbLegalHoldEntity.ps1 +++ b/Public/Misc/New-PfbLegalHoldEntity.ps1 @@ -4,12 +4,14 @@ function New-PfbLegalHoldEntity { Adds an entity to a legal hold on the FlashBlade. .DESCRIPTION The New-PfbLegalHoldEntity cmdlet associates an entity (file system, bucket, etc.) - with a legal hold on the connected Pure Storage FlashBlade. Identify the hold and - member by name, and optionally supply additional attributes. - .PARAMETER HoldName - The name of the legal hold. - .PARAMETER MemberName - The name of the entity to place under legal hold. + with a legal hold on the connected Pure Storage FlashBlade. Identify the entity by + file system, ID, name, or path, and optionally supply additional attributes. + + Whole-branch review fix: -HoldName/-MemberName (`hold_names`/`member_names`) are + removed -- `POST /legal-holds/held-entities` has no such query parameters in any + cached spec version (2.4-2.28), so they could never have had any effect. -Names and + -FileSystemNames (added by this task, real and spec-backed) already cover the same + job these were attempting. .PARAMETER FileSystemIds The IDs of the file systems to place under legal hold. .PARAMETER FileSystemNames @@ -30,26 +32,20 @@ function New-PfbLegalHoldEntity { .PARAMETER Array The FlashBlade connection object. If not specified, the default connection is used. .EXAMPLE - New-PfbLegalHoldEntity -HoldName "litigation-hold-2024" -MemberName "fs1" + New-PfbLegalHoldEntity -Names "litigation-hold-2024" -FileSystemNames "fs1" Places file system "fs1" under the legal hold "litigation-hold-2024". .EXAMPLE - New-PfbLegalHoldEntity -HoldName "litigation-hold-2024" -Paths "/dir1" -Recursive $true + New-PfbLegalHoldEntity -Names "litigation-hold-2024" -Paths "/dir1" -Recursive $true Recursively places everything under "/dir1" under the specified legal hold. .EXAMPLE - New-PfbLegalHoldEntity -HoldName "sec-investigation" -MemberName "bucket1" -Confirm:$false + New-PfbLegalHoldEntity -Names "sec-investigation" -FileSystemNames "bucket1" -Confirm:$false Adds a held entity without prompting for confirmation. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( - [Parameter()] - [string]$HoldName, - - [Parameter()] - [string]$MemberName, - [Parameter()] [string[]]$FileSystemIds, @@ -81,8 +77,6 @@ function New-PfbLegalHoldEntity { $body = if ($Attributes) { $Attributes } else { @{} } $queryParams = @{} - if ($HoldName) { $queryParams['hold_names'] = $HoldName } - if ($MemberName) { $queryParams['member_names'] = $MemberName } # Every newly added query parameter is guarded by ContainsKey, never truthiness -- see the # canonical explanation in Update-PfbAdmin.ps1. An array field's `@()` must still reach the @@ -94,7 +88,9 @@ function New-PfbLegalHoldEntity { if ($PSBoundParameters.ContainsKey('Paths')) { $queryParams['paths'] = $Paths -join ',' } if ($PSBoundParameters.ContainsKey('Recursive')) { $queryParams['recursive'] = $Recursive } - $target = "${HoldName}:${MemberName}" + $target = if ($PSBoundParameters.ContainsKey('Names')) { $Names -join ',' } + elseif ($PSBoundParameters.ContainsKey('FileSystemNames')) { $FileSystemNames -join ',' } + else { 'legal hold entity' } if ($PSCmdlet.ShouldProcess($target, 'Add legal hold entity')) { Invoke-PfbApiRequest -Array $Array -Method POST -Endpoint 'legal-holds/held-entities' -Body $body -QueryParams $queryParams diff --git a/Tests/New-PfbLegalHoldEntity.Tests.ps1 b/Tests/New-PfbLegalHoldEntity.Tests.ps1 index df44d16..49f417c 100644 --- a/Tests/New-PfbLegalHoldEntity.Tests.ps1 +++ b/Tests/New-PfbLegalHoldEntity.Tests.ps1 @@ -15,14 +15,23 @@ Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } } - Context 'existing hold/member selectors (regression, unchanged)' { - It 'still sends -HoldName as hold_names and -MemberName as member_names' { - New-PfbLegalHoldEntity -HoldName 'litigation-hold-2024' -MemberName 'fs1' -Confirm:$false -Array $fakeArray + Context '-HoldName/-MemberName are not exposed (whole-branch review: hold_names/member_names do not exist on this endpoint in any cached spec version)' { + It 'has no -HoldName parameter' { + (Get-Command New-PfbLegalHoldEntity).Parameters.Keys | Should -Not -Contain 'HoldName' + } + + It 'has no -MemberName parameter' { + (Get-Command New-PfbLegalHoldEntity).Parameters.Keys | Should -Not -Contain 'MemberName' + } + + It 'never sends hold_names or member_names query parameters' { + New-PfbLegalHoldEntity -Names 'litigation-hold-2024' -FileSystemNames 'fs1' -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Method -eq 'POST' -and $Endpoint -eq 'legal-holds/held-entities' -and - $QueryParams['hold_names'] -eq 'litigation-hold-2024' -and - $QueryParams['member_names'] -eq 'fs1' + -not $QueryParams.ContainsKey('hold_names') -and -not $QueryParams.ContainsKey('member_names') -and + $QueryParams['names'] -eq 'litigation-hold-2024' -and + $QueryParams['file_system_names'] -eq 'fs1' } } } @@ -63,7 +72,7 @@ Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { } It 'sends an explicit -Recursive:$false (ContainsKey semantics, not truthiness)' { - New-PfbLegalHoldEntity -MemberName 'fs1' -Recursive $false -Confirm:$false -Array $fakeArray + New-PfbLegalHoldEntity -FileSystemNames 'fs1' -Recursive $false -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams.ContainsKey('recursive') -and $QueryParams['recursive'] -eq $false @@ -71,7 +80,7 @@ Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { } It 'sends -Recursive:$true when supplied' { - New-PfbLegalHoldEntity -MemberName 'fs1' -Recursive $true -Confirm:$false -Array $fakeArray + New-PfbLegalHoldEntity -FileSystemNames 'fs1' -Recursive $true -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $QueryParams['recursive'] -eq $true @@ -79,7 +88,7 @@ Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { } It 'omits recursive entirely when not supplied' { - New-PfbLegalHoldEntity -MemberName 'fs1' -Confirm:$false -Array $fakeArray + New-PfbLegalHoldEntity -FileSystemNames 'fs1' -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { -not $QueryParams.ContainsKey('recursive') @@ -89,7 +98,7 @@ Describe 'New-PfbLegalHoldEntity - query parameters (#31)' { Context 'endpoint accepts no request body' { It 'sends an empty body when -Attributes is not supplied' { - New-PfbLegalHoldEntity -MemberName 'fs1' -Confirm:$false -Array $fakeArray + New-PfbLegalHoldEntity -FileSystemNames 'fs1' -Confirm:$false -Array $fakeArray Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { $Body.Count -eq 0 From f1aa647a20b65dc99daef71c9f0ae56d49f946e7 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:14:21 -0700 Subject: [PATCH 84/90] fix(policy): alias -LocalFileSystemName to -MemberName for consistency (#31 whole-branch review I-3) The sibling cmdlet New-PfbFileSystemReplicaLinkPolicy kept -MemberName as a backward-compatible alias of its renamed equivalent parameter; this cmdlet had simply dropped -MemberName instead, giving two nearly identical wire-key fixes two different compatibility stories. Made consistent by adding the same alias here. --- .../Policy/New-PfbPolicyFileSystemReplicaLink.ps1 | 9 ++++++--- .../New-PfbPolicyFileSystemReplicaLink.Tests.ps1 | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 index 4776bc2..6e6b4f2 100644 --- a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 +++ b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 @@ -15,13 +15,16 @@ function New-PfbPolicyFileSystemReplicaLink { `local_file_system_ids`) and its remote side (`remote_names`/`remote_ids`), so -MemberName is replaced with -LocalFileSystemName/-LocalFileSystemId and -RemoteName/-RemoteId, while -MemberId is kept (mapped to the real `member_ids` key) as - an additional, independent selector alongside them. + an additional, independent selector alongside them. -LocalFileSystemName keeps + -MemberName as a backward-compatible alias (whole-branch review finding I-3: matches + the identical rename on the sibling cmdlet New-PfbFileSystemReplicaLinkPolicy). .PARAMETER PolicyName The policy name. .PARAMETER PolicyId The policy ID. .PARAMETER LocalFileSystemName - The name of the local file system side of the replica link. + The name of the local file system side of the replica link. Also accepts the alias + -MemberName. .PARAMETER LocalFileSystemId The ID of the local file system side of the replica link. .PARAMETER MemberId @@ -51,7 +54,7 @@ function New-PfbPolicyFileSystemReplicaLink { param( [Parameter()] [string]$PolicyName, [Parameter()] [string]$PolicyId, - [Parameter()] [string]$LocalFileSystemName, + [Parameter()] [Alias('MemberName')] [string]$LocalFileSystemName, [Parameter()] [string]$MemberId, [Parameter()] [string]$LocalFileSystemId, [Parameter()] [string]$RemoteName, diff --git a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 index 68b7268..3a6f32f 100644 --- a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 +++ b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 @@ -46,8 +46,19 @@ Describe 'New-PfbPolicyFileSystemReplicaLink - correct query wire keys (#31)' { } } - It 'no longer exposes the incorrectly-wired -MemberName parameter' { - (Get-Command New-PfbPolicyFileSystemReplicaLink).Parameters.Keys | Should -Not -Contain 'MemberName' + It 'accepts -MemberName as a backward-compatible alias of -LocalFileSystemName (whole-branch review finding I-3: matches the sibling cmdlet New-PfbFileSystemReplicaLinkPolicy)' { + New-PfbPolicyFileSystemReplicaLink -PolicyName 'daily-snap' -MemberName 'fs01' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $QueryParams['local_file_system_names'] -eq 'fs01' -and + -not $QueryParams.ContainsKey('member_names') + } + } + + It 'exposes no separate -MemberName parameter (alias only)' { + $params = (Get-Command New-PfbPolicyFileSystemReplicaLink).Parameters + $params.Keys | Should -Not -Contain 'MemberName' + $params['LocalFileSystemName'].Aliases | Should -Contain 'MemberName' } It 'sends -MemberId as member_ids (real, spec-declared parameter -- restored after review, unlike -MemberName)' { From 2e3a7752cf7fc0cdb7f271d74e5be1b0680cddc8 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:38:20 -0700 Subject: [PATCH 85/90] test: guard in-scope cmdlets against drift-confidence regression (#31) Regenerates the API drift report and asserts none of the 56 in-scope write endpoints has dropped to partial confidence -- i.e. no future edit reintroduces a parser-untraceable body assignment (Constraint 7) without the suite catching it. Measured baseline: 44 in-scope write endpoints currently have an open parameterGaps entry, all 44 at high confidence, 0 partial (the other 12 in-scope cmdlets have zero remaining gaps at all, so they don't appear in the gaps list). Mutation-proved: casting Update-PfbAdmin's $body['locked'] = $Locked to [bool]$Locked breaks the AST trace and fails the guard naming 'PATCH /admins [Locked]' exactly as expected; reverted and confirmed green again. --- Tests/Issue31.DriftConfidence.Tests.ps1 | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Tests/Issue31.DriftConfidence.Tests.ps1 diff --git a/Tests/Issue31.DriftConfidence.Tests.ps1 b/Tests/Issue31.DriftConfidence.Tests.ps1 new file mode 100644 index 0000000..4454341 --- /dev/null +++ b/Tests/Issue31.DriftConfidence.Tests.ps1 @@ -0,0 +1,58 @@ +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0' } + +BeforeAll { + $script:repoRoot = Split-Path -Parent $PSScriptRoot + . (Join-Path $repoRoot 'tools/lib/PfbCmdletParamTools.ps1') + . (Join-Path $repoRoot 'tools/lib/PfbApiDriftTools.ps1') + + # The 56 cmdlets this issue converts. All were 'high' confidence before the change + # and must remain 'high' after it -- see design spec constraint 7. + $script:inScope = @( + 'New-PfbApiToken','Update-PfbAdmin','Update-PfbApiClient','Update-PfbManagementAccessPolicy', + 'Update-PfbOidcIdp','Update-PfbSaml2Idp','Update-PfbCertificate','New-PfbCertificateCertificateGroup', + 'Update-PfbBucketAuditFilter','Update-PfbActiveDirectory','Update-PfbDirectoryServiceRole', + 'Update-PfbFileSystemExport','Update-PfbRealmDefaults','Update-PfbHardware','Update-PfbHardwareConnector', + 'Update-PfbAsyncLog','Update-PfbLogTargetFileSystem','Update-PfbLogTargetObjectStore', + 'Update-PfbSnmpManager','Update-PfbSyslogServer','New-PfbLegalHoldEntity','Update-PfbKmip', + 'Update-PfbLag','Update-PfbLegalHold','Update-PfbLegalHoldEntity','Update-PfbLifecycleRule', + 'New-PfbNetworkInterfaceTlsPolicy','Update-PfbDns','Update-PfbNetworkInterface', + 'Update-PfbNetworkInterfaceConnector','Update-PfbSubnet','New-PfbNodeGroupNode','Update-PfbNode', + 'Update-PfbNodeGroup','Update-PfbObjectStoreAccountExport','Update-PfbObjectStoreRemoteCredential', + 'Update-PfbObjectStoreRole','Update-PfbObjectStoreVirtualHost','New-PfbNetworkAccessRule', + 'New-PfbNfsExportRule','New-PfbPolicyFileSystemReplicaLink','New-PfbQosPolicyMember', + 'New-PfbS3ExportRule','New-PfbSmbClientRule','New-PfbSmbShareRule','Update-PfbQosPolicy', + 'Update-PfbSshCaPolicy','Update-PfbStorageClassTieringPolicy','Update-PfbTlsPolicy', + 'Update-PfbWormPolicy','New-PfbArrayConnection','New-PfbFileSystemReplicaLinkPolicy', + 'New-PfbFleetMember','Update-PfbArrayConnection','Update-PfbFleet','Update-PfbTarget' + ) +} + +Describe 'Issue #31 - in-scope cmdlets keep high drift confidence' { + It 'no in-scope write endpoint has dropped to partial confidence' { + # Build-PfbApiDriftReport.ps1 has no -PassThru (verified: its parameters are + # SpecsDirectory, PublicDirectory, PrivateDirectory, CapabilityMapPath, + # FieldCmdletMapPath, OutputPath, ReportPath, SinceVersion). Generate to a temp + # path so the run never mutates the committed Reports/ artifacts, then read it. + $tmpJson = Join-Path ([IO.Path]::GetTempPath()) "pfb-drift-$([guid]::NewGuid()).json" + $tmpMd = [IO.Path]::ChangeExtension($tmpJson, '.md') + & (Join-Path $repoRoot 'tools/Build-PfbApiDriftReport.ps1') -OutputPath $tmpJson -ReportPath $tmpMd | Out-Null + $report = Get-Content $tmpJson -Raw | ConvertFrom-Json + Remove-Item $tmpJson, $tmpMd -ErrorAction SilentlyContinue + + $regressed = @( + $report.parameterGaps | + Where-Object { $_.endpoint -match '^(POST|PATCH|PUT) ' } | + Where-Object { $_.confidence.level -eq 'partial' } | + Where-Object { @($_.cmdlets | Where-Object { $inScope -contains $_ }).Count -gt 0 } | + ForEach-Object { "$($_.endpoint) [$($_.confidence.escapeHatchOnly -join ',')]" } + ) + + $regressed | Should -BeNullOrEmpty -Because @' +these endpoints became parser-untraceable, which means the drift report can no +longer see real gaps on them. Fix the body assignment so the parameter is BARE +and assigned INLINE, in one of the shapes Global Constraint 7 names. Do NOT +compute into a local variable first -- that is the pre-inversion rule and it +causes exactly the blindness this guard exists to catch. +'@ + } +} From 31b60b5c7db4959353368df0942d568023b6faec Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:43:30 -0700 Subject: [PATCH 86/90] docs: regenerate API drift report after issue #31 (#31, Task 12 step 3) In-scope (56 cmdlets) addable gaps: body 206 -> 3, query 83 -> 27. The 3 remaining body gaps are the deprecated fields Constraint 9 excludes on purpose (role/max_role/role on Update-PfbAdmin, Update-PfbApiClient, Update-PfbDirectoryServiceRole). Of the 27 remaining query gaps, 26 are context_names -- a systemic, cross-cutting gap tracked separately (Fusion context design, not in this issue's scope) -- and 1 is role_ids/role_names on Update-PfbDirectoryServiceRole, dropped under an explicit controller ruling (structurally unreachable given the cmdlet's other selectors). Overall: endpoints with parameter gaps 432 -> 420, addable body 606 -> 403, addable query 1004 -> 948, systemic gaps 312 -> 252. --- Reports/PfbApiDriftReport.json | 24332 +++++++++++++------------------ Reports/PfbApiDriftReport.md | 146 +- 2 files changed, 9908 insertions(+), 14570 deletions(-) diff --git a/Reports/PfbApiDriftReport.json b/Reports/PfbApiDriftReport.json index 15f37fb..312ae5a 100644 --- a/Reports/PfbApiDriftReport.json +++ b/Reports/PfbApiDriftReport.json @@ -5627,180 +5627,6 @@ }, "annotations": [] }, - { - "endpoint": "PATCH /active-directory", - "cmdlets": [ - "Update-PfbActiveDirectory" - ], - "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": [ @@ -5810,108 +5636,6 @@ "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, @@ -5923,9 +5647,9 @@ "enumStatus": "no-spec-enum-found", "target": { "file": "Public/Admin/Update-PfbAdmin.ps1", - "paramBlockLine": 37, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "paramBlockLine": 93, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } @@ -6089,23 +5813,6 @@ ], "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, @@ -6117,9 +5824,9 @@ "enumStatus": "no-spec-enum-found", "target": { "file": "Public/Admin/Update-PfbApiClient.ps1", - "paramBlockLine": 41, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "paramBlockLine": 61, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } @@ -6147,114 +5854,9 @@ "Update-PfbArrayConnection" ], "missingQueryParameters": [ - "context_names", - "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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ "context", "id", @@ -6622,47 +6224,9 @@ "Update-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/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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -6677,293 +6241,133 @@ "cmdlets": [ "Update-PfbCertificate" ], + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /data-eviction-policies", + "cmdlets": [ + "Update-PfbDataEvictionPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location" + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "TypedUnresolved", + "file": "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 /directory-services", + "cmdlets": [ + "Update-PfbDirectoryService" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ + "base_dn", + "bind_password", + "bind_user", + "ca_certificate", + "ca_certificate_group", + "enabled", + "management", + "nfs", + "smb", + "uris" + ], + "readOnlyFields": [ + "id", + "name", + "services" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /directory-services/roles", + "cmdlets": [ + "Update-PfbDirectoryServiceRole" + ], "missingQueryParameters": [ - "generate_new_key" + "role_ids", + "role_names" ], "missingBodyProperties": [ { - "name": "certificate", - "type": "string", + "name": "role", + "type": null, "format": null, "specRequired": false, - "synopsis": "The text of the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", "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", + "file": "Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 64, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } ], "readOnlyFields": [ - "issued_by", - "issued_to", - "realms", - "status", - "valid_from", - "valid_to" + "id", + "management_access_policies", + "name" ], "confidence": { "level": "high", @@ -6974,148 +6378,43 @@ "annotations": [] }, { - "endpoint": "PATCH /data-eviction-policies", + "endpoint": "PATCH /dns", "cmdlets": [ - "Update-PfbDataEvictionPolicy" + "Update-PfbDns" ], "missingQueryParameters": [ "context_names" ], - "missingBodyProperties": [ - "enabled", - "location" - ], + "missingBodyProperties": [], "readOnlyFields": [ "context", "id", - "is_local", - "policy_type", "realms" ], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "TypedUnresolved", - "file": "Public/DataEviction/Update-PfbDataEvictionPolicy.ps1", - "line": 37 - } - ], + "level": "high", + "unresolvedParameters": [], "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" + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /directory-services", + "endpoint": "PATCH /file-system-exports", "cmdlets": [ - "Update-PfbDirectoryService" + "Update-PfbFileSystemExport" ], "missingQueryParameters": [ - "ids", - "names" - ], - "missingBodyProperties": [ - "base_dn", - "bind_password", - "bind_user", - "ca_certificate", - "ca_certificate_group", - "enabled", - "management", - "nfs", - "smb", - "uris" + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ + "context", + "enabled", "id", "name", - "services" - ], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Name", - "surface": "AttributesOnly", - "file": "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 /directory-services/roles", - "cmdlets": [ - "Update-PfbDirectoryServiceRole" - ], - "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", - "management_access_policies", - "name" + "policy_type", + "status" ], "confidence": { "level": "high", @@ -7126,277 +6425,56 @@ "annotations": [] }, { - "endpoint": "PATCH /dns", + "endpoint": "PATCH /file-system-snapshots", "cmdlets": [ - "Update-PfbDns" + "Remove-PfbFileSystemSnapshot" ], "missingQueryParameters": [ "context_names", - "ids", - "names" + "latest_replica" ], "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 - } - } + "destroyed", + "name", + "owner", + "policy", + "source" ], "readOnlyFields": [ "context", + "created", "id", - "realms" + "owner_destroyed", + "policies", + "suffix", + "time_remaining" ], "confidence": { - "level": "high", - "unresolvedParameters": [], + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "Public/FileSystemSnapshot/Remove-PfbFileSystemSnapshot.ps1", + "line": 24 + } + ], "escapeHatchOnly": [], - "caveat": "" + "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-system-exports", + "endpoint": "PATCH /file-systems", "cmdlets": [ - "Update-PfbFileSystemExport" + "Remove-PfbFileSystem", + "Update-PfbFileSystem" ], "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": "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" + "cancel_in_progress_storage_class_transition", + "context_names", + "discard_detailed_permissions", + "ignore_usage" ], "missingBodyProperties": [ "abort_quiesce", @@ -7505,65 +6583,13 @@ }, "annotations": [] }, - { - "endpoint": "PATCH /fleets", - "cmdlets": [ - "Update-PfbFleet" - ], - "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" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "data_mac", "details", @@ -7595,76 +6621,7 @@ "Update-PfbHardwareConnector" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "connector_type", "id", @@ -7685,59 +6642,7 @@ "Update-PfbKmip" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "id", "name" @@ -7756,25 +6661,7 @@ "Update-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/Update-PfbLegalHold.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": true - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "id", "name", @@ -7789,17 +6676,12 @@ "annotations": [] }, { - "endpoint": "PATCH /legal-holds/held-entities", + "endpoint": "PATCH /lifecycle-rules", "cmdlets": [ - "Update-PfbLegalHoldEntity" + "Update-PfbLifecycleRule" ], "missingQueryParameters": [ - "file_system_ids", - "file_system_names", - "ids", - "paths", - "recursive", - "released" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -7812,121 +6694,251 @@ "annotations": [] }, { - "endpoint": "PATCH /lifecycle-rules", + "endpoint": "PATCH /log-targets/file-systems", "cmdlets": [ - "Update-PfbLifecycleRule" + "Update-PfbLogTargetFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /log-targets/object-store", + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /logs-async", + "cmdlets": [ + "Update-PfbAsyncLog" + ], + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "available_files", + "id", + "last_request_time", + "name", + "processing", + "progress" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /management-access-policies", + "cmdlets": [ + "Update-PfbManagementAccessPolicy" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", - "confirm_date", "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "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", + "version" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": "abort_incomplete_multipart_uploads_after", - "type": "integer", - "format": "int64", + "name": "client", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", - "suggestedPowerShellType": "[long]", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", + "name": "effect", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If set to `true`, this rule will be enabled.", - "suggestedPowerShellType": "[bool]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_current_version_for", + "name": "index", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_current_version_until", - "type": "integer", - "format": "int64", + "name": "interfaces", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_previous_version_for", - "type": "integer", - "format": "int64", + "name": "policy", + "type": null, + "format": null, "specRequired": false, - "synopsis": "Time after which previous versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", "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, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name", + "policy_version" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -7936,242 +6948,276 @@ "annotations": [] }, { - "endpoint": "PATCH /link-aggregation-groups", + "endpoint": "PATCH /network-interfaces/connectors", "cmdlets": [ - "Update-PfbLag" + "Update-PfbNetworkInterfaceConnector" ], "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "connector_type", + "id", + "name", + "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": "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": "add_ports", - "type": "array", + "name": "access", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "ports", - "type": "array", + "name": "anonuid", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "remove_ports", - "type": "array", + "name": "atime", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /log-targets/file-systems", - "cmdlets": [ - "Update-PfbLogTargetFileSystem" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "file_system", - "type": null, + "name": "client", + "type": "string", "format": null, "specRequired": false, - "synopsis": "The target filesystem where audit logs will be stored.", - "suggestedPowerShellType": "[object]", + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_for", - "type": "integer", - "format": "int64", + "name": "fileid_32bit", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "Specifies the period that audit logs are retained before they are deleted, in milliseconds.", - "suggestedPowerShellType": "[long]", + "synopsis": "Whether the file id is 32 bits or not.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_size", + "name": "index", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Specifies the maximum size of audit logs to be retained.", - "suggestedPowerShellType": "[long]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "permission", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [ - "id" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /log-targets/object-store", - "cmdlets": [ - "Update-PfbLogTargetObjectStore" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "bucket", - "type": null, + "name": "required_transport_security", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the bucket where audit logs will be stored.", - "suggestedPowerShellType": "[object]", + "synopsis": "Specifies the minimum transport security required for clients to access the export.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "log_name_prefix", - "type": null, + "name": "secure", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "The prefix of the audit log object.", - "suggestedPowerShellType": "[object]", + "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/Monitoring/Update-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "log_rotate", - "type": null, + "name": "security", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The threshold after which the audit log object will be rotated.", - "suggestedPowerShellType": "[object]", + "synopsis": "The security flavors to use for accessing files on this mount point.", + "suggestedPowerShellType": "[string[]]", "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", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], "readOnlyFields": [ - "id" + "id", + "name" ], "confidence": { "level": "high", @@ -8182,71 +7228,154 @@ "annotations": [] }, { - "endpoint": "PATCH /logs-async", + "endpoint": "PATCH /nodes", "cmdlets": [ - "Update-PfbAsyncLog" + "Update-PfbNode" ], "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "capacity", + "chassis_serial_number", + "data_addresses", + "details", + "id", + "raw_capacity", + "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": "end_time", - "type": "integer", - "format": "int64", + "name": "actions", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "When the time window ends (in milliseconds since epoch).", - "suggestedPowerShellType": "[long]", + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "hardware_components", - "type": "array", + "name": "conditions", + "type": null, "format": null, "specRequired": false, - "synopsis": "All of the hardware components for which logs are being processed.", - "suggestedPowerShellType": "[object[]]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "start_time", - "type": "integer", - "format": "int64", + "name": "effect", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "When the time window starts (in milliseconds since epoch).", - "suggestedPowerShellType": "[long]", + "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/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "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" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /object-store-remote-credentials", + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], "readOnlyFields": [ - "available_files", + "context", "id", - "last_request_time", - "name", - "processing", - "progress" + "realms" ], "confidence": { "level": "high", @@ -8257,107 +7386,114 @@ "annotations": [] }, { - "endpoint": "PATCH /management-access-policies", + "endpoint": "PATCH /object-store-roles", "cmdlets": [ - "Update-PfbManagementAccessPolicy" + "Update-PfbObjectStoreRole" ], "missingQueryParameters": [ "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "created", + "id", + "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": "aggregation_strategy", - "type": "string", + "name": "actions", + "type": "array", "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]", + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", + "name": "conditions", + "type": "array", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "location", + "name": "policy", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": "The policy to which this rule belongs.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", - "type": "string", + "name": "principals", + "type": "array", "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.", + "synopsis": "List of Identity Providers", "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], "readOnlyFields": [ - "context", - "id", - "is_local", - "policy_type", - "realms", - "version" + "effect" ], "confidence": { "level": "high", @@ -8365,312 +7501,254 @@ "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 - } - ] + "annotations": [] }, { - "endpoint": "PATCH /network-access-policies", + "endpoint": "PATCH /object-store-virtual-hosts", "cmdlets": [ - "Update-PfbNetworkAccessPolicy" + "Update-PfbObjectStoreVirtualHost" ], "missingQueryParameters": [ - "versions" - ], - "missingBodyProperties": [ - "enabled", - "location", - "name", - "rules" + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms", - "version" + "id" ], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbNetworkAccessPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /network-access-policies/rules", + "endpoint": "PATCH /password-policies", "cmdlets": [ - "Update-PfbNetworkAccessRule" + "Update-PfbPasswordPolicy" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", "ids", - "versions" + "names" ], "missingBodyProperties": [ { - "name": "client", - "type": "string", + "name": "enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "Specifies the clients that will be permitted or denied access to the interface.", - "suggestedPowerShellType": "[string]", + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", - "type": "string", + "name": "enforce_dictionary_check", + "type": "boolean", "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]", + "synopsis": "If `true`, test password against dictionary of known leaked passwords.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "interfaces", - "type": "array", + "name": "enforce_username_check", + "type": "boolean", "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", + "synopsis": "If `true`, the username cannot be a substring of the password.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", + "name": "location", "type": null, "format": null, "specRequired": false, - "synopsis": "The policy to which this rule belongs.", + "synopsis": "Reference to the array where the policy is defined.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "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" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ + }, { - "name": "attached_servers", - "type": "array", - "format": null, + "name": "lockout_duration", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "List of servers to be associated with the specified network interface for data ingress.", - "suggestedPowerShellType": "[object[]]", + "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/Network/Update-PfbNetworkInterface.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "index", + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "rdma_enabled", - "type": "boolean", - "format": null, + "name": "max_login_attempts", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", - "suggestedPowerShellType": "[bool]", + "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/Network/Update-PfbNetworkInterface.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "index", + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "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" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - { - "name": "lane_speed", + "name": "max_password_age", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Configured speed of each lane in the connector in bits-per-second.", + "synopsis": "The maximum age of password before password change is required.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "lanes_per_port", + "name": "min_character_groups", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Configured number of lanes comprising each port in the connector.", - "suggestedPowerShellType": "[long]", + "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/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "port_count", + "name": "min_characters_per_group", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Configured number of ports in the connector (1/2/4 for QSFP).", - "suggestedPowerShellType": "[long]", + "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/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "port_speed", + "name": "min_password_age", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Configured speed of each port in the connector in bits-per-second.", + "synopsis": "The minimum age, in milliseconds, of password before password change is allowed.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "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 @@ -8678,10 +7756,10 @@ } ], "readOnlyFields": [ - "connector_type", "id", - "name", - "transceiver_type" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -8692,26 +7770,27 @@ "annotations": [] }, { - "endpoint": "PATCH /nfs-export-policies", + "endpoint": "PATCH /policies", "cmdlets": [ - "Update-PfbNfsExportPolicy" + "Update-PfbPolicy" ], "missingQueryParameters": [ "context_names", - "versions" + "destroy_snapshots" ], "missingBodyProperties": [ + "add_rules", "enabled", "location", - "name", - "rules" + "remove_rules" ], "readOnlyFields": [ "id", "is_local", + "name", "policy_type", "realms", - "version" + "retention_lock" ], "confidence": { "level": "partial", @@ -8719,8 +7798,8 @@ { "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbNfsExportPolicy.ps1", - "line": 42 + "file": "Public/Policy/Update-PfbPolicy.ps1", + "line": 28 } ], "escapeHatchOnly": [ @@ -8731,172 +7810,346 @@ "annotations": [] }, { - "endpoint": "PATCH /nfs-export-policies/rules", + "endpoint": "PATCH /presets/workload", "cmdlets": [ - "Update-PfbNfsExportRule" + "Update-PfbPresetWorkload" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /qos-policies", + "cmdlets": [ + "Update-PfbQosPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /quotas/groups", + "cmdlets": [ + "Update-PfbQuotaGroup" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", "context_names", - "ids", - "versions" + "file_system_ids", + "file_system_names", + "gids", + "group_names", + "names" ], - "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 + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "Public/Quota/Update-PfbQuotaGroup.ps1", + "line": 35 + }, + { + "parameter": "GroupName", + "surface": "AttributesOnly", + "file": "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 /quotas/settings", + "cmdlets": [ + "Update-PfbQuotaSettings" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ { - "name": "anonuid", + "name": "contact", "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`.", + "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/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "atime", + "name": "direct_notifications_enabled", "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.", + "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/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, + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, "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 + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /quotas/users", + "cmdlets": [ + "Update-PfbQuotaUser" + ], + "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": "Public/Quota/Update-PfbQuotaUser.ps1", + "line": 30 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "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 /rapid-data-locking", + "cmdlets": [ + "Update-PfbRapidDataLocking" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ { - "name": "index", - "type": "integer", - "format": "int32", + "name": "enabled", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "The index within the policy.", - "suggestedPowerShellType": "[int]", + "synopsis": "`True` if the Rapid Data Locking feature is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "permission", - "type": "string", + "name": "kmip_server", + "type": null, "format": null, "specRequired": false, - "synopsis": "Specifies which read-write client access permissions are allowed for the export.", - "suggestedPowerShellType": "[string]", - "enumValues": [ - "rw", - "ro" - ], - "enumStatus": "matched", + "synopsis": "The KMIP server configuration associated with RDL.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - }, + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /realms", + "cmdlets": [ + "Remove-PfbRealm", + "Update-PfbRealm" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "default_inbound_tls_policy", + "destroyed", + "name" + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "AttributesOnly", + "file": "Public/Realm/Update-PfbRealm.ps1", + "line": 31 + }, + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "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 /realms/defaults", + "cmdlets": [ + "Update-PfbRealmDefaults" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "realm" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /s3-export-policies", + "cmdlets": [ + "Update-PfbS3ExportPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "name", + "rules" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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 /s3-export-policies/rules", + "cmdlets": [ + "Update-PfbS3ExportRule" + ], + "missingQueryParameters": [ + "context_names", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ { - "name": "required_transport_security", - "type": "string", + "name": "actions", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Specifies the minimum transport security required for clients to access the export.", - "suggestedPowerShellType": "[string]", + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8904,16 +8157,16 @@ } }, { - "name": "secure", - "type": "boolean", + "name": "effect", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If `true`, prevents NFS access to client connections coming from non-reserved ports.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8921,16 +8174,16 @@ } }, { - "name": "security", + "name": "resources", "type": "array", "format": null, "specRequired": false, - "synopsis": "The security flavors to use for accessing files on this mount point.", + "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-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8938,10 +8191,7 @@ } } ], - "readOnlyFields": [ - "id", - "name" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -8951,109 +8201,144 @@ "annotations": [] }, { - "endpoint": "PATCH /node-groups", + "endpoint": "PATCH /smb-client-policies", "cmdlets": [ - "Update-PfbNodeGroup" + "Update-PfbSmbClientPolicy" + ], + "missingQueryParameters": [ + "context_names" ], - "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 - } - } + "access_based_enumeration_enabled", + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms", + "version" ], - "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": "PATCH /nodes", + "endpoint": "PATCH /smb-client-policies/rules", "cmdlets": [ - "Update-PfbNode" + "Update-PfbSmbClientRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "context_names", + "ids", + "versions" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "management_address", + "name": "client", "type": "string", "format": null, "specRequired": false, - "synopsis": "The control IP address of the node.", + "synopsis": "Specifies the clients that will be permitted to access the export.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "encryption", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Specifies whether the remote client is required to use SMB encryption.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumValues": [ + "required", + "disabled", + "optional" + ], + "enumStatus": "matched", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "node_key", - "type": "string", - "format": null, + "name": "index", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": "A key used to bootstrap a mTLS connection with the node being connected to.", - "suggestedPowerShellType": "[string]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "serial_number", + "name": "permission", "type": "string", "format": null, "specRequired": false, - "synopsis": "The serial number of the node.", + "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/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -9061,14 +8346,10 @@ } ], "readOnlyFields": [ - "capacity", - "chassis_serial_number", - "data_addresses", - "details", + "context", "id", - "raw_capacity", - "status", - "unique" + "name", + "policy_version" ], "confidence": { "level": "high", @@ -9079,57 +8360,80 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-access-policies/rules", + "endpoint": "PATCH /smb-share-policies", "cmdlets": [ - "Update-PfbObjectStoreAccessPolicyRule" + "Update-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": "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": "PATCH /smb-share-policies/rules", + "cmdlets": [ + "Update-PfbSmbShareRule" ], "missingQueryParameters": [ "context_names", - "enforce_action_restrictions", + "ids", "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, + "name": "change", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Conditions used to limit the scope which this rule applies to.", - "suggestedPowerShellType": "[object]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": "The state of the principal's Change access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", + "name": "full_control", "type": "string", "format": null, "specRequired": false, - "synopsis": "Effect of this rule.", + "synopsis": "The state of the principal's Full Control access permission.", "suggestedPowerShellType": "[string]", "enumValues": [ "allow", @@ -9137,85 +8441,72 @@ ], "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "resources", - "type": "array", + "name": "policy", + "type": null, "format": null, "specRequired": false, - "synopsis": "The list of resources which this rule applies to.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /object-store-account-exports", - "cmdlets": [ - "Update-PfbObjectStoreAccountExport" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "export_enabled", - "type": "boolean", + "name": "principal", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If set to `true`, the account export is enabled.", - "suggestedPowerShellType": "[bool]", + "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/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", - "type": null, + "name": "read", + "type": "string", "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", + "synopsis": "The state of the principal's Read access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -9225,87 +8516,71 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-remote-credentials", + "endpoint": "PATCH /snmp-agents", "cmdlets": [ - "Update-PfbObjectStoreRemoteCredential" - ], - "missingQueryParameters": [ - "context_names" + "Update-PfbSnmpAgent" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "access_key_id", - "type": "string", + "name": "v2c", + "type": null, "format": null, "specRequired": false, - "synopsis": "Access Key ID to be used when connecting to a remote object store.", - "suggestedPowerShellType": "[string]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "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", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "remote", + "name": "v3", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the associated remote, which can either be a `target` or remote `array`.", + "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", - "paramBlockLine": 46, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "secret_access_key", + "name": "version", "type": "string", "format": null, "specRequired": false, - "synopsis": "Secret Access Key to be used when connecting to a remote object store.", + "synopsis": "Version of the SNMP protocol to be used by an SNMP manager in communications with Purity's SNMP agent.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumValues": [ + "v2c", + "v3" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", - "paramBlockLine": 46, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], "readOnlyFields": [ - "context", + "engine_id", "id", - "realms" + "name" ], "confidence": { "level": "high", @@ -9316,56 +8591,36 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-roles", + "endpoint": "PATCH /snmp-managers", "cmdlets": [ - "Update-PfbObjectStoreRole" + "Update-PfbSnmpManager" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" ], - "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 - } - } + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /ssh-certificate-authority-policies", + "cmdlets": [ + "Update-PfbSshCaPolicy" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ "context", - "created", "id", - "name", - "prn", - "trusted_entities" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -9376,89 +8631,14 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-roles/object-store-trust-policies/rules", + "endpoint": "PATCH /sso/oidc/idps", "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 - } - } + "Update-PfbOidcIdp" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ - "effect" + "prn" ], "confidence": { "level": "high", @@ -9469,102 +8649,36 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-virtual-hosts", + "endpoint": "PATCH /sso/saml2/idps", "cmdlets": [ - "Update-PfbObjectStoreVirtualHost" + "Update-PfbSaml2Idp" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id", + "prn" ], - "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 - } - } + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /storage-class-tiering-policies", + "cmdlets": [ + "Update-PfbStorageClassTieringPolicy" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ - "id" + "id", + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -9575,237 +8689,271 @@ "annotations": [] }, { - "endpoint": "PATCH /password-policies", + "endpoint": "PATCH /subnets", "cmdlets": [ - "Update-PfbPasswordPolicy" + "Update-PfbSubnet" ], - "missingQueryParameters": [ - "ids", - "names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /support", + "cmdlets": [ + "Update-PfbSupport" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", + "name": "edge_agent_update_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", + "synopsis": "The switch to enable opt-in for edge agent updates.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enforce_dictionary_check", + "name": "edge_management_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, test password against dictionary of known leaked passwords.", + "synopsis": "The switch to enable opt-in for edge management.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enforce_username_check", + "name": "phonehome_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, the username cannot be a substring of the password.", + "synopsis": "The switch to enable phonehome.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "location", - "type": null, + "name": "proxy", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": null, + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "lockout_duration", - "type": "integer", - "format": "int64", + "name": "remote_assist_active", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "The lockout duration, in milliseconds, if a user is locked out after reaching the maximum number of login attempts.", - "suggestedPowerShellType": "[long]", + "synopsis": "The switch to open all remote-assist sessions.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "max_login_attempts", + "name": "remote_assist_duration", "type": "integer", - "format": "int32", + "format": "int64", "specRequired": false, - "synopsis": "Maximum number of failed login attempts allowed before the user is locked out.", - "suggestedPowerShellType": "[int]", + "synopsis": "Specifies the duration of the remote-assist session in milliseconds.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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": "max_password_age", - "type": "integer", - "format": "int64", + "name": "signed_verification_key", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "The maximum age of password before password change is required.", - "suggestedPowerShellType": "[long]", + "synopsis": "The text of the signed verification key.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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/settings", + "cmdlets": [ + "Update-PfbSyslogServerSettings" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ { - "name": "min_character_groups", - "type": "integer", - "format": "int32", + "name": "ca_certificate", + "type": "object", + "format": null, "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]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Monitoring/Update-PfbSyslogServerSettings.ps1", + "paramBlockLine": 28, "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", + "name": "ca_certificate_group", + "type": "object", "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]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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": [], + "readOnlyFields": [ + "id", + "status", + "status_details" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /tls-policies", + "cmdlets": [ + "Update-PfbTlsPolicy" + ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ "id", "is_local", @@ -9821,49 +8969,103 @@ "annotations": [] }, { - "endpoint": "PATCH /policies", + "endpoint": "PATCH /workloads", "cmdlets": [ - "Update-PfbPolicy" + "Update-PfbWorkload" ], "missingQueryParameters": [ - "context_names", - "destroy_snapshots" + "context_names" ], "missingBodyProperties": [ - "add_rules", - "enabled", - "location", - "remove_rules" + "destroyed" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "TypedUnresolved", + "file": "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": "PATCH /worm-data-policies", + "cmdlets": [ + "Update-PfbWormPolicy" + ], + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ + "context", "id", "is_local", "name", "policy_type", - "realms", - "retention_lock" + "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": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbPolicy.ps1", - "line": 28 + "file": "Public/DirectoryService/New-PfbActiveDirectory.ps1", + "line": 40 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /presets/workload", + "endpoint": "POST /admins/api-tokens", "cmdlets": [ - "Update-PfbPresetWorkload" + "New-PfbApiToken" ], "missingQueryParameters": [ "context_names" @@ -9879,106 +9081,167 @@ "annotations": [] }, { - "endpoint": "PATCH /qos-policies", + "endpoint": "POST /admins/management-access-policies", "cmdlets": [ - "Update-PfbQosPolicy" + "New-PfbAdminManagementAccessPolicy" + ], + "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 /admins/ssh-certificate-authority-policies", + "cmdlets": [ + "New-PfbAdminSshCaPolicy" ], "missingQueryParameters": [ "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /api-clients", + "cmdlets": [ + "New-PfbApiClient" + ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", - "type": "boolean", + "name": "access_policies", + "type": "array", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "The access policies allowed for ID Tokens issued by this API client.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "location", - "type": null, - "format": null, + "name": "access_token_ttl_in_ms", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "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/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "max_total_bytes_per_sec", - "type": "integer", - "format": "int64", + "name": "issuer", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "The maximum allowed bytes/s totaled across all the clients.", - "suggestedPowerShellType": "[long]", + "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/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "max_total_ops_per_sec", - "type": "integer", - "format": "int64", + "name": "max_role", + "type": null, + "format": null, "specRequired": false, - "synopsis": "The maximum allowed operations/s totaled across all the clients.", - "suggestedPowerShellType": "[long]", + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", + "name": "public_key", "type": "string", "format": null, - "specRequired": false, - "synopsis": "A user-specified name.", + "specRequired": true, + "synopsis": "The API client's PEM formatted (Base64 encoded) RSA public key.", "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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": [], "readOnlyFields": [ "context", "id", - "is_local", - "policy_type", - "realms" + "os", + "status", + "type", + "version" ], "confidence": { "level": "high", @@ -9989,92 +9252,92 @@ "annotations": [] }, { - "endpoint": "PATCH /quotas/groups", + "endpoint": "POST /arrays/erasures", "cmdlets": [ - "Update-PfbQuotaGroup" + "New-PfbArrayErasure" ], "missingQueryParameters": [ - "context_names", - "file_system_ids", - "file_system_names", - "gids", - "group_names", - "names" + "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": [ - "name" + "id", + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "FileSystemName", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaGroup.ps1", + "file": "Public/Policy/New-PfbAuditFileSystemPolicy.ps1", "line": 35 - }, - { - "parameter": "GroupName", - "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaGroup.ps1", - "line": 36 } ], "escapeHatchOnly": [ - "FileSystemName", - "GroupName" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /quotas/settings", + "endpoint": "POST /audit-file-systems-policies/members", "cmdlets": [ - "Update-PfbQuotaSettings" - ], - "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 - } - } + "New-PfbAuditFileSystemPolicyMember" ], - "readOnlyFields": [ - "id", - "name" + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10084,84 +9347,157 @@ "annotations": [] }, { - "endpoint": "PATCH /quotas/users", + "endpoint": "POST /audit-object-store-policies", "cmdlets": [ - "Update-PfbQuotaUser" + "New-PfbAuditObjectStorePolicy" ], "missingQueryParameters": [ - "context_names", - "file_system_ids", - "file_system_names", - "names", - "uids", - "user_names" + "context_names" ], - "missingBodyProperties": [], - "readOnlyFields": [ + "missingBodyProperties": [ + "enabled", + "location", + "log_targets", "name" ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "FileSystemName", - "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaUser.ps1", - "line": 30 - }, - { - "parameter": "UserName", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaUser.ps1", - "line": 31 + "file": "Public/Policy/New-PfbAuditObjectStorePolicy.ps1", + "line": 35 } ], "escapeHatchOnly": [ - "FileSystemName", - "UserName" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /rapid-data-locking", + "endpoint": "POST /audit-object-store-policies/members", "cmdlets": [ - "Update-PfbRapidDataLocking" + "New-PfbAuditObjectStorePolicyMember" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets", + "cmdlets": [ + "New-PfbBucket" + ], + "missingQueryParameters": [ + "context_names" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", + "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": "`True` if the Rapid Data Locking feature is enabled.", + "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/Misc/Update-PfbRapidDataLocking.ps1", - "paramBlockLine": 31, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "kmip_server", + "name": "object_lock_config", "type": null, "format": null, "specRequired": false, - "synopsis": "The KMIP server configuration associated with RDL.", + "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", - "paramBlockLine": 31, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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 } } @@ -10176,76 +9512,53 @@ "annotations": [] }, { - "endpoint": "PATCH /realms", - "cmdlets": [ - "Remove-PfbRealm", - "Update-PfbRealm" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - "default_inbound_tls_policy", - "destroyed", - "name" - ], - "readOnlyFields": [ - "id" - ], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Destroyed", - "surface": "AttributesOnly", - "file": "Public/Realm/Update-PfbRealm.ps1", - "line": 31 - }, - { - "parameter": "Eradicate", - "surface": "TypedUnresolved", - "file": "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 /realms/defaults", + "endpoint": "POST /buckets/audit-filters", "cmdlets": [ - "Update-PfbRealmDefaults" + "New-PfbBucketAuditFilter" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names", - "realm_ids", - "realm_names" + "names" ], "missingBodyProperties": [ { - "name": "object_store", + "name": "actions", "type": "array", "format": null, "specRequired": false, - "synopsis": "Default configurations for object store.", - "suggestedPowerShellType": "[object[]]", + "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/Realm/Update-PfbRealmDefaults.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "context", - "realm" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10255,45 +9568,53 @@ "annotations": [] }, { - "endpoint": "PATCH /s3-export-policies", + "endpoint": "POST /buckets/bucket-access-policies", "cmdlets": [ - "Update-PfbS3ExportPolicy" + "New-PfbBucketAccessPolicy" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names" ], "missingBodyProperties": [ - "enabled", - "name", - "rules" + { + "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": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbS3ExportPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /s3-export-policies/rules", + "endpoint": "POST /buckets/bucket-access-policies/rules", "cmdlets": [ - "Update-PfbS3ExportRule" + "New-PfbBucketAccessPolicyRule" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names", - "policy_ids", - "policy_names" + "names" ], "missingBodyProperties": [ { @@ -10306,25 +9627,25 @@ "enumValues": [], "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", - "type": "string", + "name": "principals", + "type": null, "format": null, "specRequired": false, - "synopsis": "Effect of this rule.", - "suggestedPowerShellType": "[string]", + "synopsis": "The principals to which this rule applies.", + "suggestedPowerShellType": "[object]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -10335,20 +9656,22 @@ "type": "array", "format": null, "specRequired": false, - "synopsis": "The list of resources from the account to which this rule applies to.", + "synopsis": "The list of resources which this rule applies to.", "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "effect" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10358,156 +9681,109 @@ "annotations": [] }, { - "endpoint": "PATCH /smb-client-policies", + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", "cmdlets": [ - "Update-PfbSmbClientPolicy" + "New-PfbBucketCorsPolicy" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names" ], "missingBodyProperties": [ - "access_based_enumeration_enabled", - "enabled", - "location", - "name", - "rules" - ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms", - "version" + { + "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": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbSmbClientPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /smb-client-policies/rules", + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", "cmdlets": [ - "Update-PfbSmbClientRule" + "New-PfbBucketCorsPolicyRule" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", + "bucket_ids", + "bucket_names", "context_names", - "ids", - "versions" + "names", + "policy_names" ], "missingBodyProperties": [ { - "name": "client", - "type": "string", + "name": "allowed_headers", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Specifies the clients that will be permitted to access the export.", - "suggestedPowerShellType": "[string]", + "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/Policy/Update-PfbSmbClientRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "encryption", - "type": "string", + "name": "allowed_methods", + "type": "array", "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]", + "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/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, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", - "type": null, + "name": "allowed_origins", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The policy to which this rule belongs.", - "suggestedPowerShellType": "[object]", + "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/Policy/Update-PfbSmbClientRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [ - "context", - "id", - "name", - "policy_version" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10517,68 +9793,23 @@ "annotations": [] }, { - "endpoint": "PATCH /smb-share-policies", - "cmdlets": [ - "Update-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": "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": "PATCH /smb-share-policies/rules", + "endpoint": "POST /certificates", "cmdlets": [ - "Update-PfbSmbShareRule" - ], - "missingQueryParameters": [ - "context_names", - "ids", - "policy_ids", - "policy_names" + "New-PfbCertificate" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "change", + "name": "certificate", "type": "string", "format": null, "specRequired": false, - "synopsis": "The state of the principal's Change access permission.", + "synopsis": "The text of the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "allow", - "deny" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10586,19 +9817,19 @@ } }, { - "name": "full_control", + "name": "certificate_type", "type": "string", "format": null, "specRequired": false, - "synopsis": "The state of the principal's Full Control access permission.", + "synopsis": "The type of certificate.", "suggestedPowerShellType": "[string]", "enumValues": [ - "allow", - "deny" + "appliance", + "external" ], "enumStatus": "matched", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10606,16 +9837,16 @@ } }, { - "name": "policy", - "type": null, + "name": "common_name", + "type": "string", "format": null, "specRequired": false, - "synopsis": "The policy to which this rule belongs.", - "suggestedPowerShellType": "[object]", + "synopsis": "The common name field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10623,16 +9854,16 @@ } }, { - "name": "principal", + "name": "country", "type": "string", "format": null, "specRequired": false, - "synopsis": "The user or group who is the subject of this rule, and their domain.", + "synopsis": "The country field listed in the certificate.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10640,131 +9871,67 @@ } }, { - "name": "read", - "type": "string", - "format": null, + "name": "days", + "type": "integer", + "format": "int32", "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", - "name" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /snmp-agents", - "cmdlets": [ - "Update-PfbSnmpAgent" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - { - "name": "v2c", - "type": null, - "format": null, - "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The number of days that the self-signed certificate is valid.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", - "paramBlockLine": 32, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "v3", - "type": null, + "name": "email", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The email field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", - "paramBlockLine": 32, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "version", + "name": "intermediate_certificate", "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.", + "synopsis": "Intermediate certificate chains.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "v2c", - "v3" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", - "paramBlockLine": 32, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [ - "engine_id", - "id", - "name" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /snmp-managers", - "cmdlets": [ - "Update-PfbSnmpManager" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ + }, { - "name": "host", + "name": "key_algorithm", "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.", + "synopsis": "The key algorithm used to generate the certificate.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10772,16 +9939,16 @@ } }, { - "name": "name", - "type": "string", - "format": null, + "name": "key_size", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": "A user-specified name.", - "suggestedPowerShellType": "[string]", + "synopsis": "The size (in bits) of the private key for the certificate.", + "suggestedPowerShellType": "[int]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10789,19 +9956,16 @@ } }, { - "name": "notification", + "name": "locality", "type": "string", "format": null, "specRequired": false, - "synopsis": "The type of notification the agent will send.", + "synopsis": "The locality field listed in the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "inform", - "trap" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10809,16 +9973,16 @@ } }, { - "name": "v2c", - "type": null, + "name": "organization", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The organization field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10826,16 +9990,16 @@ } }, { - "name": "v3", - "type": null, + "name": "organizational_unit", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The organizational unit field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10843,124 +10007,68 @@ } }, { - "name": "version", + "name": "passphrase", "type": "string", "format": null, "specRequired": false, - "synopsis": "Version of the SNMP protocol to be used by Purity in communications with the specified manager.", + "synopsis": "The passphrase used to encrypt `private_key`.", "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": "PATCH /ssh-certificate-authority-policies", - "cmdlets": [ - "Update-PfbSshCaPolicy" - ], - "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, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "location", - "type": null, + "name": "private_key", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": "The text of the private key.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "state", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "The state/province field listed in the certificate.", "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, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "static_authorized_principals", + "name": "subject_alternative_names", "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.", + "synopsis": "The alternative names that are secured by this certificate.", "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -10968,11 +10076,12 @@ } ], "readOnlyFields": [ - "context", - "id", - "is_local", - "policy_type", - "realms" + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" ], "confidence": { "level": "high", @@ -10983,84 +10092,84 @@ "annotations": [] }, { - "endpoint": "PATCH /sso/oidc/idps", + "endpoint": "POST /certificates/certificate-signing-requests", "cmdlets": [ - "Update-PfbOidcIdp" + "New-PfbCertificateSigningRequest" ], "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 + "certificate", + "common_name", + "country", + "email", + "locality", + "organization", + "organizational_unit", + "state", + "subject_alternative_names" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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": [ - "prn" + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Disabled", + "surface": "TypedUnresolved", + "file": "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": [], @@ -11070,153 +10179,205 @@ "annotations": [] }, { - "endpoint": "PATCH /sso/saml2/idps", + "endpoint": "POST /directory-services/local/directory-services", "cmdlets": [ - "Update-PfbSaml2Idp" + "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": "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": "array_url", + "name": "group", "type": "string", "format": null, "specRequired": false, - "synopsis": "The URL of the array.", + "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/Admin/Update-PfbSaml2Idp.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "binding", + "name": "group_base", "type": "string", "format": null, "specRequired": false, - "synopsis": "SAML2 binding to use for the request from Flashblade to the Identity Provider.", + "synopsis": "Specifies where the configured group is located in the directory tree.", "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", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "idp", - "type": null, + "name": "management_access_policies", + "type": "array", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "List of management access policies associated with the directory service role.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbSaml2Idp.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "management", + "name": "role", "type": null, "format": null, "specRequired": false, - "synopsis": null, + "synopsis": "Deprecated.", "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", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "id", - "prn" + "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": "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": [], @@ -11226,160 +10387,130 @@ "annotations": [] }, { - "endpoint": "PATCH /storage-class-tiering-policies", + "endpoint": "POST /file-system-replica-links", "cmdlets": [ - "Update-PfbStorageClassTieringPolicy" + "New-PfbFileSystemReplicaLink" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "local_file_system_ids", + "remote_ids" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "archival_rules", - "type": "array", + "name": "direction", + "type": null, "format": null, "specRequired": false, - "synopsis": "The list of archival rules for this policy.", - "suggestedPowerShellType": "[object[]]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [ + "inbound", + "outbound" + ], + "enumStatus": "matched", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "enabled", - "type": "boolean", + "name": "link_type", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Type of the replica link.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "location", + "name": "local_file_system", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": "Reference to a local file system.", "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 + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "retrieval_rules", + "name": "policies", "type": "array", "format": null, "specRequired": false, - "synopsis": "The list of retrieval rules for this policy.", + "synopsis": null, "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } - } - ], - "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", + "name": "remote", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the associated LAG.", + "synopsis": "Reference to a remote array or realm.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbSubnet.ps1", - "paramBlockLine": 34, + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, "payloadVariable": "body", - "assignmentStyle": "index", - "hasAttributes": true + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "vlan", - "type": "integer", - "format": "int32", + "name": "remote_file_system", + "type": null, + "format": null, "specRequired": false, - "synopsis": "VLAN ID.", - "suggestedPowerShellType": "[int]", + "synopsis": "Reference to a remote file system.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbSubnet.ps1", - "paramBlockLine": 34, + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, "payloadVariable": "body", - "assignmentStyle": "index", - "hasAttributes": true + "assignmentStyle": "unknown", + "hasAttributes": false } } ], "readOnlyFields": [ - "enabled", + "context", "id", - "interfaces", - "name", - "services" + "lag", + "recovery_point", + "status", + "status_details" ], "confidence": { "level": "high", @@ -11390,156 +10521,14 @@ "annotations": [] }, { - "endpoint": "PATCH /support", + "endpoint": "POST /file-system-replica-links/policies", "cmdlets": [ - "Update-PfbSupport" + "New-PfbFileSystemReplicaLinkPolicy" ], - "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 - } - } + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -11550,197 +10539,285 @@ "annotations": [] }, { - "endpoint": "PATCH /syslog-servers", + "endpoint": "POST /file-system-snapshots", "cmdlets": [ - "Update-PfbSyslogServer" + "New-PfbFileSystemSnapshot" ], - "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 - } - } + "missingQueryParameters": [ + "context_names", + "source_ids", + "source_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "SourceName", + "surface": "TypedUnresolved", + "file": "Public/FileSystemSnapshot/New-PfbFileSystemSnapshot.ps1", + "line": 36 + } + ], "escapeHatchOnly": [], - "caveat": "" + "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 /syslog-servers/settings", + "endpoint": "POST /file-systems", "cmdlets": [ - "Update-PfbSyslogServerSettings" + "New-PfbFileSystem" ], "missingQueryParameters": [ - "ids", - "names" + "context_names", + "default_exports", + "discard_non_snapshotted_data", + "include_snapshot", + "overwrite", + "policy_ids", + "policy_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 - } - } + "fast_remove_directory_enabled", + "hard_limit_enabled", + "http", + "multi_protocol", + "nfs", + "node_group", + "smb", + "snapshot_directory_enabled", + "workload", + "writable" ], "readOnlyFields": [ - "id", - "name" + "requested_promotion_state" ], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /targets", + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FastRemoveDirectoryEnabled", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 139 + }, + { + "parameter": "HardLimit", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 93 + }, + { + "parameter": "Http", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 126 + }, + { + "parameter": "MultiProtocolAccessControlStyle", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 129 + }, + { + "parameter": "Nfs", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 102 + }, + { + "parameter": "NfsExportPolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 114 + }, + { + "parameter": "NfsRules", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 111 + }, + { + "parameter": "NfsV3", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 105 + }, + { + "parameter": "NfsV41", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 108 + }, + { + "parameter": "SafeguardAcls", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 133 + }, + { + "parameter": "Smb", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 117 + }, + { + "parameter": "SmbClientPolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 123 + }, + { + "parameter": "SmbSharePolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 120 + }, + { + "parameter": "SnapshotDirectoryEnabled", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 136 + }, + { + "parameter": "Writable", + "surface": "AttributesOnly", + "file": "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": [ - "Update-PfbTarget" + "New-PfbFileSystemAuditPolicy" ], - "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 + "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": "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 /keytabs", + "cmdlets": [ + "New-PfbKeytab" + ], + "missingQueryParameters": [ + "name_prefixes" + ], + "missingBodyProperties": [ { - "name": "ca_certificate_group", + "name": "source", "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.", + "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/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, + "file": "Public/Misc/New-PfbKeytab.ps1", + "paramBlockLine": 26, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [ - "id", - "status", - "status_details" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -11750,189 +10827,193 @@ "annotations": [] }, { - "endpoint": "PATCH /tls-policies", + "endpoint": "POST /keytabs/upload", "cmdlets": [ - "Update-PfbTlsPolicy" + "New-PfbKeytabUpload" + ], + "missingQueryParameters": [ + "name_prefixes" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "appliance_certificate", + "name": "keytab_file", "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]", + "specRequired": true, + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, + "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": "client_certificates_required", - "type": "boolean", + "name": "description", + "type": "string", "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]", + "synopsis": "The description of the legal hold instance.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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 /lifecycle-rules", + "cmdlets": [ + "New-PfbLifecycleRule" + ], + "missingQueryParameters": [ + "confirm_date", + "context_names" + ], + "missingBodyProperties": [ { - "name": "disabled_tls_ciphers", - "type": "array", - "format": null, + "name": "abort_incomplete_multipart_uploads_after", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If specified, disables the specific TLS ciphers.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", - "format": null, + "name": "keep_current_version_for", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "enabled_tls_ciphers", - "type": "array", - "format": null, + "name": "keep_current_version_until", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If specified, enables only the specified TLS ciphers.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "location", - "type": null, - "format": null, + "name": "keep_previous_version_for", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": "Time after which previous versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "min_tls_version", + "name": "prefix", "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.", + "synopsis": "Object key prefix identifying one or more objects in the bucket.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "name", + "name": "rule_id", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Identifier for the rule that is unique to the bucket that it applies to.", "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", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -11942,235 +11023,122 @@ "annotations": [] }, { - "endpoint": "PATCH /workloads", + "endpoint": "POST /link-aggregation-groups", "cmdlets": [ - "Update-PfbWorkload" + "New-PfbLag" ], "missingQueryParameters": [ - "context_names" + "names" ], "missingBodyProperties": [ - "destroyed" + "ports" + ], + "readOnlyFields": [ + "id", + "lag_speed", + "mac_address", + "name", + "port_speed", + "status" ], - "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Destroyed", - "surface": "TypedUnresolved", - "file": "Public/Workloads/Update-PfbWorkload.ps1", - "line": 36 + "parameter": "Name", + "surface": "AttributesOnly", + "file": "Public/Misc/New-PfbLag.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" + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /worm-data-policies", + "endpoint": "POST /log-targets/file-systems", "cmdlets": [ - "Update-PfbWormPolicy" + "New-PfbLogTargetFileSystem" ], "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", + "name": "file_system", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": "The target filesystem where audit logs will be stored.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "max_retention", + "name": "keep_for", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Maximum retention period, in milliseconds.", + "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/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "min_retention", + "name": "keep_size", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Minimum retention period, in milliseconds.", + "synopsis": "Specifies the maximum size of audit logs to be retained.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "mode", + "name": "name", "type": "string", "format": null, "specRequired": false, - "synopsis": "The type of the retention lock.", + "synopsis": "A user-specified name.", "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", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "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": "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" - ], - "missingQueryParameters": [ - "admin_ids", - "admin_names", - "context_names", - "timeout" + "id" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12180,67 +11148,25 @@ "annotations": [] }, { - "endpoint": "POST /admins/management-access-policies", - "cmdlets": [ - "New-PfbAdminManagementAccessPolicy" - ], - "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 /admins/ssh-certificate-authority-policies", + "endpoint": "POST /log-targets/object-store", "cmdlets": [ - "New-PfbAdminSshCaPolicy" + "New-PfbLogTargetObjectStore" ], "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", + "name": "bucket", + "type": null, "format": null, "specRequired": false, - "synopsis": "The access policies allowed for ID Tokens issued by this API client.", - "suggestedPowerShellType": "[object[]]", + "synopsis": "Reference to the bucket where audit logs will be stored.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12248,16 +11174,16 @@ } }, { - "name": "access_token_ttl_in_ms", - "type": "integer", - "format": "int64", + "name": "log_name_prefix", + "type": null, + "format": null, "specRequired": false, - "synopsis": "The TTL (Time To Live) duration for which the exchanged access token is valid.", - "suggestedPowerShellType": "[long]", + "synopsis": "The prefix of the audit log object.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12265,16 +11191,16 @@ } }, { - "name": "issuer", - "type": "string", + "name": "log_rotate", + "type": null, "format": null, "specRequired": false, - "synopsis": "The name of the identity provider that will be issuing ID Tokens for this API client.", - "suggestedPowerShellType": "[string]", + "synopsis": "The threshold after which the audit log object will be rotated.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12282,36 +11208,57 @@ } }, { - "name": "max_role", - "type": null, + "name": "name", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Deprecated.", - "suggestedPowerShellType": "[object]", + "synopsis": "A user-specified name.", + "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "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": "public_key", - "type": "string", - "format": null, - "specRequired": true, - "synopsis": "The API client's PEM formatted (Base64 encoded) RSA public key.", - "suggestedPowerShellType": "[string]", + "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/Admin/New-PfbApiClient.ps1", - "paramBlockLine": 36, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Misc/New-PfbMaintenanceWindow.ps1", + "paramBlockLine": 28, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } @@ -12326,90 +11273,105 @@ "annotations": [] }, { - "endpoint": "POST /array-connections", + "endpoint": "POST /management-access-policies", "cmdlets": [ - "New-PfbArrayConnection" + "New-PfbManagementAccessPolicy" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [ { - "name": "ca_certificate_group", - "type": null, + "name": "aggregation_strategy", + "type": "string", "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]", + "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/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "encrypted", + "name": "enabled", "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.", + "synopsis": "If `true`, the policy is enabled.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "remote", + "name": "location", "type": null, "format": null, "specRequired": false, - "synopsis": "The remote array.", + "synopsis": "Reference to the array where the policy is defined.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "throttle", - "type": null, + "name": "name", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "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/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } } ], "readOnlyFields": [ - "context", "id", - "os", - "status", - "type", - "version" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -12417,17 +11379,23 @@ "escapeHatchOnly": [], "caveat": "" }, - "annotations": [] + "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 /arrays/erasures", + "endpoint": "POST /management-access-policies/admins", "cmdlets": [ - "New-PfbArrayErasure" + "New-PfbManagementAccessPolicyAdmin" ], "missingQueryParameters": [ - "eradicate_all_data", - "preserve_configuration_data", - "skip_phonehome_check" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -12437,18 +11405,65 @@ "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": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, "annotations": [] }, { - "endpoint": "POST /arrays/ssh-certificate-authority-policies", + "endpoint": "POST /network-interfaces", "cmdlets": [ - "New-PfbArraySshCaPolicy" + "New-PfbNetworkInterface" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "rdma_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/New-PfbNetworkInterface.ps1", + "paramBlockLine": 66, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name", + "realms" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12458,18 +11473,16 @@ "annotations": [] }, { - "endpoint": "POST /audit-file-systems-policies", + "endpoint": "POST /nfs-export-policies", "cmdlets": [ - "New-PfbAuditFileSystemPolicy" + "New-PfbNfsExportPolicy" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [ - "control_type", "enabled", "location", - "log_targets", "name", "rules" ], @@ -12485,8 +11498,8 @@ { "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbAuditFileSystemPolicy.ps1", - "line": 35 + "file": "Public/Policy/New-PfbNfsExportPolicy.ps1", + "line": 36 } ], "escapeHatchOnly": [ @@ -12497,15 +11510,20 @@ "annotations": [] }, { - "endpoint": "POST /audit-file-systems-policies/members", + "endpoint": "POST /nfs-export-policies/rules", "cmdlets": [ - "New-PfbAuditFileSystemPolicyMember" + "New-PfbNfsExportRule" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "context", + "id", + "name", + "policy_version" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12515,51 +11533,60 @@ "annotations": [] }, { - "endpoint": "POST /audit-object-store-policies", + "endpoint": "POST /node-groups", "cmdlets": [ - "New-PfbAuditObjectStorePolicy" + "New-PfbNodeGroup" ], "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ - "enabled", - "location", - "log_targets", - "name" - ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms" + "names" ], + "missingBodyProperties": [], + "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbAuditObjectStorePolicy.ps1", - "line": 35 + "file": "Public/Node/New-PfbNodeGroup.ps1", + "line": 30 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /audit-object-store-policies/members", + "endpoint": "POST /object-store-access-keys", "cmdlets": [ - "New-PfbAuditObjectStorePolicyMember" + "New-PfbObjectStoreAccessKey" ], "missingQueryParameters": [ - "context_names" + "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 + } + } ], - "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -12570,102 +11597,46 @@ "annotations": [] }, { - "endpoint": "POST /buckets", + "endpoint": "POST /object-store-access-policies", "cmdlets": [ - "New-PfbBucket" + "New-PfbObjectStoreAccessPolicy" ], "missingQueryParameters": [ - "context_names" + "context_names", + "enforce_action_restrictions" ], "missingBodyProperties": [ { - "name": "bucket_type", + "name": "description", "type": "string", "format": null, "specRequired": false, - "synopsis": "The bucket type for the bucket.", + "synopsis": "A description of the policy, optionally specified when the policy is created.", "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, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "hard_limit_enabled", - "type": "boolean", + "name": "rules", + "type": "array", "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]", + "synopsis": null, + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, "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", + "assignmentStyle": "unknown", "hasAttributes": true } } @@ -12680,52 +11651,16 @@ "annotations": [] }, { - "endpoint": "POST /buckets/audit-filters", + "endpoint": "POST /object-store-access-policies/object-store-roles", "cmdlets": [ - "New-PfbBucketAuditFilter" + "New-PfbObjectStoreAccessPolicyRole" ], "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 - } - } + "member_ids", + "policy_ids" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -12736,34 +11671,16 @@ "annotations": [] }, { - "endpoint": "POST /buckets/bucket-access-policies", + "endpoint": "POST /object-store-access-policies/object-store-users", "cmdlets": [ - "New-PfbBucketAccessPolicy" + "New-PfbObjectStoreAccessPolicyUser" ], "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 - } - } + "context_names", + "member_ids", + "policy_ids" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -12774,15 +11691,15 @@ "annotations": [] }, { - "endpoint": "POST /buckets/bucket-access-policies/rules", + "endpoint": "POST /object-store-access-policies/rules", "cmdlets": [ - "New-PfbBucketAccessPolicyRule" + "New-PfbObjectStoreAccessPolicyRule" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", "context_names", - "names" + "enforce_action_restrictions", + "names", + "policy_ids" ], "missingBodyProperties": [ { @@ -12795,27 +11712,47 @@ "enumValues": [], "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", - "paramBlockLine": 42, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "principals", + "name": "conditions", "type": null, "format": null, "specRequired": false, - "synopsis": "The principals to which this rule applies.", + "synopsis": "Conditions used to limit the scope which this rule applies to.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", - "paramBlockLine": 42, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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 } }, @@ -12829,17 +11766,15 @@ "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", - "paramBlockLine": 42, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "effect" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12849,31 +11784,50 @@ "annotations": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", + "endpoint": "POST /object-store-account-exports", "cmdlets": [ - "New-PfbBucketCorsPolicy" + "New-PfbObjectStoreAccountExport" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", - "context_names" + "context_names", + "member_ids", + "member_names", + "policy_ids", + "policy_names" ], "missingBodyProperties": [ { - "name": "rules", - "type": "array", + "name": "export_enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "synopsis": "If set to `true`, the account export is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": null, - "assignmentStyle": null, - "hasAttributes": false + "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 } } ], @@ -12887,67 +11841,80 @@ "annotations": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", + "endpoint": "POST /object-store-accounts", "cmdlets": [ - "New-PfbBucketCorsPolicyRule" + "New-PfbObjectStoreAccount" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", - "context_names", - "names", - "policy_names" + "context_names" ], "missingBodyProperties": [ { - "name": "allowed_headers", + "name": "account_exports", "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[]]", + "synopsis": "A list of exports to be created for the account.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false } }, { - "name": "allowed_methods", - "type": "array", + "name": "bucket_defaults", + "type": null, "format": null, "specRequired": false, - "synopsis": "A list of HTTP methods that are permitted for cross-origin requests to access a bucket.", - "suggestedPowerShellType": "[string[]]", + "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/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true - } + "file": "Public/ObjectStore/New-PfbObjectStoreAccount.ps1", + "paramBlockLine": 17, + "payloadVariable": null, + "assignmentStyle": null, + "hasAttributes": false + } }, { - "name": "allowed_origins", - "type": "array", + "name": "hard_limit_enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "A list of origins (domains) that are permitted to make cross-origin requests to access a bucket.", - "suggestedPowerShellType": "[string[]]", + "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/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "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 } } ], @@ -12961,295 +11928,198 @@ "annotations": [] }, { - "endpoint": "POST /certificates", + "endpoint": "POST /object-store-remote-credentials", "cmdlets": [ - "New-PfbCertificate" + "New-PfbObjectStoreRemoteCredential" + ], + "missingQueryParameters": [ + "context_names" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "certificate", + "name": "access_key_id", "type": "string", "format": null, "specRequired": false, - "synopsis": "The text of the certificate.", + "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/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", + "file": "Public/ObjectStore/New-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "common_name", + "name": "secret_access_key", "type": "string", "format": null, "specRequired": false, - "synopsis": "The common name field listed in the certificate.", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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": "country", - "type": "string", + "name": "max_session_duration", + "type": "integer", "format": null, "specRequired": false, - "synopsis": "The country field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "Maximum session duration in milliseconds.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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": "days", - "type": "integer", - "format": "int32", + "name": "actions", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "The number of days that the self-signed certificate is valid.", - "suggestedPowerShellType": "[int]", + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "email", - "type": "string", + "name": "conditions", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The email field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "intermediate_certificate", - "type": "string", + "name": "policy", + "type": null, "format": null, "specRequired": false, - "synopsis": "Intermediate certificate chains.", - "suggestedPowerShellType": "[string]", + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "key_algorithm", - "type": "string", + "name": "principals", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The key algorithm used to generate the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "List of Identity Providers", + "suggestedPowerShellType": "[object[]]", "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", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], "readOnlyFields": [ - "issued_by", - "issued_to", - "realms", - "status", - "valid_from", - "valid_to" + "effect" ], "confidence": { "level": "high", @@ -13260,13 +12130,13 @@ "annotations": [] }, { - "endpoint": "POST /certificates/certificate-groups", + "endpoint": "POST /object-store-users", "cmdlets": [ - "New-PfbCertificateCertificateGroup" + "New-PfbObjectStoreUser" ], "missingQueryParameters": [ - "certificate_group_ids", - "certificate_ids" + "context_names", + "full_access" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -13279,44 +12149,70 @@ "annotations": [] }, { - "endpoint": "POST /certificates/certificate-signing-requests", + "endpoint": "POST /object-store-users/object-store-access-policies", "cmdlets": [ - "New-PfbCertificateSigningRequest" + "New-PfbObjectStoreUserAccessPolicy" ], - "missingQueryParameters": [], - "missingBodyProperties": [ - "certificate", - "common_name", - "country", - "email", - "locality", - "organization", - "organizational_unit", - "state", - "subject_alternative_names" + "missingQueryParameters": [ + "context_names", + "member_ids", + "policy_ids" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Name", - "surface": "AttributesOnly", - "file": "Public/Certificate/New-PfbCertificateSigningRequest.ps1", - "line": 29 + "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 } - ], - "escapeHatchOnly": [ - "Name" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + } + ], + "readOnlyFields": [ + "context", + "id", + "name", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "POST /data-eviction-policies", + "endpoint": "POST /policies", "cmdlets": [ - "New-PfbDataEvictionPolicy" + "New-PfbPolicy" ], "missingQueryParameters": [ "context_names" @@ -13330,27 +12226,30 @@ "id", "is_local", "policy_type", - "realms" + "realms", + "retention_lock" ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Disabled", - "surface": "TypedUnresolved", - "file": "Public/DataEviction/New-PfbDataEvictionPolicy.ps1", - "line": 31 + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "Public/Policy/New-PfbPolicy.ps1", + "line": 23 } ], - "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" + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /data-eviction-policies/file-systems", + "endpoint": "POST /policies/file-system-replica-links", "cmdlets": [ - "Add-PfbDataEvictionPolicyFileSystem" + "New-PfbPolicyFileSystemReplicaLink" ], "missingQueryParameters": [ "context_names" @@ -13366,9 +12265,9 @@ "annotations": [] }, { - "endpoint": "POST /directory-services/local/directory-services", + "endpoint": "POST /policies/file-systems", "cmdlets": [ - "New-PfbLocalDirectoryService" + "New-PfbPolicyFileSystem" ], "missingQueryParameters": [ "context_names" @@ -13384,320 +12283,258 @@ "annotations": [] }, { - "endpoint": "POST /directory-services/local/groups", + "endpoint": "POST /presets/workload", "cmdlets": [ - "New-PfbLocalGroup" + "New-PfbPresetWorkload" ], "missingQueryParameters": [ - "context_names", - "local_directory_service_ids", - "local_directory_service_names" + "context_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": "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", + "name": "description", "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.", + "synopsis": "A brief description of the workload the preset will configure.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "group_base", - "type": "string", + "name": "directory_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Specifies where the configured group is located in the directory tree.", - "suggestedPowerShellType": "[string]", + "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/DirectoryService/New-PfbDirectoryServiceRole.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "management_access_policies", - "type": "array", + "name": "export_configurations", + "type": null, "format": null, "specRequired": false, - "synopsis": "List of management access policies associated with the directory service role.", - "suggestedPowerShellType": "[object[]]", + "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/DirectoryService/New-PfbDirectoryServiceRole.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "role", - "type": null, + "name": "parameters", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Deprecated.", - "suggestedPowerShellType": "[object]", + "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/DirectoryService/New-PfbDirectoryServiceRole.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "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": "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, + "name": "periodic_replication_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", - "enumValues": [ - "inbound", - "outbound" - ], - "enumStatus": "matched", + "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/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true } }, { - "name": "link_type", - "type": "string", + "name": "placement_configurations", + "type": "array", "format": null, - "specRequired": false, - "synopsis": "Type of the replica link.", - "suggestedPowerShellType": "[string]", + "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/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true } }, { - "name": "local_file_system", - "type": null, + "name": "platform_features", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Reference to a local file system.", - "suggestedPowerShellType": "[object]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [ + "fa_block", + "fa_file", + "fb_file" + ], + "enumStatus": "matched", "target": { - "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true } }, { - "name": "policies", + "name": "qos_configurations", "type": "array", "format": null, "specRequired": false, - "synopsis": null, + "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/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true } }, { - "name": "remote", - "type": null, + "name": "quota_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Reference to a remote array or realm.", - "suggestedPowerShellType": "[object]", + "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/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", + "hasAttributes": true } }, { - "name": "remote_file_system", - "type": null, + "name": "snapshot_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Reference to a remote file system.", - "suggestedPowerShellType": "[object]", + "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/Replication/New-PfbFileSystemReplicaLink.ps1", - "paramBlockLine": 55, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": false + "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": [ - "context", - "id", - "lag", - "recovery_point", - "status", - "status_details" + "revision" ], "confidence": { "level": "high", @@ -13708,18 +12545,30 @@ "annotations": [] }, { - "endpoint": "POST /file-system-replica-links/policies", + "endpoint": "POST /public-keys", "cmdlets": [ - "New-PfbFileSystemReplicaLinkPolicy" + "New-PfbPublicKey" ], - "missingQueryParameters": [ - "context_names", - "local_file_system_ids", - "local_file_system_names", - "remote_ids", - "remote_names" + "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 + } + } ], - "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -13730,186 +12579,107 @@ "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": "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", + "endpoint": "POST /qos-policies", "cmdlets": [ - "New-PfbFileSystem" + "New-PfbQosPolicy" ], "missingQueryParameters": [ - "context_names", - "default_exports", - "discard_non_snapshotted_data", - "include_snapshot", - "overwrite", - "policy_ids", - "policy_names" + "context_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": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 139 - }, - { - "parameter": "HardLimit", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 93 - }, - { - "parameter": "Http", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 126 - }, - { - "parameter": "MultiProtocolAccessControlStyle", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 129 - }, - { - "parameter": "Nfs", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 102 - }, - { - "parameter": "NfsExportPolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 114 - }, - { - "parameter": "NfsRules", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 111 - }, - { - "parameter": "NfsV3", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 105 - }, - { - "parameter": "NfsV41", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 108 - }, - { - "parameter": "SafeguardAcls", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 133 - }, - { - "parameter": "Smb", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 117 - }, - { - "parameter": "SmbClientPolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 123 - }, - { - "parameter": "SmbSharePolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 120 - }, - { - "parameter": "SnapshotDirectoryEnabled", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 136 - }, - { - "parameter": "Writable", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 150 + { + "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 } - ], - "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" + }, + { + "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 + } + } ], - "missingQueryParameters": [ - "context_names" + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -13919,9 +12689,9 @@ "annotations": [] }, { - "endpoint": "POST /file-systems/locks/nlm-reclamations", + "endpoint": "POST /qos-policies/members", "cmdlets": [ - "New-PfbNlmReclamation" + "New-PfbQosPolicyMember" ], "missingQueryParameters": [ "context_names" @@ -13937,15 +12707,21 @@ "annotations": [] }, { - "endpoint": "POST /file-systems/policies", + "endpoint": "POST /quotas/groups", "cmdlets": [ - "New-PfbFileSystemPolicy" + "New-PfbQuotaGroup" ], "missingQueryParameters": [ - "context_names" + "context_names", + "file_system_ids", + "file_system_names", + "gids", + "group_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -13955,59 +12731,61 @@ "annotations": [] }, { - "endpoint": "POST /fleets", + "endpoint": "POST /quotas/users", "cmdlets": [ - "New-PfbFleet" + "New-PfbQuotaUser" ], "missingQueryParameters": [ - "names" + "context_names", + "file_system_ids", + "file_system_names", + "uids", + "user_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "name" + ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Name", + "parameter": "FileSystemName", "surface": "AttributesOnly", - "file": "Public/Replication/New-PfbFleet.ps1", - "line": 30 + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 42 + }, + { + "parameter": "UserId", + "surface": "AttributesOnly", + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 44 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 43 } ], "escapeHatchOnly": [ - "Name" + "FileSystemName", + "UserId", + "UserName" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /fleets/members", + "endpoint": "POST /realms", "cmdlets": [ - "New-PfbFleetMember" + "New-PfbRealm" ], "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 - } - } + "without_default_access_list" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -14018,32 +12796,44 @@ "annotations": [] }, { - "endpoint": "POST /keytabs", + "endpoint": "POST /s3-export-policies", "cmdlets": [ - "New-PfbKeytab" + "New-PfbS3ExportPolicy" ], "missingQueryParameters": [ - "name_prefixes" + "context_names" ], "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 - } - } - ], + "enabled", + "rules" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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" + ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -14054,33 +12844,84 @@ "annotations": [] }, { - "endpoint": "POST /keytabs/upload", + "endpoint": "POST /servers", "cmdlets": [ - "New-PfbKeytabUpload" + "New-PfbServer" ], "missingQueryParameters": [ - "name_prefixes" + "create_ds", + "create_local_directory_service" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "CreateDirectoryService", + "surface": "AttributesOnly", + "file": "Public/Server/New-PfbServer.ps1", + "line": 40 + } + ], + "escapeHatchOnly": [ + "CreateDirectoryService" + ], + "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": [ - { - "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 + "access_based_enumeration_enabled", + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "id", + "name" ], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -14090,35 +12931,55 @@ "annotations": [] }, { - "endpoint": "POST /legal-holds", + "endpoint": "POST /smb-share-policies", "cmdlets": [ - "New-PfbLegalHold" + "New-PfbSmbSharePolicy" + ], + "missingQueryParameters": [ + "context_names" ], - "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 - } - } + "enabled", + "location", + "name", + "rules" ], "readOnlyFields": [ "id", - "name", + "is_local", + "policy_type", "realms" ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": [], + "readOnlyFields": [ + "id", + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -14128,17 +12989,46 @@ "annotations": [] }, { - "endpoint": "POST /legal-holds/held-entities", + "endpoint": "POST /snmp-managers", "cmdlets": [ - "New-PfbLegalHoldEntity" + "New-PfbSnmpManager" ], "missingQueryParameters": [ - "file_system_ids", - "file_system_names", - "ids", - "names", - "paths", - "recursive" + "names" + ], + "missingBodyProperties": [ + "host", + "notification", + "v2c", + "v3", + "version" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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": [], @@ -14151,145 +13041,25 @@ "annotations": [] }, { - "endpoint": "POST /lifecycle-rules", + "endpoint": "POST /ssh-certificate-authority-policies", "cmdlets": [ - "New-PfbLifecycleRule" + "New-PfbSshCaPolicy" ], "missingQueryParameters": [ - "confirm_date", - "context_names" + "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" + "enabled", + "location", + "name", + "signing_authority", + "static_authorized_principals" ], "readOnlyFields": [ "id", - "lag_speed", - "mac_address", - "name", - "port_speed", - "status" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "partial", @@ -14297,8 +13067,8 @@ { "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Misc/New-PfbLag.ps1", - "line": 29 + "file": "Public/Policy/New-PfbSshCaPolicy.ps1", + "line": 30 } ], "escapeHatchOnly": [ @@ -14309,77 +13079,94 @@ "annotations": [] }, { - "endpoint": "POST /log-targets/file-systems", + "endpoint": "POST /ssh-certificate-authority-policies/admins", "cmdlets": [ - "New-PfbLogTargetFileSystem" + "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": "file_system", - "type": null, + "name": "enabled", + "type": "boolean", "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]", + "synopsis": "If set to `true`, the OIDC SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "keep_size", - "type": "integer", - "format": "int64", + "name": "idp", + "type": null, + "format": null, "specRequired": false, - "synopsis": "Specifies the maximum size of audit logs to be retained.", - "suggestedPowerShellType": "[long]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", - "type": "string", + "name": "services", + "type": "array", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", - "suggestedPowerShellType": "[string]", + "synopsis": "Services that the OIDC SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true @@ -14387,7 +13174,7 @@ } ], "readOnlyFields": [ - "id" + "prn" ], "confidence": { "level": "high", @@ -14398,254 +13185,211 @@ "annotations": [] }, { - "endpoint": "POST /log-targets/object-store", + "endpoint": "POST /sso/saml2/idps", "cmdlets": [ - "New-PfbLogTargetObjectStore" - ], - "missingQueryParameters": [ - "context_names" + "New-PfbSaml2Idp" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "bucket", - "type": null, + "name": "array_url", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the bucket where audit logs will be stored.", - "suggestedPowerShellType": "[object]", + "synopsis": "The URL of the array.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "log_name_prefix", - "type": null, + "name": "binding", + "type": "string", "format": null, "specRequired": false, - "synopsis": "The prefix of the audit log object.", - "suggestedPowerShellType": "[object]", + "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/Monitoring/New-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "log_rotate", - "type": null, + "name": "enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "The threshold after which the audit log object will be rotated.", - "suggestedPowerShellType": "[object]", + "synopsis": "If set to `true`, the SAML2 SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "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", + "name": "idp", + "type": null, "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 32, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "location", + "name": "management", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 32, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", - "type": "string", + "name": "services", + "type": "array", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", - "suggestedPowerShellType": "[string]", + "synopsis": "Services that the SAML2 SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 32, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "rules", - "type": "array", + "name": "sp", + "type": null, "format": null, "specRequired": false, - "synopsis": "All of the rules that are part of this policy.", - "suggestedPowerShellType": "[object[]]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 32, + "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": "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": [ - { - "matchType": "endpoint", - "match": "management-access-policies", - "kind": "liveTestingHazard", - "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", - "reference": null - } - ] + "annotations": [] }, { - "endpoint": "POST /management-access-policies/admins", + "endpoint": "POST /support-diagnostics", "cmdlets": [ - "New-PfbManagementAccessPolicyAdmin" + "New-PfbSupportDiagnostics" ], "missingQueryParameters": [ - "context_names" + "analysis_period_end_time", + "analysis_period_start_time" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -14655,163 +13399,118 @@ "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 - } - ] + "annotations": [] }, { - "endpoint": "POST /network-access-policies/rules", + "endpoint": "POST /syslog-servers", "cmdlets": [ - "New-PfbNetworkAccessRule" + "New-PfbSyslogServer" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", - "versions" + "names" ], "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 + "services", + "sources", + "uri" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "Public/Monitoring/New-PfbSyslogServer.ps1", + "line": 32 } - }, - { - "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 - } - } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + }, + "annotations": [] + }, + { + "endpoint": "POST /targets", + "cmdlets": [ + "New-PfbTarget" ], - "readOnlyFields": [ - "id", - "name" + "missingQueryParameters": [ + "names" ], + "missingBodyProperties": [ + "address" + ], + "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /network-interfaces", + "endpoint": "POST /tls-policies", "cmdlets": [ - "New-PfbNetworkInterface" + "New-PfbTlsPolicy" + ], + "missingQueryParameters": [ + "names" ], - "missingQueryParameters": [], "missingBodyProperties": [ - { - "name": "rdma_enabled", - "type": "boolean", - "format": null, - "specRequired": false, - "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", - "suggestedPowerShellType": "[bool]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", - "target": { - "file": "Public/Network/New-PfbNetworkInterface.ps1", - "paramBlockLine": 66, - "payloadVariable": "body", - "assignmentStyle": "index", - "hasAttributes": true - } - } + "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", - "name", + "is_local", + "policy_type", "realms" ], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /network-interfaces/tls-policies", + "endpoint": "POST /workloads", "cmdlets": [ - "New-PfbNetworkInterfaceTlsPolicy" + "New-PfbWorkload" ], "missingQueryParameters": [ - "member_ids", - "policy_ids" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -14824,22 +13523,70 @@ "annotations": [] }, { - "endpoint": "POST /nfs-export-policies", + "endpoint": "POST /workloads/placement-recommendations", "cmdlets": [ - "New-PfbNfsExportPolicy" + "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": "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", - "name", - "rules" + "max_retention", + "min_retention", + "mode", + "retention_lock" ], "readOnlyFields": [ + "context", "id", "is_local", + "name", "policy_type", "realms" ], @@ -14847,8202 +13594,4006 @@ "level": "partial", "unresolvedParameters": [ { - "parameter": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbNfsExportPolicy.ps1", - "line": 36 + "file": "Public/Policy/New-PfbWormPolicy.ps1", + "line": 30 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] - }, + } + ], + "systemicGaps": [ { - "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": "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": "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": "Public/Quota/New-PfbQuotaUser.ps1", - "line": 42 - }, - { - "parameter": "UserId", - "surface": "AttributesOnly", - "file": "Public/Quota/New-PfbQuotaUser.ps1", - "line": 44 - }, - { - "parameter": "UserName", - "surface": "AttributesOnly", - "file": "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": "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": [], - "readOnlyFields": [], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "CreateDirectoryService", - "surface": "AttributesOnly", - "file": "Public/Server/New-PfbServer.ps1", - "line": 40 - } - ], - "escapeHatchOnly": [ - "CreateDirectoryService" - ], - "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": 254, - "queryEndpointCount": 254, - "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 /audits", - "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": 110, - "queryEndpointCount": 110, - "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 /audits", - "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": "rdma_enabled", - "endpointCount": 2, - "queryEndpointCount": 0, - "bodyEndpointCount": 2, - "endpoints": [ - "PATCH /network-interfaces", - "POST /network-interfaces" - ], - "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": "context_names", + "endpointCount": 254, + "queryEndpointCount": 254, + "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 /audits", + "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": "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": "allow_errors", + "endpointCount": 110, + "queryEndpointCount": 110, + "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 /audits", + "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": 43, + "queryEndpointCount": 43, + "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 /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" + ], + "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": "names", + "endpointCount": 31, + "queryEndpointCount": 31, + "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 /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 /maintenance-windows", + "POST /object-store-access-keys", + "POST /object-store-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "bucket_ids", + "endpointCount": 17, + "queryEndpointCount": 17, + "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", + "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": 17, + "queryEndpointCount": 17, + "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 /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": "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": "bucket_names", + "endpointCount": 16, + "queryEndpointCount": 16, + "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", + "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": "member_ids", + "endpointCount": 15, + "queryEndpointCount": 15, + "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 /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_ids", + "endpointCount": 15, + "queryEndpointCount": 15, + "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", + "POST /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": "remote_names", + "endpointCount": 13, + "queryEndpointCount": 13, + "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" + ], + "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": "file_system_ids", + "endpointCount": 9, + "queryEndpointCount": 9, + "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", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "local_file_system_ids", + "endpointCount": 8, + "queryEndpointCount": 8, + "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" + ], + "annotations": [] + }, + { + "name": "actions", + "endpointCount": 7, + "queryEndpointCount": 0, + "bodyEndpointCount": 7, + "endpoints": [ + "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" + ], + "annotations": [] + }, + { + "name": "versions", + "endpointCount": 7, + "queryEndpointCount": 7, + "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" + ], + "annotations": [] + }, + { + "name": "enabled", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /password-policies", + "PATCH /rapid-data-locking", + "POST /management-access-policies", + "POST /qos-policies", + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "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": "name", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /arrays", + "PATCH /password-policies", + "POST /log-targets/file-systems", + "POST /log-targets/object-store", + "POST /management-access-policies", + "POST /qos-policies" + ], + "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": "file_system_names", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "local_file_system_names", + "endpointCount": 5, + "queryEndpointCount": 5, + "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" + ], + "annotations": [] + }, + { + "name": "policy", + "endpointCount": 5, + "queryEndpointCount": 0, + "bodyEndpointCount": 5, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /smb-client-policies/rules", + "PATCH /smb-share-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "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": "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": "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": "effect", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /object-store-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "end_time", + "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": "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": "member_types", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "DELETE /qos-policies/members", + "GET /directory-services/local/groups/members", + "GET /qos-policies/members" + ], + "annotations": [] + }, + { + "name": "paths", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities" + ], + "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": "resources", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /buckets/bucket-access-policies/rules", + "POST /object-store-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "rules", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "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": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /arrays/space", + "GET /arrays/space/storage-classes", + "GET /realms/space", + "GET /realms/space/storage-classes" + ], + "annotations": [] + }, + { + "name": "before_rule_id", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "before_rule_name", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "certificate_group_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "certificate_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "client", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "description", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "POST /legal-holds", + "POST /object-store-access-policies", + "POST /presets/workload" + ], + "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": "index", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-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": "location", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /password-policies", + "POST /management-access-policies", + "POST /qos-policies" + ], + "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": "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": "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": "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": "admin_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "admin_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "component_name", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "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": "expose_api_token", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins", + "GET /admins/api-tokens" + ], + "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": "idp", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "inodes", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks" + ], + "annotations": [] + }, + { + "name": "lockout_duration", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins/settings", + "PATCH /password-policies" + ], + "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": "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": "node_group_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_group_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "permission", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "public_key", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /api-clients", + "POST /public-keys" + ], + "annotations": [] + }, + { + "name": "resolve_hostname", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "secret_access_key", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /object-store-access-keys", + "POST /object-store-remote-credentials" + ], + "annotations": [] + }, + { + "name": "services", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "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": "abort_incomplete_multipart_uploads_after", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "access", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "access_key_id", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-remote-credentials" + ], + "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_exports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "aggregation_strategy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /management-access-policies" + ], + "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": "anongid", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "anonuid", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "array_url", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "atime", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "attached_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "banner", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "binding", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "bucket", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "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": "ca_certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "ca_certificate_group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "certificate_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "change", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "common_name", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "confirm_date", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "contact", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /quotas/settings" + ], + "annotations": [] + }, + { + "name": "country", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "current_state", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "days", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "default_inbound_tls_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "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": "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": "email", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "encryption", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-client-policies/rules" + ], + "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_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "file_system", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "fileid_32bit", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "finalize", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "fleet_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /fleets/members" + ], + "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": "full_control", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "group_base", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "idle_timeout", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "interfaces", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /network-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "intermediate_certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "issuer", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "keep_current_version_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_current_version_until", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "keep_previous_version_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_size", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "key_algorithm", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "key_size", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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_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": "locality", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "log_name_prefix", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "log_rotate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "management", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "management_access_policies", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "max_password_age", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "max_session_duration", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-roles" + ], + "annotations": [] + }, + { + "name": "max_total_bytes_per_sec", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "max_total_ops_per_sec", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "member_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /object-store-account-exports" + ], + "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": "network_access_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "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": "organization", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "organizational_unit", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "passphrase", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "prefix", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "preserve_configuration_data", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "principal", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "print_latency", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping" + ], + "annotations": [] + }, + { + "name": "private_key", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "rdma_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /network-interfaces" + ], + "annotations": [] + }, + { + "name": "read", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "realm_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults" + ], + "annotations": [] + }, + { + "name": "realm_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults" + ], + "annotations": [] + }, + { + "name": "recursive", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks" + ], + "annotations": [] + }, + { + "name": "refresh", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins/cache" + ], + "annotations": [] + }, + { + "name": "remote", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "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": "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": "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": "required_transport_security", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "retention_lock", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets" + ], + "annotations": [] + }, + { + "name": "rule_id", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "s3_prefixes", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets/audit-filters" + ], + "annotations": [] }, { - "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": "secure", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "security", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "server", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "session_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/open-files" + ], + "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": "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": "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": "sp", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "state", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "subject_alternative_names", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "time_zone", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "timeout", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /maintenance-windows" + ], + "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": "v2c", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] + }, + { + "name": "v3", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] }, { - "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": "version", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] }, { - "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": "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": "policy_ids", - "cmdletCount": 87, + "name": "workload_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] + } + ], + "conventionStrength": [ + { + "name": "names", + "cmdletCount": 308, "cmdlets": [ - "Add-PfbDataEvictionPolicyFileSystem", - "Get-PfbAdminManagementAccessPolicy", - "Get-PfbAdminSshCaPolicy", - "Get-PfbArraySshCaPolicy", - "Get-PfbAuditFileSystemPolicyMember", - "Get-PfbAuditObjectStorePolicyMember", + "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-PfbDataEvictionPolicyFileSystem", - "Get-PfbDataEvictionPolicyMember", - "Get-PfbDirectoryServiceRoleManagementPolicy", - "Get-PfbFileSystemAuditPolicy", - "Get-PfbFileSystemPolicy", - "Get-PfbFileSystemReplicaLinkPolicy", - "Get-PfbFileSystemSnapshotPolicy", - "Get-PfbFileSystemWormPolicy", - "Get-PfbManagementAccessPolicyAdmin", - "Get-PfbManagementAccessPolicyDirectoryRole", - "Get-PfbManagementAccessPolicyMember", - "Get-PfbNetworkAccessPolicyMember", + "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-PfbNetworkInterfaceTlsPolicy", + "Get-PfbNetworkConnectionStatistics", + "Get-PfbNetworkInterface", + "Get-PfbNetworkInterfaceConnector", + "Get-PfbNetworkInterfaceConnectorPerformance", + "Get-PfbNetworkInterfaceConnectorSettings", + "Get-PfbNetworkInterfaceNeighbor", + "Get-PfbNfsExportPolicy", "Get-PfbNfsExportRule", - "Get-PfbObjectStoreAccessPolicyRole", + "Get-PfbNode", + "Get-PfbNodeGroup", + "Get-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", + "Get-PfbObjectStoreAccessPolicy", "Get-PfbObjectStoreAccessPolicyRule", - "Get-PfbObjectStoreAccessPolicyUser", + "Get-PfbObjectStoreAccount", + "Get-PfbObjectStoreAccountExport", + "Get-PfbObjectStoreRemoteCredential", + "Get-PfbObjectStoreRole", "Get-PfbObjectStoreTrustPolicyRule", - "Get-PfbObjectStoreUserAccessPolicy", - "Get-PfbPolicyAllMember", - "Get-PfbPolicyFileSystem", - "Get-PfbPolicyFileSystemReplicaLink", - "Get-PfbPolicyFileSystemSnapshot", - "Get-PfbQosPolicyBucket", - "Get-PfbQosPolicyFileSystem", - "Get-PfbQosPolicyMember", + "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-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", + "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-PfbAuditFileSystemPolicy", + "New-PfbAuditObjectStorePolicy", + "New-PfbBucket", + "New-PfbCertificate", + "New-PfbCertificateGroup", + "New-PfbDataEvictionPolicy", + "New-PfbDirectoryServiceRole", + "New-PfbFileSystem", + "New-PfbLegalHold", + "New-PfbLegalHoldEntity", + "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-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", + "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-PfbPolicyFileSystem", - "Remove-PfbPolicyFileSystemReplicaLink", - "Remove-PfbQosPolicyMember", + "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-PfbSshCaPolicyAdmin", - "Remove-PfbSshCaPolicyArray" + "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-PfbBucketAuditFilter", + "Update-PfbCertificate", + "Update-PfbDataEvictionPolicy", + "Update-PfbDirectoryServiceRole", + "Update-PfbDns", + "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-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": 219, + "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-PfbLegalHoldEntity", + "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-PfbDns", + "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-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-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": "member_ids", - "cmdletCount": 78, + "name": "filter", + "cmdletCount": 185, "cmdlets": [ - "Add-PfbDataEvictionPolicyFileSystem", + "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-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-PfbNodeGroupUse", + "Get-PfbObjectStoreAccessKey", "Get-PfbObjectStoreAccessPolicy", "Get-PfbObjectStoreAccessPolicyAction", "Get-PfbObjectStoreAccessPolicyRole", @@ -23055,1660 +17606,2459 @@ "Get-PfbObjectStoreRoleAccessPolicy", "Get-PfbObjectStoreTrustPolicy", "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", "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-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-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" + "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": "role_ids", - "cmdletCount": 2, + "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" - ] - }, - { - "name": "rules", - "cmdletCount": 2, - "cmdlets": [ - "New-PfbPolicy", - "Update-PfbPolicy" - ] - }, - { - "name": "account", - "cmdletCount": 1, - "cmdlets": [ - "New-PfbBucket" - ] - }, - { - "name": "attached_servers", - "cmdletCount": 1, - "cmdlets": [ - "New-PfbNetworkInterface" - ] - }, - { - "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" + "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": "member_types", - "cmdletCount": 1, + "name": "sort", + "cmdletCount": 163, "cmdlets": [ - "Get-PfbPolicyAllMember" + "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": "parameters", - "cmdletCount": 1, + "name": "policy_names", + "cmdletCount": 108, "cmdlets": [ - "New-PfbWorkload" + "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": "protocol", - "cmdletCount": 1, + "name": "member_names", + "cmdletCount": 98, "cmdlets": [ - "Get-PfbArrayPerformance" + "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-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbNetworkInterfaceTlsPolicy", + "New-PfbObjectStoreAccessPolicyRole", + "New-PfbObjectStoreAccessPolicyUser", + "New-PfbObjectStoreRoleAccessPolicy", + "New-PfbObjectStoreUserAccessPolicy", + "New-PfbPolicyFileSystem", + "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" ] }, { - "name": "replication_addresses", - "cmdletCount": 1, + "name": "policy_ids", + "cmdletCount": 88, "cmdlets": [ - "New-PfbArrayConnection" + "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-PfbNetworkInterfaceTlsPolicy", + "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": "server", - "cmdletCount": 1, + "name": "member_ids", + "cmdletCount": 78, "cmdlets": [ - "New-PfbFileSystemExport" + "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-PfbNetworkInterfaceTlsPolicy", + "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" ] }, { - "name": "services", - "cmdletCount": 1, + "name": "total_only", + "cmdletCount": 30, "cmdlets": [ - "New-PfbNetworkInterface" + "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": "share_policy", - "cmdletCount": 1, + "name": "name", + "cmdletCount": 20, "cmdlets": [ - "New-PfbFileSystemExport" + "Update-PfbDataEvictionPolicy", + "Update-PfbDns", + "Update-PfbFleet", + "Update-PfbLogTargetFileSystem", + "Update-PfbLogTargetObjectStore", + "Update-PfbManagementAccessPolicy", + "Update-PfbNode", + "Update-PfbNodeGroup", + "Update-PfbObjectStoreRemoteCredential", + "Update-PfbObjectStoreVirtualHost", + "Update-PfbOidcIdp", + "Update-PfbPresetWorkload", + "Update-PfbQosPolicy", + "Update-PfbSaml2Idp", + "Update-PfbSnmpManager", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTarget", + "Update-PfbTlsPolicy", + "Update-PfbWorkload" ] }, { - "name": "source", - "cmdletCount": 1, + "name": "end_time", + "cmdletCount": 17, "cmdlets": [ - "New-PfbFileSystem" + "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", + "Update-PfbAsyncLog" ] }, { - "name": "vlan", - "cmdletCount": 1, + "name": "start_time", + "cmdletCount": 17, "cmdlets": [ - "New-PfbSubnet" + "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", + "Update-PfbAsyncLog" ] }, { - "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": "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": "analysis_period_end_time", - "cmdletCount": 0, - "cmdlets": [] + "name": "enabled", + "cmdletCount": 10, + "cmdlets": [ + "Update-PfbApiClient", + "Update-PfbLifecycleRule", + "Update-PfbManagementAccessPolicy", + "Update-PfbOidcIdp", + "Update-PfbQosPolicy", + "Update-PfbSaml2Idp", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTlsPolicy", + "Update-PfbWormPolicy" + ] }, { - "name": "analysis_period_start_time", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system_names", + "cmdletCount": 8, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "anongid", - "cmdletCount": 0, - "cmdlets": [] + "name": "ca_certificate_group", + "cmdletCount": 6, + "cmdlets": [ + "New-PfbArrayConnection", + "Update-PfbActiveDirectory", + "Update-PfbArrayConnection", + "Update-PfbDns", + "Update-PfbKmip", + "Update-PfbTarget" + ] }, { - "name": "anonuid", - "cmdletCount": 0, - "cmdlets": [] + "name": "location", + "cmdletCount": 6, + "cmdlets": [ + "Update-PfbManagementAccessPolicy", + "Update-PfbQosPolicy", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTlsPolicy", + "Update-PfbWormPolicy" + ] }, { - "name": "appliance_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "services", + "cmdletCount": 6, + "cmdlets": [ + "New-PfbNetworkInterface", + "Update-PfbDns", + "Update-PfbNetworkInterface", + "Update-PfbOidcIdp", + "Update-PfbSaml2Idp", + "Update-PfbSyslogServer" + ] }, { - "name": "archival_rules", - "cmdletCount": 0, - "cmdlets": [] + "name": "destroyed", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbBucket", + "Get-PfbFileSystem", + "Get-PfbFileSystemSnapshot", + "Get-PfbRealm", + "Get-PfbWorkload" + ] }, { - "name": "array_url", - "cmdletCount": 0, - "cmdlets": [] + "name": "group_names", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbLocalGroupMember", + "Get-PfbNodeGroupNode", + "New-PfbLocalGroupMember", + "Remove-PfbLocalGroupMember", + "Remove-PfbNodeGroupNode" + ] }, { - "name": "atime", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_file_system_names", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] }, { - "name": "authorization_model", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_names", + "cmdletCount": 5, + "cmdlets": [ + "New-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink", + "Update-PfbArrayConnection" + ] }, { - "name": "banner", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system_ids", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "before_rule_id", - "cmdletCount": 0, - "cmdlets": [] + "name": "role_names", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "New-PfbObjectStoreRoleAccessPolicy", + "Remove-PfbObjectStoreRoleAccessPolicy" + ] }, { - "name": "before_rule_name", - "cmdletCount": 0, - "cmdlets": [] + "name": "type", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArraySpace", + "New-PfbNetworkInterface" + ] }, { - "name": "binding", - "cmdletCount": 0, - "cmdlets": [] + "name": "attached_servers", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkInterface", + "Update-PfbNetworkInterface", + "Update-PfbObjectStoreVirtualHost" + ] }, { - "name": "bucket_defaults", - "cmdletCount": 0, - "cmdlets": [] + "name": "before_rule_id", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "bucket_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "before_rule_name", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "bucket_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbLifecycleRule", + "Update-PfbBucketAuditFilter", + "Update-PfbLifecycleRule" + ] }, { "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": [] + "cmdletCount": 3, + "cmdlets": [ + "Update-PfbActiveDirectory", + "Update-PfbDns", + "Update-PfbKmip" + ] }, { - "name": "certificate_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_group_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] }, { - "name": "change", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] }, { "name": "client", - "cmdletCount": 0, - "cmdlets": [] + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "client_certificates_required", - "cmdletCount": 0, - "cmdlets": [] + "name": "index", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "client_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_size", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbDataEvictionPolicy", + "Update-PfbDataEvictionPolicy", + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "common_name", - "cmdletCount": 0, - "cmdlets": [] + "name": "policy", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNfsExportRule", + "Update-PfbFileSystemExport", + "Update-PfbObjectStoreAccountExport" + ] }, { - "name": "component_name", - "cmdletCount": 0, - "cmdlets": [] + "name": "prefix", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbSubnet", + "Update-PfbLifecycleRule", + "Update-PfbSubnet" + ] }, { - "name": "conditions", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbArrayConnection", + "Update-PfbArrayConnection", + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "confirm_date", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_file_system_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] }, { - "name": "contact", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_ids", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Update-PfbArrayConnection" + ] }, { - "name": "context_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "rules", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbPolicy", + "Update-PfbManagementAccessPolicy", + "Update-PfbPolicy" + ] }, { - "name": "country", - "cmdletCount": 0, - "cmdlets": [] + "name": "versions", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "current_state", - "cmdletCount": 0, - "cmdlets": [] + "name": "actions", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbS3ExportRule", + "Update-PfbBucketAuditFilter" + ] }, { - "name": "days", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLifecycleRule", + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "default_inbound_tls_policy", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket_ids", + "cmdletCount": 2, + "cmdlets": [ + "Update-PfbBucketAuditFilter", + "Update-PfbLifecycleRule" + ] }, { - "name": "default_retention", - "cmdletCount": 0, - "cmdlets": [] + "name": "effect", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbS3ExportRule" + ] }, { - "name": "delete_sanitization_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "email", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLocalGroup", + "Update-PfbCertificate" + ] }, { - "name": "description", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbQuotaGroup", + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "direct_notifications_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "group", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbQuotaGroup", + "Update-PfbDirectoryServiceRole" + ] }, { - "name": "direction", - "cmdletCount": 0, - "cmdlets": [] + "name": "idp", + "cmdletCount": 2, + "cmdlets": [ + "Update-PfbOidcIdp", + "Update-PfbSaml2Idp" + ] }, { - "name": "directory_configurations", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_file_system_ids", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink" + ] }, { - "name": "directory_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "member_types", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbPolicyAllMember", + "New-PfbQosPolicyMember" + ] }, { - "name": "disabled_tls_ciphers", - "cmdletCount": 0, - "cmdlets": [] + "name": "paths", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "discover_mtu", - "cmdletCount": 0, - "cmdlets": [] + "name": "permission", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "edge_agent_update_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "protocols", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbFileSystemSession", + "Remove-PfbFileSystemSession" + ] }, { - "name": "edge_management_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "quota_limit", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbBucket", + "Update-PfbBucket" + ] }, { - "name": "effect", - "cmdletCount": 0, - "cmdlets": [] + "name": "recursive", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "effective", - "cmdletCount": 0, - "cmdlets": [] + "name": "role_ids", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy" + ] }, { - "name": "enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "server", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbFileSystemExport", + "Update-PfbFileSystemExport" + ] }, { - "name": "enabled_tls_ciphers", - "cmdletCount": 0, - "cmdlets": [] + "name": "abort_incomplete_multipart_uploads_after", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "encrypted", - "cmdletCount": 0, - "cmdlets": [] + "name": "access", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "encryption", - "cmdletCount": 0, - "cmdlets": [] + "name": "access_key_id", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "encryption_types", - "cmdletCount": 0, - "cmdlets": [] + "name": "admin_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "enforce_action_restrictions", - "cmdletCount": 0, - "cmdlets": [] + "name": "admin_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "enforce_dictionary_check", - "cmdletCount": 0, - "cmdlets": [] + "name": "aggregation_strategy", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbManagementAccessPolicy" + ] }, { - "name": "enforce_username_check", - "cmdletCount": 0, - "cmdlets": [] + "name": "anongid", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "eradicate_all_data", - "cmdletCount": 0, - "cmdlets": [] + "name": "anonuid", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "exclude_rules", - "cmdletCount": 0, - "cmdlets": [] + "name": "array_url", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "export_configurations", - "cmdletCount": 0, - "cmdlets": [] + "name": "atime", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "export_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "binding", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "expose_api_token", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "fileid_32bit", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_group_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbCertificateCertificateGroup" + ] }, { - "name": "finalize", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbCertificateCertificateGroup" + ] }, { - "name": "fleet_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_type", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "fqdns", - "cmdletCount": 0, - "cmdlets": [] + "name": "change", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "fragment_packet", - "cmdletCount": 0, - "cmdlets": [] + "name": "common_name", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "full_access", - "cmdletCount": 0, - "cmdlets": [] + "name": "confirm_date", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "full_control", - "cmdletCount": 0, - "cmdlets": [] + "name": "country", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "generate_new_key", - "cmdletCount": 0, - "cmdlets": [] + "name": "days", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "gids", - "cmdletCount": 0, - "cmdlets": [] + "name": "description", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLegalHold" + ] }, { - "name": "global_catalog_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "encryption", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbClientRule" + ] }, { - "name": "group_base", - "cmdletCount": 0, - "cmdlets": [] + "name": "eradication_config", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] }, { - "name": "group_gids", - "cmdletCount": 0, - "cmdlets": [] + "name": "export_enabled", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreAccountExport" + ] }, { - "name": "group_sids", - "cmdletCount": 0, - "cmdlets": [] + "name": "fileid_32bit", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "hard_limit_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "fleet_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFleetMember" + ] }, { - "name": "hardware_components", - "cmdletCount": 0, - "cmdlets": [] + "name": "full_control", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "host", - "cmdletCount": 0, - "cmdlets": [] + "name": "group_base", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbDirectoryServiceRole" + ] }, { - "name": "identify_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "interfaces", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNetworkAccessRule" + ] }, { - "name": "idle_timeout", - "cmdletCount": 0, - "cmdlets": [] + "name": "intermediate_certificate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "idp", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_current_version_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "index", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_current_version_until", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "indices", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "inodes", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_previous_version_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "interfaces", - "cmdletCount": 0, - "cmdlets": [] + "name": "key_algorithm", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "intermediate_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "key_size", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "issuer", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_directory_service_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbLocalGroupMember" + ] }, { - "name": "join_ou", - "cmdletCount": 0, - "cmdlets": [] + "name": "locality", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "keep_current_version_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "log_name_prefix", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "keep_current_version_until", - "cmdletCount": 0, - "cmdlets": [] + "name": "log_rotate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "keep_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "management", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "keep_previous_version_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "management_access_policies", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbAdmin" + ] }, { - "name": "kerberos_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_session_duration", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRole" + ] }, { - "name": "key_algorithm", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_total_bytes_per_sec", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbQosPolicy" + ] }, { - "name": "key_size", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_total_ops_per_sec", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbQosPolicy" + ] }, { - "name": "keytab_file", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_group_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "keytab_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_group_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "keytab_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "kmip_server", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "lane_speed", - "cmdletCount": 0, - "cmdlets": [] + "name": "organization", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "lanes_per_port", - "cmdletCount": 0, - "cmdlets": [] + "name": "organizational_unit", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "link_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "parameters", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbWorkload" + ] }, { - "name": "local_bucket_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "passphrase", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "local_directory_service_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "principal", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "local_file_system", - "cmdletCount": 0, - "cmdlets": [] + "name": "private_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "local_file_system_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "protocol", + "cmdletCount": 1, + "cmdlets": [ + "Get-PfbArrayPerformance" + ] }, { - "name": "local_host", - "cmdletCount": 0, - "cmdlets": [] + "name": "public_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbAdmin" + ] }, { - "name": "local_only", - "cmdletCount": 0, - "cmdlets": [] + "name": "rdma_enabled", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbNetworkInterface" + ] }, { - "name": "local_port", - "cmdletCount": 0, - "cmdlets": [] + "name": "read", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "local_port_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "realm_ids", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbRealmDefaults" + ] }, { - "name": "locality", - "cmdletCount": 0, - "cmdlets": [] + "name": "realm_names", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbRealmDefaults" + ] }, { - "name": "location", - "cmdletCount": 0, - "cmdlets": [] + "name": "required_transport_security", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "locked", - "cmdletCount": 0, - "cmdlets": [] + "name": "resources", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbS3ExportRule" + ] }, { - "name": "lockout_duration", - "cmdletCount": 0, - "cmdlets": [] + "name": "retention_lock", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbWormPolicy" + ] }, { - "name": "log_name_prefix", - "cmdletCount": 0, - "cmdlets": [] + "name": "s3_prefixes", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbBucketAuditFilter" + ] }, { - "name": "log_rotate", - "cmdletCount": 0, - "cmdlets": [] + "name": "secret_access_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "management", - "cmdletCount": 0, - "cmdlets": [] + "name": "secure", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "management_access_policies", - "cmdletCount": 0, - "cmdlets": [] + "name": "security", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "max_login_attempts", - "cmdletCount": 0, - "cmdlets": [] + "name": "source", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] }, { - "name": "max_password_age", - "cmdletCount": 0, - "cmdlets": [] + "name": "sp", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "max_retention", - "cmdletCount": 0, - "cmdlets": [] + "name": "state", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "max_role", - "cmdletCount": 0, - "cmdlets": [] + "name": "subject_alternative_names", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "max_session_duration", - "cmdletCount": 0, - "cmdlets": [] + "name": "timeout", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "max_total_bytes_per_sec", - "cmdletCount": 0, - "cmdlets": [] + "name": "v2c", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "max_total_ops_per_sec", - "cmdletCount": 0, - "cmdlets": [] + "name": "v3", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "member", - "cmdletCount": 0, - "cmdlets": [] + "name": "version", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "member_sids", + "name": "access_policies", "cmdletCount": 0, "cmdlets": [] }, { - "name": "members", + "name": "access_token_ttl_in_ms", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_character_groups", + "name": "account_exports", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_characters_per_group", + "name": "allow_errors", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_password_age", + "name": "allowed_headers", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_password_length", + "name": "allowed_methods", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_retention", + "name": "allowed_origins", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_tls_version", + "name": "analysis_period_end_time", "cmdletCount": 0, "cmdlets": [] }, { - "name": "mode", + "name": "analysis_period_start_time", "cmdletCount": 0, "cmdlets": [] }, { - "name": "name_prefixes", + "name": "banner", "cmdletCount": 0, "cmdlets": [] }, { - "name": "names_or_owner_names", + "name": "bucket_defaults", "cmdletCount": 0, "cmdlets": [] }, { - "name": "network_access_policy", + "name": "bucket_type", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_group_ids", + "name": "client_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_group_names", + "name": "component_name", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_ids", + "name": "conditions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_key", + "name": "contact", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_names", + "name": "context_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "notification", + "name": "current_state", "cmdletCount": 0, "cmdlets": [] }, { - "name": "ntp_servers", + "name": "default_inbound_tls_policy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "object_lock_config", + "name": "delete_sanitization_certificate", "cmdletCount": 0, "cmdlets": [] }, { - "name": "object_store", + "name": "direct_notifications_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "old_password", + "name": "direction", "cmdletCount": 0, "cmdlets": [] }, { - "name": "organization", + "name": "directory_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "organizational_unit", + "name": "discover_mtu", "cmdletCount": 0, "cmdlets": [] }, { - "name": "owner_ids", + "name": "edge_agent_update_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "passphrase", + "name": "edge_management_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "password", + "name": "effective", "cmdletCount": 0, "cmdlets": [] }, { - "name": "password_history", + "name": "enforce_action_restrictions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "paths", + "name": "enforce_dictionary_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "periodic_replication_configurations", + "name": "enforce_username_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "permission", + "name": "eradicate_all_data", "cmdletCount": 0, "cmdlets": [] }, { - "name": "phonehome_enabled", + "name": "exclude_rules", "cmdletCount": 0, "cmdlets": [] }, { - "name": "placement_configurations", + "name": "export_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "platform_features", + "name": "expose_api_token", "cmdletCount": 0, "cmdlets": [] }, { - "name": "policies", + "name": "finalize", "cmdletCount": 0, "cmdlets": [] }, { - "name": "policy", + "name": "fragment_packet", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port", + "name": "full_access", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port_count", + "name": "gids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port_speed", + "name": "group_gids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "ports", + "name": "group_sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "preserve_configuration_data", + "name": "hard_limit_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "principal", + "name": "idle_timeout", "cmdletCount": 0, "cmdlets": [] }, { - "name": "principals", + "name": "indices", "cmdletCount": 0, "cmdlets": [] }, { - "name": "print_latency", + "name": "inodes", "cmdletCount": 0, "cmdlets": [] }, { - "name": "private_key", + "name": "issuer", "cmdletCount": 0, "cmdlets": [] }, { - "name": "proxy", + "name": "keytab_file", "cmdletCount": 0, "cmdlets": [] }, { - "name": "public_key", + "name": "keytab_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "purity_defined", + "name": "keytab_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "qos_configurations", + "name": "kmip_server", "cmdletCount": 0, "cmdlets": [] }, { - "name": "quota_configurations", + "name": "link_type", "cmdletCount": 0, "cmdlets": [] }, { - "name": "rdma_enabled", + "name": "local_bucket_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "read", + "name": "local_directory_service_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "realm_ids", + "name": "local_file_system", "cmdletCount": 0, "cmdlets": [] }, { - "name": "realm_names", + "name": "local_host", "cmdletCount": 0, "cmdlets": [] }, { - "name": "recursive", + "name": "local_only", "cmdletCount": 0, "cmdlets": [] }, { - "name": "refresh", + "name": "local_port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "released", + "name": "local_port_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote", + "name": "lockout_duration", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_assist_active", + "name": "max_login_attempts", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_assist_duration", + "name": "max_password_age", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_file_system", + "name": "max_role", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_file_system_ids", + "name": "member_sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_host", + "name": "min_character_groups", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_ids", + "name": "min_characters_per_group", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_port", + "name": "min_password_age", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remove_attached_servers", + "name": "min_password_length", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remove_ports", + "name": "name_prefixes", "cmdletCount": 0, "cmdlets": [] }, { - "name": "required_transport_security", + "name": "names_or_owner_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "resolve_hostname", + "name": "network_access_policy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "resources", + "name": "ntp_servers", "cmdletCount": 0, "cmdlets": [] }, { - "name": "retention_lock", + "name": "object_lock_config", "cmdletCount": 0, "cmdlets": [] }, { - "name": "retrieval_rules", + "name": "owner_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "role", + "name": "password_history", "cmdletCount": 0, "cmdlets": [] }, { - "name": "rule_id", + "name": "periodic_replication_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "s3_prefixes", + "name": "phonehome_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "secret_access_key", + "name": "placement_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "secure", + "name": "platform_features", "cmdletCount": 0, "cmdlets": [] }, { - "name": "security", + "name": "policies", "cmdletCount": 0, "cmdlets": [] }, { - "name": "serial_number", + "name": "port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "service_principal_names", + "name": "preserve_configuration_data", "cmdletCount": 0, "cmdlets": [] }, { - "name": "session_names", + "name": "principals", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sids", + "name": "print_latency", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signature", + "name": "proxy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signed_verification_key", + "name": "purity_defined", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signing_authority", + "name": "qos_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "skip_phonehome_check", + "name": "quota_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "snapshot_configurations", + "name": "refresh", "cmdletCount": 0, "cmdlets": [] }, { - "name": "software_names", + "name": "remote_assist_active", "cmdletCount": 0, "cmdlets": [] }, { - "name": "software_versions", + "name": "remote_assist_duration", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sources", + "name": "remote_file_system", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sp", + "name": "remote_file_system_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "state", + "name": "remote_host", "cmdletCount": 0, "cmdlets": [] }, { - "name": "static_authorized_principals", + "name": "remote_port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "storage_class_names", + "name": "resolve_hostname", "cmdletCount": 0, "cmdlets": [] }, { - "name": "subject_alternative_names", + "name": "role", "cmdletCount": 0, "cmdlets": [] }, { - "name": "throttle", + "name": "rule_id", "cmdletCount": 0, "cmdlets": [] }, { - "name": "time_zone", + "name": "session_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "timeout", + "name": "sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "total_item_count", + "name": "signature", "cmdletCount": 0, "cmdlets": [] }, { - "name": "trusted_client_certificate_authority", + "name": "signed_verification_key", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uids", + "name": "skip_phonehome_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "unreachable", + "name": "snapshot_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uri", + "name": "software_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uris", + "name": "software_versions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "user_names", + "name": "storage_class_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "v2c", + "name": "time_zone", "cmdletCount": 0, "cmdlets": [] }, { - "name": "v3", + "name": "total_item_count", "cmdletCount": 0, "cmdlets": [] }, { - "name": "verify_client_certificate_trust", + "name": "uids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "version", + "name": "unreachable", "cmdletCount": 0, "cmdlets": [] }, { - "name": "versions", + "name": "user_names", "cmdletCount": 0, "cmdlets": [] }, diff --git a/Reports/PfbApiDriftReport.md b/Reports/PfbApiDriftReport.md index de305a0..a496ed3 100644 --- a/Reports/PfbApiDriftReport.md +++ b/Reports/PfbApiDriftReport.md @@ -21,13 +21,13 @@ This report accepts **false positives in order to eliminate false negatives**. A ## Summary - Uncovered endpoints: 117 -- Endpoints with parameter gaps: 432 -- Missing body properties (addable): 606 -- Missing query parameters (addable): 1004 +- Endpoints with parameter gaps: 420 +- Missing body properties (addable): 403 +- Missing query parameters (addable): 948 - Read-only body fields (not addable -- see the Read-only fields section below): 367 - Phantom fields silently excluded (accumulated in the capability map, absent from the newest analysed spec): 40 - Partial-confidence endpoints (see `How to read this report` above, and each row's marker in the Parameter gaps table): 54 -- Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): 312 +- Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): 252 - ValidateSet drift: 0 - New ValidateSet candidates: 1 @@ -35,35 +35,35 @@ This report accepts **false positives in order to eliminate false negatives**. A 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 312 findings by endpoint count -- the full list is in the JSON manifest's `systemicGaps`, nothing is dropped there. +Showing the top 25 of 252 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` | 254 | 254 | 0 | 0 | not yet implemented | | `allow_errors` | 110 | 110 | 0 | 0 | not yet implemented | -| `ids` | 46 | 46 | 0 | 218 | | -| `names` | 35 | 35 | 0 | 306 | | +| `ids` | 43 | 43 | 0 | 219 | | | `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 | | +| `names` | 31 | 31 | 0 | 308 | | +| `bucket_ids` | 17 | 17 | 0 | 2 | | +| `policy_ids` | 17 | 17 | 0 | 88 | | | `total_only` | 17 | 17 | 0 | 30 | | -| `enabled` | 16 | 0 | 16 | 0 | | -| `member_ids` | 16 | 16 | 0 | 78 | | -| `remote_names` | 16 | 16 | 0 | 2 | | +| `bucket_names` | 16 | 16 | 0 | 3 | | +| `member_ids` | 15 | 15 | 0 | 78 | | +| `remote_ids` | 15 | 15 | 0 | 3 | | | `limit` | 14 | 14 | 0 | 182 | | | `filter` | 13 | 13 | 0 | 185 | | -| `file_system_ids` | 11 | 11 | 0 | 2 | | +| `remote_names` | 13 | 13 | 0 | 5 | | | `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 | | +| `file_system_ids` | 9 | 9 | 0 | 4 | | +| `local_file_system_ids` | 8 | 8 | 0 | 2 | | +| `actions` | 7 | 0 | 7 | 2 | | +| `versions` | 7 | 7 | 0 | 3 | | +| `enabled` | 6 | 0 | 6 | 10 | | +| `gids` | 6 | 6 | 0 | 0 | | +| `name` | 6 | 0 | 6 | 20 | | +| `role_ids` | 6 | 6 | 0 | 2 | | +| `role_names` | 6 | 6 | 0 | 4 | | +| `workload_ids` | 6 | 6 | 0 | 0 | | ## Parameter gaps @@ -321,64 +321,58 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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` | Update-PfbAdmin | context_names | 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 /api-clients` | Update-PfbApiClient | | max_role | `high` | | +| `PATCH /array-connections` | Update-PfbArrayConnection | context_names | | `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 /buckets/audit-filters` | Update-PfbBucketAuditFilter | context_names | | `high` | | +| `PATCH /certificates` | Update-PfbCertificate | | | `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 /directory-services/roles` | Update-PfbDirectoryServiceRole | role_ids, role_names | role | `high` | | +| `PATCH /dns` | Update-PfbDns | context_names | | `high` | | +| `PATCH /file-system-exports` | Update-PfbFileSystemExport | context_names | | `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 | abort_quiesce, default_group_quota, default_user_quota, destroyed, fast_remove_directory_enabled, group_ownership, hard_limit_enabled, http, multi_protocol, name, nfs, qos_policy, quiesce, skip_quiesce, 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 /hardware` | Update-PfbHardware | | | `high` | | +| `PATCH /hardware-connectors` | Update-PfbHardwareConnector | | | `high` | | +| `PATCH /kmip` | Update-PfbKmip | | | `high` | | +| `PATCH /legal-holds` | Update-PfbLegalHold | | | `high` | | +| `PATCH /lifecycle-rules` | Update-PfbLifecycleRule | context_names | | `high` | | +| `PATCH /log-targets/file-systems` | Update-PfbLogTargetFileSystem | context_names | | `high` | | +| `PATCH /log-targets/object-store` | Update-PfbLogTargetObjectStore | context_names | | `high` | | +| `PATCH /logs-async` | Update-PfbAsyncLog | | | `high` | | +| `PATCH /management-access-policies` | Update-PfbManagementAccessPolicy | context_names | | `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, rdma_enabled, services | `high` | | -| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | | lane_speed, lanes_per_port, port_count, port_speed | `high` | | +| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | | | `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 /nodes` | Update-PfbNode | | | `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-account-exports` | Update-PfbObjectStoreAccountExport | context_names | | `high` | | +| `PATCH /object-store-remote-credentials` | Update-PfbObjectStoreRemoteCredential | context_names | | `high` | | +| `PATCH /object-store-roles` | Update-PfbObjectStoreRole | context_names | | `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 /object-store-virtual-hosts` | Update-PfbObjectStoreVirtualHost | context_names | | `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 /qos-policies` | Update-PfbQosPolicy | context_names | | `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 /realms/defaults` | Update-PfbRealmDefaults | context_names | | `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 /smb-client-policies` | Update-PfbSmbClientPolicy | context_names | access_based_enumeration_enabled, enabled, location, name, rules | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | @@ -386,26 +380,25 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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 /snmp-managers` | Update-PfbSnmpManager | | | `high` | | +| `PATCH /ssh-certificate-authority-policies` | Update-PfbSshCaPolicy | | | `high` | | +| `PATCH /sso/oidc/idps` | Update-PfbOidcIdp | | | `high` | | +| `PATCH /sso/saml2/idps` | Update-PfbSaml2Idp | | | `high` | | +| `PATCH /storage-class-tiering-policies` | Update-PfbStorageClassTieringPolicy | | | `high` | | +| `PATCH /subnets` | Update-PfbSubnet | | | `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 /targets` | Update-PfbTarget | | | `high` | | +| `PATCH /tls-policies` | Update-PfbTlsPolicy | | | `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` | | +| `PATCH /worm-data-policies` | Update-PfbWormPolicy | context_names | | `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/api-tokens` | New-PfbApiToken | context_names | | `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 /array-connections` | New-PfbArrayConnection | context_names | | `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) | | @@ -419,7 +412,6 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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` | | @@ -430,18 +422,16 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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-replica-links/policies` | New-PfbFileSystemReplicaLinkPolicy | context_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` | | @@ -449,13 +439,11 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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-access-policies/rules` | New-PfbNetworkAccessRule | | | `high` | | | `POST /network-interfaces` | New-PfbNetworkInterface | | rdma_enabled | `high` | | -| `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 /nfs-export-policies/rules` | New-PfbNfsExportRule | context_names | | `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` | | @@ -471,22 +459,22 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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-system-replica-links` | New-PfbPolicyFileSystemReplicaLink | context_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 /qos-policies/members` | New-PfbQosPolicyMember | context_names | | `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 /s3-export-policies/rules` | New-PfbS3ExportRule | context_names | | `high` | | | `POST /servers` | New-PfbServer | create_ds, create_local_directory_service | | `partial` -- /!\ 1 unresolved param (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-client-policies/rules` | New-PfbSmbClientRule | context_names | | `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 /smb-share-policies/rules` | New-PfbSmbShareRule | context_names | | `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) | | From c581fec492001d26fb7429a56768259b526f6c9c Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 12:56:11 -0700 Subject: [PATCH 87/90] fix(test): skip the drift-confidence guard on PowerShell < 7 (#31, Task 12 step 2) Build-PfbApiDriftReport.ps1 requires PS7+ (#requires -Version 7.0), matching every other drift-tooling Describe block in this repo, which already skips itself the same way. The guard test lacked this skip, so it failed outright on Windows PowerShell 5.1 with a ScriptRequiresException rather than skipping gracefully. Found while running Task 12's PS 5.1 full-suite sweep. --- Tests/Issue31.DriftConfidence.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Issue31.DriftConfidence.Tests.ps1 b/Tests/Issue31.DriftConfidence.Tests.ps1 index 4454341..1e8fa72 100644 --- a/Tests/Issue31.DriftConfidence.Tests.ps1 +++ b/Tests/Issue31.DriftConfidence.Tests.ps1 @@ -27,7 +27,7 @@ BeforeAll { ) } -Describe 'Issue #31 - in-scope cmdlets keep high drift confidence' { +Describe 'Issue #31 - in-scope cmdlets keep high drift confidence' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { It 'no in-scope write endpoint has dropped to partial confidence' { # Build-PfbApiDriftReport.ps1 has no -PassThru (verified: its parameters are # SpecsDirectory, PublicDirectory, PrivateDirectory, CapabilityMapPath, From 148a9a2c0130f0ede5027d555bb26a12e9a358be Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Tue, 28 Jul 2026 13:07:20 -0700 Subject: [PATCH 88/90] test: re-pin drift-tooling acceptance figures after issue #31 (#31, Task 12 step 3) Closing real gaps on 56 cmdlets shifted every population-wide figure these tests pin. Two kinds of change: Pure re-pins (population drift, unrelated to this issue's correctness): context_names 253->254, allow_errors 109->110, names 306->308, ids 218->219, phantomFieldCount 34->40, high-confidence phantom-excluded 13->21 (duplicated in both Build-PfbApiDriftReport.Tests.ps1 and PfbApiDriftTools.Tests.ps1). Premise-flipped canaries, repurposed rather than blindly re-pinned: 10 of the 11 'Task 8 canary' (endpoint, field) pairs, and the generate_new_key spot-check, were regression canaries proving the drift tool's readOnly-detection didn't wrongly suppress a real gap -- issue #31 correctly closed all of them (Update-PfbTlsPolicy -NewName, Update-PfbHardwareConnector -PortSpeed, Update-PfbCertificate -GenerateNewKey, etc). Verified each directly against the regenerated report before flipping. Split into: one test asserting the still-open, correctly-deprecated max_role gap remains (Constraint 9), and one asserting the 10 fixed fields stay fixed (repurposed as a forward regression guard rather than left permanently red or deleted). All drift-tooling tests green: 166/166. --- Tests/Build-PfbApiDriftReport.Tests.ps1 | 67 ++++++++++++++++++------- Tests/PfbApiDriftTools.Tests.ps1 | 19 ++++--- 2 files changed, 61 insertions(+), 25 deletions(-) diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index ef57296..caad10a 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -463,16 +463,22 @@ Describe 'Build-PfbApiDriftReport (real generated artifacts, skips gracefully if Test-Path $realOutput | Should -BeTrue } - It 'Task 7: wires systemicGaps through with the pinned acceptance figures (context_names 253, allow_errors 109)' { + It 'Task 7: wires systemicGaps through with the pinned acceptance figures (context_names 254, allow_errors 110)' { 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 + # Re-pinned after issue #31 (Task 12 step 3): closing 56 cmdlets' worth of real gaps + # shifted these population-wide figures. context_names/allow_errors are unrelated, + # out-of-scope systemic gaps (Fusion context design, not yet implemented) whose + # endpoint counts drift independently of this issue's own work. + ($realManifest.systemicGaps | Where-Object { $_.name -eq 'context_names' }).endpointCount | Should -Be 254 + ($realManifest.systemicGaps | Where-Object { $_.name -eq 'allow_errors' }).endpointCount | Should -Be 110 } - It 'Task 7: wires conventionStrength through with the pinned acceptance figures (names 306, ids 218, context_names 0)' { + It 'Task 7: wires conventionStrength through with the pinned acceptance figures (names 308, ids 219, 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 + # Re-pinned after issue #31 (Task 12 step 3): the 56 converted cmdlets now use -Name/-Id + # (wired to names/ids), raising the convention-strength cmdlet counts for both. + ($realManifest.conventionStrength | Where-Object { $_.name -eq 'names' }).cmdletCount | Should -Be 308 + ($realManifest.conventionStrength | Where-Object { $_.name -eq 'ids' }).cmdletCount | Should -Be 219 ($realManifest.conventionStrength | Where-Object { $_.name -eq 'context_names' }).cmdletCount | Should -Be 0 } @@ -535,10 +541,26 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga # 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' { + # + # Re-pinned after issue #31 (Task 12 step 3): 10 of these 11 canaries were exactly the kind + # of real, actionable gap this test existed to prove wasn't being wrongly suppressed -- + # and issue #31 closed all 10 by adding the corresponding typed parameter (Update-PfbTlsPolicy + # -NewName, Update-PfbHardwareConnector -PortSpeed, etc). Verified directly against this + # report: each of the 10 now has an empty missingBodyProperties list for that field. Asserting + # they "remain actionable" would be asserting a regression that never happened; the test is + # repurposed below to guard against ever losing that fix instead. Only `max_role` on + # PATCH /api-clients is still open, correctly (Constraint 9: deprecated fields get no typed + # parameter, so it's expected to remain a permanent, not-actionable gap). + It 'Task 8 canary: PATCH /api-clients|max_role remains a body gap (deprecated field, correctly never given a typed parameter per Constraint 9)' { if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } - $canaries = @( - @{ Endpoint = 'PATCH /api-clients'; Field = 'max_role' } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /api-clients' } + $gap | Should -Not -BeNullOrEmpty -Because 'PATCH /api-clients must have a parameter-gap row' + (Get-T8GapFieldNames -Gap $gap) | Should -Contain 'max_role' -Because 'max_role is deprecated and deliberately left unaddressed' + } + + It 'Task 8 canaries: the 10 real gaps issue #31 fixed stay fixed (regression guard, not a re-check of the original first-sight-readOnly finding)' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $fixedCanaries = @( @{ Endpoint = 'PATCH /tls-policies'; Field = 'name' } @{ Endpoint = 'PATCH /storage-class-tiering-policies'; Field = 'name' } @{ Endpoint = 'PATCH /dns'; Field = 'name' } @@ -550,10 +572,10 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga @{ Endpoint = 'PATCH /hardware-connectors'; Field = 'port_speed' } @{ Endpoint = 'PATCH /network-interfaces/connectors'; Field = 'port_speed' } ) - foreach ($c in $canaries) { + foreach ($c in $fixedCanaries) { $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" + $gap | Should -Not -BeNullOrEmpty -Because "$($c.Endpoint) must still have a parameter-gap row (for its other tracked fields)" + (Get-T8GapFieldNames -Gap $gap) | Should -Not -Contain $c.Field -Because "$($c.Endpoint)|$($c.Field) was fixed by issue #31 and must not regress" } } @@ -577,10 +599,14 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga } } - It 'Task 8 spot-check: PATCH /certificates / generate_new_key appears as a query-parameter gap' { + It 'Task 8 spot-check: PATCH /certificates / generate_new_key was fixed by issue #31 (Update-PfbCertificate -GenerateNewKey) and must not regress' { if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + # Re-pinned after issue #31 (Task 12 step 3): this was a real query-parameter gap when + # the original spot-check was written; Task 2 closed it. Verified directly against this + # report: PATCH /certificates now has an empty missingQueryParameters list. $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /certificates' } - $gap.missingQueryParameters | Should -Contain 'generate_new_key' + $gap | Should -Not -BeNullOrEmpty + $gap.missingQueryParameters | Should -Not -Contain 'generate_new_key' } It 'Task 8 spot-check: PATCH /directory-services/roles / management_access_policies is read-only' { @@ -682,21 +708,26 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga $overlap.Count | Should -Be 0 } - It 'the phantom-excluded count matches the real manifest''s phantomFieldCount exactly (34, full population)' { + It 'the phantom-excluded count matches the real manifest''s phantomFieldCount exactly (40, full population)' { if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + # Re-pinned after issue #31 (Task 12 step 3): closing real gaps on 56 cmdlets shrank + # the reported set, growing phantom-excluded (population minus reported) in step -- + # expected population drift, not a defect in the phantom-detection logic itself. $t8PhantomExcludedSet.Count | Should -Be $t8Manifest.phantomFieldCount - $t8PhantomExcludedSet.Count | Should -Be 34 + $t8PhantomExcludedSet.Count | Should -Be 40 } - It 'restricting the same diff to high-confidence-only gaps reproduces the doc-comment-pinned 13' { + It 'restricting the same diff to high-confidence-only gaps reproduces the doc-comment-pinned 21' { if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + # Re-pinned after issue #31 (Task 12 step 3): same population-drift mechanism as + # phantomFieldCount above, restricted to high-confidence gaps. $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 + $phantomHighSet.Count | Should -Be 21 } It 'the in-memory reported set matches the real committed Reports/PfbApiDriftReport.json on disk exactly (no serialization-only divergence)' { diff --git a/Tests/PfbApiDriftTools.Tests.ps1 b/Tests/PfbApiDriftTools.Tests.ps1 index 276b685..de829ae 100644 --- a/Tests/PfbApiDriftTools.Tests.ps1 +++ b/Tests/PfbApiDriftTools.Tests.ps1 @@ -1264,25 +1264,30 @@ Describe 'Task 6 real-data acceptance figures (systemic gaps + convention streng } } - It 'shows allow_errors at 109 endpoints (systemic-gaps acceptance figure -- exact match)' { + It 'shows allow_errors at 110 endpoints (systemic-gaps acceptance figure -- exact match)' { if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + # Re-pinned after issue #31 (Task 12 step 3, duplicate of the pin in + # Build-PfbApiDriftReport.Tests.ps1) -- allow_errors is an unrelated, out-of-scope + # systemic gap (Fusion context design) whose endpoint count drifts independently. $finding = $realSystemicGaps2 | Where-Object { $_.Name -eq 'allow_errors' } $finding | Should -Not -BeNullOrEmpty - $finding.EndpointCount | Should -Be 109 + $finding.EndpointCount | Should -Be 110 } - 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' { + It 'shows context_names at 254 endpoints -- re-pinned after issue #31 (Task 12 step 3); previously 253 (itself already one endpoint off the task brief''s stated 252, investigated and left as the honestly-measured value rather than force-matched)' { 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 + $finding.EndpointCount | Should -Be 254 } - It 'convention strength: names = 306, ids = 218, context_names = 0 (acceptance figures)' { + It 'convention strength: names = 308, ids = 219, context_names = 0 (acceptance figures)' { if (-not $hasRealData) { Set-ItResult -Skipped -Because 'Data/PfbCapabilityMap.json not present locally'; return } + # Re-pinned after issue #31 (Task 12 step 3): the 56 converted cmdlets now use + # -Name/-Id (wired to names/ids), raising both convention-strength counts. $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 'names' }).CmdletCount | Should -Be 308 + ($strength | Where-Object { $_.Name -eq 'ids' }).CmdletCount | Should -Be 219 ($strength | Where-Object { $_.Name -eq 'context_names' }).CmdletCount | Should -Be 0 } From ef8b9389a97e72ecd4919d424983cbcfb30e8897 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Fri, 31 Jul 2026 11:30:37 -0700 Subject: [PATCH 89/90] fix(tests): skip Issue31.DriftConfidence test gracefully when real artifacts are absent Build-PfbApiDriftReport.ps1 throws by design when the capability map's newest generatedFrom spec version isn't physically cached under tools/specs/ (gitignored, never populated in CI -- no fetch step in cross-platform-tests.yml). This test called it unconditionally instead of following the same "skip gracefully if absent" convention every sibling real-artifact test uses, so it hard-failed on all 3 non-Windows-PowerShell-5.1 CI legs. Verified locally (real artifacts present): the underlying claim still holds, no in-scope endpoint regressed. --- Tests/Issue31.DriftConfidence.Tests.ps1 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Tests/Issue31.DriftConfidence.Tests.ps1 b/Tests/Issue31.DriftConfidence.Tests.ps1 index 1e8fa72..2491370 100644 --- a/Tests/Issue31.DriftConfidence.Tests.ps1 +++ b/Tests/Issue31.DriftConfidence.Tests.ps1 @@ -25,10 +25,25 @@ BeforeAll { 'Update-PfbWormPolicy','New-PfbArrayConnection','New-PfbFileSystemReplicaLinkPolicy', 'New-PfbFleetMember','Update-PfbArrayConnection','Update-PfbFleet','Update-PfbTarget' ) + + # Same "skip gracefully if absent" convention as Build-PfbApiDriftReport.Tests.ps1's + # real-generated-artifacts Describe block: Build-PfbApiDriftReport.ps1 throws (by + # design -- see its RuntimeException at line ~156) when the capability map's newest + # `generatedFrom` spec version isn't physically present under tools/specs/. CI never + # populates tools/specs/ (gitignored, no fetch step in cross-platform-tests.yml), so + # without this guard this test hard-fails on every PR instead of skipping like every + # sibling real-artifact test does. + $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) } Describe 'Issue #31 - in-scope cmdlets keep high drift confidence' -Skip:($PSVersionTable.PSVersion.Major -lt 7) { It 'no in-scope write endpoint has dropped to partial confidence' { + if (-not $hasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + # Build-PfbApiDriftReport.ps1 has no -PassThru (verified: its parameters are # SpecsDirectory, PublicDirectory, PrivateDirectory, CapabilityMapPath, # FieldCmdletMapPath, OutputPath, ReportPath, SinceVersion). Generate to a temp From 18772f37c90de63bf5c917c5932b4ac10f5aa5b5 Mon Sep 17 00:00:00 2001 From: Justin Emerson Date: Fri, 31 Jul 2026 12:37:19 -0700 Subject: [PATCH 90/90] fix(tests): update Task 8 regression canaries closed by issue #31's write-cmdlet pass 10 of the 11 hardcoded (endpoint, field) regression canaries in Build-PfbApiDriftReport.Tests.ps1 turned out to already be closed by this branch's own 56-cmdlet body/query-param work -- each cmdlet now exposes the field as a typed parameter, so it's no longer a detected gap. Real, intentional fixes, not regressions. These were discovered one at a time across several re-runs: the original `foreach` loop with `Should -Contain` throws on the first mismatch and never reaches the rest, so fixing the first-discovered failure just exposed the next one already sitting behind it. Verified each one directly against the real regenerated Reports/PfbApiDriftReport.json before removing it from the canary list, consolidated into one correction test (same pattern as the pre-existing PATCH /certificates|{id,name} phantom correction). Only PATCH /api-clients|max_role remains a genuine, still-open canary. --- Reports/PfbApiDriftReport.json | 24317 +++++++++------------- Reports/PfbApiDriftReport.md | 158 +- Reports/PfbFieldCmdletMap.json | 5676 +++-- Reports/PfbFieldCmdletMapping.md | 38 +- Tests/Build-PfbApiDriftReport.Tests.ps1 | 56 +- 5 files changed, 13943 insertions(+), 16302 deletions(-) diff --git a/Reports/PfbApiDriftReport.json b/Reports/PfbApiDriftReport.json index a571409..9600b89 100644 --- a/Reports/PfbApiDriftReport.json +++ b/Reports/PfbApiDriftReport.json @@ -5552,180 +5552,6 @@ }, "annotations": [] }, - { - "endpoint": "PATCH /active-directory", - "cmdlets": [ - "Update-PfbActiveDirectory" - ], - "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": [ @@ -5735,108 +5561,6 @@ "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, @@ -5848,9 +5572,9 @@ "enumStatus": "no-spec-enum-found", "target": { "file": "Public/Admin/Update-PfbAdmin.ps1", - "paramBlockLine": 37, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "paramBlockLine": 93, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } @@ -6014,23 +5738,6 @@ ], "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, @@ -6042,9 +5749,9 @@ "enumStatus": "no-spec-enum-found", "target": { "file": "Public/Admin/Update-PfbApiClient.ps1", - "paramBlockLine": 41, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "paramBlockLine": 61, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } @@ -6072,114 +5779,9 @@ "Update-PfbArrayConnection" ], "missingQueryParameters": [ - "context_names", - "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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ "context", "id", @@ -6547,47 +6149,9 @@ "Update-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/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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -6602,293 +6166,133 @@ "cmdlets": [ "Update-PfbCertificate" ], + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /data-eviction-policies", + "cmdlets": [ + "Update-PfbDataEvictionPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "location" + ], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "TypedUnresolved", + "file": "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 /directory-services", + "cmdlets": [ + "Update-PfbDirectoryService" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ + "base_dn", + "bind_password", + "bind_user", + "ca_certificate", + "ca_certificate_group", + "enabled", + "management", + "nfs", + "smb", + "uris" + ], + "readOnlyFields": [ + "id", + "name", + "services" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /directory-services/roles", + "cmdlets": [ + "Update-PfbDirectoryServiceRole" + ], "missingQueryParameters": [ - "generate_new_key" + "role_ids", + "role_names" ], "missingBodyProperties": [ { - "name": "certificate", - "type": "string", + "name": "role", + "type": null, "format": null, "specRequired": false, - "synopsis": "The text of the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", "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", + "file": "Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 64, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } ], "readOnlyFields": [ - "issued_by", - "issued_to", - "realms", - "status", - "valid_from", - "valid_to" + "id", + "management_access_policies", + "name" ], "confidence": { "level": "high", @@ -6899,148 +6303,43 @@ "annotations": [] }, { - "endpoint": "PATCH /data-eviction-policies", + "endpoint": "PATCH /dns", "cmdlets": [ - "Update-PfbDataEvictionPolicy" + "Update-PfbDns" ], "missingQueryParameters": [ "context_names" ], - "missingBodyProperties": [ - "enabled", - "location" - ], + "missingBodyProperties": [], "readOnlyFields": [ "context", "id", - "is_local", - "policy_type", "realms" ], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "TypedUnresolved", - "file": "Public/DataEviction/Update-PfbDataEvictionPolicy.ps1", - "line": 37 - } - ], + "level": "high", + "unresolvedParameters": [], "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" + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /directory-services", + "endpoint": "PATCH /file-system-exports", "cmdlets": [ - "Update-PfbDirectoryService" + "Update-PfbFileSystemExport" ], "missingQueryParameters": [ - "ids", - "names" - ], - "missingBodyProperties": [ - "base_dn", - "bind_password", - "bind_user", - "ca_certificate", - "ca_certificate_group", - "enabled", - "management", - "nfs", - "smb", - "uris" + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ + "context", + "enabled", "id", "name", - "services" - ], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Name", - "surface": "AttributesOnly", - "file": "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 /directory-services/roles", - "cmdlets": [ - "Update-PfbDirectoryServiceRole" - ], - "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", - "management_access_policies", - "name" + "policy_type", + "status" ], "confidence": { "level": "high", @@ -7051,277 +6350,56 @@ "annotations": [] }, { - "endpoint": "PATCH /dns", + "endpoint": "PATCH /file-system-snapshots", "cmdlets": [ - "Update-PfbDns" + "Remove-PfbFileSystemSnapshot" ], "missingQueryParameters": [ "context_names", - "ids", - "names" + "latest_replica" ], "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 - } - } + "destroyed", + "name", + "owner", + "policy", + "source" ], "readOnlyFields": [ "context", + "created", "id", - "realms" + "owner_destroyed", + "policies", + "suffix", + "time_remaining" ], "confidence": { - "level": "high", - "unresolvedParameters": [], + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "Public/FileSystemSnapshot/Remove-PfbFileSystemSnapshot.ps1", + "line": 24 + } + ], "escapeHatchOnly": [], - "caveat": "" + "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-system-exports", + "endpoint": "PATCH /file-systems", "cmdlets": [ - "Update-PfbFileSystemExport" + "Remove-PfbFileSystem", + "Update-PfbFileSystem" ], "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": "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" + "cancel_in_progress_storage_class_transition", + "context_names", + "discard_detailed_permissions", + "ignore_usage" ], "missingBodyProperties": [ "abort_quiesce", @@ -7430,65 +6508,13 @@ }, "annotations": [] }, - { - "endpoint": "PATCH /fleets", - "cmdlets": [ - "Update-PfbFleet" - ], - "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" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "data_mac", "details", @@ -7520,76 +6546,7 @@ "Update-PfbHardwareConnector" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "connector_type", "id", @@ -7610,59 +6567,7 @@ "Update-PfbKmip" ], "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 - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "id", "name" @@ -7681,25 +6586,7 @@ "Update-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/Update-PfbLegalHold.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", - "hasAttributes": true - } - } - ], + "missingBodyProperties": [], "readOnlyFields": [ "id", "name", @@ -7714,17 +6601,12 @@ "annotations": [] }, { - "endpoint": "PATCH /legal-holds/held-entities", + "endpoint": "PATCH /lifecycle-rules", "cmdlets": [ - "Update-PfbLegalHoldEntity" + "Update-PfbLifecycleRule" ], "missingQueryParameters": [ - "file_system_ids", - "file_system_names", - "ids", - "paths", - "recursive", - "released" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -7737,121 +6619,251 @@ "annotations": [] }, { - "endpoint": "PATCH /lifecycle-rules", + "endpoint": "PATCH /log-targets/file-systems", "cmdlets": [ - "Update-PfbLifecycleRule" + "Update-PfbLogTargetFileSystem" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /log-targets/object-store", + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /logs-async", + "cmdlets": [ + "Update-PfbAsyncLog" + ], + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "available_files", + "id", + "last_request_time", + "name", + "processing", + "progress" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /management-access-policies", + "cmdlets": [ + "Update-PfbManagementAccessPolicy" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", - "confirm_date", "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "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", + "version" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": "abort_incomplete_multipart_uploads_after", - "type": "integer", - "format": "int64", + "name": "client", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", - "suggestedPowerShellType": "[long]", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", + "name": "effect", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If set to `true`, this rule will be enabled.", - "suggestedPowerShellType": "[bool]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_current_version_for", + "name": "index", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_current_version_until", - "type": "integer", - "format": "int64", + "name": "interfaces", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "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/Misc/Update-PfbLifecycleRule.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_previous_version_for", - "type": "integer", - "format": "int64", + "name": "policy", + "type": null, + "format": null, "specRequired": false, - "synopsis": "Time after which previous versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", "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, + "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name", + "policy_version" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -7861,242 +6873,276 @@ "annotations": [] }, { - "endpoint": "PATCH /link-aggregation-groups", + "endpoint": "PATCH /network-interfaces/connectors", "cmdlets": [ - "Update-PfbLag" + "Update-PfbNetworkInterfaceConnector" ], "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "connector_type", + "id", + "name", + "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": "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": "add_ports", - "type": "array", + "name": "access", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "ports", - "type": "array", + "name": "anonuid", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "remove_ports", - "type": "array", + "name": "atime", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "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/Misc/Update-PfbLag.ps1", - "paramBlockLine": 34, + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /log-targets/file-systems", - "cmdlets": [ - "Update-PfbLogTargetFileSystem" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "file_system", - "type": null, + "name": "client", + "type": "string", "format": null, "specRequired": false, - "synopsis": "The target filesystem where audit logs will be stored.", - "suggestedPowerShellType": "[object]", + "synopsis": "Specifies the clients that will be permitted to access the export.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_for", - "type": "integer", - "format": "int64", + "name": "fileid_32bit", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "Specifies the period that audit logs are retained before they are deleted, in milliseconds.", - "suggestedPowerShellType": "[long]", + "synopsis": "Whether the file id is 32 bits or not.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "keep_size", + "name": "index", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Specifies the maximum size of audit logs to be retained.", - "suggestedPowerShellType": "[long]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "permission", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Specifies which read-write client access permissions are allowed for the export.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumValues": [ + "rw", + "ro" + ], + "enumStatus": "matched", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetFileSystem.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [ - "id" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /log-targets/object-store", - "cmdlets": [ - "Update-PfbLogTargetObjectStore" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "bucket", - "type": null, + "name": "required_transport_security", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the bucket where audit logs will be stored.", - "suggestedPowerShellType": "[object]", + "synopsis": "Specifies the minimum transport security required for clients to access the export.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "log_name_prefix", - "type": null, + "name": "secure", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "The prefix of the audit log object.", - "suggestedPowerShellType": "[object]", + "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/Monitoring/Update-PfbLogTargetObjectStore.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "log_rotate", - "type": null, + "name": "security", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The threshold after which the audit log object will be rotated.", - "suggestedPowerShellType": "[object]", + "synopsis": "The security flavors to use for accessing files on this mount point.", + "suggestedPowerShellType": "[string[]]", "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", + "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], "readOnlyFields": [ - "id" + "id", + "name" ], "confidence": { "level": "high", @@ -8107,71 +7153,154 @@ "annotations": [] }, { - "endpoint": "PATCH /logs-async", + "endpoint": "PATCH /nodes", "cmdlets": [ - "Update-PfbAsyncLog" + "Update-PfbNode" ], "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "capacity", + "chassis_serial_number", + "data_addresses", + "details", + "id", + "raw_capacity", + "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": "end_time", - "type": "integer", - "format": "int64", + "name": "actions", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "When the time window ends (in milliseconds since epoch).", - "suggestedPowerShellType": "[long]", + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "hardware_components", - "type": "array", + "name": "conditions", + "type": null, "format": null, "specRequired": false, - "synopsis": "All of the hardware components for which logs are being processed.", - "suggestedPowerShellType": "[object[]]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "start_time", - "type": "integer", - "format": "int64", + "name": "effect", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "When the time window starts (in milliseconds since epoch).", - "suggestedPowerShellType": "[long]", + "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/Monitoring/Update-PfbAsyncLog.ps1", - "paramBlockLine": 41, + "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" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /object-store-remote-credentials", + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], "readOnlyFields": [ - "available_files", + "context", "id", - "last_request_time", - "name", - "processing", - "progress" + "realms" ], "confidence": { "level": "high", @@ -8182,107 +7311,114 @@ "annotations": [] }, { - "endpoint": "PATCH /management-access-policies", + "endpoint": "PATCH /object-store-roles", "cmdlets": [ - "Update-PfbManagementAccessPolicy" + "Update-PfbObjectStoreRole" ], "missingQueryParameters": [ "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "created", + "id", + "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": "aggregation_strategy", - "type": "string", + "name": "actions", + "type": "array", "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]", + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", + "name": "conditions", + "type": "array", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "location", + "name": "policy", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": "The policy to which this rule belongs.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", - "type": "string", + "name": "principals", + "type": "array", "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.", + "synopsis": "List of Identity Providers", "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbManagementAccessPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/Update-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], "readOnlyFields": [ - "context", - "id", - "is_local", - "policy_type", - "realms", - "version" + "effect" ], "confidence": { "level": "high", @@ -8290,312 +7426,254 @@ "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 - } - ] + "annotations": [] }, { - "endpoint": "PATCH /network-access-policies", + "endpoint": "PATCH /object-store-virtual-hosts", "cmdlets": [ - "Update-PfbNetworkAccessPolicy" + "Update-PfbObjectStoreVirtualHost" ], "missingQueryParameters": [ - "versions" - ], - "missingBodyProperties": [ - "enabled", - "location", - "name", - "rules" + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms", - "version" + "id" ], "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbNetworkAccessPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /network-access-policies/rules", + "endpoint": "PATCH /password-policies", "cmdlets": [ - "Update-PfbNetworkAccessRule" + "Update-PfbPasswordPolicy" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", "ids", - "versions" + "names" ], "missingBodyProperties": [ { - "name": "client", - "type": "string", + "name": "enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "Specifies the clients that will be permitted or denied access to the interface.", - "suggestedPowerShellType": "[string]", + "synopsis": "If `true`, the policy is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", - "type": "string", + "name": "enforce_dictionary_check", + "type": "boolean", "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]", + "synopsis": "If `true`, test password against dictionary of known leaked passwords.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "interfaces", - "type": "array", + "name": "enforce_username_check", + "type": "boolean", "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", + "synopsis": "If `true`, the username cannot be a substring of the password.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", + "name": "location", "type": null, "format": null, "specRequired": false, - "synopsis": "The policy to which this rule belongs.", + "synopsis": "Reference to the array where the policy is defined.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNetworkAccessRule.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "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" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ + }, { - "name": "attached_servers", - "type": "array", - "format": null, + "name": "lockout_duration", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "List of servers to be associated with the specified network interface for data ingress.", - "suggestedPowerShellType": "[object[]]", + "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/Network/Update-PfbNetworkInterface.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "index", + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "rdma_enabled", - "type": "boolean", - "format": null, + "name": "max_login_attempts", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", - "suggestedPowerShellType": "[bool]", + "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/Network/Update-PfbNetworkInterface.ps1", - "paramBlockLine": 33, - "payloadVariable": "body", - "assignmentStyle": "index", + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "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" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - { - "name": "lane_speed", + "name": "max_password_age", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Configured speed of each lane in the connector in bits-per-second.", + "synopsis": "The maximum age of password before password change is required.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "lanes_per_port", + "name": "min_character_groups", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Configured number of lanes comprising each port in the connector.", - "suggestedPowerShellType": "[long]", + "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/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "port_count", + "name": "min_characters_per_group", "type": "integer", - "format": "int64", + "format": "int32", "specRequired": false, - "synopsis": "Configured number of ports in the connector (1/2/4 for QSFP).", - "suggestedPowerShellType": "[long]", + "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/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "port_speed", + "name": "min_password_age", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Configured speed of each port in the connector in bits-per-second.", + "synopsis": "The minimum age, in milliseconds, of password before password change is allowed.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbNetworkInterfaceConnector.ps1", - "paramBlockLine": 35, + "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 @@ -8603,10 +7681,10 @@ } ], "readOnlyFields": [ - "connector_type", "id", - "name", - "transceiver_type" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -8617,26 +7695,27 @@ "annotations": [] }, { - "endpoint": "PATCH /nfs-export-policies", + "endpoint": "PATCH /policies", "cmdlets": [ - "Update-PfbNfsExportPolicy" + "Update-PfbPolicy" ], "missingQueryParameters": [ "context_names", - "versions" + "destroy_snapshots" ], "missingBodyProperties": [ + "add_rules", "enabled", "location", - "name", - "rules" + "remove_rules" ], "readOnlyFields": [ "id", "is_local", + "name", "policy_type", "realms", - "version" + "retention_lock" ], "confidence": { "level": "partial", @@ -8644,8 +7723,8 @@ { "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbNfsExportPolicy.ps1", - "line": 42 + "file": "Public/Policy/Update-PfbPolicy.ps1", + "line": 28 } ], "escapeHatchOnly": [ @@ -8656,172 +7735,346 @@ "annotations": [] }, { - "endpoint": "PATCH /nfs-export-policies/rules", + "endpoint": "PATCH /presets/workload", "cmdlets": [ - "Update-PfbNfsExportRule" + "Update-PfbPresetWorkload" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /qos-policies", + "cmdlets": [ + "Update-PfbQosPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /quotas/groups", + "cmdlets": [ + "Update-PfbQuotaGroup" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", "context_names", - "ids", - "versions" + "file_system_ids", + "file_system_names", + "gids", + "group_names", + "names" ], - "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 + "missingBodyProperties": [], + "readOnlyFields": [ + "name" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "Public/Quota/Update-PfbQuotaGroup.ps1", + "line": 35 + }, + { + "parameter": "GroupName", + "surface": "AttributesOnly", + "file": "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 /quotas/settings", + "cmdlets": [ + "Update-PfbQuotaSettings" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ { - "name": "anonuid", + "name": "contact", "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`.", + "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/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "atime", + "name": "direct_notifications_enabled", "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.", + "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/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, + "file": "Public/Quota/Update-PfbQuotaSettings.ps1", + "paramBlockLine": 28, "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 + } + ], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /quotas/users", + "cmdlets": [ + "Update-PfbQuotaUser" + ], + "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": "Public/Quota/Update-PfbQuotaUser.ps1", + "line": 30 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "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 /rapid-data-locking", + "cmdlets": [ + "Update-PfbRapidDataLocking" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ { - "name": "index", - "type": "integer", - "format": "int32", + "name": "enabled", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "The index within the policy.", - "suggestedPowerShellType": "[int]", + "synopsis": "`True` if the Rapid Data Locking feature is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "permission", - "type": "string", + "name": "kmip_server", + "type": null, "format": null, "specRequired": false, - "synopsis": "Specifies which read-write client access permissions are allowed for the export.", - "suggestedPowerShellType": "[string]", - "enumValues": [ - "rw", - "ro" - ], - "enumStatus": "matched", + "synopsis": "The KMIP server configuration associated with RDL.", + "suggestedPowerShellType": "[object]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", + "paramBlockLine": 31, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - }, + } + ], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /realms", + "cmdlets": [ + "Remove-PfbRealm", + "Update-PfbRealm" + ], + "missingQueryParameters": [], + "missingBodyProperties": [ + "default_inbound_tls_policy", + "destroyed", + "name" + ], + "readOnlyFields": [ + "id" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "AttributesOnly", + "file": "Public/Realm/Update-PfbRealm.ps1", + "line": 31 + }, + { + "parameter": "Eradicate", + "surface": "TypedUnresolved", + "file": "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 /realms/defaults", + "cmdlets": [ + "Update-PfbRealmDefaults" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "context", + "realm" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /s3-export-policies", + "cmdlets": [ + "Update-PfbS3ExportPolicy" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [ + "enabled", + "name", + "rules" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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 /s3-export-policies/rules", + "cmdlets": [ + "Update-PfbS3ExportRule" + ], + "missingQueryParameters": [ + "context_names", + "policy_ids", + "policy_names" + ], + "missingBodyProperties": [ { - "name": "required_transport_security", - "type": "string", + "name": "actions", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Specifies the minimum transport security required for clients to access the export.", - "suggestedPowerShellType": "[string]", + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8829,16 +8082,16 @@ } }, { - "name": "secure", - "type": "boolean", + "name": "effect", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If `true`, prevents NFS access to client connections coming from non-reserved ports.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Effect of this rule.", + "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8846,16 +8099,16 @@ } }, { - "name": "security", + "name": "resources", "type": "array", "format": null, "specRequired": false, - "synopsis": "The security flavors to use for accessing files on this mount point.", + "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-PfbNfsExportRule.ps1", + "file": "Public/Policy/Update-PfbS3ExportRule.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -8863,10 +8116,7 @@ } } ], - "readOnlyFields": [ - "id", - "name" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -8876,109 +8126,144 @@ "annotations": [] }, { - "endpoint": "PATCH /node-groups", + "endpoint": "PATCH /smb-client-policies", "cmdlets": [ - "Update-PfbNodeGroup" + "Update-PfbSmbClientPolicy" + ], + "missingQueryParameters": [ + "context_names" ], - "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 - } - } + "access_based_enumeration_enabled", + "enabled", + "location", + "name", + "rules" + ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms", + "version" ], - "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Enabled", + "surface": "AttributesOnly", + "file": "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": "PATCH /nodes", + "endpoint": "PATCH /smb-client-policies/rules", "cmdlets": [ - "Update-PfbNode" + "Update-PfbSmbClientRule" + ], + "missingQueryParameters": [ + "before_rule_id", + "before_rule_name", + "context_names", + "ids", + "versions" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "management_address", + "name": "client", "type": "string", "format": null, "specRequired": false, - "synopsis": "The control IP address of the node.", + "synopsis": "Specifies the clients that will be permitted to access the export.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "encryption", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Specifies whether the remote client is required to use SMB encryption.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumValues": [ + "required", + "disabled", + "optional" + ], + "enumStatus": "matched", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "node_key", - "type": "string", - "format": null, + "name": "index", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": "A key used to bootstrap a mTLS connection with the node being connected to.", - "suggestedPowerShellType": "[string]", + "synopsis": "The index within the policy.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "serial_number", + "name": "permission", "type": "string", "format": null, "specRequired": false, - "synopsis": "The serial number of the node.", + "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/Node/Update-PfbNode.ps1", - "paramBlockLine": 35, + "file": "Public/Policy/Update-PfbSmbClientRule.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -8986,14 +8271,10 @@ } ], "readOnlyFields": [ - "capacity", - "chassis_serial_number", - "data_addresses", - "details", + "context", "id", - "raw_capacity", - "status", - "unique" + "name", + "policy_version" ], "confidence": { "level": "high", @@ -9004,57 +8285,80 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-access-policies/rules", + "endpoint": "PATCH /smb-share-policies", "cmdlets": [ - "Update-PfbObjectStoreAccessPolicyRule" + "Update-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": "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": "PATCH /smb-share-policies/rules", + "cmdlets": [ + "Update-PfbSmbShareRule" ], "missingQueryParameters": [ "context_names", - "enforce_action_restrictions", + "ids", "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, + "name": "change", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Conditions used to limit the scope which this rule applies to.", - "suggestedPowerShellType": "[object]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": "The state of the principal's Change access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", + "name": "full_control", "type": "string", "format": null, "specRequired": false, - "synopsis": "Effect of this rule.", + "synopsis": "The state of the principal's Full Control access permission.", "suggestedPowerShellType": "[string]", "enumValues": [ "allow", @@ -9062,85 +8366,72 @@ ], "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "resources", - "type": "array", + "name": "policy", + "type": null, "format": null, "specRequired": false, - "synopsis": "The list of resources which this rule applies to.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "The policy to which this rule belongs.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccessPolicyRule.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /object-store-account-exports", - "cmdlets": [ - "Update-PfbObjectStoreAccountExport" - ], - "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ + }, { - "name": "export_enabled", - "type": "boolean", + "name": "principal", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If set to `true`, the account export is enabled.", - "suggestedPowerShellType": "[bool]", + "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/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", - "type": null, + "name": "read", + "type": "string", "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", + "synopsis": "The state of the principal's Read access permission.", + "suggestedPowerShellType": "[string]", + "enumValues": [ + "allow", + "deny" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreAccountExport.ps1", - "paramBlockLine": 41, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "paramBlockLine": 36, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -9150,87 +8441,71 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-remote-credentials", + "endpoint": "PATCH /snmp-agents", "cmdlets": [ - "Update-PfbObjectStoreRemoteCredential" - ], - "missingQueryParameters": [ - "context_names" + "Update-PfbSnmpAgent" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "access_key_id", - "type": "string", + "name": "v2c", + "type": null, "format": null, "specRequired": false, - "synopsis": "Access Key ID to be used when connecting to a remote object store.", - "suggestedPowerShellType": "[string]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "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", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "remote", + "name": "v3", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the associated remote, which can either be a `target` or remote `array`.", + "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", - "paramBlockLine": 46, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "secret_access_key", + "name": "version", "type": "string", "format": null, "specRequired": false, - "synopsis": "Secret Access Key to be used when connecting to a remote object store.", + "synopsis": "Version of the SNMP protocol to be used by an SNMP manager in communications with Purity's SNMP agent.", "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumValues": [ + "v2c", + "v3" + ], + "enumStatus": "matched", "target": { - "file": "Public/ObjectStore/Update-PfbObjectStoreRemoteCredential.ps1", - "paramBlockLine": 46, - "payloadVariable": "body", - "assignmentStyle": "unknown", + "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", + "paramBlockLine": 32, + "payloadVariable": "Attributes", + "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], "readOnlyFields": [ - "context", + "engine_id", "id", - "realms" + "name" ], "confidence": { "level": "high", @@ -9241,56 +8516,36 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-roles", + "endpoint": "PATCH /snmp-managers", "cmdlets": [ - "Update-PfbObjectStoreRole" + "Update-PfbSnmpManager" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id" ], - "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 - } - } + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /ssh-certificate-authority-policies", + "cmdlets": [ + "Update-PfbSshCaPolicy" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ "context", - "created", "id", - "name", - "prn", - "trusted_entities" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -9301,89 +8556,14 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-roles/object-store-trust-policies/rules", + "endpoint": "PATCH /sso/oidc/idps", "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 - } - } + "Update-PfbOidcIdp" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ - "effect" + "prn" ], "confidence": { "level": "high", @@ -9394,102 +8574,36 @@ "annotations": [] }, { - "endpoint": "PATCH /object-store-virtual-hosts", + "endpoint": "PATCH /sso/saml2/idps", "cmdlets": [ - "Update-PfbObjectStoreVirtualHost" + "Update-PfbSaml2Idp" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id", + "prn" ], - "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 - } - } + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /storage-class-tiering-policies", + "cmdlets": [ + "Update-PfbStorageClassTieringPolicy" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ - "id" + "id", + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -9500,237 +8614,271 @@ "annotations": [] }, { - "endpoint": "PATCH /password-policies", + "endpoint": "PATCH /subnets", "cmdlets": [ - "Update-PfbPasswordPolicy" + "Update-PfbSubnet" ], - "missingQueryParameters": [ - "ids", - "names" + "missingQueryParameters": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "enabled", + "id", + "interfaces", + "name", + "services" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /support", + "cmdlets": [ + "Update-PfbSupport" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", + "name": "edge_agent_update_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", + "synopsis": "The switch to enable opt-in for edge agent updates.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enforce_dictionary_check", + "name": "edge_management_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, test password against dictionary of known leaked passwords.", + "synopsis": "The switch to enable opt-in for edge management.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "enforce_username_check", + "name": "phonehome_enabled", "type": "boolean", "format": null, "specRequired": false, - "synopsis": "If `true`, the username cannot be a substring of the password.", + "synopsis": "The switch to enable phonehome.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "location", - "type": null, + "name": "proxy", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": null, + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "lockout_duration", - "type": "integer", - "format": "int64", + "name": "remote_assist_active", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "The lockout duration, in milliseconds, if a user is locked out after reaching the maximum number of login attempts.", - "suggestedPowerShellType": "[long]", + "synopsis": "The switch to open all remote-assist sessions.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Support/Update-PfbSupport.ps1", + "paramBlockLine": 5, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "max_login_attempts", + "name": "remote_assist_duration", "type": "integer", - "format": "int32", + "format": "int64", "specRequired": false, - "synopsis": "Maximum number of failed login attempts allowed before the user is locked out.", - "suggestedPowerShellType": "[int]", + "synopsis": "Specifies the duration of the remote-assist session in milliseconds.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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": "max_password_age", - "type": "integer", - "format": "int64", + "name": "signed_verification_key", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "The maximum age of password before password change is required.", - "suggestedPowerShellType": "[long]", + "synopsis": "The text of the signed verification key.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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/settings", + "cmdlets": [ + "Update-PfbSyslogServerSettings" + ], + "missingQueryParameters": [ + "ids", + "names" + ], + "missingBodyProperties": [ { - "name": "min_character_groups", - "type": "integer", - "format": "int32", + "name": "ca_certificate", + "type": "object", + "format": null, "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]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "file": "Public/Monitoring/Update-PfbSyslogServerSettings.ps1", + "paramBlockLine": 28, "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", + "name": "ca_certificate_group", + "type": "object", "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]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbPasswordPolicy.ps1", - "paramBlockLine": 31, + "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": [], + "readOnlyFields": [ + "id", + "status", + "status_details" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "PATCH /tls-policies", + "cmdlets": [ + "Update-PfbTlsPolicy" + ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ "id", "is_local", @@ -9746,49 +8894,103 @@ "annotations": [] }, { - "endpoint": "PATCH /policies", + "endpoint": "PATCH /workloads", "cmdlets": [ - "Update-PfbPolicy" + "Update-PfbWorkload" ], "missingQueryParameters": [ - "context_names", - "destroy_snapshots" + "context_names" ], "missingBodyProperties": [ - "add_rules", - "enabled", - "location", - "remove_rules" + "destroyed" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Destroyed", + "surface": "TypedUnresolved", + "file": "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": "PATCH /worm-data-policies", + "cmdlets": [ + "Update-PfbWormPolicy" + ], + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [ + "context", "id", "is_local", "name", "policy_type", - "realms", - "retention_lock" + "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": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbPolicy.ps1", - "line": 28 + "file": "Public/DirectoryService/New-PfbActiveDirectory.ps1", + "line": 40 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /presets/workload", + "endpoint": "POST /admins/api-tokens", "cmdlets": [ - "Update-PfbPresetWorkload" + "New-PfbApiToken" ], "missingQueryParameters": [ "context_names" @@ -9804,106 +9006,167 @@ "annotations": [] }, { - "endpoint": "PATCH /qos-policies", + "endpoint": "POST /admins/management-access-policies", "cmdlets": [ - "Update-PfbQosPolicy" + "New-PfbAdminManagementAccessPolicy" + ], + "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 /admins/ssh-certificate-authority-policies", + "cmdlets": [ + "New-PfbAdminSshCaPolicy" ], "missingQueryParameters": [ "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /api-clients", + "cmdlets": [ + "New-PfbApiClient" + ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", - "type": "boolean", + "name": "access_policies", + "type": "array", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "The access policies allowed for ID Tokens issued by this API client.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "location", - "type": null, - "format": null, + "name": "access_token_ttl_in_ms", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "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/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "max_total_bytes_per_sec", - "type": "integer", - "format": "int64", + "name": "issuer", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "The maximum allowed bytes/s totaled across all the clients.", - "suggestedPowerShellType": "[long]", + "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/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "max_total_ops_per_sec", - "type": "integer", - "format": "int64", + "name": "max_role", + "type": null, + "format": null, "specRequired": false, - "synopsis": "The maximum allowed operations/s totaled across all the clients.", - "suggestedPowerShellType": "[long]", + "synopsis": "Deprecated.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbApiClient.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "name", + "name": "public_key", "type": "string", "format": null, - "specRequired": false, - "synopsis": "A user-specified name.", + "specRequired": true, + "synopsis": "The API client's PEM formatted (Base64 encoded) RSA public key.", "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbQosPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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": [], "readOnlyFields": [ "context", "id", - "is_local", - "policy_type", - "realms" + "os", + "status", + "type", + "version" ], "confidence": { "level": "high", @@ -9914,92 +9177,92 @@ "annotations": [] }, { - "endpoint": "PATCH /quotas/groups", + "endpoint": "POST /arrays/erasures", "cmdlets": [ - "Update-PfbQuotaGroup" + "New-PfbArrayErasure" ], "missingQueryParameters": [ - "context_names", - "file_system_ids", - "file_system_names", - "gids", - "group_names", - "names" + "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": [ - "name" + "id", + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "FileSystemName", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaGroup.ps1", + "file": "Public/Policy/New-PfbAuditFileSystemPolicy.ps1", "line": 35 - }, - { - "parameter": "GroupName", - "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaGroup.ps1", - "line": 36 } ], "escapeHatchOnly": [ - "FileSystemName", - "GroupName" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /quotas/settings", + "endpoint": "POST /audit-file-systems-policies/members", "cmdlets": [ - "Update-PfbQuotaSettings" - ], - "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 - } - } + "New-PfbAuditFileSystemPolicyMember" ], - "readOnlyFields": [ - "id", - "name" + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10009,84 +9272,157 @@ "annotations": [] }, { - "endpoint": "PATCH /quotas/users", + "endpoint": "POST /audit-object-store-policies", "cmdlets": [ - "Update-PfbQuotaUser" + "New-PfbAuditObjectStorePolicy" ], "missingQueryParameters": [ - "context_names", - "file_system_ids", - "file_system_names", - "names", - "uids", - "user_names" + "context_names" ], - "missingBodyProperties": [], - "readOnlyFields": [ + "missingBodyProperties": [ + "enabled", + "location", + "log_targets", "name" ], + "readOnlyFields": [ + "id", + "is_local", + "policy_type", + "realms" + ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "FileSystemName", - "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaUser.ps1", - "line": 30 - }, - { - "parameter": "UserName", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Quota/Update-PfbQuotaUser.ps1", - "line": 31 + "file": "Public/Policy/New-PfbAuditObjectStorePolicy.ps1", + "line": 35 } ], "escapeHatchOnly": [ - "FileSystemName", - "UserName" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /rapid-data-locking", + "endpoint": "POST /audit-object-store-policies/members", "cmdlets": [ - "Update-PfbRapidDataLocking" + "New-PfbAuditObjectStorePolicyMember" + ], + "missingQueryParameters": [ + "context_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, + "annotations": [] + }, + { + "endpoint": "POST /buckets", + "cmdlets": [ + "New-PfbBucket" + ], + "missingQueryParameters": [ + "context_names" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "enabled", + "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": "`True` if the Rapid Data Locking feature is enabled.", + "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/Misc/Update-PfbRapidDataLocking.ps1", - "paramBlockLine": 31, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Bucket/New-PfbBucket.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "kmip_server", + "name": "object_lock_config", "type": null, "format": null, "specRequired": false, - "synopsis": "The KMIP server configuration associated with RDL.", + "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/Update-PfbRapidDataLocking.ps1", - "paramBlockLine": 31, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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 } } @@ -10101,76 +9437,53 @@ "annotations": [] }, { - "endpoint": "PATCH /realms", - "cmdlets": [ - "Remove-PfbRealm", - "Update-PfbRealm" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - "default_inbound_tls_policy", - "destroyed", - "name" - ], - "readOnlyFields": [ - "id" - ], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "Destroyed", - "surface": "AttributesOnly", - "file": "Public/Realm/Update-PfbRealm.ps1", - "line": 31 - }, - { - "parameter": "Eradicate", - "surface": "TypedUnresolved", - "file": "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 /realms/defaults", + "endpoint": "POST /buckets/audit-filters", "cmdlets": [ - "Update-PfbRealmDefaults" + "New-PfbBucketAuditFilter" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names", - "realm_ids", - "realm_names" + "names" ], "missingBodyProperties": [ { - "name": "object_store", + "name": "actions", "type": "array", "format": null, "specRequired": false, - "synopsis": "Default configurations for object store.", - "suggestedPowerShellType": "[object[]]", + "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/Realm/Update-PfbRealmDefaults.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "paramBlockLine": 38, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "context", - "realm" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10180,45 +9493,53 @@ "annotations": [] }, { - "endpoint": "PATCH /s3-export-policies", + "endpoint": "POST /buckets/bucket-access-policies", "cmdlets": [ - "Update-PfbS3ExportPolicy" + "New-PfbBucketAccessPolicy" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names" ], "missingBodyProperties": [ - "enabled", - "name", - "rules" + { + "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": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbS3ExportPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /s3-export-policies/rules", + "endpoint": "POST /buckets/bucket-access-policies/rules", "cmdlets": [ - "Update-PfbS3ExportRule" + "New-PfbBucketAccessPolicyRule" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names", - "policy_ids", - "policy_names" + "names" ], "missingBodyProperties": [ { @@ -10231,25 +9552,25 @@ "enumValues": [], "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "effect", - "type": "string", + "name": "principals", + "type": null, "format": null, "specRequired": false, - "synopsis": "Effect of this rule.", - "suggestedPowerShellType": "[string]", + "synopsis": "The principals to which this rule applies.", + "suggestedPowerShellType": "[object]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -10260,20 +9581,22 @@ "type": "array", "format": null, "specRequired": false, - "synopsis": "The list of resources from the account to which this rule applies to.", + "synopsis": "The list of resources which this rule applies to.", "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbS3ExportRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketAccessPolicyRule.ps1", + "paramBlockLine": 42, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "effect" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10283,183 +9606,109 @@ "annotations": [] }, { - "endpoint": "PATCH /servers", - "cmdlets": [ - "Update-PfbServer" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - "dns" - ], - "readOnlyFields": [], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "DnsName", - "surface": "AttributesOnly", - "file": "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", + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", "cmdlets": [ - "Update-PfbSmbClientPolicy" + "New-PfbBucketCorsPolicy" ], "missingQueryParameters": [ + "bucket_ids", + "bucket_names", "context_names" ], "missingBodyProperties": [ - "access_based_enumeration_enabled", - "enabled", - "location", - "name", - "rules" - ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms", - "version" + { + "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": "partial", - "unresolvedParameters": [ - { - "parameter": "Enabled", - "surface": "AttributesOnly", - "file": "Public/Policy/Update-PfbSmbClientPolicy.ps1", - "line": 42 - } - ], - "escapeHatchOnly": [ - "Enabled" - ], - "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" }, "annotations": [] }, { - "endpoint": "PATCH /smb-client-policies/rules", + "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", "cmdlets": [ - "Update-PfbSmbClientRule" + "New-PfbBucketCorsPolicyRule" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", + "bucket_ids", + "bucket_names", "context_names", - "ids", - "versions" + "names", + "policy_names" ], "missingBodyProperties": [ { - "name": "client", - "type": "string", + "name": "allowed_headers", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Specifies the clients that will be permitted to access the export.", - "suggestedPowerShellType": "[string]", + "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/Policy/Update-PfbSmbClientRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "encryption", - "type": "string", + "name": "allowed_methods", + "type": "array", "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]", + "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/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, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "policy", - "type": null, + "name": "allowed_origins", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The policy to which this rule belongs.", - "suggestedPowerShellType": "[object]", + "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/Policy/Update-PfbSmbClientRule.ps1", - "paramBlockLine": 36, + "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", + "paramBlockLine": 32, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } } ], - "readOnlyFields": [ - "context", - "id", - "name", - "policy_version" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -10469,68 +9718,23 @@ "annotations": [] }, { - "endpoint": "PATCH /smb-share-policies", - "cmdlets": [ - "Update-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": "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": "PATCH /smb-share-policies/rules", + "endpoint": "POST /certificates", "cmdlets": [ - "Update-PfbSmbShareRule" - ], - "missingQueryParameters": [ - "context_names", - "ids", - "policy_ids", - "policy_names" + "New-PfbCertificate" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "change", + "name": "certificate", "type": "string", "format": null, "specRequired": false, - "synopsis": "The state of the principal's Change access permission.", + "synopsis": "The text of the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "allow", - "deny" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10538,19 +9742,19 @@ } }, { - "name": "full_control", + "name": "certificate_type", "type": "string", "format": null, "specRequired": false, - "synopsis": "The state of the principal's Full Control access permission.", + "synopsis": "The type of certificate.", "suggestedPowerShellType": "[string]", "enumValues": [ - "allow", - "deny" + "appliance", + "external" ], "enumStatus": "matched", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10558,33 +9762,16 @@ } }, { - "name": "policy", - "type": null, + "name": "common_name", + "type": "string", "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.", + "synopsis": "The common name field listed in the certificate.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10592,131 +9779,50 @@ } }, { - "name": "read", + "name": "country", "type": "string", "format": null, "specRequired": false, - "synopsis": "The state of the principal's Read access permission.", + "synopsis": "The country field listed in the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "allow", - "deny" - ], - "enumStatus": "matched", - "target": { - "file": "Public/Policy/Update-PfbSmbShareRule.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true - } - } - ], - "readOnlyFields": [ - "id", - "name" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /snmp-agents", - "cmdlets": [ - "Update-PfbSnmpAgent" - ], - "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, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "v3", - "type": null, - "format": null, + "name": "days", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The number of days that the self-signed certificate is valid.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpAgent.ps1", - "paramBlockLine": 32, + "file": "Public/Certificate/New-PfbCertificate.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 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": "PATCH /snmp-managers", - "cmdlets": [ - "Update-PfbSnmpManager" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ - { - "name": "host", + "name": "email", "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.", + "synopsis": "The email field listed in the certificate.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10724,16 +9830,16 @@ } }, { - "name": "name", + "name": "intermediate_certificate", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Intermediate certificate chains.", "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10741,19 +9847,16 @@ } }, { - "name": "notification", + "name": "key_algorithm", "type": "string", "format": null, "specRequired": false, - "synopsis": "The type of notification the agent will send.", + "synopsis": "The key algorithm used to generate the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "inform", - "trap" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10761,16 +9864,16 @@ } }, { - "name": "v2c", - "type": null, - "format": null, + "name": "key_size", + "type": "integer", + "format": "int32", "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The size (in bits) of the private key for the certificate.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10778,16 +9881,16 @@ } }, { - "name": "v3", - "type": null, + "name": "locality", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "synopsis": "The locality field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", @@ -10795,124 +9898,102 @@ } }, { - "name": "version", + "name": "organization", "type": "string", "format": null, "specRequired": false, - "synopsis": "Version of the SNMP protocol to be used by Purity in communications with the specified manager.", + "synopsis": "The organization field listed in the certificate.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "v2c", - "v3" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Monitoring/Update-PfbSnmpManager.ps1", + "file": "Public/Certificate/New-PfbCertificate.ps1", "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - } - ], - "readOnlyFields": [ - "id" - ], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "PATCH /ssh-certificate-authority-policies", - "cmdlets": [ - "Update-PfbSshCaPolicy" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ + }, { - "name": "enabled", - "type": "boolean", + "name": "organizational_unit", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "The organizational unit field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "location", - "type": null, + "name": "passphrase", + "type": "string", "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": "The passphrase used to encrypt `private_key`.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "name", + "name": "private_key", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "The text of the private key.", "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "signing_authority", - "type": null, + "name": "state", + "type": "string", "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]", + "synopsis": "The state/province field listed in the certificate.", + "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "static_authorized_principals", + "name": "subject_alternative_names", "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.", + "synopsis": "The alternative names that are secured by this certificate.", "suggestedPowerShellType": "[string[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbSshCaPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Certificate/New-PfbCertificate.ps1", + "paramBlockLine": 36, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -10920,11 +10001,12 @@ } ], "readOnlyFields": [ - "context", - "id", - "is_local", - "policy_type", - "realms" + "issued_by", + "issued_to", + "realms", + "status", + "valid_from", + "valid_to" ], "confidence": { "level": "high", @@ -10935,84 +10017,84 @@ "annotations": [] }, { - "endpoint": "PATCH /sso/oidc/idps", + "endpoint": "POST /certificates/certificate-signing-requests", "cmdlets": [ - "Update-PfbOidcIdp" + "New-PfbCertificateSigningRequest" ], "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 + "certificate", + "common_name", + "country", + "email", + "locality", + "organization", + "organizational_unit", + "state", + "subject_alternative_names" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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": [ - "prn" + "id", + "is_local", + "policy_type", + "realms" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Disabled", + "surface": "TypedUnresolved", + "file": "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": [], @@ -11022,153 +10104,205 @@ "annotations": [] }, { - "endpoint": "PATCH /sso/saml2/idps", + "endpoint": "POST /directory-services/local/directory-services", "cmdlets": [ - "Update-PfbSaml2Idp" + "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": "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": "array_url", + "name": "group", "type": "string", "format": null, "specRequired": false, - "synopsis": "The URL of the array.", + "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/Admin/Update-PfbSaml2Idp.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "binding", + "name": "group_base", "type": "string", "format": null, "specRequired": false, - "synopsis": "SAML2 binding to use for the request from Flashblade to the Identity Provider.", + "synopsis": "Specifies where the configured group is located in the directory tree.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbSaml2Idp.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", + "name": "management_access_policies", + "type": "array", "format": null, "specRequired": false, - "synopsis": "If set to `true`, the SAML2 SSO configuration is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "List of management access policies associated with the directory service role.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/Update-PfbSaml2Idp.ps1", - "paramBlockLine": 36, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "idp", + "name": "role", "type": null, "format": null, "specRequired": false, - "synopsis": null, + "synopsis": "Deprecated.", "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", + "file": "Public/DirectoryService/New-PfbDirectoryServiceRole.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "id", - "prn" + "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": "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": [], @@ -11178,160 +10312,130 @@ "annotations": [] }, { - "endpoint": "PATCH /storage-class-tiering-policies", + "endpoint": "POST /file-system-replica-links", "cmdlets": [ - "Update-PfbStorageClassTieringPolicy" + "New-PfbFileSystemReplicaLink" + ], + "missingQueryParameters": [ + "context_names", + "ids", + "local_file_system_ids", + "remote_ids" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "archival_rules", - "type": "array", + "name": "direction", + "type": null, "format": null, "specRequired": false, - "synopsis": "The list of archival rules for this policy.", - "suggestedPowerShellType": "[object[]]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": null, + "suggestedPowerShellType": "[object]", + "enumValues": [ + "inbound", + "outbound" + ], + "enumStatus": "matched", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "enabled", - "type": "boolean", + "name": "link_type", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Type of the replica link.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "location", + "name": "local_file_system", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", + "synopsis": "Reference to a local file system.", "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 + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "retrieval_rules", + "name": "policies", "type": "array", "format": null, "specRequired": false, - "synopsis": "The list of retrieval rules for this policy.", + "synopsis": null, "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbStorageClassTieringPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", - "hasAttributes": true + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": false } - } - ], - "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", + "name": "remote", "type": null, "format": null, "specRequired": false, - "synopsis": "Reference to the associated LAG.", + "synopsis": "Reference to a remote array or realm.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbSubnet.ps1", - "paramBlockLine": 34, + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, "payloadVariable": "body", - "assignmentStyle": "index", - "hasAttributes": true + "assignmentStyle": "unknown", + "hasAttributes": false } }, { - "name": "vlan", - "type": "integer", - "format": "int32", + "name": "remote_file_system", + "type": null, + "format": null, "specRequired": false, - "synopsis": "VLAN ID.", - "suggestedPowerShellType": "[int]", + "synopsis": "Reference to a remote file system.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Network/Update-PfbSubnet.ps1", - "paramBlockLine": 34, + "file": "Public/Replication/New-PfbFileSystemReplicaLink.ps1", + "paramBlockLine": 55, "payloadVariable": "body", - "assignmentStyle": "index", - "hasAttributes": true + "assignmentStyle": "unknown", + "hasAttributes": false } } ], "readOnlyFields": [ - "enabled", + "context", "id", - "interfaces", - "name", - "services" + "lag", + "recovery_point", + "status", + "status_details" ], "confidence": { "level": "high", @@ -11342,156 +10446,14 @@ "annotations": [] }, { - "endpoint": "PATCH /support", + "endpoint": "POST /file-system-replica-links/policies", "cmdlets": [ - "Update-PfbSupport" + "New-PfbFileSystemReplicaLinkPolicy" ], - "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 - } - } + "missingQueryParameters": [ + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -11502,125 +10464,186 @@ "annotations": [] }, { - "endpoint": "PATCH /syslog-servers", + "endpoint": "POST /file-system-snapshots", "cmdlets": [ - "Update-PfbSyslogServer" + "New-PfbFileSystemSnapshot" ], - "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 - } - } + "missingQueryParameters": [ + "context_names", + "source_ids", + "source_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "SourceName", + "surface": "TypedUnresolved", + "file": "Public/FileSystemSnapshot/New-PfbFileSystemSnapshot.ps1", + "line": 36 + } + ], "escapeHatchOnly": [], - "caveat": "" + "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 /syslog-servers/settings", + "endpoint": "POST /file-systems", "cmdlets": [ - "Update-PfbSyslogServerSettings" + "New-PfbFileSystem" ], "missingQueryParameters": [ - "ids", - "names" + "context_names", + "default_exports", + "discard_non_snapshotted_data", + "include_snapshot", + "overwrite", + "policy_ids", + "policy_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 - } - } + "fast_remove_directory_enabled", + "hard_limit_enabled", + "http", + "multi_protocol", + "nfs", + "node_group", + "smb", + "snapshot_directory_enabled", + "workload", + "writable" ], "readOnlyFields": [ - "id", - "name" + "requested_promotion_state" + ], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "FastRemoveDirectoryEnabled", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 139 + }, + { + "parameter": "HardLimit", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 93 + }, + { + "parameter": "Http", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 126 + }, + { + "parameter": "MultiProtocolAccessControlStyle", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 129 + }, + { + "parameter": "Nfs", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 102 + }, + { + "parameter": "NfsExportPolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 114 + }, + { + "parameter": "NfsRules", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 111 + }, + { + "parameter": "NfsV3", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 105 + }, + { + "parameter": "NfsV41", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 108 + }, + { + "parameter": "SafeguardAcls", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 133 + }, + { + "parameter": "Smb", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 117 + }, + { + "parameter": "SmbClientPolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 123 + }, + { + "parameter": "SmbSharePolicy", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 120 + }, + { + "parameter": "SnapshotDirectoryEnabled", + "surface": "AttributesOnly", + "file": "Public/FileSystem/New-PfbFileSystem.ps1", + "line": 136 + }, + { + "parameter": "Writable", + "surface": "AttributesOnly", + "file": "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": [], @@ -11630,69 +10653,33 @@ "annotations": [] }, { - "endpoint": "PATCH /targets", + "endpoint": "POST /file-systems/locks/nlm-reclamations", "cmdlets": [ - "Update-PfbTarget" + "New-PfbNlmReclamation" ], - "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 - } - } + "missingQueryParameters": [ + "context_names" ], - "readOnlyFields": [ - "id", - "status", - "status_details" + "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": [], @@ -11702,189 +10689,256 @@ "annotations": [] }, { - "endpoint": "PATCH /tls-policies", + "endpoint": "POST /fleets", "cmdlets": [ - "Update-PfbTlsPolicy" + "New-PfbFleet" + ], + "missingQueryParameters": [ + "names" + ], + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /keytabs", + "cmdlets": [ + "New-PfbKeytab" + ], + "missingQueryParameters": [ + "name_prefixes" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "appliance_certificate", + "name": "source", "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.", + "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/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, + "file": "Public/Misc/New-PfbKeytab.ps1", + "paramBlockLine": 26, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } - }, - { - "name": "client_certificates_required", - "type": "boolean", + } + ], + "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": 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]", + "specRequired": true, + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, + "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": "disabled_tls_ciphers", - "type": "array", + "name": "description", + "type": "string", "format": null, "specRequired": false, - "synopsis": "If specified, disables the specific TLS ciphers.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "The description of the legal hold instance.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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 /lifecycle-rules", + "cmdlets": [ + "New-PfbLifecycleRule" + ], + "missingQueryParameters": [ + "confirm_date", + "context_names" + ], + "missingBodyProperties": [ { - "name": "enabled", - "type": "boolean", - "format": null, + "name": "abort_incomplete_multipart_uploads_after", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "enabled_tls_ciphers", - "type": "array", - "format": null, + "name": "keep_current_version_for", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If specified, enables only the specified TLS ciphers.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "location", - "type": null, - "format": null, + "name": "keep_current_version_until", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "Reference to the array where the policy is defined.", - "suggestedPowerShellType": "[object]", + "synopsis": "Time after which current versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "min_tls_version", - "type": "string", - "format": null, + "name": "keep_previous_version_for", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "The minimum TLS version that will be allowed for inbound connections on IPs to which this policy applies.", - "suggestedPowerShellType": "[string]", + "synopsis": "Time after which previous versions will be marked expired.", + "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "name", + "name": "prefix", "type": "string", "format": null, "specRequired": false, - "synopsis": "A user-specified name.", + "synopsis": "Object key prefix identifying one or more objects in the bucket.", "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", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } }, { - "name": "verify_client_certificate_trust", - "type": "boolean", + "name": "rule_id", + "type": "string", "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]", + "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/Policy/Update-PfbTlsPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Misc/New-PfbLifecycleRule.ps1", + "paramBlockLine": 33, + "payloadVariable": "body", + "assignmentStyle": "index", "hasAttributes": true } } ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -11894,235 +10948,122 @@ "annotations": [] }, { - "endpoint": "PATCH /workloads", + "endpoint": "POST /link-aggregation-groups", "cmdlets": [ - "Update-PfbWorkload" + "New-PfbLag" ], "missingQueryParameters": [ - "context_names" + "names" ], "missingBodyProperties": [ - "destroyed" + "ports" + ], + "readOnlyFields": [ + "id", + "lag_speed", + "mac_address", + "name", + "port_speed", + "status" ], - "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Destroyed", - "surface": "TypedUnresolved", - "file": "Public/Workloads/Update-PfbWorkload.ps1", - "line": 36 + "parameter": "Name", + "surface": "AttributesOnly", + "file": "Public/Misc/New-PfbLag.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" + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "PATCH /worm-data-policies", + "endpoint": "POST /log-targets/file-systems", "cmdlets": [ - "Update-PfbWormPolicy" + "New-PfbLogTargetFileSystem" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [ { - "name": "default_retention", - "type": "integer", - "format": "int64", + "name": "file_system", + "type": null, + "format": null, "specRequired": false, - "synopsis": "Default retention period, in milliseconds.", - "suggestedPowerShellType": "[long]", + "synopsis": "The target filesystem where audit logs will be stored.", + "suggestedPowerShellType": "[object]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "enabled", - "type": "boolean", - "format": null, + "name": "keep_for", + "type": "integer", + "format": "int64", "specRequired": false, - "synopsis": "If `true`, the policy is enabled.", - "suggestedPowerShellType": "[bool]", + "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/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "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/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", + "name": "keep_size", "type": "integer", "format": "int64", "specRequired": false, - "synopsis": "Minimum retention period, in milliseconds.", + "synopsis": "Specifies the maximum size of audit logs to be retained.", "suggestedPowerShellType": "[long]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "mode", + "name": "name", "type": "string", "format": null, "specRequired": false, - "synopsis": "The type of the retention lock.", + "synopsis": "A user-specified name.", "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", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Policy/Update-PfbWormPolicy.ps1", - "paramBlockLine": 34, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Monitoring/New-PfbLogTargetFileSystem.ps1", + "paramBlockLine": 36, + "payloadVariable": "body", + "assignmentStyle": "unknown", "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": "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" - ], - "missingQueryParameters": [ - "admin_ids", - "admin_names", - "context_names", - "timeout" + "id" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12132,84 +11073,25 @@ "annotations": [] }, { - "endpoint": "POST /admins/management-access-policies", - "cmdlets": [ - "New-PfbAdminManagementAccessPolicy" - ], - "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 /admins/ssh-certificate-authority-policies", + "endpoint": "POST /log-targets/object-store", "cmdlets": [ - "New-PfbAdminSshCaPolicy" + "New-PfbLogTargetObjectStore" ], "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", + "name": "bucket", + "type": null, "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]", + "synopsis": "Reference to the bucket where audit logs will be stored.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12217,16 +11099,16 @@ } }, { - "name": "issuer", - "type": "string", + "name": "log_name_prefix", + "type": null, "format": null, "specRequired": false, - "synopsis": "The name of the identity provider that will be issuing ID Tokens for this API client.", - "suggestedPowerShellType": "[string]", + "synopsis": "The prefix of the audit log object.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12234,16 +11116,16 @@ } }, { - "name": "max_role", + "name": "log_rotate", "type": null, "format": null, "specRequired": false, - "synopsis": "Deprecated.", + "synopsis": "The threshold after which the audit log object will be rotated.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12251,16 +11133,16 @@ } }, { - "name": "public_key", + "name": "name", "type": "string", "format": null, - "specRequired": true, - "synopsis": "The API client's PEM formatted (Base64 encoded) RSA public key.", + "specRequired": false, + "synopsis": "A user-specified name.", "suggestedPowerShellType": "[string]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Admin/New-PfbApiClient.ps1", + "file": "Public/Monitoring/New-PfbLogTargetObjectStore.ps1", "paramBlockLine": 36, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12268,7 +11150,9 @@ } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "id" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12278,90 +11162,141 @@ "annotations": [] }, { - "endpoint": "POST /array-connections", + "endpoint": "POST /maintenance-windows", "cmdlets": [ - "New-PfbArrayConnection" + "New-PfbMaintenanceWindow" ], "missingQueryParameters": [ - "context_names" + "names" ], "missingBodyProperties": [ { - "name": "ca_certificate_group", - "type": null, - "format": null, + "name": "timeout", + "type": "integer", + "format": "int32", "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]", + "synopsis": "Duration of a maintenance window measured in milliseconds.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, - "payloadVariable": "body", - "assignmentStyle": "index", + "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": "encrypted", + "name": "enabled", "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.", + "synopsis": "If `true`, the policy is enabled.", "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "remote", + "name": "location", "type": null, "format": null, "specRequired": false, - "synopsis": "The remote array.", + "synopsis": "Reference to the array where the policy is defined.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "throttle", - "type": null, + "name": "name", + "type": "string", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object]", + "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/Replication/New-PfbArrayConnection.ps1", - "paramBlockLine": 39, + "file": "Public/Admin/New-PfbManagementAccessPolicy.ps1", + "paramBlockLine": 32, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } } ], "readOnlyFields": [ - "context", "id", - "os", - "status", - "type", - "version" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "high", @@ -12369,17 +11304,23 @@ "escapeHatchOnly": [], "caveat": "" }, - "annotations": [] + "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 /arrays/erasures", + "endpoint": "POST /management-access-policies/admins", "cmdlets": [ - "New-PfbArrayErasure" + "New-PfbManagementAccessPolicyAdmin" ], "missingQueryParameters": [ - "eradicate_all_data", - "preserve_configuration_data", - "skip_phonehome_check" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -12389,18 +11330,65 @@ "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": [], + "missingBodyProperties": [], + "readOnlyFields": [ + "id", + "name" + ], + "confidence": { + "level": "high", + "unresolvedParameters": [], + "escapeHatchOnly": [], + "caveat": "" + }, "annotations": [] }, { - "endpoint": "POST /arrays/ssh-certificate-authority-policies", + "endpoint": "POST /network-interfaces", "cmdlets": [ - "New-PfbArraySshCaPolicy" + "New-PfbNetworkInterface" ], - "missingQueryParameters": [ - "context_names" + "missingQueryParameters": [], + "missingBodyProperties": [ + { + "name": "rdma_enabled", + "type": "boolean", + "format": null, + "specRequired": false, + "synopsis": "If `true` indicated that RDMA is enabled on the network interface.", + "suggestedPowerShellType": "[bool]", + "enumValues": [], + "enumStatus": "no-spec-enum-found", + "target": { + "file": "Public/Network/New-PfbNetworkInterface.ps1", + "paramBlockLine": 66, + "payloadVariable": "body", + "assignmentStyle": "index", + "hasAttributes": true + } + } + ], + "readOnlyFields": [ + "id", + "name", + "realms" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12410,18 +11398,16 @@ "annotations": [] }, { - "endpoint": "POST /audit-file-systems-policies", + "endpoint": "POST /nfs-export-policies", "cmdlets": [ - "New-PfbAuditFileSystemPolicy" + "New-PfbNfsExportPolicy" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [ - "control_type", "enabled", "location", - "log_targets", "name", "rules" ], @@ -12437,8 +11423,8 @@ { "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbAuditFileSystemPolicy.ps1", - "line": 35 + "file": "Public/Policy/New-PfbNfsExportPolicy.ps1", + "line": 36 } ], "escapeHatchOnly": [ @@ -12449,15 +11435,20 @@ "annotations": [] }, { - "endpoint": "POST /audit-file-systems-policies/members", + "endpoint": "POST /nfs-export-policies/rules", "cmdlets": [ - "New-PfbAuditFileSystemPolicyMember" + "New-PfbNfsExportRule" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "context", + "id", + "name", + "policy_version" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12467,51 +11458,60 @@ "annotations": [] }, { - "endpoint": "POST /audit-object-store-policies", + "endpoint": "POST /node-groups", "cmdlets": [ - "New-PfbAuditObjectStorePolicy" + "New-PfbNodeGroup" ], "missingQueryParameters": [ - "context_names" - ], - "missingBodyProperties": [ - "enabled", - "location", - "log_targets", - "name" - ], - "readOnlyFields": [ - "id", - "is_local", - "policy_type", - "realms" + "names" ], + "missingBodyProperties": [], + "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbAuditObjectStorePolicy.ps1", - "line": 35 + "file": "Public/Node/New-PfbNodeGroup.ps1", + "line": 30 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /audit-object-store-policies/members", + "endpoint": "POST /object-store-access-keys", "cmdlets": [ - "New-PfbAuditObjectStorePolicyMember" + "New-PfbObjectStoreAccessKey" ], "missingQueryParameters": [ - "context_names" + "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 + } + } ], - "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -12522,102 +11522,179 @@ "annotations": [] }, { - "endpoint": "POST /buckets", + "endpoint": "POST /object-store-access-policies", "cmdlets": [ - "New-PfbBucket" + "New-PfbObjectStoreAccessPolicy" ], "missingQueryParameters": [ - "context_names" + "context_names", + "enforce_action_restrictions" ], "missingBodyProperties": [ { - "name": "bucket_type", + "name": "description", "type": "string", "format": null, "specRequired": false, - "synopsis": "The bucket type for the bucket.", + "synopsis": "A description of the policy, optionally specified when the policy is created.", "suggestedPowerShellType": "[string]", - "enumValues": [ - "classic", - "multi-site-writable" - ], - "enumStatus": "matched", + "enumValues": [], + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "eradication_config", - "type": null, + "name": "rules", + "type": "array", "format": null, "specRequired": false, "synopsis": null, - "suggestedPowerShellType": "[object]", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicy.ps1", + "paramBlockLine": 58, "payloadVariable": "body", - "assignmentStyle": "index", + "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": "hard_limit_enabled", - "type": "boolean", + "name": "actions", + "type": "array", "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]", + "synopsis": "The list of actions granted by this rule.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "object_lock_config", + "name": "conditions", "type": null, "format": null, "specRequired": false, - "synopsis": null, + "synopsis": "Conditions used to limit the scope which this rule applies to.", "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "retention_lock", + "name": "effect", "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`.", + "synopsis": "Effect of this rule.", "suggestedPowerShellType": "[string]", "enumValues": [ - "unlocked", - "ratcheted" + "allow", + "deny" ], "enumStatus": "matched", "target": { - "file": "Public/Bucket/New-PfbBucket.ps1", - "paramBlockLine": 39, + "file": "Public/ObjectStore/New-PfbObjectStoreAccessPolicyRule.ps1", + "paramBlockLine": 45, "payloadVariable": "body", - "assignmentStyle": "index", + "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 } } @@ -12632,28 +11709,29 @@ "annotations": [] }, { - "endpoint": "POST /buckets/audit-filters", + "endpoint": "POST /object-store-account-exports", "cmdlets": [ - "New-PfbBucketAuditFilter" + "New-PfbObjectStoreAccountExport" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", "context_names", - "names" + "member_ids", + "member_names", + "policy_ids", + "policy_names" ], "missingBodyProperties": [ { - "name": "actions", - "type": "array", + "name": "export_enabled", + "type": "boolean", "format": null, "specRequired": false, - "synopsis": "The list of ops to be audited by this filter.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "If set to `true`, the account export is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "file": "Public/ObjectStore/New-PfbObjectStoreAccountExport.ps1", "paramBlockLine": 38, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12661,16 +11739,16 @@ } }, { - "name": "s3_prefixes", - "type": "array", + "name": "server", + "type": null, "format": null, - "specRequired": false, - "synopsis": "The list of object name prefixes.", - "suggestedPowerShellType": "[string[]]", + "specRequired": true, + "synopsis": "Reference to the server the export will be visible on.", + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketAuditFilter.ps1", + "file": "Public/ObjectStore/New-PfbObjectStoreAccountExport.ps1", "paramBlockLine": 38, "payloadVariable": "body", "assignmentStyle": "unknown", @@ -12688,28 +11766,77 @@ "annotations": [] }, { - "endpoint": "POST /buckets/bucket-access-policies", + "endpoint": "POST /object-store-accounts", "cmdlets": [ - "New-PfbBucketAccessPolicy" + "New-PfbObjectStoreAccount" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", "context_names" ], "missingBodyProperties": [ { - "name": "rules", + "name": "account_exports", "type": "array", "format": null, "specRequired": false, - "synopsis": null, + "synopsis": "A list of exports to be created for the account.", "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketAccessPolicy.ps1", - "paramBlockLine": 36, + "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 @@ -12726,72 +11853,50 @@ "annotations": [] }, { - "endpoint": "POST /buckets/bucket-access-policies/rules", + "endpoint": "POST /object-store-remote-credentials", "cmdlets": [ - "New-PfbBucketAccessPolicyRule" + "New-PfbObjectStoreRemoteCredential" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", - "context_names", - "names" + "context_names" ], "missingBodyProperties": [ { - "name": "actions", - "type": "array", + "name": "access_key_id", + "type": "string", "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]", + "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/Bucket/New-PfbBucketAccessPolicyRule.ps1", - "paramBlockLine": 42, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "resources", - "type": "array", + "name": "secret_access_key", + "type": "string", "format": null, "specRequired": false, - "synopsis": "The list of resources which this rule applies to.", - "suggestedPowerShellType": "[string[]]", + "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/Bucket/New-PfbBucketAccessPolicyRule.ps1", - "paramBlockLine": 42, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreRemoteCredential.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [ - "effect" - ], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -12801,31 +11906,29 @@ "annotations": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies", + "endpoint": "POST /object-store-roles", "cmdlets": [ - "New-PfbBucketCorsPolicy" + "New-PfbObjectStoreRole" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", "context_names" ], "missingBodyProperties": [ { - "name": "rules", - "type": "array", + "name": "max_session_duration", + "type": "integer", "format": null, "specRequired": false, - "synopsis": null, - "suggestedPowerShellType": "[object[]]", + "synopsis": "Maximum session duration in milliseconds.", + "suggestedPowerShellType": "[int]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicy.ps1", - "paramBlockLine": 36, - "payloadVariable": null, - "assignmentStyle": null, - "hasAttributes": false + "file": "Public/ObjectStore/New-PfbObjectStoreRole.ps1", + "paramBlockLine": 37, + "payloadVariable": "body", + "assignmentStyle": "unknown", + "hasAttributes": true } } ], @@ -12839,70 +11942,128 @@ "annotations": [] }, { - "endpoint": "POST /buckets/cross-origin-resource-sharing-policies/rules", + "endpoint": "POST /object-store-roles/object-store-access-policies", "cmdlets": [ - "New-PfbBucketCorsPolicyRule" + "New-PfbObjectStoreRoleAccessPolicy" ], "missingQueryParameters": [ - "bucket_ids", - "bucket_names", "context_names", - "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": "allowed_headers", + "name": "actions", "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.", + "synopsis": "The list of role-assumption actions granted by this rule to the respective role.", "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "allowed_methods", + "name": "conditions", "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[]]", + "synopsis": "Conditions used to limit the scope which this rule applies to.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/ObjectStore/New-PfbObjectStoreTrustPolicyRule.ps1", + "paramBlockLine": 45, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "allowed_origins", + "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": "A list of origins (domains) that are permitted to make cross-origin requests to access a bucket.", - "suggestedPowerShellType": "[string[]]", + "synopsis": "List of Identity Providers", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Bucket/New-PfbBucketCorsPolicyRule.ps1", - "paramBlockLine": 32, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "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", @@ -12913,282 +12074,384 @@ "annotations": [] }, { - "endpoint": "POST /certificates", + "endpoint": "POST /object-store-users/object-store-access-policies", "cmdlets": [ - "New-PfbCertificate" + "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" ], - "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "certificate", - "type": "string", + "name": "attached_servers", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The text of the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "A list of servers which are allowed to use this virtual host.", + "suggestedPowerShellType": "[object[]]", "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", + "file": "Public/ObjectStore/New-PfbObjectStoreVirtualHost.ps1", + "paramBlockLine": 42, + "payloadVariable": "body", + "assignmentStyle": "index", "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 + } + ], + "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": "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" + ], + "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": "country", + "name": "description", "type": "string", "format": null, "specRequired": false, - "synopsis": "The country field listed in the certificate.", + "synopsis": "A brief description of the workload the preset will configure.", "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "days", - "type": "integer", - "format": "int32", + "name": "directory_configurations", + "type": "array", + "format": null, "specRequired": false, - "synopsis": "The number of days that the self-signed certificate is valid.", - "suggestedPowerShellType": "[int]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "email", - "type": "string", + "name": "export_configurations", + "type": null, "format": null, "specRequired": false, - "synopsis": "The email field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "intermediate_certificate", - "type": "string", + "name": "parameters", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Intermediate certificate chains.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "key_algorithm", - "type": "string", + "name": "periodic_replication_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The key algorithm used to generate the certificate.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "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]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "locality", - "type": "string", + "name": "platform_features", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The locality field listed in the certificate.", - "suggestedPowerShellType": "[string]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "synopsis": null, + "suggestedPowerShellType": "[object[]]", + "enumValues": [ + "fa_block", + "fa_file", + "fb_file" + ], + "enumStatus": "matched", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "organization", - "type": "string", + "name": "qos_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The organization field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "organizational_unit", - "type": "string", + "name": "quota_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The organizational unit field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "passphrase", - "type": "string", + "name": "snapshot_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The passphrase used to encrypt `private_key`.", - "suggestedPowerShellType": "[string]", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "private_key", - "type": "string", + "name": "volume_configurations", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The text of the private key.", - "suggestedPowerShellType": "[string]", + "synopsis": "The volumes that will be provisioned by the preset.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "state", - "type": "string", + "name": "workload_tags", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The state/province field listed in the certificate.", - "suggestedPowerShellType": "[string]", + "synopsis": "The tags that will be associated with workloads provisioned by the preset.", + "suggestedPowerShellType": "[object[]]", "enumValues": [], - "enumStatus": "not-found-in-resource", + "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true } }, { - "name": "subject_alternative_names", - "type": "array", + "name": "workload_type", + "type": "string", "format": null, - "specRequired": false, - "synopsis": "The alternative names that are secured by this certificate.", - "suggestedPowerShellType": "[string[]]", - "enumValues": [], - "enumStatus": "no-spec-enum-found", + "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/Certificate/New-PfbCertificate.ps1", - "paramBlockLine": 36, + "file": "Public/Presets/New-PfbPresetWorkload.ps1", + "paramBlockLine": 44, "payloadVariable": "Attributes", "assignmentStyle": "attributesOnly", "hasAttributes": true @@ -13196,12 +12459,7 @@ } ], "readOnlyFields": [ - "issued_by", - "issued_to", - "realms", - "status", - "valid_from", - "valid_to" + "revision" ], "confidence": { "level": "high", @@ -13212,15 +12470,30 @@ "annotations": [] }, { - "endpoint": "POST /certificates/certificate-groups", + "endpoint": "POST /public-keys", "cmdlets": [ - "New-PfbCertificateCertificateGroup" + "New-PfbPublicKey" ], - "missingQueryParameters": [ - "certificate_group_ids", - "certificate_ids" + "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 + } + } ], - "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -13231,84 +12504,107 @@ "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": "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", + "endpoint": "POST /qos-policies", "cmdlets": [ - "New-PfbDataEvictionPolicy" + "New-PfbQosPolicy" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [ - "enabled", - "location", - "name" + { + "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": "partial", - "unresolvedParameters": [ - { - "parameter": "Disabled", - "surface": "TypedUnresolved", - "file": "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": [], @@ -13318,9 +12614,9 @@ "annotations": [] }, { - "endpoint": "POST /directory-services/local/directory-services", + "endpoint": "POST /qos-policies/members", "cmdlets": [ - "New-PfbLocalDirectoryService" + "New-PfbQosPolicyMember" ], "missingQueryParameters": [ "context_names" @@ -13336,17 +12632,21 @@ "annotations": [] }, { - "endpoint": "POST /directory-services/local/groups", + "endpoint": "POST /quotas/groups", "cmdlets": [ - "New-PfbLocalGroup" + "New-PfbQuotaGroup" ], "missingQueryParameters": [ "context_names", - "local_directory_service_ids", - "local_directory_service_names" + "file_system_ids", + "file_system_names", + "gids", + "group_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -13356,111 +12656,61 @@ "annotations": [] }, { - "endpoint": "POST /directory-services/local/groups/members", + "endpoint": "POST /quotas/users", "cmdlets": [ - "New-PfbLocalGroupMember" + "New-PfbQuotaUser" ], "missingQueryParameters": [ "context_names", - "group_gids", - "group_sids", - "local_directory_service_ids" - ], - "missingBodyProperties": [ - "members" + "file_system_ids", + "file_system_names", + "uids", + "user_names" + ], + "missingBodyProperties": [], + "readOnlyFields": [ + "name" ], - "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Member", - "surface": "TypedUnresolved", - "file": "Public/DirectoryService/New-PfbLocalGroupMember.ps1", - "line": 35 + "parameter": "FileSystemName", + "surface": "AttributesOnly", + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 42 + }, + { + "parameter": "UserId", + "surface": "AttributesOnly", + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 44 + }, + { + "parameter": "UserName", + "surface": "AttributesOnly", + "file": "Public/Quota/New-PfbQuotaUser.ps1", + "line": 43 } ], - "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" + "escapeHatchOnly": [ + "FileSystemName", + "UserId", + "UserName" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /directory-services/roles", + "endpoint": "POST /realms", "cmdlets": [ - "New-PfbDirectoryServiceRole" + "New-PfbRealm" ], - "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 - } - } + "missingQueryParameters": [ + "without_default_access_list" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -13471,49 +12721,42 @@ "annotations": [] }, { - "endpoint": "POST /dns", + "endpoint": "POST /s3-export-policies", "cmdlets": [ - "New-PfbDns" + "New-PfbS3ExportPolicy" ], "missingQueryParameters": [ - "context_names", - "names" + "context_names" ], "missingBodyProperties": [ - "ca_certificate", - "ca_certificate_group", - "domain", - "nameservers", - "services", - "sources" + "enabled", + "rules" ], "readOnlyFields": [], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "Name", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/Network/New-PfbDns.ps1", - "line": 29 + "file": "Public/Policy/New-PfbS3ExportPolicy.ps1", + "line": 36 } ], "escapeHatchOnly": [ - "Name" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /file-system-exports", + "endpoint": "POST /s3-export-policies/rules", "cmdlets": [ - "New-PfbFileSystemExport" + "New-PfbS3ExportRule" ], "missingQueryParameters": [ - "context_names", - "member_ids", - "policy_ids" + "context_names" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -13526,153 +12769,84 @@ "annotations": [] }, { - "endpoint": "POST /file-system-replica-links", + "endpoint": "POST /servers", "cmdlets": [ - "New-PfbFileSystemReplicaLink" + "New-PfbServer" ], "missingQueryParameters": [ - "context_names", - "ids", - "local_file_system_ids", - "remote_ids" + "create_ds", + "create_local_directory_service" ], - "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 + "missingBodyProperties": [], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "CreateDirectoryService", + "surface": "AttributesOnly", + "file": "Public/Server/New-PfbServer.ps1", + "line": 40 } - }, - { - "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 + ], + "escapeHatchOnly": [ + "CreateDirectoryService" + ], + "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": "Public/Policy/New-PfbSmbClientPolicy.ps1", + "line": 36 } - }, - { - "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": "" + ], + "escapeHatchOnly": [ + "Enabled" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /file-system-replica-links/policies", + "endpoint": "POST /smb-client-policies/rules", "cmdlets": [ - "New-PfbFileSystemReplicaLinkPolicy" + "New-PfbSmbClientRule" ], "missingQueryParameters": [ - "context_names", - "local_file_system_ids", - "local_file_system_names", - "remote_ids", - "remote_names" + "context_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -13682,186 +12856,55 @@ "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": "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", + "endpoint": "POST /smb-share-policies", "cmdlets": [ - "New-PfbFileSystem" + "New-PfbSmbSharePolicy" ], "missingQueryParameters": [ - "context_names", - "default_exports", - "discard_non_snapshotted_data", - "include_snapshot", - "overwrite", - "policy_ids", - "policy_names" + "context_names" ], "missingBodyProperties": [ - "fast_remove_directory_enabled", - "hard_limit_enabled", - "http", - "multi_protocol", - "nfs", - "node_group", - "smb", - "snapshot_directory_enabled", - "workload", - "writable" + "enabled", + "location", + "name", + "rules" ], "readOnlyFields": [ - "requested_promotion_state" + "id", + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "partial", "unresolvedParameters": [ { - "parameter": "FastRemoveDirectoryEnabled", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 139 - }, - { - "parameter": "HardLimit", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 93 - }, - { - "parameter": "Http", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 126 - }, - { - "parameter": "MultiProtocolAccessControlStyle", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 129 - }, - { - "parameter": "Nfs", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 102 - }, - { - "parameter": "NfsExportPolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 114 - }, - { - "parameter": "NfsRules", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 111 - }, - { - "parameter": "NfsV3", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 105 - }, - { - "parameter": "NfsV41", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 108 - }, - { - "parameter": "SafeguardAcls", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 133 - }, - { - "parameter": "Smb", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 117 - }, - { - "parameter": "SmbClientPolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 123 - }, - { - "parameter": "SmbSharePolicy", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 120 - }, - { - "parameter": "SnapshotDirectoryEnabled", - "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 136 - }, - { - "parameter": "Writable", + "parameter": "Enabled", "surface": "AttributesOnly", - "file": "Public/FileSystem/New-PfbFileSystem.ps1", - "line": 150 + "file": "Public/Policy/New-PfbSmbSharePolicy.ps1", + "line": 36 } ], "escapeHatchOnly": [ - "FastRemoveDirectoryEnabled", - "HardLimit", - "Http", - "MultiProtocolAccessControlStyle", - "Nfs", - "NfsExportPolicy", - "NfsRules", - "NfsV3", - "NfsV41", - "SafeguardAcls", - "Smb", - "SmbClientPolicy", - "SmbSharePolicy", - "SnapshotDirectoryEnabled", - "Writable" + "Enabled" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] }, { - "endpoint": "POST /file-systems/audit-policies", + "endpoint": "POST /smb-share-policies/rules", "cmdlets": [ - "New-PfbFileSystemAuditPolicy" + "New-PfbSmbShareRule" ], "missingQueryParameters": [ "context_names" ], "missingBodyProperties": [], - "readOnlyFields": [], + "readOnlyFields": [ + "id", + "name" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -13871,30 +12914,46 @@ "annotations": [] }, { - "endpoint": "POST /file-systems/locks/nlm-reclamations", + "endpoint": "POST /snmp-managers", "cmdlets": [ - "New-PfbNlmReclamation" + "New-PfbSnmpManager" ], "missingQueryParameters": [ - "context_names" + "names" + ], + "missingBodyProperties": [ + "host", + "notification", + "v2c", + "v3", + "version" ], - "missingBodyProperties": [], "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /file-systems/policies", + "endpoint": "POST /software-check", "cmdlets": [ - "New-PfbFileSystemPolicy" + "New-PfbSoftwareCheck" ], "missingQueryParameters": [ - "context_names" + "software_names", + "software_versions" ], "missingBodyProperties": [], "readOnlyFields": [], @@ -13907,22 +12966,33 @@ "annotations": [] }, { - "endpoint": "POST /fleets", + "endpoint": "POST /ssh-certificate-authority-policies", "cmdlets": [ - "New-PfbFleet" + "New-PfbSshCaPolicy" ], "missingQueryParameters": [ "names" ], - "missingBodyProperties": [], - "readOnlyFields": [], + "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": "Public/Replication/New-PfbFleet.ps1", + "file": "Public/Policy/New-PfbSshCaPolicy.ps1", "line": 30 } ], @@ -13934,32 +13004,14 @@ "annotations": [] }, { - "endpoint": "POST /fleets/members", + "endpoint": "POST /ssh-certificate-authority-policies/admins", "cmdlets": [ - "New-PfbFleetMember" + "New-PfbSshCaPolicyAdmin" ], "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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -13970,32 +13022,14 @@ "annotations": [] }, { - "endpoint": "POST /keytabs", + "endpoint": "POST /ssh-certificate-authority-policies/arrays", "cmdlets": [ - "New-PfbKeytab" + "New-PfbSshCaPolicyArray" ], "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 - } - } + "context_names" ], + "missingBodyProperties": [], "readOnlyFields": [], "confidence": { "level": "high", @@ -14006,60 +13040,58 @@ "annotations": [] }, { - "endpoint": "POST /keytabs/upload", + "endpoint": "POST /sso/oidc/idps", "cmdlets": [ - "New-PfbKeytabUpload" - ], - "missingQueryParameters": [ - "name_prefixes" + "New-PfbOidcIdp" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "keytab_file", + "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": true, + "specRequired": false, "synopsis": null, "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/New-PfbKeytabUpload.ps1", - "paramBlockLine": 28, - "payloadVariable": "Attributes", - "assignmentStyle": "attributesOnly", + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, + "payloadVariable": "body", + "assignmentStyle": "unknown", "hasAttributes": true } - } - ], - "readOnlyFields": [], - "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" - }, - "annotations": [] - }, - { - "endpoint": "POST /legal-holds", - "cmdlets": [ - "New-PfbLegalHold" - ], - "missingQueryParameters": [], - "missingBodyProperties": [ + }, { - "name": "description", - "type": "string", + "name": "services", + "type": "array", "format": null, "specRequired": false, - "synopsis": "The description of the legal hold instance.", - "suggestedPowerShellType": "[string]", + "synopsis": "Services that the OIDC SSO authentication is used for.", + "suggestedPowerShellType": "[string[]]", "enumValues": [], - "enumStatus": "no-spec-enum-found", + "enumStatus": "not-found-in-resource", "target": { - "file": "Public/Misc/New-PfbLegalHold.ps1", - "paramBlockLine": 36, + "file": "Public/Admin/New-PfbOidcIdp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", "assignmentStyle": "unknown", "hasAttributes": true @@ -14067,33 +13099,8 @@ } ], "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" + "prn" ], - "missingBodyProperties": [], - "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -14103,119 +13110,135 @@ "annotations": [] }, { - "endpoint": "POST /lifecycle-rules", + "endpoint": "POST /sso/saml2/idps", "cmdlets": [ - "New-PfbLifecycleRule" - ], - "missingQueryParameters": [ - "confirm_date", - "context_names" + "New-PfbSaml2Idp" ], + "missingQueryParameters": [], "missingBodyProperties": [ { - "name": "abort_incomplete_multipart_uploads_after", - "type": "integer", - "format": "int64", + "name": "array_url", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "Duration of time after which incomplete multipart uploads will be aborted.", - "suggestedPowerShellType": "[long]", + "synopsis": "The URL of the array.", + "suggestedPowerShellType": "[string]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "keep_current_version_for", - "type": "integer", - "format": "int64", + "name": "binding", + "type": "string", + "format": null, "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "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/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "keep_current_version_until", - "type": "integer", - "format": "int64", + "name": "enabled", + "type": "boolean", + "format": null, "specRequired": false, - "synopsis": "Time after which current versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": "If set to `true`, the SAML2 SSO configuration is enabled.", + "suggestedPowerShellType": "[bool]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "keep_previous_version_for", - "type": "integer", - "format": "int64", + "name": "idp", + "type": null, + "format": null, "specRequired": false, - "synopsis": "Time after which previous versions will be marked expired.", - "suggestedPowerShellType": "[long]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "prefix", - "type": "string", + "name": "management", + "type": null, "format": null, "specRequired": false, - "synopsis": "Object key prefix identifying one or more objects in the bucket.", - "suggestedPowerShellType": "[string]", + "synopsis": null, + "suggestedPowerShellType": "[object]", "enumValues": [], "enumStatus": "no-spec-enum-found", "target": { - "file": "Public/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } }, { - "name": "rule_id", - "type": "string", + "name": "services", + "type": "array", "format": null, "specRequired": false, - "synopsis": "Identifier for the rule that is unique to the bucket that it applies to.", - "suggestedPowerShellType": "[string]", + "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/Misc/New-PfbLifecycleRule.ps1", - "paramBlockLine": 33, + "file": "Public/Admin/New-PfbSaml2Idp.ps1", + "paramBlockLine": 39, "payloadVariable": "body", - "assignmentStyle": "index", + "assignmentStyle": "unknown", "hasAttributes": true } } ], - "readOnlyFields": [], + "readOnlyFields": [ + "prn" + ], "confidence": { "level": "high", "unresolvedParameters": [], @@ -14225,23 +13248,25 @@ "annotations": [] }, { - "endpoint": "POST /link-aggregation-groups", + "endpoint": "POST /storage-class-tiering-policies", "cmdlets": [ - "New-PfbLag" + "New-PfbStorageClassTieringPolicy" ], "missingQueryParameters": [ "names" ], "missingBodyProperties": [ - "ports" + "archival_rules", + "enabled", + "location", + "name", + "retrieval_rules" ], "readOnlyFields": [ "id", - "lag_speed", - "mac_address", - "name", - "port_speed", - "status" + "is_local", + "policy_type", + "realms" ], "confidence": { "level": "partial", @@ -14249,8 +13274,8 @@ { "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Misc/New-PfbLag.ps1", - "line": 29 + "file": "Public/Policy/New-PfbStorageClassTieringPolicy.ps1", + "line": 30 } ], "escapeHatchOnly": [ @@ -14261,85 +13286,18 @@ "annotations": [] }, { - "endpoint": "POST /log-targets/file-systems", + "endpoint": "POST /subnets", "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 - } - } + "New-PfbSubnet" ], + "missingQueryParameters": [], + "missingBodyProperties": [], "readOnlyFields": [ - "id" + "enabled", + "id", + "interfaces", + "name", + "services" ], "confidence": { "level": "high", @@ -14350,86 +13308,16 @@ "annotations": [] }, { - "endpoint": "POST /log-targets/object-store", + "endpoint": "POST /support-diagnostics", "cmdlets": [ - "New-PfbLogTargetObjectStore" + "New-PfbSupportDiagnostics" ], "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" + "analysis_period_end_time", + "analysis_period_start_time" ], + "missingBodyProperties": [], + "readOnlyFields": [], "confidence": { "level": "high", "unresolvedParameters": [], @@ -14439,135 +13327,84 @@ "annotations": [] }, { - "endpoint": "POST /maintenance-windows", + "endpoint": "POST /syslog-servers", "cmdlets": [ - "New-PfbMaintenanceWindow" + "New-PfbSyslogServer" ], "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 - } - } + "services", + "sources", + "uri" ], "readOnlyFields": [], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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 /management-access-policies", + "endpoint": "POST /targets", "cmdlets": [ - "New-PfbManagementAccessPolicy" + "New-PfbTarget" ], "missingQueryParameters": [ - "context_names" + "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 + "address" + ], + "readOnlyFields": [], + "confidence": { + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "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", @@ -14576,25 +13413,26 @@ "realms" ], "confidence": { - "level": "high", - "unresolvedParameters": [], - "escapeHatchOnly": [], - "caveat": "" + "level": "partial", + "unresolvedParameters": [ + { + "parameter": "Name", + "surface": "AttributesOnly", + "file": "Public/Policy/New-PfbTlsPolicy.ps1", + "line": 29 + } + ], + "escapeHatchOnly": [ + "Name" + ], + "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, - "annotations": [ - { - "matchType": "endpoint", - "match": "management-access-policies", - "kind": "liveTestingHazard", - "note": "POST/PATCH/DELETE return 403 regardless of account; not an implementation bug", - "reference": null - } - ] + "annotations": [] }, { - "endpoint": "POST /management-access-policies/admins", + "endpoint": "POST /workloads", "cmdlets": [ - "New-PfbManagementAccessPolicyAdmin" + "New-PfbWorkload" ], "missingQueryParameters": [ "context_names" @@ -14607,185 +13445,73 @@ "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 - } - ] + "annotations": [] }, { - "endpoint": "POST /network-access-policies/rules", + "endpoint": "POST /workloads/placement-recommendations", "cmdlets": [ - "New-PfbNetworkAccessRule" + "New-PfbWorkloadPlacementRecommendation" ], "missingQueryParameters": [ - "before_rule_id", - "before_rule_name", - "versions" + "context_names" ], "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", - "rdma_enabled" - ], - "readOnlyFields": [ - "id", - "name", - "realms" - ], - "confidence": { - "level": "partial", - "unresolvedParameters": [ - { - "parameter": "AttachedServers", - "surface": "AttributesOnly", - "file": "Public/Network/New-PfbNetworkInterface.ps1", - "line": 55 + "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": "Public/Workloads/New-PfbWorkloadPlacementRecommendation.ps1", + "line": 29 } ], - "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": "" + "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 /nfs-export-policies", + "endpoint": "POST /worm-data-policies", "cmdlets": [ - "New-PfbNfsExportPolicy" + "New-PfbWormPolicy" ], "missingQueryParameters": [ - "context_names" + "context_names", + "names" ], "missingBodyProperties": [ + "default_retention", "enabled", "location", - "name", - "rules" + "max_retention", + "min_retention", + "mode", + "retention_lock" ], "readOnlyFields": [ + "context", "id", "is_local", + "name", "policy_type", "realms" ], @@ -14793,9877 +13519,6474 @@ "level": "partial", "unresolvedParameters": [ { - "parameter": "Enabled", + "parameter": "Name", "surface": "AttributesOnly", - "file": "Public/Policy/New-PfbNfsExportPolicy.ps1", - "line": 36 + "file": "Public/Policy/New-PfbWormPolicy.ps1", + "line": 30 } ], "escapeHatchOnly": [ - "Enabled" + "Name" ], "caveat": "body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability" }, "annotations": [] - }, + } + ], + "systemicGaps": [ { - "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": "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": "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": "Public/Quota/New-PfbQuotaUser.ps1", - "line": 42 - }, - { - "parameter": "UserId", - "surface": "AttributesOnly", - "file": "Public/Quota/New-PfbQuotaUser.ps1", - "line": 44 - }, - { - "parameter": "UserName", - "surface": "AttributesOnly", - "file": "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": "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": "Public/Server/New-PfbServer.ps1", - "line": 40 - }, - { - "parameter": "DnsName", - "surface": "AttributesOnly", - "file": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": 254, - "queryEndpointCount": 254, - "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 /audits", - "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": 110, - "queryEndpointCount": 110, - "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 /audits", - "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": 28, - "queryEndpointCount": 28, - "bodyEndpointCount": 0, - "endpoints": [ - "GET /active-directory", - "GET /active-directory/test", - "GET /admins/management-access-policies", - "GET /admins/ssh-certificate-authority-policies", - "GET /alert-watchers/test", - "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 /management-access-policies/admins", - "GET /management-access-policies/directory-services/roles", - "GET /management-access-policies/members", - "GET /policies-all/members", - "GET /policies/file-system-replica-links", - "GET /qos-policies/buckets", - "GET /qos-policies/file-systems", - "GET /qos-policies/members", - "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 /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": "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": "limit", - "endpointCount": 7, - "queryEndpointCount": 7, - "bodyEndpointCount": 0, - "endpoints": [ - "GET /active-directory", - "GET /active-directory/test", - "GET /directory-services", - "GET /directory-services/test", - "GET /snmp-agents", - "GET /snmp-managers/test", - "GET /sso/saml2/idps/test" - ], - "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": "filter", - "endpointCount": 6, - "queryEndpointCount": 6, - "bodyEndpointCount": 0, - "endpoints": [ - "GET /active-directory/test", - "GET /alert-watchers/test", - "GET /directory-services/test", - "GET /snmp-managers/test", - "GET /sso/saml2/idps/test", - "GET /support/test" - ], - "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": "rdma_enabled", - "endpointCount": 1, - "queryEndpointCount": 0, - "bodyEndpointCount": 1, - "endpoints": [ - "PATCH /network-interfaces" - ], - "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": "context_names", + "endpointCount": 254, + "queryEndpointCount": 254, + "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 /audits", + "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": 110, + "queryEndpointCount": 110, + "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 /audits", + "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", - "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": "ids", + "endpointCount": 43, + "queryEndpointCount": 43, + "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 /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" + ], + "annotations": [] + }, + { + "name": "names", + "endpointCount": 31, + "queryEndpointCount": 31, + "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 /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 /maintenance-windows", + "POST /object-store-access-keys", + "POST /object-store-access-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "annotations": [] + }, + { + "name": "sort", + "endpointCount": 28, + "queryEndpointCount": 28, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory", + "GET /active-directory/test", + "GET /admins/management-access-policies", + "GET /admins/ssh-certificate-authority-policies", + "GET /alert-watchers/test", + "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 /management-access-policies/admins", + "GET /management-access-policies/directory-services/roles", + "GET /management-access-policies/members", + "GET /policies-all/members", + "GET /policies/file-system-replica-links", + "GET /qos-policies/buckets", + "GET /qos-policies/file-systems", + "GET /qos-policies/members", + "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 /tls-policies/members", + "GET /worm-data-policies/members" + ], + "annotations": [] + }, + { + "name": "bucket_ids", + "endpointCount": 17, + "queryEndpointCount": 17, + "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", + "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": 17, + "queryEndpointCount": 17, + "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 /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": "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": "bucket_names", + "endpointCount": 16, + "queryEndpointCount": 16, + "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", + "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": "member_ids", + "endpointCount": 15, + "queryEndpointCount": 15, + "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 /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_ids", + "endpointCount": 15, + "queryEndpointCount": 15, + "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", + "POST /file-system-replica-links" + ], + "annotations": [] + }, + { + "name": "remote_names", + "endpointCount": 13, + "queryEndpointCount": 13, + "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" + ], + "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": "file_system_ids", + "endpointCount": 9, + "queryEndpointCount": 9, + "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", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "local_file_system_ids", + "endpointCount": 8, + "queryEndpointCount": 8, + "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" + ], + "annotations": [] + }, + { + "name": "actions", + "endpointCount": 7, + "queryEndpointCount": 0, + "bodyEndpointCount": 7, + "endpoints": [ + "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" + ], + "annotations": [] + }, + { + "name": "limit", + "endpointCount": 7, + "queryEndpointCount": 7, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory", + "GET /active-directory/test", + "GET /directory-services", + "GET /directory-services/test", + "GET /snmp-agents", + "GET /snmp-managers/test", + "GET /sso/saml2/idps/test" + ], + "annotations": [] + }, + { + "name": "versions", + "endpointCount": 7, + "queryEndpointCount": 7, + "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" + ], + "annotations": [] + }, + { + "name": "enabled", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /password-policies", + "PATCH /rapid-data-locking", + "POST /management-access-policies", + "POST /qos-policies", + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "filter", + "endpointCount": 6, + "queryEndpointCount": 6, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /active-directory/test", + "GET /alert-watchers/test", + "GET /directory-services/test", + "GET /snmp-managers/test", + "GET /sso/saml2/idps/test", + "GET /support/test" + ], + "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": "name", + "endpointCount": 6, + "queryEndpointCount": 0, + "bodyEndpointCount": 6, + "endpoints": [ + "PATCH /arrays", + "PATCH /password-policies", + "POST /log-targets/file-systems", + "POST /log-targets/object-store", + "POST /management-access-policies", + "POST /qos-policies" + ], + "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": "file_system_names", + "endpointCount": 5, + "queryEndpointCount": 5, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities", + "POST /quotas/groups" + ], + "annotations": [] + }, + { + "name": "local_file_system_names", + "endpointCount": 5, + "queryEndpointCount": 5, + "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" + ], + "annotations": [] + }, + { + "name": "policy", + "endpointCount": 5, + "queryEndpointCount": 0, + "bodyEndpointCount": 5, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /object-store-roles/object-store-trust-policies/rules", + "PATCH /smb-client-policies/rules", + "PATCH /smb-share-policies/rules", + "POST /object-store-roles/object-store-trust-policies/rules" + ], + "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": "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": "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": "effect", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /object-store-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "end_time", + "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": "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": "member_types", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /directory-services/local/groups/members", + "DELETE /qos-policies/members", + "GET /directory-services/local/groups/members", + "GET /qos-policies/members" + ], + "annotations": [] + }, + { + "name": "paths", + "endpointCount": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks", + "GET /file-systems/open-files", + "GET /legal-holds/held-entities" + ], + "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": "resources", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "PATCH /object-store-access-policies/rules", + "PATCH /s3-export-policies/rules", + "POST /buckets/bucket-access-policies/rules", + "POST /object-store-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "rules", + "endpointCount": 4, + "queryEndpointCount": 0, + "bodyEndpointCount": 4, + "endpoints": [ + "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": 4, + "queryEndpointCount": 4, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /arrays/space", + "GET /arrays/space/storage-classes", + "GET /realms/space", + "GET /realms/space/storage-classes" + ], + "annotations": [] + }, + { + "name": "before_rule_id", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "before_rule_name", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "certificate_group_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "certificate_ids", + "endpointCount": 3, + "queryEndpointCount": 3, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /certificates/certificate-groups", + "GET /certificate-groups/certificates", + "GET /certificates/certificate-groups" + ], + "annotations": [] + }, + { + "name": "client", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "description", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "POST /legal-holds", + "POST /object-store-access-policies", + "POST /presets/workload" + ], + "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": "index", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /network-access-policies/rules", + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-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": "location", + "endpointCount": 3, + "queryEndpointCount": 0, + "bodyEndpointCount": 3, + "endpoints": [ + "PATCH /password-policies", + "POST /management-access-policies", + "POST /qos-policies" + ], + "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": "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": "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": "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": "admin_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "admin_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /admins/api-tokens", + "GET /admins/api-tokens" + ], + "annotations": [] + }, + { + "name": "component_name", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "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": "expose_api_token", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins", + "GET /admins/api-tokens" + ], + "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": "idp", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "inodes", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks", + "GET /file-systems/locks" + ], + "annotations": [] + }, + { + "name": "lockout_duration", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /admins/settings", + "PATCH /password-policies" + ], + "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": "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": "node_group_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_group_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_ids", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "node_names", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /node-groups/nodes", + "GET /node-groups/nodes" + ], + "annotations": [] + }, + { + "name": "permission", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "PATCH /nfs-export-policies/rules", + "PATCH /smb-client-policies/rules" + ], + "annotations": [] + }, + { + "name": "public_key", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /api-clients", + "POST /public-keys" + ], + "annotations": [] + }, + { + "name": "resolve_hostname", + "endpointCount": 2, + "queryEndpointCount": 2, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping", + "GET /network-interfaces/trace" + ], + "annotations": [] + }, + { + "name": "secret_access_key", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /object-store-access-keys", + "POST /object-store-remote-credentials" + ], + "annotations": [] + }, + { + "name": "services", + "endpointCount": 2, + "queryEndpointCount": 0, + "bodyEndpointCount": 2, + "endpoints": [ + "POST /sso/oidc/idps", + "POST /sso/saml2/idps" + ], + "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": "abort_incomplete_multipart_uploads_after", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "access", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "access_key_id", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-remote-credentials" + ], + "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_exports", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-accounts" + ], + "annotations": [] + }, + { + "name": "aggregation_strategy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /management-access-policies" + ], + "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": "anongid", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "anonuid", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "array_url", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "atime", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "attached_servers", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-virtual-hosts" + ], + "annotations": [] + }, + { + "name": "banner", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "binding", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "bucket", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "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": "ca_certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "ca_certificate_group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /syslog-servers/settings" + ], + "annotations": [] + }, + { + "name": "certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "certificate_type", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "change", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "common_name", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "confirm_date", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "contact", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /quotas/settings" + ], + "annotations": [] + }, + { + "name": "country", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "current_state", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/network-connection-statistics" + ], + "annotations": [] + }, + { + "name": "days", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "default_inbound_tls_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "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": "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": "email", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "encryption", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-client-policies/rules" + ], + "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_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "file_system", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "fileid_32bit", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "finalize", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "PATCH /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "fleet_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /fleets/members" + ], + "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": "full_control", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "group", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "group_base", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "idle_timeout", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] + }, + { + "name": "interfaces", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /network-access-policies/rules" + ], + "annotations": [] + }, + { + "name": "intermediate_certificate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "issuer", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /api-clients" + ], + "annotations": [] + }, + { + "name": "keep_current_version_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_current_version_until", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "keep_previous_version_for", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "keep_size", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/file-systems" + ], + "annotations": [] + }, + { + "name": "key_algorithm", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "key_size", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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_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": "locality", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "log_name_prefix", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "log_rotate", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /log-targets/object-store" + ], + "annotations": [] + }, + { + "name": "management", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "management_access_policies", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /directory-services/roles" + ], + "annotations": [] + }, + { + "name": "max_password_age", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /password-policies" + ], + "annotations": [] + }, + { + "name": "max_session_duration", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-roles" + ], + "annotations": [] + }, + { + "name": "max_total_bytes_per_sec", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "max_total_ops_per_sec", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /qos-policies" + ], + "annotations": [] + }, + { + "name": "member_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /object-store-account-exports" + ], + "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": "network_access_policy", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "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": "organization", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "organizational_unit", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "passphrase", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "prefix", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "preserve_configuration_data", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /arrays/erasures" + ], + "annotations": [] + }, + { + "name": "principal", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "print_latency", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /network-interfaces/ping" + ], + "annotations": [] }, { - "name": "filter", - "cmdletCount": 193, - "cmdlets": [ - "Get-PfbActiveDirectory", - "Get-PfbAdmin", - "Get-PfbAdminCache", - "Get-PfbAdminManagementAccessPolicy", - "Get-PfbAdminSetting", - "Get-PfbAdminSshCaPolicy", - "Get-PfbAlert", - "Get-PfbAlertWatcher", - "Get-PfbApiClient", - "Get-PfbApiToken", - "Get-PfbArray", - "Get-PfbArrayClientPerformance", - "Get-PfbArrayClientS3Performance", - "Get-PfbArrayConnection", - "Get-PfbArrayConnectionKey", - "Get-PfbArrayConnectionPath", - "Get-PfbArrayConnectionPerformanceReplication", - "Get-PfbArrayErasure", - "Get-PfbArrayEula", - "Get-PfbArrayFactoryResetToken", - "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-PfbDns", - "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-PfbPasswordPolicy", - "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-PfbSmtpServer", - "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-PfbSyslogServerSettings", - "Get-PfbTarget", - "Get-PfbTargetPerformanceReplication", - "Get-PfbTlsPolicy", - "Get-PfbTlsPolicyMember", - "Get-PfbUsageGroup", - "Get-PfbUsageUser", - "Get-PfbWorkload", - "Get-PfbWorkloadPlacementRecommendation", - "Get-PfbWormPolicy", - "Get-PfbWormPolicyMember" - ] + "name": "private_key", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "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": "limit", - "cmdletCount": 190, - "cmdlets": [ - "Get-PfbAdmin", - "Get-PfbAdminCache", - "Get-PfbAdminManagementAccessPolicy", - "Get-PfbAdminSetting", - "Get-PfbAdminSshCaPolicy", - "Get-PfbAlert", - "Get-PfbAlertWatcher", - "Get-PfbApiClient", - "Get-PfbApiToken", - "Get-PfbArray", - "Get-PfbArrayClientPerformance", - "Get-PfbArrayClientS3Performance", - "Get-PfbArrayConnection", - "Get-PfbArrayConnectionKey", - "Get-PfbArrayConnectionPath", - "Get-PfbArrayConnectionPerformanceReplication", - "Get-PfbArrayErasure", - "Get-PfbArrayEula", - "Get-PfbArrayFactoryResetToken", - "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-PfbDns", - "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-PfbPasswordPolicy", - "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-PfbSmtpServer", - "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-PfbSyslogServerSettings", - "Get-PfbTarget", - "Get-PfbTargetPerformanceReplication", - "Get-PfbTlsPolicy", - "Get-PfbTlsPolicyMember", - "Get-PfbUsageGroup", - "Get-PfbUsageUser", - "Get-PfbWorkload", - "Get-PfbWorkloadPlacementRecommendation", - "Get-PfbWormPolicy", - "Get-PfbWormPolicyMember" - ] + "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": "rdma_enabled", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /network-interfaces" + ], + "annotations": [] + }, + { + "name": "read", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /smb-share-policies/rules" + ], + "annotations": [] + }, + { + "name": "realm_ids", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults" + ], + "annotations": [] + }, + { + "name": "realm_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /realms/defaults" + ], + "annotations": [] + }, + { + "name": "recursive", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "DELETE /file-systems/locks" + ], + "annotations": [] }, { - "name": "sort", - "cmdletCount": 171, - "cmdlets": [ - "Get-PfbAdmin", - "Get-PfbAdminCache", - "Get-PfbAdminSetting", - "Get-PfbAlert", - "Get-PfbAlertWatcher", - "Get-PfbApiClient", - "Get-PfbApiToken", - "Get-PfbArray", - "Get-PfbArrayClientPerformance", - "Get-PfbArrayClientS3Performance", - "Get-PfbArrayConnection", - "Get-PfbArrayConnectionKey", - "Get-PfbArrayConnectionPath", - "Get-PfbArrayConnectionPerformanceReplication", - "Get-PfbArrayErasure", - "Get-PfbArrayEula", - "Get-PfbArrayFactoryResetToken", - "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-PfbDns", - "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-PfbPasswordPolicy", - "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-PfbSmtpServer", - "Get-PfbSnmpManager", - "Get-PfbSoftwareCheck", - "Get-PfbSshCaPolicy", - "Get-PfbStorageClassTieringPolicy", - "Get-PfbSubnet", - "Get-PfbSupport", - "Get-PfbSupportDiagnostics", - "Get-PfbSupportDiagnosticsDetails", - "Get-PfbSupportVerificationKey", - "Get-PfbSyslogServer", - "Get-PfbSyslogServerSettings", - "Get-PfbTarget", - "Get-PfbTargetPerformanceReplication", - "Get-PfbTlsPolicy", - "Get-PfbUsageGroup", - "Get-PfbUsageUser", - "Get-PfbWorkload", - "Get-PfbWorkloadPlacementRecommendation", - "Get-PfbWormPolicy" - ] + "name": "refresh", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /admins/cache" + ], + "annotations": [] + }, + { + "name": "remote", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /file-system-replica-links" + ], + "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": "required_transport_security", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "retention_lock", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets" + ], + "annotations": [] }, { - "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": "rule_id", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /lifecycle-rules" + ], + "annotations": [] + }, + { + "name": "s3_prefixes", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /buckets/audit-filters" + ], + "annotations": [] + }, + { + "name": "secure", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "security", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /nfs-export-policies/rules" + ], + "annotations": [] + }, + { + "name": "server", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /object-store-account-exports" + ], + "annotations": [] + }, + { + "name": "session_names", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "GET /file-systems/open-files" + ], + "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": "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": "sp", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /sso/saml2/idps" + ], + "annotations": [] + }, + { + "name": "state", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "subject_alternative_names", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /certificates" + ], + "annotations": [] + }, + { + "name": "time_zone", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /arrays" + ], + "annotations": [] }, { - "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": "timeout", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /maintenance-windows" + ], + "annotations": [] }, { - "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": "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": "v2c", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] + }, + { + "name": "v3", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] + }, + { + "name": "version", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "PATCH /snmp-agents" + ], + "annotations": [] + }, + { + "name": "volume_configurations", + "endpointCount": 1, + "queryEndpointCount": 0, + "bodyEndpointCount": 1, + "endpoints": [ + "POST /presets/workload" + ], + "annotations": [] }, { - "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": "without_default_access_list", + "endpointCount": 1, + "queryEndpointCount": 1, + "bodyEndpointCount": 0, + "endpoints": [ + "POST /realms" + ], + "annotations": [] }, { - "name": "total_only", - "cmdletCount": 30, + "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": 308, "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-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-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-PfbTargetPerformanceReplication" - ] - }, - { - "name": "file_system_names", - "cmdletCount": 6, - "cmdlets": [ - "Get-PfbFileSystemGroupPerformance", - "Get-PfbFileSystemUserPerformance", + "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-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": [ + "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-PfbAuditFileSystemPolicy", + "New-PfbAuditObjectStorePolicy", + "New-PfbBucket", + "New-PfbCertificate", + "New-PfbCertificateGroup", + "New-PfbDataEvictionPolicy", + "New-PfbDirectoryServiceRole", + "New-PfbFileSystem", + "New-PfbLegalHold", + "New-PfbLegalHoldEntity", + "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-PfbS3ExportRule", + "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-PfbBucketAuditFilter", + "Update-PfbCertificate", "Update-PfbDataEvictionPolicy", + "Update-PfbDirectoryServiceRole", + "Update-PfbDns", + "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-PfbWorkload" - ] - }, - { - "name": "remote_file_system_names", - "cmdletCount": 3, - "cmdlets": [ - "Get-PfbFileSystemReplicaLink", - "New-PfbFileSystemReplicaLink", - "Remove-PfbFileSystemReplicaLink" + "Update-PfbQosPolicy", + "Update-PfbRealm", + "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": "address", - "cmdletCount": 2, + "name": "ids", + "cmdletCount": 219, "cmdlets": [ - "New-PfbNetworkInterface", - "Update-PfbNetworkInterface" + "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-PfbLegalHoldEntity", + "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-PfbDns", + "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-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-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": "file_system_ids", - "cmdletCount": 2, + "name": "filter", + "cmdletCount": 193, "cmdlets": [ + "Get-PfbActiveDirectory", + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSetting", + "Get-PfbAdminSshCaPolicy", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArray", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayEula", + "Get-PfbArrayFactoryResetToken", + "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-PfbDns", + "Get-PfbDrive", + "Get-PfbFileLock", + "Get-PfbFileLockClient", + "Get-PfbFileSystem", + "Get-PfbFileSystemAuditPolicy", + "Get-PfbFileSystemExport", "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-PfbFileSystemPolicy", + "Get-PfbFileSystemReplicaLink", + "Get-PfbFileSystemReplicaLinkPolicy", + "Get-PfbFileSystemReplicaLinkTransfer", "Get-PfbFileSystemSession", - "Remove-PfbFileSystemSession" - ] - }, - { - "name": "quota_limit", - "cmdletCount": 2, - "cmdlets": [ - "New-PfbBucket", - "Update-PfbBucket" - ] - }, - { - "name": "remote_names", - "cmdletCount": 2, - "cmdlets": [ - "New-PfbFileSystemReplicaLink", - "Remove-PfbFileSystemReplicaLink" + "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-PfbPasswordPolicy", + "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-PfbSmtpServer", + "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-PfbSyslogServerSettings", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbTlsPolicyMember", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "Get-PfbWormPolicyMember" ] }, { - "name": "role_ids", - "cmdletCount": 2, + "name": "limit", + "cmdletCount": 190, "cmdlets": [ + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAdminManagementAccessPolicy", + "Get-PfbAdminSetting", + "Get-PfbAdminSshCaPolicy", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArray", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayEula", + "Get-PfbArrayFactoryResetToken", + "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-PfbDns", + "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" - ] - }, - { - "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" + "Get-PfbObjectStoreTrustPolicy", + "Get-PfbObjectStoreTrustPolicyRule", + "Get-PfbObjectStoreUser", + "Get-PfbObjectStoreUserAccessPolicy", + "Get-PfbObjectStoreVirtualHost", + "Get-PfbOidcIdp", + "Get-PfbOpenFile", + "Get-PfbPasswordPolicy", + "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-PfbSmtpServer", + "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-PfbSyslogServerSettings", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbTlsPolicyMember", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy", + "Get-PfbWormPolicyMember" ] }, { - "name": "member_types", - "cmdletCount": 1, + "name": "sort", + "cmdletCount": 171, "cmdlets": [ - "Get-PfbPolicyAllMember" + "Get-PfbAdmin", + "Get-PfbAdminCache", + "Get-PfbAdminSetting", + "Get-PfbAlert", + "Get-PfbAlertWatcher", + "Get-PfbApiClient", + "Get-PfbApiToken", + "Get-PfbArray", + "Get-PfbArrayClientPerformance", + "Get-PfbArrayClientS3Performance", + "Get-PfbArrayConnection", + "Get-PfbArrayConnectionKey", + "Get-PfbArrayConnectionPath", + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayErasure", + "Get-PfbArrayEula", + "Get-PfbArrayFactoryResetToken", + "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-PfbDns", + "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-PfbPasswordPolicy", + "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-PfbSmtpServer", + "Get-PfbSnmpManager", + "Get-PfbSoftwareCheck", + "Get-PfbSshCaPolicy", + "Get-PfbStorageClassTieringPolicy", + "Get-PfbSubnet", + "Get-PfbSupport", + "Get-PfbSupportDiagnostics", + "Get-PfbSupportDiagnosticsDetails", + "Get-PfbSupportVerificationKey", + "Get-PfbSyslogServer", + "Get-PfbSyslogServerSettings", + "Get-PfbTarget", + "Get-PfbTargetPerformanceReplication", + "Get-PfbTlsPolicy", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "Get-PfbWorkload", + "Get-PfbWorkloadPlacementRecommendation", + "Get-PfbWormPolicy" ] }, { - "name": "parameters", - "cmdletCount": 1, + "name": "policy_names", + "cmdletCount": 108, "cmdlets": [ - "New-PfbWorkload" + "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": "protocol", - "cmdletCount": 1, + "name": "member_names", + "cmdletCount": 98, "cmdlets": [ - "Get-PfbArrayPerformance" + "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-PfbManagementAccessPolicyAdmin", + "New-PfbManagementAccessPolicyDirectoryRole", + "New-PfbNetworkInterfaceTlsPolicy", + "New-PfbObjectStoreAccessPolicyRole", + "New-PfbObjectStoreAccessPolicyUser", + "New-PfbObjectStoreRoleAccessPolicy", + "New-PfbObjectStoreUserAccessPolicy", + "New-PfbPolicyFileSystem", + "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" ] }, { - "name": "replication_addresses", - "cmdletCount": 1, + "name": "policy_ids", + "cmdletCount": 88, "cmdlets": [ - "New-PfbArrayConnection" + "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-PfbNetworkInterfaceTlsPolicy", + "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": "server", - "cmdletCount": 1, + "name": "member_ids", + "cmdletCount": 78, "cmdlets": [ - "New-PfbFileSystemExport" + "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-PfbNetworkInterfaceTlsPolicy", + "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" ] }, { - "name": "services", - "cmdletCount": 1, + "name": "total_only", + "cmdletCount": 30, "cmdlets": [ - "New-PfbNetworkInterface" + "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": "share_policy", - "cmdletCount": 1, + "name": "name", + "cmdletCount": 20, "cmdlets": [ - "New-PfbFileSystemExport" + "Update-PfbDataEvictionPolicy", + "Update-PfbDns", + "Update-PfbFleet", + "Update-PfbLogTargetFileSystem", + "Update-PfbLogTargetObjectStore", + "Update-PfbManagementAccessPolicy", + "Update-PfbNode", + "Update-PfbNodeGroup", + "Update-PfbObjectStoreRemoteCredential", + "Update-PfbObjectStoreVirtualHost", + "Update-PfbOidcIdp", + "Update-PfbPresetWorkload", + "Update-PfbQosPolicy", + "Update-PfbSaml2Idp", + "Update-PfbSnmpManager", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTarget", + "Update-PfbTlsPolicy", + "Update-PfbWorkload" ] }, { - "name": "source", - "cmdletCount": 1, + "name": "end_time", + "cmdletCount": 17, "cmdlets": [ - "New-PfbFileSystem" + "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", + "Update-PfbAsyncLog" ] }, { - "name": "vlan", - "cmdletCount": 1, + "name": "start_time", + "cmdletCount": 17, "cmdlets": [ - "New-PfbSubnet" + "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", + "Update-PfbAsyncLog" ] }, { - "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": "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": "allow_errors", - "cmdletCount": 0, - "cmdlets": [] + "name": "enabled", + "cmdletCount": 10, + "cmdlets": [ + "Update-PfbApiClient", + "Update-PfbLifecycleRule", + "Update-PfbManagementAccessPolicy", + "Update-PfbOidcIdp", + "Update-PfbQosPolicy", + "Update-PfbSaml2Idp", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTlsPolicy", + "Update-PfbWormPolicy" + ] }, { - "name": "allowed_headers", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system_names", + "cmdletCount": 8, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "Get-PfbQuotaGroup", + "Get-PfbQuotaUser", + "Get-PfbUsageGroup", + "Get-PfbUsageUser", + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "allowed_methods", - "cmdletCount": 0, - "cmdlets": [] + "name": "ca_certificate_group", + "cmdletCount": 6, + "cmdlets": [ + "New-PfbArrayConnection", + "Update-PfbActiveDirectory", + "Update-PfbArrayConnection", + "Update-PfbDns", + "Update-PfbKmip", + "Update-PfbTarget" + ] }, { - "name": "allowed_origins", - "cmdletCount": 0, - "cmdlets": [] + "name": "location", + "cmdletCount": 6, + "cmdlets": [ + "Update-PfbManagementAccessPolicy", + "Update-PfbQosPolicy", + "Update-PfbSshCaPolicy", + "Update-PfbStorageClassTieringPolicy", + "Update-PfbTlsPolicy", + "Update-PfbWormPolicy" + ] }, { - "name": "analysis_period_end_time", - "cmdletCount": 0, - "cmdlets": [] + "name": "services", + "cmdletCount": 6, + "cmdlets": [ + "New-PfbNetworkInterface", + "Update-PfbDns", + "Update-PfbNetworkInterface", + "Update-PfbOidcIdp", + "Update-PfbSaml2Idp", + "Update-PfbSyslogServer" + ] }, { - "name": "analysis_period_start_time", - "cmdletCount": 0, - "cmdlets": [] + "name": "destroyed", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbBucket", + "Get-PfbFileSystem", + "Get-PfbFileSystemSnapshot", + "Get-PfbRealm", + "Get-PfbWorkload" + ] }, { - "name": "anongid", - "cmdletCount": 0, - "cmdlets": [] + "name": "group_names", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbLocalGroupMember", + "Get-PfbNodeGroupNode", + "New-PfbLocalGroupMember", + "Remove-PfbLocalGroupMember", + "Remove-PfbNodeGroupNode" + ] }, { - "name": "anonuid", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_file_system_names", + "cmdletCount": 5, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] }, { - "name": "appliance_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_names", + "cmdletCount": 5, + "cmdlets": [ + "New-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink", + "Update-PfbArrayConnection" + ] }, { - "name": "archival_rules", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system_ids", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbFileSystemGroupPerformance", + "Get-PfbFileSystemUserPerformance", + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "array_url", - "cmdletCount": 0, - "cmdlets": [] + "name": "role_names", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy", + "New-PfbObjectStoreRoleAccessPolicy", + "Remove-PfbObjectStoreRoleAccessPolicy" + ] }, { - "name": "atime", - "cmdletCount": 0, - "cmdlets": [] + "name": "type", + "cmdletCount": 4, + "cmdlets": [ + "Get-PfbArrayConnectionPerformanceReplication", + "Get-PfbArrayPerformanceReplication", + "Get-PfbArraySpace", + "New-PfbNetworkInterface" + ] }, { "name": "attached_servers", - "cmdletCount": 0, - "cmdlets": [] - }, - { - "name": "authorization_model", - "cmdletCount": 0, - "cmdlets": [] - }, - { - "name": "banner", - "cmdletCount": 0, - "cmdlets": [] + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkInterface", + "Update-PfbNetworkInterface", + "Update-PfbObjectStoreVirtualHost" + ] }, { "name": "before_rule_id", - "cmdletCount": 0, - "cmdlets": [] + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { "name": "before_rule_name", - "cmdletCount": 0, - "cmdlets": [] - }, - { - "name": "binding", - "cmdletCount": 0, - "cmdlets": [] - }, - { - "name": "bucket_defaults", - "cmdletCount": 0, - "cmdlets": [] - }, - { - "name": "bucket_ids", - "cmdletCount": 0, - "cmdlets": [] + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "bucket_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbLifecycleRule", + "Update-PfbBucketAuditFilter", + "Update-PfbLifecycleRule" + ] }, { "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": [] + "cmdletCount": 3, + "cmdlets": [ + "Update-PfbActiveDirectory", + "Update-PfbDns", + "Update-PfbKmip" + ] }, { - "name": "certificate_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_group_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] }, { - "name": "change", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbCertificateCertificateGroup", + "New-PfbCertificateCertificateGroup", + "Remove-PfbCertificateCertificateGroup" + ] }, { "name": "client", - "cmdletCount": 0, - "cmdlets": [] + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "client_certificates_required", - "cmdletCount": 0, - "cmdlets": [] + "name": "index", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "client_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_size", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbDataEvictionPolicy", + "Update-PfbDataEvictionPolicy", + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "common_name", - "cmdletCount": 0, - "cmdlets": [] + "name": "policy", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNfsExportRule", + "Update-PfbFileSystemExport", + "Update-PfbObjectStoreAccountExport" + ] }, { - "name": "component_name", - "cmdletCount": 0, - "cmdlets": [] + "name": "prefix", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbSubnet", + "Update-PfbLifecycleRule", + "Update-PfbSubnet" + ] }, { - "name": "conditions", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbArrayConnection", + "Update-PfbArrayConnection", + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "confirm_date", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_file_system_names", + "cmdletCount": 3, + "cmdlets": [ + "Get-PfbFileSystemReplicaLink", + "New-PfbFileSystemReplicaLink", + "Remove-PfbFileSystemReplicaLink" + ] }, { - "name": "contact", - "cmdletCount": 0, - "cmdlets": [] + "name": "remote_ids", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink", + "Update-PfbArrayConnection" + ] }, { - "name": "context_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "rules", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbPolicy", + "Update-PfbManagementAccessPolicy", + "Update-PfbPolicy" + ] }, { - "name": "country", - "cmdletCount": 0, - "cmdlets": [] + "name": "versions", + "cmdletCount": 3, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "current_state", - "cmdletCount": 0, - "cmdlets": [] + "name": "actions", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbS3ExportRule", + "Update-PfbBucketAuditFilter" + ] }, { - "name": "days", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLifecycleRule", + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "default_inbound_tls_policy", - "cmdletCount": 0, - "cmdlets": [] + "name": "bucket_ids", + "cmdletCount": 2, + "cmdlets": [ + "Update-PfbBucketAuditFilter", + "Update-PfbLifecycleRule" + ] }, { - "name": "default_retention", - "cmdletCount": 0, - "cmdlets": [] + "name": "effect", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbNetworkAccessRule", + "New-PfbS3ExportRule" + ] }, { - "name": "delete_sanitization_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "email", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLocalGroup", + "Update-PfbCertificate" + ] }, { - "name": "description", - "cmdletCount": 0, - "cmdlets": [] + "name": "file_system", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbQuotaGroup", + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "direct_notifications_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "group", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbQuotaGroup", + "Update-PfbDirectoryServiceRole" + ] }, { - "name": "direction", - "cmdletCount": 0, - "cmdlets": [] + "name": "idp", + "cmdletCount": 2, + "cmdlets": [ + "Update-PfbOidcIdp", + "Update-PfbSaml2Idp" + ] }, { - "name": "directory_configurations", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_file_system_ids", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbFileSystemReplicaLinkPolicy", + "New-PfbPolicyFileSystemReplicaLink" + ] }, { - "name": "directory_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "member_types", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbPolicyAllMember", + "New-PfbQosPolicyMember" + ] }, { - "name": "disabled_tls_ciphers", - "cmdletCount": 0, - "cmdlets": [] + "name": "paths", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "discover_mtu", - "cmdletCount": 0, - "cmdlets": [] + "name": "permission", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbNfsExportRule", + "New-PfbSmbClientRule" + ] }, { - "name": "edge_agent_update_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "protocols", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbFileSystemSession", + "Remove-PfbFileSystemSession" + ] }, { - "name": "edge_management_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "quota_limit", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbBucket", + "Update-PfbBucket" + ] }, { - "name": "effect", - "cmdletCount": 0, - "cmdlets": [] + "name": "recursive", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbLegalHoldEntity", + "Update-PfbLegalHoldEntity" + ] }, { - "name": "effective", - "cmdletCount": 0, - "cmdlets": [] + "name": "role_ids", + "cmdletCount": 2, + "cmdlets": [ + "Get-PfbObjectStoreRoleAccessPolicy", + "Get-PfbObjectStoreTrustPolicy" + ] }, { - "name": "enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "server", + "cmdletCount": 2, + "cmdlets": [ + "New-PfbFileSystemExport", + "Update-PfbFileSystemExport" + ] }, { - "name": "enabled_tls_ciphers", - "cmdletCount": 0, - "cmdlets": [] + "name": "abort_incomplete_multipart_uploads_after", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "encrypted", - "cmdletCount": 0, - "cmdlets": [] + "name": "access", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "encryption", - "cmdletCount": 0, - "cmdlets": [] + "name": "access_key_id", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "encryption_types", - "cmdletCount": 0, - "cmdlets": [] + "name": "admin_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "enforce_action_restrictions", - "cmdletCount": 0, - "cmdlets": [] + "name": "admin_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "enforce_dictionary_check", - "cmdletCount": 0, - "cmdlets": [] + "name": "aggregation_strategy", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbManagementAccessPolicy" + ] }, { - "name": "enforce_username_check", - "cmdletCount": 0, - "cmdlets": [] + "name": "anongid", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "eradicate_all_data", - "cmdletCount": 0, - "cmdlets": [] + "name": "anonuid", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "exclude_rules", - "cmdletCount": 0, - "cmdlets": [] + "name": "array_url", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "export_configurations", - "cmdletCount": 0, - "cmdlets": [] + "name": "atime", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "export_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "binding", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "expose_api_token", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "fileid_32bit", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_group_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbCertificateCertificateGroup" + ] }, { - "name": "finalize", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbCertificateCertificateGroup" + ] }, { - "name": "fleet_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "certificate_type", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "fqdns", - "cmdletCount": 0, - "cmdlets": [] + "name": "change", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "fragment_packet", - "cmdletCount": 0, - "cmdlets": [] + "name": "common_name", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "full_access", - "cmdletCount": 0, - "cmdlets": [] + "name": "confirm_date", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "full_control", - "cmdletCount": 0, - "cmdlets": [] + "name": "country", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "generate_new_key", - "cmdletCount": 0, - "cmdlets": [] + "name": "days", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "gids", - "cmdletCount": 0, - "cmdlets": [] + "name": "description", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLegalHold" + ] }, { - "name": "global_catalog_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "encryption", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbClientRule" + ] }, { - "name": "group_base", - "cmdletCount": 0, - "cmdlets": [] + "name": "eradication_config", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] }, { - "name": "group_gids", - "cmdletCount": 0, - "cmdlets": [] + "name": "export_enabled", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreAccountExport" + ] }, { - "name": "group_sids", - "cmdletCount": 0, - "cmdlets": [] + "name": "fileid_32bit", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "hard_limit_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "fleet_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFleetMember" + ] }, { - "name": "hardware_components", - "cmdletCount": 0, - "cmdlets": [] + "name": "full_control", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "host", - "cmdletCount": 0, - "cmdlets": [] + "name": "group_base", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbDirectoryServiceRole" + ] }, { - "name": "identify_enabled", - "cmdletCount": 0, - "cmdlets": [] + "name": "interfaces", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNetworkAccessRule" + ] }, { - "name": "idle_timeout", - "cmdletCount": 0, - "cmdlets": [] + "name": "intermediate_certificate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "idp", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_current_version_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "index", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_current_version_until", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "indices", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetFileSystem" + ] }, { - "name": "inodes", - "cmdletCount": 0, - "cmdlets": [] + "name": "keep_previous_version_for", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLifecycleRule" + ] }, { - "name": "interfaces", - "cmdletCount": 0, - "cmdlets": [] + "name": "key_algorithm", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "intermediate_certificate", - "cmdletCount": 0, - "cmdlets": [] + "name": "key_size", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "issuer", - "cmdletCount": 0, - "cmdlets": [] + "name": "local_directory_service_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbLocalGroupMember" + ] }, { - "name": "join_ou", - "cmdletCount": 0, - "cmdlets": [] + "name": "locality", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "keep_current_version_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "log_name_prefix", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "keep_current_version_until", - "cmdletCount": 0, - "cmdlets": [] + "name": "log_rotate", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbLogTargetObjectStore" + ] }, { - "name": "keep_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "management", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "keep_previous_version_for", - "cmdletCount": 0, - "cmdlets": [] + "name": "management_access_policies", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbAdmin" + ] }, { - "name": "kerberos_servers", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_session_duration", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRole" + ] }, { - "name": "key_algorithm", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_total_bytes_per_sec", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbQosPolicy" + ] }, { - "name": "key_size", - "cmdletCount": 0, - "cmdlets": [] + "name": "max_total_ops_per_sec", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbQosPolicy" + ] }, { - "name": "keytab_file", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_group_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "keytab_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_group_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "keytab_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_ids", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "kmip_server", - "cmdletCount": 0, - "cmdlets": [] + "name": "node_names", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNodeGroupNode" + ] }, { - "name": "lane_speed", - "cmdletCount": 0, - "cmdlets": [] + "name": "organization", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "lanes_per_port", - "cmdletCount": 0, - "cmdlets": [] + "name": "organizational_unit", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "link_type", - "cmdletCount": 0, - "cmdlets": [] + "name": "parameters", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbWorkload" + ] }, { - "name": "local_bucket_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "passphrase", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "local_directory_service_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "principal", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "local_file_system", - "cmdletCount": 0, - "cmdlets": [] + "name": "private_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "local_file_system_ids", - "cmdletCount": 0, - "cmdlets": [] + "name": "protocol", + "cmdletCount": 1, + "cmdlets": [ + "Get-PfbArrayPerformance" + ] }, { - "name": "local_host", - "cmdletCount": 0, - "cmdlets": [] + "name": "public_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbAdmin" + ] }, { - "name": "local_only", - "cmdletCount": 0, - "cmdlets": [] + "name": "rdma_enabled", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbNetworkInterface" + ] }, { - "name": "local_port", - "cmdletCount": 0, - "cmdlets": [] + "name": "read", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbSmbShareRule" + ] }, { - "name": "local_port_names", - "cmdletCount": 0, - "cmdlets": [] + "name": "realm_ids", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbRealmDefaults" + ] }, { - "name": "locality", - "cmdletCount": 0, - "cmdlets": [] + "name": "realm_names", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbRealmDefaults" + ] }, { - "name": "location", - "cmdletCount": 0, - "cmdlets": [] + "name": "required_transport_security", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "locked", - "cmdletCount": 0, - "cmdlets": [] + "name": "resources", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbS3ExportRule" + ] }, { - "name": "lockout_duration", - "cmdletCount": 0, - "cmdlets": [] + "name": "retention_lock", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbWormPolicy" + ] }, { - "name": "log_name_prefix", - "cmdletCount": 0, - "cmdlets": [] + "name": "s3_prefixes", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbBucketAuditFilter" + ] }, { - "name": "log_rotate", - "cmdletCount": 0, - "cmdlets": [] + "name": "secret_access_key", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbObjectStoreRemoteCredential" + ] }, { - "name": "management", - "cmdletCount": 0, - "cmdlets": [] + "name": "secure", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "management_access_policies", - "cmdletCount": 0, - "cmdlets": [] + "name": "security", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbNfsExportRule" + ] }, { - "name": "max_login_attempts", - "cmdletCount": 0, - "cmdlets": [] + "name": "source", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbFileSystem" + ] }, { - "name": "max_password_age", - "cmdletCount": 0, - "cmdlets": [] + "name": "sp", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSaml2Idp" + ] }, { - "name": "max_retention", - "cmdletCount": 0, - "cmdlets": [] + "name": "state", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "max_role", - "cmdletCount": 0, - "cmdlets": [] + "name": "subject_alternative_names", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbCertificate" + ] }, { - "name": "max_session_duration", - "cmdletCount": 0, - "cmdlets": [] + "name": "timeout", + "cmdletCount": 1, + "cmdlets": [ + "New-PfbApiToken" + ] }, { - "name": "max_total_bytes_per_sec", - "cmdletCount": 0, - "cmdlets": [] + "name": "v2c", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "max_total_ops_per_sec", - "cmdletCount": 0, - "cmdlets": [] + "name": "v3", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "member", - "cmdletCount": 0, - "cmdlets": [] + "name": "version", + "cmdletCount": 1, + "cmdlets": [ + "Update-PfbSnmpManager" + ] }, { - "name": "member_sids", + "name": "access_policies", "cmdletCount": 0, "cmdlets": [] }, { - "name": "members", + "name": "access_token_ttl_in_ms", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_character_groups", + "name": "account_exports", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_characters_per_group", + "name": "allow_errors", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_password_age", + "name": "allowed_headers", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_password_length", + "name": "allowed_methods", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_retention", + "name": "allowed_origins", "cmdletCount": 0, "cmdlets": [] }, { - "name": "min_tls_version", + "name": "analysis_period_end_time", "cmdletCount": 0, "cmdlets": [] }, { - "name": "mode", + "name": "analysis_period_start_time", "cmdletCount": 0, "cmdlets": [] }, { - "name": "name_prefixes", + "name": "banner", "cmdletCount": 0, "cmdlets": [] }, { - "name": "names_or_owner_names", + "name": "bucket_defaults", "cmdletCount": 0, "cmdlets": [] }, { - "name": "network_access_policy", + "name": "bucket_type", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_group_ids", + "name": "client_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_group_names", + "name": "component_name", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_ids", + "name": "conditions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_key", + "name": "contact", "cmdletCount": 0, "cmdlets": [] }, { - "name": "node_names", + "name": "context_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "notification", + "name": "current_state", "cmdletCount": 0, "cmdlets": [] }, { - "name": "ntp_servers", + "name": "default_inbound_tls_policy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "object_lock_config", + "name": "delete_sanitization_certificate", "cmdletCount": 0, "cmdlets": [] }, { - "name": "object_store", + "name": "direct_notifications_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "old_password", + "name": "direction", "cmdletCount": 0, "cmdlets": [] }, { - "name": "organization", + "name": "directory_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "organizational_unit", + "name": "discover_mtu", "cmdletCount": 0, "cmdlets": [] }, { - "name": "owner_ids", + "name": "edge_agent_update_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "passphrase", + "name": "edge_management_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "password", + "name": "effective", "cmdletCount": 0, "cmdlets": [] }, { - "name": "password_history", + "name": "enforce_action_restrictions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "paths", + "name": "enforce_dictionary_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "periodic_replication_configurations", + "name": "enforce_username_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "permission", + "name": "eradicate_all_data", "cmdletCount": 0, "cmdlets": [] }, { - "name": "phonehome_enabled", + "name": "exclude_rules", "cmdletCount": 0, "cmdlets": [] }, { - "name": "placement_configurations", + "name": "export_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "platform_features", + "name": "expose_api_token", "cmdletCount": 0, "cmdlets": [] }, { - "name": "policies", + "name": "finalize", "cmdletCount": 0, "cmdlets": [] }, { - "name": "policy", + "name": "fragment_packet", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port", + "name": "full_access", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port_count", + "name": "gids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "port_speed", + "name": "group_gids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "ports", + "name": "group_sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "preserve_configuration_data", + "name": "hard_limit_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "principal", + "name": "idle_timeout", "cmdletCount": 0, "cmdlets": [] }, { - "name": "principals", + "name": "indices", "cmdletCount": 0, "cmdlets": [] }, { - "name": "print_latency", + "name": "inodes", "cmdletCount": 0, "cmdlets": [] }, { - "name": "private_key", + "name": "issuer", "cmdletCount": 0, "cmdlets": [] }, { - "name": "proxy", + "name": "keytab_file", "cmdletCount": 0, "cmdlets": [] }, { - "name": "public_key", + "name": "keytab_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "purity_defined", + "name": "keytab_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "qos_configurations", + "name": "kmip_server", "cmdletCount": 0, "cmdlets": [] }, { - "name": "quota_configurations", + "name": "link_type", "cmdletCount": 0, "cmdlets": [] }, { - "name": "rdma_enabled", + "name": "local_bucket_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "read", + "name": "local_directory_service_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "realm_ids", + "name": "local_file_system", "cmdletCount": 0, "cmdlets": [] }, { - "name": "realm_names", + "name": "local_host", "cmdletCount": 0, "cmdlets": [] }, { - "name": "recursive", + "name": "local_only", "cmdletCount": 0, "cmdlets": [] }, { - "name": "refresh", + "name": "local_port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "released", + "name": "local_port_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote", + "name": "lockout_duration", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_assist_active", + "name": "max_login_attempts", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_assist_duration", + "name": "max_password_age", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_file_system", + "name": "max_role", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_file_system_ids", + "name": "member_sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_host", + "name": "min_character_groups", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_ids", + "name": "min_characters_per_group", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remote_port", + "name": "min_password_age", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remove_attached_servers", + "name": "min_password_length", "cmdletCount": 0, "cmdlets": [] }, { - "name": "remove_ports", + "name": "name_prefixes", "cmdletCount": 0, "cmdlets": [] }, { - "name": "required_transport_security", + "name": "names_or_owner_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "resolve_hostname", + "name": "network_access_policy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "resources", + "name": "ntp_servers", "cmdletCount": 0, "cmdlets": [] }, { - "name": "retention_lock", + "name": "object_lock_config", "cmdletCount": 0, "cmdlets": [] }, { - "name": "retrieval_rules", + "name": "owner_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "role", + "name": "password_history", "cmdletCount": 0, "cmdlets": [] }, { - "name": "rule_id", + "name": "periodic_replication_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "s3_prefixes", + "name": "phonehome_enabled", "cmdletCount": 0, "cmdlets": [] }, { - "name": "secret_access_key", + "name": "placement_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "secure", + "name": "platform_features", "cmdletCount": 0, "cmdlets": [] }, { - "name": "security", + "name": "policies", "cmdletCount": 0, "cmdlets": [] }, { - "name": "serial_number", + "name": "port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "service_principal_names", + "name": "preserve_configuration_data", "cmdletCount": 0, "cmdlets": [] }, { - "name": "session_names", + "name": "principals", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sids", + "name": "print_latency", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signature", + "name": "proxy", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signed_verification_key", + "name": "purity_defined", "cmdletCount": 0, "cmdlets": [] }, { - "name": "signing_authority", + "name": "qos_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "skip_phonehome_check", + "name": "quota_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "snapshot_configurations", + "name": "refresh", "cmdletCount": 0, "cmdlets": [] }, { - "name": "software_names", + "name": "remote_assist_active", "cmdletCount": 0, "cmdlets": [] }, { - "name": "software_versions", + "name": "remote_assist_duration", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sources", + "name": "remote_file_system", "cmdletCount": 0, "cmdlets": [] }, { - "name": "sp", + "name": "remote_file_system_ids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "state", + "name": "remote_host", "cmdletCount": 0, "cmdlets": [] }, { - "name": "static_authorized_principals", + "name": "remote_port", "cmdletCount": 0, "cmdlets": [] }, { - "name": "storage_class_names", + "name": "resolve_hostname", "cmdletCount": 0, "cmdlets": [] }, { - "name": "subject_alternative_names", + "name": "role", "cmdletCount": 0, "cmdlets": [] }, { - "name": "throttle", + "name": "rule_id", "cmdletCount": 0, "cmdlets": [] }, { - "name": "time_zone", + "name": "session_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "timeout", + "name": "sids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "total_item_count", + "name": "signature", "cmdletCount": 0, "cmdlets": [] }, { - "name": "trusted_client_certificate_authority", + "name": "signed_verification_key", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uids", + "name": "skip_phonehome_check", "cmdletCount": 0, "cmdlets": [] }, { - "name": "unreachable", + "name": "snapshot_configurations", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uri", + "name": "software_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "uris", + "name": "software_versions", "cmdletCount": 0, "cmdlets": [] }, { - "name": "user_names", + "name": "storage_class_names", "cmdletCount": 0, "cmdlets": [] }, { - "name": "v2c", + "name": "time_zone", "cmdletCount": 0, "cmdlets": [] }, { - "name": "v3", + "name": "total_item_count", "cmdletCount": 0, "cmdlets": [] }, { - "name": "verify_client_certificate_trust", + "name": "uids", "cmdletCount": 0, "cmdlets": [] }, { - "name": "version", + "name": "unreachable", "cmdletCount": 0, "cmdlets": [] }, { - "name": "versions", + "name": "user_names", "cmdletCount": 0, "cmdlets": [] }, diff --git a/Reports/PfbApiDriftReport.md b/Reports/PfbApiDriftReport.md index 9b59aa1..1da4747 100644 --- a/Reports/PfbApiDriftReport.md +++ b/Reports/PfbApiDriftReport.md @@ -21,13 +21,13 @@ This report accepts **false positives in order to eliminate false negatives**. A ## Summary - Uncovered endpoints: 117 -- Endpoints with parameter gaps: 430 -- Missing body properties (addable): 609 -- Missing query parameters (addable): 980 +- Endpoints with parameter gaps: 417 +- Missing body properties (addable): 403 +- Missing query parameters (addable): 924 - Read-only body fields (not addable -- see the Read-only fields section below): 367 - Phantom fields silently excluded (accumulated in the capability map, absent from the newest analysed spec): 40 -- 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): 312 +- Partial-confidence endpoints (see `How to read this report` above, and each row's marker in the Parameter gaps table): 54 +- Systemic gaps (distinct field names collapsed across high-confidence endpoints, detailed below): 252 - ValidateSet drift: 0 - New ValidateSet candidates: 1 @@ -35,35 +35,35 @@ This report accepts **false positives in order to eliminate false negatives**. A 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 312 findings by endpoint count -- the full list is in the JSON manifest's `systemicGaps`, nothing is dropped there. +Showing the top 25 of 252 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` | 254 | 254 | 0 | 0 | not yet implemented | | `allow_errors` | 110 | 110 | 0 | 0 | not yet implemented | -| `ids` | 46 | 46 | 0 | 218 | | -| `names` | 35 | 35 | 0 | 306 | | +| `ids` | 43 | 43 | 0 | 219 | | +| `names` | 31 | 31 | 0 | 308 | | | `sort` | 28 | 28 | 0 | 171 | | -| `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 | | +| `bucket_ids` | 17 | 17 | 0 | 2 | | +| `policy_ids` | 17 | 17 | 0 | 88 | | | `total_only` | 17 | 17 | 0 | 30 | | -| `enabled` | 16 | 0 | 16 | 0 | | -| `member_ids` | 16 | 16 | 0 | 78 | | -| `remote_names` | 16 | 16 | 0 | 2 | | -| `file_system_ids` | 11 | 11 | 0 | 2 | | +| `bucket_names` | 16 | 16 | 0 | 3 | | +| `member_ids` | 15 | 15 | 0 | 78 | | +| `remote_ids` | 15 | 15 | 0 | 3 | | +| `remote_names` | 13 | 13 | 0 | 5 | | | `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 | | +| `file_system_ids` | 9 | 9 | 0 | 4 | | +| `local_file_system_ids` | 8 | 8 | 0 | 2 | | +| `actions` | 7 | 0 | 7 | 2 | | | `limit` | 7 | 7 | 0 | 190 | | -| `local_file_system_names` | 7 | 7 | 0 | 3 | | +| `versions` | 7 | 7 | 0 | 3 | | +| `enabled` | 6 | 0 | 6 | 10 | | +| `filter` | 6 | 6 | 0 | 193 | | +| `gids` | 6 | 6 | 0 | 0 | | +| `name` | 6 | 0 | 6 | 20 | | +| `role_ids` | 6 | 6 | 0 | 2 | | +| `role_names` | 6 | 6 | 0 | 4 | | +| `workload_ids` | 6 | 6 | 0 | 0 | | ## Parameter gaps @@ -318,92 +318,84 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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` | Update-PfbAdmin | context_names | 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 /api-clients` | Update-PfbApiClient | | max_role | `high` | | +| `PATCH /array-connections` | Update-PfbArrayConnection | context_names | | `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 /buckets/audit-filters` | Update-PfbBucketAuditFilter | context_names | | `high` | | +| `PATCH /certificates` | Update-PfbCertificate | | | `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 /directory-services/roles` | Update-PfbDirectoryServiceRole | role_ids, role_names | role | `high` | | +| `PATCH /dns` | Update-PfbDns | context_names | | `high` | | +| `PATCH /file-system-exports` | Update-PfbFileSystemExport | context_names | | `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 | abort_quiesce, default_group_quota, default_user_quota, destroyed, fast_remove_directory_enabled, group_ownership, hard_limit_enabled, http, multi_protocol, name, nfs, qos_policy, quiesce, skip_quiesce, 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 /hardware` | Update-PfbHardware | | | `high` | | +| `PATCH /hardware-connectors` | Update-PfbHardwareConnector | | | `high` | | +| `PATCH /kmip` | Update-PfbKmip | | | `high` | | +| `PATCH /legal-holds` | Update-PfbLegalHold | | | `high` | | +| `PATCH /lifecycle-rules` | Update-PfbLifecycleRule | context_names | | `high` | | +| `PATCH /log-targets/file-systems` | Update-PfbLogTargetFileSystem | context_names | | `high` | | +| `PATCH /log-targets/object-store` | Update-PfbLogTargetObjectStore | context_names | | `high` | | +| `PATCH /logs-async` | Update-PfbAsyncLog | | | `high` | | +| `PATCH /management-access-policies` | Update-PfbManagementAccessPolicy | context_names | | `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, rdma_enabled, services | `high` | | -| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | | lane_speed, lanes_per_port, port_count, port_speed | `high` | | +| `PATCH /network-interfaces/connectors` | Update-PfbNetworkInterfaceConnector | | | `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 /nodes` | Update-PfbNode | | | `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-account-exports` | Update-PfbObjectStoreAccountExport | context_names | | `high` | | +| `PATCH /object-store-remote-credentials` | Update-PfbObjectStoreRemoteCredential | context_names | | `high` | | +| `PATCH /object-store-roles` | Update-PfbObjectStoreRole | context_names | | `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 /object-store-virtual-hosts` | Update-PfbObjectStoreVirtualHost | context_names | | `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 /qos-policies` | Update-PfbQosPolicy | context_names | | `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 /realms/defaults` | Update-PfbRealmDefaults | context_names | | `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 /snmp-managers` | Update-PfbSnmpManager | | | `high` | | +| `PATCH /ssh-certificate-authority-policies` | Update-PfbSshCaPolicy | | | `high` | | +| `PATCH /sso/oidc/idps` | Update-PfbOidcIdp | | | `high` | | +| `PATCH /sso/saml2/idps` | Update-PfbSaml2Idp | | | `high` | | +| `PATCH /storage-class-tiering-policies` | Update-PfbStorageClassTieringPolicy | | | `high` | | +| `PATCH /subnets` | Update-PfbSubnet | | | `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 /targets` | Update-PfbTarget | | | `high` | | +| `PATCH /tls-policies` | Update-PfbTlsPolicy | | | `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` | | +| `PATCH /worm-data-policies` | Update-PfbWormPolicy | context_names | | `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/api-tokens` | New-PfbApiToken | context_names | | `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 /array-connections` | New-PfbArrayConnection | context_names | | `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) | | @@ -417,7 +409,6 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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` | | @@ -428,18 +419,16 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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-replica-links/policies` | New-PfbFileSystemReplicaLinkPolicy | context_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` | | @@ -447,13 +436,11 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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, rdma_enabled | `partial` -- /!\ 1 unresolved param (see Partial-confidence detail below) | | -| `POST /network-interfaces/tls-policies` | New-PfbNetworkInterfaceTlsPolicy | member_ids, policy_ids | | `high` | | +| `POST /network-access-policies/rules` | New-PfbNetworkAccessRule | | | `high` | | +| `POST /network-interfaces` | New-PfbNetworkInterface | | rdma_enabled | `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 /nfs-export-policies/rules` | New-PfbNfsExportRule | context_names | | `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` | | @@ -469,22 +456,22 @@ Endpoints an existing cmdlet already calls, where the capability map knows of a | `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-system-replica-links` | New-PfbPolicyFileSystemReplicaLink | context_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 /qos-policies/members` | New-PfbQosPolicyMember | context_names | | `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 /s3-export-policies/rules` | New-PfbS3ExportRule | context_names | | `high` | | +| `POST /servers` | New-PfbServer | create_ds, create_local_directory_service | | `partial` -- /!\ 1 unresolved param (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-client-policies/rules` | New-PfbSmbClientRule | context_names | | `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 /smb-share-policies/rules` | New-PfbSmbShareRule | context_names | | `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) | | @@ -547,7 +534,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `PATCH /realms` | `-Destroyed` | AttributesOnly | `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 | `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 | `Public/Policy/Update-PfbS3ExportPolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `PATCH /servers` | `-DnsName` | AttributesOnly | `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 | `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 | `Public/Policy/Update-PfbSmbSharePolicy.ps1:42` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `PATCH /workloads` | `-Destroyed` | TypedUnresolved | `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 | @@ -576,7 +562,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `POST /file-systems` | `-Writable` | AttributesOnly | `Public/FileSystem/New-PfbFileSystem.ps1:150` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /fleets` | `-Name` | AttributesOnly | `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 | `Public/Misc/New-PfbLag.ps1:29` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `POST /network-interfaces` | `-AttachedServers` | AttributesOnly | `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 | `Public/Policy/New-PfbNfsExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /node-groups` | `-Name` | AttributesOnly | `Public/Node/New-PfbNodeGroup.ps1:30` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /policies` | `-Enabled` | AttributesOnly | `Public/Policy/New-PfbPolicy.ps1:23` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | @@ -585,7 +570,6 @@ Per the decision-6 procedure above: open each parameter at its `file:line` and f | `POST /quotas/users` | `-UserName` | AttributesOnly | `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 | `Public/Policy/New-PfbS3ExportPolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /servers` | `-CreateDirectoryService` | AttributesOnly | `Public/Server/New-PfbServer.ps1:40` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | -| `POST /servers` | `-DnsName` | AttributesOnly | `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 | `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 | `Public/Policy/New-PfbSmbSharePolicy.ps1:36` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | | `POST /snmp-managers` | `-Name` | AttributesOnly | `Public/Monitoring/New-PfbSnmpManager.ps1:33` | body reachable only via -Attributes; lists reflect typed-parameter coverage, not wire reachability | diff --git a/Reports/PfbFieldCmdletMap.json b/Reports/PfbFieldCmdletMap.json index b4c15a5..1cfcbc5 100644 --- a/Reports/PfbFieldCmdletMap.json +++ b/Reports/PfbFieldCmdletMap.json @@ -935,7 +935,7 @@ { "cmdlet": "New-PfbApiToken", "parameter": "Name", - "wireName": "names", + "wireName": "admin_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -945,7 +945,17 @@ { "cmdlet": "New-PfbApiToken", "parameter": "Id", - "wireName": "ids", + "wireName": "admin_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbApiToken", + "parameter": "Timeout", + "wireName": "timeout", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -1412,6 +1422,66 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "AuthorizationModel", + "wireName": "authorization_model", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "Locked", + "wireName": "locked", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "ManagementAccessPolicies", + "wireName": "management_access_policies", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "OldPassword", + "wireName": "old_password", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "Password", + "wireName": "password", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbAdmin", + "parameter": "PublicKey", + "wireName": "public_key", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbApiClient", "parameter": "Name", @@ -1432,6 +1502,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbApiClient", + "parameter": "Enabled", + "wireName": "enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbManagementAccessPolicy", "parameter": "Name", @@ -1452,6 +1532,56 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbManagementAccessPolicy", + "parameter": "AggregationStrategy", + "wireName": "aggregation_strategy", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbManagementAccessPolicy", + "parameter": "Enabled", + "wireName": "enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbManagementAccessPolicy", + "parameter": "Location", + "wireName": "location", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbManagementAccessPolicy", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbManagementAccessPolicy", + "parameter": "Rules", + "wireName": "rules", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbOidcIdp", "parameter": "Name", @@ -1472,6 +1602,46 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbOidcIdp", + "parameter": "Enabled", + "wireName": "enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbOidcIdp", + "parameter": "Idp", + "wireName": "idp", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbOidcIdp", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbOidcIdp", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbSaml2Idp", "parameter": "Name", @@ -1492,6 +1662,86 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "ArrayUrl", + "wireName": "array_url", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Binding", + "wireName": "binding", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Enabled", + "wireName": "enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Idp", + "wireName": "idp", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Management", + "wireName": "management", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSaml2Idp", + "parameter": "Sp", + "wireName": "sp", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Get-PfbAlert", "parameter": "Name", @@ -3275,7 +3525,7 @@ { "cmdlet": "Update-PfbBucketAuditFilter", "parameter": "MemberName", - "wireName": "member_names", + "wireName": "bucket_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -3285,7 +3535,37 @@ { "cmdlet": "Update-PfbBucketAuditFilter", "parameter": "MemberId", - "wireName": "member_ids", + "wireName": "bucket_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbBucketAuditFilter", + "parameter": "FilterNames", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbBucketAuditFilter", + "parameter": "Actions", + "wireName": "actions", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbBucketAuditFilter", + "parameter": "S3Prefixes", + "wireName": "s3_prefixes", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -3592,6 +3872,26 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "New-PfbCertificateCertificateGroup", + "parameter": "CertificateId", + "wireName": "certificate_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbCertificateCertificateGroup", + "parameter": "CertificateGroupId", + "wireName": "certificate_group_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "New-PfbCertificateGroup", "parameter": "Name", @@ -3683,8 +3983,168 @@ "recommendation": null }, { - "cmdlet": "Add-PfbDataEvictionPolicyFileSystem", - "parameter": "PolicyName", + "cmdlet": "Update-PfbCertificate", + "parameter": "GenerateNewKey", + "wireName": "generate_new_key", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Certificate", + "wireName": "certificate", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "CommonName", + "wireName": "common_name", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Country", + "wireName": "country", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Days", + "wireName": "days", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Email", + "wireName": "email", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "IntermediateCertificate", + "wireName": "intermediate_certificate", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "KeyAlgorithm", + "wireName": "key_algorithm", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "KeySize", + "wireName": "key_size", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Locality", + "wireName": "locality", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Organization", + "wireName": "organization", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "OrganizationalUnit", + "wireName": "organizational_unit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "Passphrase", + "wireName": "passphrase", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "PrivateKey", + "wireName": "private_key", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "State", + "wireName": "state", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbCertificate", + "parameter": "SubjectAlternativeNames", + "wireName": "subject_alternative_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Add-PfbDataEvictionPolicyFileSystem", + "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, @@ -4612,6 +5072,86 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "CaCertificate", + "wireName": "ca_certificate", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "DirectoryServers", + "wireName": "directory_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "Fqdns", + "wireName": "fqdns", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "GlobalCatalogServers", + "wireName": "global_catalog_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "JoinOu", + "wireName": "join_ou", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "KerberosServers", + "wireName": "kerberos_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbActiveDirectory", + "parameter": "ServicePrincipalNames", + "wireName": "service_principal_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbDirectoryServiceRole", "parameter": "Name", @@ -4632,6 +5172,26 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbDirectoryServiceRole", + "parameter": "Group", + "wireName": "group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDirectoryServiceRole", + "parameter": "GroupBase", + "wireName": "group_base", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Get-PfbFileLock", "parameter": "Name", @@ -5883,9 +6443,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbFileSystemExport", + "parameter": "ExportName", + "wireName": "export_name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5893,9 +6453,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbFileSystemExport", + "parameter": "Member", + "wireName": "member", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5903,9 +6463,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "SourceName", - "wireName": "source_names", + "cmdlet": "Update-PfbFileSystemExport", + "parameter": "Policy", + "wireName": "policy", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5913,9 +6473,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbFileSystemExport", + "parameter": "Server", + "wireName": "server", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5923,9 +6483,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbFileSystemExport", + "parameter": "SharePolicy", + "wireName": "share_policy", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5934,8 +6494,8 @@ }, { "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Limit", - "wireName": "limit", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5944,8 +6504,8 @@ }, { "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "TotalOnly", - "wireName": "total_only", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5954,8 +6514,8 @@ }, { "cmdlet": "Get-PfbFileSystemSnapshot", - "parameter": "Destroyed", - "wireName": "destroyed", + "parameter": "SourceName", + "wireName": "source_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -5963,8 +6523,58 @@ "recommendation": null }, { - "cmdlet": "Get-PfbFileSystemSnapshotPolicy", - "parameter": "PolicyName", + "cmdlet": "Get-PfbFileSystemSnapshot", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbFileSystemSnapshot", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbFileSystemSnapshot", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbFileSystemSnapshot", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbFileSystemSnapshot", + "parameter": "Destroyed", + "wireName": "destroyed", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbFileSystemSnapshotPolicy", + "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, @@ -6502,6 +7112,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbHardware", + "parameter": "IdentifyEnabled", + "wireName": "identify_enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbHardwareConnector", "parameter": "Name", @@ -6522,6 +7142,46 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbHardwareConnector", + "parameter": "LaneSpeed", + "wireName": "lane_speed", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbHardwareConnector", + "parameter": "LanesPerPort", + "wireName": "lanes_per_port", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbHardwareConnector", + "parameter": "PortCount", + "wireName": "port_count", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbHardwareConnector", + "parameter": "PortSpeed", + "wireName": "port_speed", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Get-PfbKeytab", "parameter": "Name", @@ -7254,8 +7914,8 @@ }, { "cmdlet": "New-PfbLegalHoldEntity", - "parameter": "HoldName", - "wireName": "hold_names", + "parameter": "FileSystemIds", + "wireName": "file_system_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7264,8 +7924,48 @@ }, { "cmdlet": "New-PfbLegalHoldEntity", - "parameter": "MemberName", - "wireName": "member_names", + "parameter": "FileSystemNames", + "wireName": "file_system_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbLegalHoldEntity", + "parameter": "Ids", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbLegalHoldEntity", + "parameter": "Names", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbLegalHoldEntity", + "parameter": "Paths", + "wireName": "paths", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbLegalHoldEntity", + "parameter": "Recursive", + "wireName": "recursive", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7443,9 +8143,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLag", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbKmip", + "parameter": "CaCertificate", + "wireName": "ca_certificate", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7453,9 +8153,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLag", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbKmip", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7463,7 +8163,17 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLegalHold", + "cmdlet": "Update-PfbKmip", + "parameter": "Uris", + "wireName": "uris", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbLag", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7473,7 +8183,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLegalHold", + "cmdlet": "Update-PfbLag", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -7483,9 +8193,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLegalHoldEntity", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLag", + "parameter": "AddPorts", + "wireName": "add_ports", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7493,9 +8203,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLifecycleRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLag", + "parameter": "Ports", + "wireName": "ports", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7503,9 +8213,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLifecycleRule", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbLag", + "parameter": "RemovePorts", + "wireName": "remove_ports", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7513,7 +8223,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLog", + "cmdlet": "Update-PfbLegalHold", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7523,7 +8233,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLog", + "cmdlet": "Update-PfbLegalHold", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -7533,9 +8243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLog", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLegalHold", + "parameter": "Description", + "wireName": "description", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7543,9 +8253,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLog", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7553,9 +8263,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLog", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "FileSystemIds", + "wireName": "file_system_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7563,9 +8273,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLogDownload", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "FileSystemNames", + "wireName": "file_system_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7573,8 +8283,8 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAsyncLogDownload", - "parameter": "Id", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "Ids", "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, @@ -7583,9 +8293,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLog", - "parameter": "StartTime", - "wireName": "start_time", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "Paths", + "wireName": "paths", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7593,9 +8303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLog", - "parameter": "EndTime", - "wireName": "end_time", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "Recursive", + "wireName": "recursive", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7603,9 +8313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLog", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLegalHoldEntity", + "parameter": "Released", + "wireName": "released", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7613,9 +8323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLog", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7623,9 +8333,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLog", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7633,9 +8343,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetFileSystem", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "BucketIds", + "wireName": "bucket_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7643,9 +8353,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetFileSystem", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "BucketNames", + "wireName": "bucket_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7653,9 +8363,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetFileSystem", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "ConfirmDate", + "wireName": "confirm_date", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7663,9 +8373,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetFileSystem", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "AbortIncompleteMultipartUploadsAfter", + "wireName": "abort_incomplete_multipart_uploads_after", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7673,9 +8383,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetFileSystem", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7683,9 +8393,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetObjectStore", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "KeepCurrentVersionFor", + "wireName": "keep_current_version_for", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7693,9 +8403,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetObjectStore", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "KeepCurrentVersionUntil", + "wireName": "keep_current_version_until", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7703,9 +8413,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetObjectStore", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "KeepPreviousVersionFor", + "wireName": "keep_previous_version_for", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7713,9 +8423,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetObjectStore", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLifecycleRule", + "parameter": "Prefix", + "wireName": "prefix", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7723,9 +8433,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbLogTargetObjectStore", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbAsyncLog", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7733,7 +8443,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmtpServer", + "cmdlet": "Get-PfbAsyncLog", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbAsyncLog", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -7743,7 +8463,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmtpServer", + "cmdlet": "Get-PfbAsyncLog", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -7753,7 +8473,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmtpServer", + "cmdlet": "Get-PfbAsyncLog", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -7763,7 +8483,47 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpAgent", + "cmdlet": "Get-PfbAsyncLogDownload", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbAsyncLogDownload", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbLog", + "parameter": "StartTime", + "wireName": "start_time", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbLog", + "parameter": "EndTime", + "wireName": "end_time", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbLog", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -7773,7 +8533,27 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpManager", + "cmdlet": "Get-PfbLog", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbLog", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbLogTargetFileSystem", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7783,7 +8563,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpManager", + "cmdlet": "Get-PfbLogTargetFileSystem", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -7793,7 +8573,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpManager", + "cmdlet": "Get-PfbLogTargetFileSystem", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -7803,7 +8583,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpManager", + "cmdlet": "Get-PfbLogTargetFileSystem", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -7813,7 +8593,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSnmpManager", + "cmdlet": "Get-PfbLogTargetFileSystem", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -7823,7 +8603,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServer", + "cmdlet": "Get-PfbLogTargetObjectStore", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7833,7 +8613,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServer", + "cmdlet": "Get-PfbLogTargetObjectStore", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -7843,7 +8623,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServer", + "cmdlet": "Get-PfbLogTargetObjectStore", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -7853,7 +8633,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServer", + "cmdlet": "Get-PfbLogTargetObjectStore", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -7863,7 +8643,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServer", + "cmdlet": "Get-PfbLogTargetObjectStore", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -7873,7 +8653,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServerSettings", + "cmdlet": "Get-PfbSmtpServer", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -7883,7 +8663,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServerSettings", + "cmdlet": "Get-PfbSmtpServer", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -7893,7 +8673,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSyslogServerSettings", + "cmdlet": "Get-PfbSmtpServer", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -7903,9 +8683,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbLogTargetFileSystem", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSnmpAgent", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7913,7 +8693,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbLogTargetObjectStore", + "cmdlet": "Get-PfbSnmpManager", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7923,9 +8703,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbLogTargetFileSystem", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSnmpManager", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7933,9 +8713,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbLogTargetFileSystem", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSnmpManager", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7943,9 +8723,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbLogTargetObjectStore", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSnmpManager", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7953,9 +8733,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbLogTargetObjectStore", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSnmpManager", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7963,7 +8743,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSnmpManager", + "cmdlet": "Get-PfbSyslogServer", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -7973,7 +8753,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSnmpManager", + "cmdlet": "Get-PfbSyslogServer", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -7983,9 +8763,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSyslogServer", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSyslogServer", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -7993,9 +8773,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSyslogServer", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSyslogServer", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8003,9 +8783,9 @@ "recommendation": null }, { - "cmdlet": "Test-PfbSnmpManager", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSyslogServer", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8013,9 +8793,9 @@ "recommendation": null }, { - "cmdlet": "Test-PfbSnmpManager", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSyslogServerSettings", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8023,9 +8803,9 @@ "recommendation": null }, { - "cmdlet": "Test-PfbSyslogServer", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSyslogServerSettings", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8033,9 +8813,9 @@ "recommendation": null }, { - "cmdlet": "Test-PfbSyslogServer", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSyslogServerSettings", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8043,7 +8823,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAsyncLog", + "cmdlet": "New-PfbLogTargetFileSystem", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8053,9 +8833,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAsyncLog", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbLogTargetObjectStore", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8063,7 +8843,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLogTargetFileSystem", + "cmdlet": "Remove-PfbLogTargetFileSystem", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8073,7 +8853,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLogTargetFileSystem", + "cmdlet": "Remove-PfbLogTargetFileSystem", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8083,7 +8863,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLogTargetObjectStore", + "cmdlet": "Remove-PfbLogTargetObjectStore", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8093,7 +8873,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbLogTargetObjectStore", + "cmdlet": "Remove-PfbLogTargetObjectStore", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8103,9 +8883,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmtp", - "parameter": "RelayHost", - "wireName": "relay_host", + "cmdlet": "Remove-PfbSnmpManager", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8113,9 +8893,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmtp", - "parameter": "SenderDomain", - "wireName": "sender_domain", + "cmdlet": "Remove-PfbSnmpManager", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8123,7 +8903,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSnmpManager", + "cmdlet": "Remove-PfbSyslogServer", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8133,7 +8913,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSnmpManager", + "cmdlet": "Remove-PfbSyslogServer", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8143,7 +8923,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSyslogServer", + "cmdlet": "Test-PfbSnmpManager", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8153,7 +8933,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSyslogServer", + "cmdlet": "Test-PfbSnmpManager", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8163,9 +8943,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbDns", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Test-PfbSyslogServer", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8173,9 +8953,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbDns", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Test-PfbSyslogServer", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8183,9 +8963,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbDns", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbAsyncLog", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8193,9 +8973,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbAsyncLog", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8203,9 +8983,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbAsyncLog", + "parameter": "EndTime", + "wireName": "end_time", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8213,9 +8993,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbAsyncLog", + "parameter": "HardwareComponents", + "wireName": "hardware_components", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8223,9 +9003,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbAsyncLog", + "parameter": "StartTime", + "wireName": "start_time", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8233,19 +9013,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "Filter", - "wireName": "filter", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8253,9 +9023,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8263,9 +9033,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkConnectionStatistics", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "FileSystem", + "wireName": "file_system", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8273,9 +9043,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkConnectionStatistics", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "KeepFor", + "wireName": "keep_for", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8283,9 +9053,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkConnectionStatistics", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "KeepSize", + "wireName": "keep_size", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8293,17 +9063,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkConnectionStatistics", - "parameter": "Limit", - "wireName": "limit", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbLogTargetFileSystem", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterface", + "cmdlet": "Update-PfbLogTargetObjectStore", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8313,7 +9083,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterface", + "cmdlet": "Update-PfbLogTargetObjectStore", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8323,9 +9093,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterface", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbLogTargetObjectStore", + "parameter": "Bucket", + "wireName": "bucket", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8333,9 +9103,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterface", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbLogTargetObjectStore", + "parameter": "LogNamePrefix", + "wireName": "log_name_prefix", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8343,9 +9113,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterface", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbLogTargetObjectStore", + "parameter": "LogRotate", + "wireName": "log_rotate", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8353,19 +9123,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnector", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbLogTargetObjectStore", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnector", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbSmtp", + "parameter": "RelayHost", + "wireName": "relay_host", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8373,9 +9143,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnector", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbSmtp", + "parameter": "SenderDomain", + "wireName": "sender_domain", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8383,9 +9153,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnector", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8393,9 +9163,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnector", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8403,9 +9173,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "SnmpHost", + "wireName": "host", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8413,19 +9183,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "Filter", - "wireName": "filter", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "V2c", + "wireName": "v2c", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8433,9 +9203,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbSnmpManager", + "parameter": "V3", + "wireName": "v3", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8443,9 +9213,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "StartTime", - "wireName": "start_time", + "cmdlet": "Update-PfbSyslogServer", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8453,9 +9223,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "EndTime", - "wireName": "end_time", + "cmdlet": "Update-PfbSyslogServer", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8463,9 +9233,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", - "parameter": "Resolution", - "wireName": "resolution", + "cmdlet": "Update-PfbSyslogServer", + "parameter": "Sources", + "wireName": "sources", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8473,9 +9243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbSyslogServer", + "parameter": "Uri", + "wireName": "uri", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8483,7 +9253,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "cmdlet": "Get-PfbDns", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -8493,7 +9263,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "cmdlet": "Get-PfbDns", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -8503,7 +9273,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "cmdlet": "Get-PfbDns", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -8513,9 +9283,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceNeighbor", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8523,9 +9293,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceNeighbor", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8533,9 +9303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceNeighbor", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8543,9 +9313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceNeighbor", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8553,9 +9323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8563,9 +9333,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8573,9 +9343,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNetworkAccessPolicyMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8583,9 +9353,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbNetworkConnectionStatistics", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8593,7 +9363,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "cmdlet": "Get-PfbNetworkConnectionStatistics", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -8603,7 +9373,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "cmdlet": "Get-PfbNetworkConnectionStatistics", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -8613,7 +9383,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "cmdlet": "Get-PfbNetworkConnectionStatistics", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -8623,7 +9393,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSubnet", + "cmdlet": "Get-PfbNetworkInterface", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8633,7 +9403,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSubnet", + "cmdlet": "Get-PfbNetworkInterface", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8643,7 +9413,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSubnet", + "cmdlet": "Get-PfbNetworkInterface", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -8653,7 +9423,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSubnet", + "cmdlet": "Get-PfbNetworkInterface", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -8663,7 +9433,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSubnet", + "cmdlet": "Get-PfbNetworkInterface", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -8673,9 +9443,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkPing", - "parameter": "Destination", - "wireName": "destination", + "cmdlet": "Get-PfbNetworkInterfaceConnector", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8683,9 +9453,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkPing", - "parameter": "SourceName", - "wireName": "source.name", + "cmdlet": "Get-PfbNetworkInterfaceConnector", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8693,9 +9463,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkPing", - "parameter": "Count", - "wireName": "count", + "cmdlet": "Get-PfbNetworkInterfaceConnector", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8703,9 +9473,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkPing", - "parameter": "PacketSize", - "wireName": "packet_size", + "cmdlet": "Get-PfbNetworkInterfaceConnector", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8713,9 +9483,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkTrace", - "parameter": "Destination", - "wireName": "destination", + "cmdlet": "Get-PfbNetworkInterfaceConnector", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8723,9 +9493,9 @@ "recommendation": null }, { - "cmdlet": "Invoke-PfbNetworkTrace", - "parameter": "SourceName", - "wireName": "source.name", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8733,9 +9503,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterface", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8743,9 +9513,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterface", - "parameter": "Address", - "wireName": "address", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8753,9 +9523,1249 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterface", - "parameter": "AttachedServers", - "wireName": "attached_servers", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "StartTime", + "wireName": "start_time", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "EndTime", + "wireName": "end_time", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Resolution", + "wireName": "resolution", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbSubnet", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbSubnet", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbSubnet", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbSubnet", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbSubnet", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "Destination", + "wireName": "destination", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "SourceName", + "wireName": "source.name", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "Count", + "wireName": "count", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "PacketSize", + "wireName": "packet_size", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkTrace", + "parameter": "Destination", + "wireName": "destination", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Invoke-PfbNetworkTrace", + "parameter": "SourceName", + "wireName": "source.name", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterface", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterface", + "parameter": "Address", + "wireName": "address", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterface", + "parameter": "AttachedServers", + "wireName": "attached_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "Prefix", + "wireName": "prefix", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "Gateway", + "wireName": "gateway", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "Mtu", + "wireName": "mtu", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "Vlan", + "wireName": "vlan", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbSubnet", + "parameter": "LinkAggregationGroupName", + "wireName": "link_aggregation_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbDns", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbDns", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNetworkInterface", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNetworkInterface", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbSubnet", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbSubnet", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Domain", + "wireName": "domain", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Nameservers", + "wireName": "nameservers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "CaCertificate", + "wireName": "ca_certificate", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbDns", + "parameter": "Sources", + "wireName": "sources", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Address", + "wireName": "address", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "AttachedServers", + "wireName": "attached_servers", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "RdmaEnabled", + "wireName": "rdma_enabled", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "LaneSpeed", + "wireName": "lane_speed", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "LanesPerPort", + "wireName": "lanes_per_port", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "PortCount", + "wireName": "port_count", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "PortSpeed", + "wireName": "port_speed", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Prefix", + "wireName": "prefix", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Gateway", + "wireName": "gateway", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Mtu", + "wireName": "mtu", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "LinkAggregationGroup", + "wireName": "link_aggregation_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbSubnet", + "parameter": "Vlan", + "wireName": "vlan", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNode", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNode", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNode", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNode", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNode", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "group_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "GroupId", + "wireName": "group_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "node_group_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "MemberName", + "wireName": "node_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "GroupId", + "wireName": "node_group_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "MemberId", + "wireName": "node_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNodeGroup", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNodeGroup", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "group_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbNodeGroupNode", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "ManagementAddress", + "wireName": "management_address", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "NodeKey", + "wireName": "node_key", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNode", + "parameter": "SerialNumber", + "wireName": "serial_number", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNodeGroup", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNodeGroup", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbNodeGroup", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessKey", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessKey", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessKey", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessKey", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessKey", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8763,9 +10773,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8773,9 +10783,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8783,9 +10793,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8793,9 +10803,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Prefix", - "wireName": "prefix", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8803,9 +10813,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Gateway", - "wireName": "gateway", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8813,9 +10823,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Mtu", - "wireName": "mtu", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8823,9 +10833,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Vlan", - "wireName": "vlan", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8833,9 +10843,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "LinkAggregationGroupName", - "wireName": "link_aggregation_group", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8843,9 +10853,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbDns", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8853,9 +10863,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbDns", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8863,9 +10873,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterface", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8873,9 +10883,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterface", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8883,9 +10893,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8893,7 +10903,27 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -8903,7 +10933,17 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSubnet", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8913,9 +10953,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSubnet", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8923,9 +10963,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbDns", - "parameter": "Domain", - "wireName": "domain", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8933,9 +10973,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbDns", - "parameter": "Nameservers", - "wireName": "nameservers", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8943,9 +10983,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8953,9 +10993,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8963,9 +11003,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", - "parameter": "Address", - "wireName": "address", + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8973,9 +11013,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterfaceConnector", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8983,9 +11023,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterfaceConnector", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8993,7 +11033,47 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccount", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9003,7 +11083,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", + "cmdlet": "Get-PfbObjectStoreAccount", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9013,9 +11093,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Prefix", - "wireName": "prefix", + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9023,9 +11103,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Gateway", - "wireName": "gateway", + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9033,9 +11113,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Mtu", - "wireName": "mtu", + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9043,7 +11123,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9053,7 +11143,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9063,7 +11153,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9073,7 +11163,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9083,7 +11173,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9093,7 +11183,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", + "cmdlet": "Get-PfbObjectStoreAccountExport", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9103,7 +11203,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9113,7 +11213,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9123,7 +11223,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9133,7 +11233,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9143,19 +11243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "GroupId", - "wireName": "group_ids", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9163,9 +11253,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9173,9 +11263,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9183,7 +11273,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", + "cmdlet": "Get-PfbObjectStoreRole", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9193,7 +11283,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", + "cmdlet": "Get-PfbObjectStoreRole", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9203,7 +11293,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", + "cmdlet": "Get-PfbObjectStoreRole", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9213,9 +11303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9223,9 +11313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleName", + "wireName": "role_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9233,9 +11323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleId", + "wireName": "role_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9243,9 +11333,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9253,9 +11343,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9263,9 +11353,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9273,9 +11363,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroup", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9283,9 +11373,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroup", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9293,9 +11383,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9303,9 +11393,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "RoleName", + "wireName": "role_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9313,9 +11403,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNode", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "RoleId", + "wireName": "role_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9323,9 +11413,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNode", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9333,9 +11423,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNodeGroup", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9343,9 +11433,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNodeGroup", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9353,9 +11443,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9363,9 +11453,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9373,9 +11463,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9383,9 +11473,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9393,9 +11483,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9403,9 +11493,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9413,9 +11503,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9423,9 +11513,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9433,9 +11523,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9443,9 +11533,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9453,9 +11543,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9463,9 +11553,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9473,9 +11563,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9483,9 +11573,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9493,9 +11583,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9503,7 +11593,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -9513,7 +11603,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -9523,9 +11613,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9533,9 +11623,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9543,9 +11633,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9553,9 +11643,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9563,9 +11653,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9573,9 +11673,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9583,9 +11683,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9593,9 +11693,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9603,9 +11703,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbObjectStoreAccessKey", + "parameter": "UserName", + "wireName": "user", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9613,9 +11713,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9623,9 +11723,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9633,9 +11733,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbObjectStoreAccessPolicyRole", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9643,9 +11743,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "New-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9653,7 +11753,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "New-PfbObjectStoreAccessPolicyUser", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -9663,9 +11763,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9673,9 +11773,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbObjectStoreAccount", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9683,9 +11783,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbObjectStoreAccountExport", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9693,9 +11793,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9703,9 +11803,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9713,9 +11813,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleName", + "wireName": "role_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9723,9 +11823,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9733,9 +11833,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9743,9 +11843,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9753,9 +11853,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9763,9 +11863,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9773,9 +11873,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbObjectStoreVirtualHost", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9783,9 +11883,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "New-PfbObjectStoreVirtualHost", + "parameter": "Hostname", + "wireName": "hostname", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9793,7 +11893,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", + "cmdlet": "Remove-PfbObjectStoreAccessKey", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9803,7 +11903,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", + "cmdlet": "Remove-PfbObjectStoreAccessKey", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9813,9 +11913,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9823,9 +11923,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9833,9 +11933,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9843,9 +11943,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9853,7 +11953,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9863,9 +11963,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9873,9 +11973,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9883,9 +11983,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9893,9 +11993,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbObjectStoreAccount", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9903,9 +12003,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Remove-PfbObjectStoreAccount", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9913,7 +12013,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Remove-PfbObjectStoreAccountExport", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9923,7 +12023,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Remove-PfbObjectStoreAccountExport", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9933,9 +12033,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9943,9 +12043,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9953,9 +12053,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9963,9 +12063,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Remove-PfbObjectStoreRole", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9973,7 +12073,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", "parameter": "RoleName", "wireName": "role_names", "status": "no-spec-enum-found", @@ -9983,17 +12083,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleId", - "wireName": "role_ids", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -10003,9 +12093,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10013,9 +12103,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10023,9 +12113,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10033,9 +12123,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbObjectStoreUser", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10043,9 +12133,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10053,9 +12143,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10063,9 +12153,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "RoleId", - "wireName": "role_ids", + "cmdlet": "Remove-PfbObjectStoreVirtualHost", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10073,9 +12163,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreVirtualHost", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10083,9 +12173,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreAccessPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10093,9 +12183,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10103,9 +12193,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10113,9 +12203,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "ExportEnabled", + "wireName": "export_enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10123,9 +12213,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Policy", + "wireName": "policy", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10133,7 +12223,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10143,9 +12233,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10153,9 +12243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "AccessKeyId", + "wireName": "access_key_id", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10163,19 +12253,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Limit", - "wireName": "limit", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "Remote", + "wireName": "remote", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10183,9 +12273,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "SecretAccessKey", + "wireName": "secret_access_key", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10193,9 +12283,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10203,9 +12293,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10213,9 +12303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Account", + "wireName": "account", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10223,9 +12313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "MaxSessionDuration", + "wireName": "max_session_duration", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10233,9 +12323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10243,9 +12333,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10253,9 +12343,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10263,9 +12353,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "AddAttachedServers", + "wireName": "add_attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10273,9 +12363,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "AttachedServers", + "wireName": "attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10283,9 +12373,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "Hostname", + "wireName": "hostname", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10293,19 +12383,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Limit", - "wireName": "limit", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "RemoveAttachedServers", + "wireName": "remove_attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10313,7 +12403,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditFileSystemPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10323,7 +12413,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditFileSystemPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10333,7 +12423,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditFileSystemPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -10343,7 +12433,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditFileSystemPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -10353,7 +12443,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditFileSystemPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -10363,9 +12453,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessKey", - "parameter": "UserName", - "wireName": "user", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10373,9 +12463,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10383,9 +12473,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10393,9 +12483,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10403,9 +12493,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10413,9 +12503,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10423,9 +12513,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10433,9 +12523,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccount", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10443,9 +12533,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccountExport", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10453,9 +12543,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRemoteCredential", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10463,7 +12553,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRole", + "cmdlet": "Get-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10473,9 +12563,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10483,9 +12573,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10493,9 +12583,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10503,9 +12593,19 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUser", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10513,9 +12613,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10523,9 +12623,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10533,9 +12633,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreVirtualHost", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10543,9 +12643,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreVirtualHost", - "parameter": "Hostname", - "wireName": "hostname", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10553,9 +12653,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessKey", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10563,9 +12663,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessKey", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10573,7 +12673,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "cmdlet": "Get-PfbNetworkAccessPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10583,7 +12683,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "cmdlet": "Get-PfbNetworkAccessPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10593,19 +12693,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyName", - "wireName": "policy_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10613,9 +12703,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10623,9 +12713,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10633,7 +12723,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNetworkAccessRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -10643,9 +12733,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10653,7 +12743,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccount", + "cmdlet": "Get-PfbNetworkAccessRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10663,9 +12753,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccount", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10673,9 +12763,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccountExport", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10683,9 +12773,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccountExport", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10693,7 +12783,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbNfsExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10703,7 +12793,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbNfsExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10713,19 +12803,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRole", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Remove-PfbObjectStoreRole", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10733,9 +12813,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10743,9 +12823,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10753,9 +12833,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10763,9 +12843,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10773,7 +12853,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUser", + "cmdlet": "Get-PfbNfsExportRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10783,9 +12863,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUser", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10793,9 +12873,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10803,9 +12883,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10813,7 +12893,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10823,7 +12903,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10833,9 +12913,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10843,9 +12923,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccountExport", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10853,9 +12933,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccountExport", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10863,7 +12943,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10873,7 +12953,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10883,9 +12963,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRole", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyAll", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10893,9 +12973,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRole", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicyAll", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10903,9 +12983,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreTrustPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyAll", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10913,9 +12993,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreVirtualHost", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10923,9 +13003,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreVirtualHost", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10933,9 +13013,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10943,9 +13023,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10953,19 +13033,24 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", - "parameter": "Filter", - "wireName": "filter", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "MemberType", + "wireName": "member_types", + "status": "matched", + "matchedKey": "GET policies-all/members#member_types", + "specValues": [ + "file-systems", + "file-system-snapshots", + "file-system-replica-links", + "object-store-users" + ], + "stableSinceOldestVersion": false, + "recommendation": "ArgumentCompleter" }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10973,7 +13058,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAllMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -10983,7 +13068,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -10993,7 +13078,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11003,7 +13088,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11013,7 +13098,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11023,7 +13108,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11033,7 +13118,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11043,7 +13128,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11053,19 +13138,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", - "parameter": "Filter", - "wireName": "filter", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11073,9 +13148,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11083,9 +13158,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11093,9 +13168,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11103,7 +13178,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11113,17 +13188,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Sort", - "wireName": "sort", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbAuditObjectStorePolicy", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11133,7 +13198,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11143,7 +13208,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11153,7 +13218,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11163,7 +13228,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11173,7 +13238,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11183,7 +13248,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11193,7 +13258,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11203,7 +13268,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11213,7 +13278,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11223,7 +13288,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11233,7 +13298,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11243,7 +13308,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11253,7 +13318,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11263,7 +13328,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11273,9 +13338,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbQosPolicyBucket", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11283,9 +13348,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbQosPolicyBucket", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11293,9 +13358,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbQosPolicyBucket", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11303,7 +13368,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11313,9 +13378,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbQosPolicyFileSystem", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11323,9 +13388,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbQosPolicyFileSystem", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11333,9 +13398,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbQosPolicyFileSystem", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11343,9 +13408,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbQosPolicyFileSystem", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11353,7 +13418,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportPolicy", + "cmdlet": "Get-PfbQosPolicyFileSystem", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbQosPolicyFileSystem", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11363,7 +13438,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11373,7 +13448,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11383,9 +13458,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbQosPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11393,9 +13468,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbQosPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11403,9 +13478,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbQosPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11413,7 +13488,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11423,7 +13498,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11433,7 +13508,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11443,7 +13518,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11453,7 +13528,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11463,7 +13538,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11473,19 +13548,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11493,9 +13558,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11503,9 +13568,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11513,9 +13578,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11523,9 +13588,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11533,9 +13598,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11543,9 +13608,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11553,9 +13618,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11563,22 +13628,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "MemberType", - "wireName": "member_types", - "status": "matched", - "matchedKey": "GET policies-all/members#member_types", - "specValues": [ - "file-systems", - "file-system-snapshots", - "file-system-replica-links", - "object-store-users" - ], - "stableSinceOldestVersion": false, - "recommendation": "ArgumentCompleter" - }, - { - "cmdlet": "Get-PfbPolicyAllMember", + "cmdlet": "Get-PfbSmbClientPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11588,9 +13638,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11598,9 +13648,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11608,9 +13658,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbSmbClientRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11618,9 +13668,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbSmbClientRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11628,9 +13678,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbSmbClientRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11638,7 +13688,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11648,7 +13698,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11658,7 +13708,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11668,19 +13718,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", - "parameter": "PolicyName", - "wireName": "policy_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbSmbSharePolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11688,9 +13728,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbSmbSharePolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11698,9 +13738,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbSmbSharePolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11708,9 +13748,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbSmbSharePolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11718,7 +13758,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Get-PfbSmbSharePolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11728,7 +13768,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11738,7 +13778,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11748,19 +13788,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", - "parameter": "MemberName", - "wireName": "member_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbSmbShareRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11768,7 +13798,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11778,7 +13808,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11788,7 +13818,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11798,7 +13828,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11808,7 +13838,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11818,7 +13848,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11828,7 +13858,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11838,7 +13868,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11848,7 +13878,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11858,7 +13888,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11868,7 +13898,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11878,7 +13908,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11888,7 +13918,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11898,7 +13928,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11908,7 +13938,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11918,7 +13948,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11928,7 +13958,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11938,7 +13968,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11948,7 +13978,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11958,7 +13988,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11968,7 +13998,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11978,7 +14008,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11988,7 +14018,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11998,7 +14028,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -12008,7 +14038,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12018,7 +14048,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12028,7 +14058,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12038,7 +14068,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12048,7 +14078,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12058,7 +14088,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12068,7 +14098,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12078,7 +14108,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12088,7 +14118,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12098,9 +14128,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12108,9 +14138,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12118,9 +14148,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12128,7 +14158,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12138,7 +14168,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12148,7 +14178,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12158,7 +14188,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12168,7 +14198,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12178,7 +14208,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12188,7 +14218,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12198,7 +14228,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12208,9 +14238,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbTlsPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12218,9 +14248,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbTlsPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12228,9 +14258,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbTlsPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12238,7 +14268,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12248,7 +14278,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12258,7 +14288,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12268,7 +14298,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12278,7 +14308,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12288,7 +14318,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12298,7 +14328,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12308,7 +14338,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12318,9 +14348,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbWormPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12328,9 +14358,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbWormPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12338,9 +14368,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbWormPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12348,7 +14378,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12358,9 +14388,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbAuditFileSystemPolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12368,9 +14408,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12378,9 +14418,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12388,9 +14428,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12398,9 +14438,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbAuditObjectStorePolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12408,7 +14448,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12418,7 +14458,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12428,7 +14468,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -12438,7 +14478,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -12448,9 +14488,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12458,9 +14498,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12468,9 +14508,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "Client", + "wireName": "client", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12478,9 +14518,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "Index", + "wireName": "index", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12488,9 +14528,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "BeforeRuleId", + "wireName": "before_rule_id", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12498,9 +14538,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "BeforeRuleName", + "wireName": "before_rule_name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12508,9 +14548,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNetworkAccessRule", + "parameter": "Versions", + "wireName": "versions", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12518,9 +14558,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyArray", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNfsExportPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12528,7 +14568,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", + "cmdlet": "New-PfbNfsExportRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12538,7 +14578,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", + "cmdlet": "New-PfbNfsExportRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12548,9 +14588,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Anongid", + "wireName": "anongid", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12558,9 +14598,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Anonuid", + "wireName": "anonuid", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12568,9 +14608,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Atime", + "wireName": "atime", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12578,9 +14618,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Client", + "wireName": "client", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12588,9 +14628,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Fileid32bit", + "wireName": "fileid_32bit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12598,9 +14638,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Index", + "wireName": "index", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12608,9 +14648,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Policy", + "wireName": "policy", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12618,9 +14658,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Secure", + "wireName": "secure", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12628,9 +14668,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Security", + "wireName": "security", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12638,9 +14678,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "BeforeRuleId", + "wireName": "before_rule_id", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12648,9 +14688,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "BeforeRuleName", + "wireName": "before_rule_name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12658,9 +14698,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbNfsExportRule", + "parameter": "Versions", + "wireName": "versions", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12668,9 +14708,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12678,9 +14718,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbPolicy", + "parameter": "Rules", + "wireName": "rules", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12688,9 +14728,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbStorageClassTieringPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbPolicyFileSystem", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12698,9 +14738,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbPolicyFileSystem", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12708,9 +14748,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbPolicyFileSystem", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12718,9 +14758,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbPolicyFileSystem", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12728,9 +14768,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12738,9 +14778,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12748,9 +14788,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "LocalFileSystemName", + "wireName": "local_file_system_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12758,9 +14798,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12768,9 +14808,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "LocalFileSystemId", + "wireName": "local_file_system_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12778,9 +14818,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "RemoteName", + "wireName": "remote_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12788,9 +14828,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "parameter": "RemoteId", + "wireName": "remote_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12798,9 +14838,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbTlsPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbQosPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12808,9 +14848,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12818,9 +14858,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12828,9 +14868,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12838,9 +14878,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12848,9 +14888,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "MemberType", + "wireName": "member_types", + "status": "collision", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbS3ExportPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12858,7 +14908,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", + "cmdlet": "New-PfbS3ExportRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12868,7 +14918,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", + "cmdlet": "New-PfbS3ExportRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12878,9 +14928,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12888,29 +14938,29 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", - "status": "no-spec-enum-found", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "Actions", + "wireName": "actions", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "Filter", - "wireName": "filter", - "status": "no-spec-enum-found", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "Effect", + "wireName": "effect", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "Resources", + "wireName": "resources", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12918,7 +14968,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicy", + "cmdlet": "New-PfbSmbClientPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12928,7 +14978,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "cmdlet": "New-PfbSmbClientRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12938,7 +14988,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "cmdlet": "New-PfbSmbClientRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12948,19 +14998,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "Client", + "wireName": "client", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12968,9 +15008,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditObjectStorePolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "Index", + "wireName": "index", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12978,9 +15018,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditObjectStorePolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "BeforeRuleId", + "wireName": "before_rule_id", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12988,9 +15028,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditObjectStorePolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "BeforeRuleName", + "wireName": "before_rule_name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12998,9 +15038,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditObjectStorePolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "Versions", + "wireName": "versions", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13008,9 +15048,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditObjectStorePolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbSmbSharePolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13018,7 +15058,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkAccessRule", + "cmdlet": "New-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13028,7 +15068,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkAccessRule", + "cmdlet": "New-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13038,9 +15078,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNfsExportPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbSmbShareRule", + "parameter": "Principal", + "wireName": "principal", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13048,7 +15088,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNfsExportRule", + "cmdlet": "New-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13058,7 +15098,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNfsExportRule", + "cmdlet": "New-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13068,9 +15108,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbSshCaPolicyAdmin", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13078,9 +15118,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicy", - "parameter": "Rules", - "wireName": "rules", + "cmdlet": "New-PfbSshCaPolicyAdmin", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13088,7 +15128,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13098,7 +15138,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13108,7 +15148,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13118,7 +15158,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13128,7 +15168,27 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13138,7 +15198,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13148,7 +15208,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13158,7 +15218,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13168,7 +15228,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicy", + "cmdlet": "Remove-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13178,7 +15238,17 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicy", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13188,7 +15258,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13198,7 +15268,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13208,7 +15278,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13218,7 +15288,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportPolicy", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13228,7 +15298,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportRule", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13238,7 +15308,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportRule", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13248,7 +15318,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbClientPolicy", + "cmdlet": "Remove-PfbNfsExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13258,9 +15328,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbClientRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Remove-PfbNfsExportPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13268,9 +15338,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbClientRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Remove-PfbNfsExportRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13278,9 +15348,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbSharePolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Remove-PfbNfsExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13288,9 +15358,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbShareRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Remove-PfbNfsExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13298,9 +15368,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbShareRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Remove-PfbPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13308,7 +15378,17 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicy", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13318,7 +15398,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13328,7 +15408,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13338,7 +15418,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13348,7 +15428,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13358,7 +15438,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13368,7 +15448,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13378,7 +15458,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13388,7 +15468,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "cmdlet": "Remove-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13398,7 +15478,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "cmdlet": "Remove-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13408,7 +15488,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13418,7 +15498,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13428,7 +15508,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13438,7 +15518,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13448,7 +15528,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicy", + "cmdlet": "Remove-PfbS3ExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13458,7 +15538,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicy", + "cmdlet": "Remove-PfbS3ExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13468,7 +15548,17 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", + "cmdlet": "Remove-PfbS3ExportRule", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbS3ExportRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13478,7 +15568,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", + "cmdlet": "Remove-PfbS3ExportRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13488,9 +15578,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Remove-PfbSmbClientPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13498,9 +15588,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Remove-PfbSmbClientPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13508,7 +15598,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13518,7 +15608,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13528,7 +15618,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13538,7 +15628,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportPolicy", + "cmdlet": "Remove-PfbSmbSharePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13548,7 +15638,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportPolicy", + "cmdlet": "Remove-PfbSmbSharePolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13558,7 +15648,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13568,7 +15658,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13578,7 +15668,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13588,7 +15678,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicy", + "cmdlet": "Remove-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13598,7 +15688,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicy", + "cmdlet": "Remove-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13608,7 +15698,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13618,7 +15708,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13628,7 +15718,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13638,7 +15728,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13648,7 +15738,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13658,7 +15748,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13668,7 +15758,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13678,7 +15768,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13688,7 +15778,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicy", + "cmdlet": "Remove-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13698,7 +15788,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicy", + "cmdlet": "Remove-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13708,9 +15798,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Remove-PfbTlsPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13718,9 +15808,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Remove-PfbTlsPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13728,9 +15818,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Remove-PfbWormPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13738,9 +15828,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Remove-PfbWormPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13748,7 +15838,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportPolicy", + "cmdlet": "Update-PfbAuditFileSystemPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13758,7 +15848,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportPolicy", + "cmdlet": "Update-PfbAuditFileSystemPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13768,7 +15858,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportRule", + "cmdlet": "Update-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13778,19 +15868,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportRule", - "parameter": "PolicyName", - "wireName": "policy_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Remove-PfbS3ExportRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbAuditObjectStorePolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13798,7 +15878,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientPolicy", + "cmdlet": "Update-PfbNetworkAccessPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13808,7 +15888,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientPolicy", + "cmdlet": "Update-PfbNetworkAccessPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13818,7 +15898,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientRule", + "cmdlet": "Update-PfbNetworkAccessRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13828,9 +15908,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbNfsExportPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13838,9 +15918,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbNfsExportPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13848,7 +15928,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbSharePolicy", + "cmdlet": "Update-PfbNfsExportRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13858,17 +15938,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbSharePolicy", - "parameter": "Id", - "wireName": "ids", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Remove-PfbSmbShareRule", + "cmdlet": "Update-PfbPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13878,9 +15948,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbShareRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13888,9 +15958,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbShareRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbPolicy", + "parameter": "Rules", + "wireName": "rules", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13898,7 +15968,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicy", + "cmdlet": "Update-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13908,7 +15978,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicy", + "cmdlet": "Update-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13918,9 +15988,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyAdmin", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbQosPolicy", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13928,9 +15998,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyAdmin", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbQosPolicy", + "parameter": "Location", + "wireName": "location", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13938,9 +16008,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyAdmin", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbQosPolicy", + "parameter": "MaxTotalBytesPerSec", + "wireName": "max_total_bytes_per_sec", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13948,9 +16018,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyAdmin", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbQosPolicy", + "parameter": "MaxTotalOpsPerSec", + "wireName": "max_total_ops_per_sec", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13958,19 +16028,19 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyArray", - "parameter": "PolicyName", - "wireName": "policy_names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbQosPolicy", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyArray", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbS3ExportPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13978,9 +16048,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyArray", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbS3ExportPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13988,9 +16058,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicyArray", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbS3ExportRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -13998,7 +16068,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbStorageClassTieringPolicy", + "cmdlet": "Update-PfbSmbClientPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14008,7 +16078,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbStorageClassTieringPolicy", + "cmdlet": "Update-PfbSmbClientPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14018,7 +16088,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbTlsPolicy", + "cmdlet": "Update-PfbSmbClientRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14028,9 +16098,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbTlsPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbSmbSharePolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14038,9 +16108,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbWormPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbSmbSharePolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14048,9 +16118,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbWormPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbSmbShareRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14058,7 +16128,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditFileSystemPolicy", + "cmdlet": "Update-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14068,7 +16138,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditFileSystemPolicy", + "cmdlet": "Update-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14078,9 +16148,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditObjectStorePolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbSshCaPolicy", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14088,9 +16158,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditObjectStorePolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbSshCaPolicy", + "parameter": "Location", + "wireName": "location", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14098,19 +16168,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkAccessPolicy", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbSshCaPolicy", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Update-PfbNetworkAccessPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbSshCaPolicy", + "parameter": "SigningAuthority", + "wireName": "signing_authority", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14118,9 +16188,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkAccessRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbSshCaPolicy", + "parameter": "StaticAuthorizedPrincipals", + "wireName": "static_authorized_principals", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14128,7 +16198,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNfsExportPolicy", + "cmdlet": "Update-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14138,7 +16208,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNfsExportPolicy", + "cmdlet": "Update-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14148,9 +16218,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNfsExportRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbStorageClassTieringPolicy", + "parameter": "ArchivalRules", + "wireName": "archival_rules", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14158,9 +16228,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbStorageClassTieringPolicy", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14168,9 +16238,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbStorageClassTieringPolicy", + "parameter": "Location", + "wireName": "location", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14178,9 +16248,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbPolicy", - "parameter": "Rules", - "wireName": "rules", + "cmdlet": "Update-PfbStorageClassTieringPolicy", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbStorageClassTieringPolicy", + "parameter": "RetrievalRules", + "wireName": "retrieval_rules", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14188,7 +16268,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbQosPolicy", + "cmdlet": "Update-PfbTlsPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14198,7 +16278,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbQosPolicy", + "cmdlet": "Update-PfbTlsPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14208,9 +16288,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbS3ExportPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "ApplianceCertificate", + "wireName": "appliance_certificate", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "ClientCertificatesRequired", + "wireName": "client_certificates_required", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14218,9 +16308,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbS3ExportPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "DisabledTlsCiphers", + "wireName": "disabled_tls_ciphers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14228,9 +16318,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbS3ExportRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14238,9 +16328,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbClientPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "EnabledTlsCiphers", + "wireName": "enabled_tls_ciphers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14248,9 +16338,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbClientPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "Location", + "wireName": "location", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14258,9 +16348,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbClientRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "MinTlsVersion", + "wireName": "min_tls_version", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14268,19 +16358,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbSharePolicy", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Update-PfbSmbSharePolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "TrustedClientCertificateAuthority", + "wireName": "trusted_client_certificate_authority", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14288,9 +16378,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbShareRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "VerifyClientCertificateTrust", + "wireName": "verify_client_certificate_trust", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14298,7 +16388,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSshCaPolicy", + "cmdlet": "Update-PfbWormPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14308,7 +16398,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSshCaPolicy", + "cmdlet": "Update-PfbWormPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14318,19 +16408,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbStorageClassTieringPolicy", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbWormPolicy", + "parameter": "DefaultRetention", + "wireName": "default_retention", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Update-PfbStorageClassTieringPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbWormPolicy", + "parameter": "Enabled", + "wireName": "enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14338,9 +16428,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbTlsPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbWormPolicy", + "parameter": "Location", + "wireName": "location", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14348,9 +16438,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbTlsPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbWormPolicy", + "parameter": "MaxRetention", + "wireName": "max_retention", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14359,8 +16449,8 @@ }, { "cmdlet": "Update-PfbWormPolicy", - "parameter": "Name", - "wireName": "names", + "parameter": "MinRetention", + "wireName": "min_retention", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14369,8 +16459,8 @@ }, { "cmdlet": "Update-PfbWormPolicy", - "parameter": "Id", - "wireName": "ids", + "parameter": "Mode", + "wireName": "mode", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14900,7 +16990,7 @@ { "cmdlet": "Update-PfbRealmDefaults", "parameter": "Name", - "wireName": "names", + "wireName": "realm_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14910,7 +17000,17 @@ { "cmdlet": "Update-PfbRealmDefaults", "parameter": "Id", - "wireName": "ids", + "wireName": "realm_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbRealmDefaults", + "parameter": "ObjectStore", + "wireName": "object_store", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -15697,6 +17797,46 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "New-PfbArrayConnection", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbArrayConnection", + "parameter": "Encrypted", + "wireName": "encrypted", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbArrayConnection", + "parameter": "Remote", + "wireName": "remote", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbArrayConnection", + "parameter": "Throttle", + "wireName": "throttle", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "New-PfbFileSystemReplicaLink", "parameter": "LocalFileSystemName", @@ -15759,8 +17899,8 @@ }, { "cmdlet": "New-PfbFileSystemReplicaLinkPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "parameter": "LocalFileSystemName", + "wireName": "local_file_system_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -15777,6 +17917,36 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "New-PfbFileSystemReplicaLinkPolicy", + "parameter": "LocalFileSystemId", + "wireName": "local_file_system_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbFileSystemReplicaLinkPolicy", + "parameter": "RemoteId", + "wireName": "remote_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbFileSystemReplicaLinkPolicy", + "parameter": "RemoteName", + "wireName": "remote_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "New-PfbFleetMember", "parameter": "FleetName", @@ -15789,8 +17959,18 @@ }, { "cmdlet": "New-PfbFleetMember", - "parameter": "MemberName", - "wireName": "member_names", + "parameter": "FleetId", + "wireName": "fleet_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbFleetMember", + "parameter": "Members", + "wireName": "members", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -15987,6 +18167,86 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "ManagementAddress", + "wireName": "management_address", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "ReplicationAddresses", + "wireName": "replication_addresses", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "Encrypted", + "wireName": "encrypted", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "Remote", + "wireName": "remote", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "Throttle", + "wireName": "throttle", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "RemoteId", + "wireName": "remote_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbArrayConnection", + "parameter": "RemoteName", + "wireName": "remote_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbFleet", "parameter": "Name", @@ -16007,6 +18267,16 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbFleet", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Update-PfbTarget", "parameter": "Name", @@ -16027,6 +18297,36 @@ "stableSinceOldestVersion": null, "recommendation": null }, + { + "cmdlet": "Update-PfbTarget", + "parameter": "Address", + "wireName": "address", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbTarget", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbTarget", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, { "cmdlet": "Get-PfbServer", "parameter": "Name", diff --git a/Reports/PfbFieldCmdletMapping.md b/Reports/PfbFieldCmdletMapping.md index 44e7fe3..a820404 100644 --- a/Reports/PfbFieldCmdletMapping.md +++ b/Reports/PfbFieldCmdletMapping.md @@ -7,18 +7,45 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` ## Summary - matched: 1 -- collision: 0 -- not-found-in-resource: 3 -- no-spec-enum-found: 1661 +- collision: 1 +- not-found-in-resource: 29 +- no-spec-enum-found: 1867 | Cmdlet | Parameter | Wire name | Status | Spec values | Recommendation | |---|---|---|---|---|---| +| `Update-PfbManagementAccessPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbOidcIdp` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbOidcIdp` | `-Services` | services | not-found-in-resource | | | +| `Update-PfbSaml2Idp` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbSaml2Idp` | `-Services` | services | not-found-in-resource | | | +| `Update-PfbBucketAuditFilter` | `-Actions` | actions | not-found-in-resource | | | +| `Update-PfbCertificate` | `-State` | state | not-found-in-resource | | | | `Update-PfbDataEvictionPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbLogTargetFileSystem` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbLogTargetObjectStore` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbSnmpManager` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbDns` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbDns` | `-Services` | services | not-found-in-resource | | | +| `Update-PfbNetworkInterface` | `-Services` | services | not-found-in-resource | | | +| `Update-PfbNode` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbNodeGroup` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbObjectStoreRemoteCredential` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbObjectStoreVirtualHost` | `-NewName` | name | not-found-in-resource | | | | `Get-PfbPolicyAllMember` | `-MemberType` | member_types | matched | file-systems, file-system-snapshots, file-system-replica-links, object-store-users | ArgumentCompleter | +| `New-PfbQosPolicyMember` | `-MemberType` | member_types | collision | | | +| `New-PfbS3ExportRule` | `-Actions` | actions | not-found-in-resource | | | +| `New-PfbS3ExportRule` | `-Effect` | effect | not-found-in-resource | | | +| `Update-PfbQosPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbSshCaPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbStorageClassTieringPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbTlsPolicy` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbWormPolicy` | `-DefaultRetention` | default_retention | not-found-in-resource | | | | `Update-PfbPresetWorkload` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbFleet` | `-NewName` | name | not-found-in-resource | | | +| `Update-PfbTarget` | `-NewName` | name | not-found-in-resource | | | | `Update-PfbWorkload` | `-NewName` | name | not-found-in-resource | | | -## Attributes-only parameters (no typed field to attach either mechanism to): 68 +## Attributes-only parameters (no typed field to attach either mechanism to): 65 - `Update-PfbAlert -Flagged` - `Update-PfbAlertWatcher -Enabled` @@ -54,7 +81,6 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` - `New-PfbSnmpManager -Name` - `New-PfbSyslogServer -Name` - `New-PfbDns -Name` -- `New-PfbNetworkInterface -AttachedServers` - `New-PfbNodeGroup -Name` - `New-PfbAuditFileSystemPolicy -Enabled` - `New-PfbAuditObjectStorePolicy -Enabled` @@ -85,9 +111,7 @@ Reporting only -- no `Public/` cmdlet is edited by this script. Every `matched` - `Update-PfbRealm -Destroyed` - `New-PfbFleet -Name` - `New-PfbTarget -Name` -- `New-PfbServer -DnsName` - `New-PfbServer -CreateDirectoryService` -- `Update-PfbServer -DnsName` ## Typed but unresolved wire name (needs manual inspection): 37 diff --git a/Tests/Build-PfbApiDriftReport.Tests.ps1 b/Tests/Build-PfbApiDriftReport.Tests.ps1 index 400e92a..aa72d5e 100644 --- a/Tests/Build-PfbApiDriftReport.Tests.ps1 +++ b/Tests/Build-PfbApiDriftReport.Tests.ps1 @@ -579,28 +579,18 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga # 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' { + # they must NOT be asserted as actionable. Of the remaining 12, issue #31's 56-cmdlet body/ + # query-param pass (PR #66) closed 10 more by adding the corresponding typed parameter -- + # real, intentional fixes, not regressions -- see the consolidated correction test below. + # That leaves exactly 1 confirmed regression against first-sight readOnly semantics: the + # original `foreach` loop with `Should -Contain` threw on the first mismatch and never + # reached the rest, so the other 10 were only uncovered one at a time by re-running against + # the real, regenerated report after fixing whichever one failed first each time. + It 'Task 8 canary: max_role remains an actionable body gap on PATCH /api-clients, since first-sight readOnly semantics would have wrongly suppressed it' { 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" - } + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq 'PATCH /api-clients' } + $gap | Should -Not -BeNullOrEmpty -Because 'PATCH /api-clients must have a parameter-gap row' + (Get-T8GapFieldNames -Gap $gap) | Should -Contain 'max_role' -Because 'PATCH /api-clients|max_role 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' { @@ -613,6 +603,26 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga $gap.readOnlyFields | Should -Not -Contain 'name' } + It 'Task 8 canary correction: 10 (endpoint, field) pairs closed by issue #31''s write-cmdlet body/query-param pass (PR #66) -- no longer actionable body gaps' { + if (-not $t8HasRealArtifacts) { Set-ItResult -Skipped -Because 'real artifacts not present locally'; return } + $closed = @( + @{ Endpoint = 'PATCH /tls-policies'; Field = 'name' } # Update-PfbTlsPolicy -NewName + @{ Endpoint = 'PATCH /storage-class-tiering-policies'; Field = 'name' } # Update-PfbStorageClassTieringPolicy -NewName + @{ Endpoint = 'PATCH /dns'; Field = 'name' } # Update-PfbDns -NewName + @{ Endpoint = 'PATCH /ssh-certificate-authority-policies'; Field = 'name' } # Update-PfbSshCaPolicy -NewName + @{ Endpoint = 'PATCH /ssh-certificate-authority-policies'; Field = 'location' } # Update-PfbSshCaPolicy -Location + @{ Endpoint = 'PATCH /targets'; Field = 'ca_certificate_group' } # Update-PfbTarget -CaCertificateGroup + @{ Endpoint = 'PATCH /array-connections'; Field = 'ca_certificate_group' } # Update-PfbArrayConnection -CaCertificateGroup + @{ Endpoint = 'POST /array-connections'; Field = 'ca_certificate_group' } # New-PfbArrayConnection -CaCertificateGroup + @{ Endpoint = 'PATCH /hardware-connectors'; Field = 'port_speed' } # Update-PfbHardwareConnector -PortSpeed + @{ Endpoint = 'PATCH /network-interfaces/connectors'; Field = 'port_speed' } # Update-PfbNetworkInterfaceConnector -PortSpeed + ) + foreach ($c in $closed) { + $gap = $t8Manifest.parameterGaps | Where-Object { $_.endpoint -eq $c.Endpoint } + if ($gap) { (Get-T8GapFieldNames -Gap $gap) | Should -Not -Contain $c.Field -Because "$($c.Endpoint)|$($c.Field) should now be covered by a typed parameter" } + } + } + 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')) { @@ -623,10 +633,10 @@ Describe 'Build-PfbApiDriftReport (Task 8: regression canaries + spot-checks aga } } - It 'Task 8 spot-check: PATCH /certificates / generate_new_key appears as a query-parameter gap' { + It 'Task 8 spot-check correction: PATCH /certificates / generate_new_key is closed (issue #31 added -GenerateNewKey) -- no longer 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' + if ($gap) { $gap.missingQueryParameters | Should -Not -Contain 'generate_new_key' -Because 'Update-PfbCertificate -GenerateNewKey now covers this field' } } It 'Task 8 spot-check: PATCH /directory-services/roles / management_access_policies is read-only' {