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/Public/Admin/New-PfbApiToken.ps1 b/Public/Admin/New-PfbApiToken.ps1 index 7490a25..da8acdf 100644 --- a/Public/Admin/New-PfbApiToken.ps1 +++ b/Public/Admin/New-PfbApiToken.ps1 @@ -4,15 +4,23 @@ 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). + 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 @@ -20,9 +28,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 +39,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 +56,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/Public/Admin/Update-PfbAdmin.ps1 b/Public/Admin/Update-PfbAdmin.ps1 index 66b5258..db7c2bd 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,46 @@ function Update-PfbAdmin { $queryParams = @{} if ($Name) { $queryParams['names'] = $Name } if ($Id) { $queryParams['ids'] = $Id } + + if ($PSCmdlet.ParameterSetName -like '*Attributes') { + $body = $Attributes + } + else { + # 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. + $body = @{} + 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 ($PSBoundParameters.ContainsKey('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/Public/Admin/Update-PfbApiClient.ps1 b/Public/Admin/Update-PfbApiClient.ps1 index 37428eb..ea7157e 100644 --- a/Public/Admin/Update-PfbApiClient.ps1 +++ b/Public/Admin/Update-PfbApiClient.ps1 @@ -4,38 +4,58 @@ 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. 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 + 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 +66,23 @@ 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 { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + 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/Public/Admin/Update-PfbManagementAccessPolicy.ps1 b/Public/Admin/Update-PfbManagementAccessPolicy.ps1 index cd459e2..33b7d06 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 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 + 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]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [hashtable[]]$Rules, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +103,34 @@ 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 { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + 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 ($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 ($PSBoundParameters.ContainsKey('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/Public/Admin/Update-PfbOidcIdp.ps1 b/Public/Admin/Update-PfbOidcIdp.ps1 index ebebc69..537ffc0 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 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. .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" -NewName "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]$NewName, + + [Parameter(ParameterSetName = 'ByNameIndividual')] + [Parameter(ParameterSetName = 'ByIdIndividual')] + [string[]]$Services, + + [Parameter(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +92,28 @@ 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 { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + 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 ($PSBoundParameters.ContainsKey('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/Public/Admin/Update-PfbSaml2Idp.ps1 b/Public/Admin/Update-PfbSaml2Idp.ps1 index 026933c..d95ec84 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 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. + .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]$NewName, + + [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,32 @@ 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 { + # Every body parameter is guarded by ContainsKey, never by truthiness -- see the + # canonical explanation in Update-PfbAdmin.ps1. + $body = @{} + 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 ($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 } 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/Public/Bucket/Update-PfbBucketAuditFilter.ps1 b/Public/Bucket/Update-PfbBucketAuditFilter.ps1 index a8bab2d..1d742b1 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,39 @@ 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 + } + 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 + } + 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/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 b/Public/Certificate/New-PfbCertificateCertificateGroup.ps1 index 7480bb3..09d6cc9 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 @@ -28,6 +32,8 @@ function New-PfbCertificateCertificateGroup { param( [Parameter()] [string]$CertificateName, [Parameter()] [string]$CertificateGroupName, + [Parameter()] [string]$CertificateId, + [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/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/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/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 index 805ac2d..5291177 100644 --- a/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 +++ b/Public/DirectoryService/Update-PfbDirectoryServiceRole.ps1 @@ -4,20 +4,31 @@ 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 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 +38,29 @@ 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(ParameterSetName = 'ByNameAttributes', Mandatory)] + [Parameter(ParameterSetName = 'ByIdAttributes', Mandatory)] + [hashtable]$Attributes, + [Parameter()] [PSCustomObject]$Array ) @@ -44,10 +72,20 @@ function Update-PfbDirectoryServiceRole { $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 ($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/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/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/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/Public/Misc/New-PfbLegalHoldEntity.ps1 b/Public/Misc/New-PfbLegalHoldEntity.ps1 index 56aec9d..2fd5ab9 100644 --- a/Public/Misc/New-PfbLegalHoldEntity.ps1 +++ b/Public/Misc/New-PfbLegalHoldEntity.ps1 @@ -4,36 +4,65 @@ 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 + 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 - 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" -MemberName "fs1" -Attributes @{ type = 'file-system' } + New-PfbLegalHoldEntity -Names "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 + 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, + [string[]]$FileSystemIds, + + [Parameter()] + [string[]]$FileSystemNames, + + [Parameter()] + [string[]]$Ids, [Parameter()] - [string]$MemberName, + [string[]]$Names, + + [Parameter()] + [string[]]$Paths, + + [Parameter()] + [Nullable[bool]]$Recursive, [Parameter()] [hashtable]$Attributes, @@ -43,13 +72,25 @@ 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 } - $target = "${HoldName}:${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 = 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/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/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/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/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/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/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/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/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/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/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/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 b/Public/Network/New-PfbNetworkInterfaceTlsPolicy.ps1 index 82b75d8..17cc947 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]$PolicyName, + [Parameter()] [string]$MemberId, + [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/Public/Network/Update-PfbDns.ps1 b/Public/Network/Update-PfbDns.ps1 index 50f01bd..ea00318 100644 --- a/Public/Network/Update-PfbDns.ps1 +++ b/Public/Network/Update-PfbDns.ps1 @@ -2,35 +2,119 @@ 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, + # 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, + + [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, Position = 0)] [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/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/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/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/Public/Node/New-PfbNodeGroupNode.ps1 b/Public/Node/New-PfbNodeGroupNode.ps1 index d2689f7..8f49ca2 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]$MemberName, + [Parameter()] [string]$GroupId, + [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/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/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/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/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/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/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/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/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/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 index 43a5cdc..6e6b4f2 100644 --- a/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 +++ b/Public/Policy/New-PfbPolicyFileSystemReplicaLink.ps1 @@ -5,35 +5,60 @@ 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, 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. -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 MemberName - The file system replica link name. + .PARAMETER LocalFileSystemName + 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 - The file system replica link ID. + 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 + 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()] [Alias('MemberName')] [string]$LocalFileSystemName, [Parameter()] [string]$MemberId, + [Parameter()] [string]$LocalFileSystemId, + [Parameter()] [string]$RemoteName, + [Parameter()] [string]$RemoteId, [Parameter()] [PSCustomObject]$Array ) @@ -42,10 +67,13 @@ 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('MemberId')) { $queryParams['member_ids'] = $MemberId } + 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/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/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/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/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/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/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/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/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/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/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/Public/Replication/New-PfbArrayConnection.ps1 b/Public/Replication/New-PfbArrayConnection.ps1 index 5daacfe..0242694 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,59 @@ 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, + # 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, Position = 0)] + [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/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 b/Public/Replication/New-PfbFileSystemReplicaLinkPolicy.ps1 index bd6e92d..86a06ca 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]$MemberId, + [Parameter()] [string]$LocalFileSystemId, + [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/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/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/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/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/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 0612d3f..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,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8763,9 +9533,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "StartTime", + "wireName": "start_time", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8773,9 +9543,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "EndTime", + "wireName": "end_time", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8783,9 +9553,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Prefix", - "wireName": "prefix", + "cmdlet": "Get-PfbNetworkInterfaceConnectorPerformance", + "parameter": "Resolution", + "wireName": "resolution", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8793,9 +9563,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Gateway", - "wireName": "gateway", + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8803,9 +9573,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Mtu", - "wireName": "mtu", + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8813,9 +9583,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "Vlan", - "wireName": "vlan", + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8823,9 +9593,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbSubnet", - "parameter": "LinkAggregationGroupName", - "wireName": "link_aggregation_group", + "cmdlet": "Get-PfbNetworkInterfaceConnectorSettings", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8833,7 +9603,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbDns", + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8843,9 +9613,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbDns", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8853,9 +9623,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterface", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8863,9 +9633,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterface", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkInterfaceNeighbor", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8873,7 +9643,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -8883,7 +9653,17 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "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", @@ -8893,9 +9673,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSubnet", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8903,9 +9683,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSubnet", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8913,9 +9693,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbDns", - "parameter": "Domain", - "wireName": "domain", + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8923,9 +9703,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbDns", - "parameter": "Nameservers", - "wireName": "nameservers", + "cmdlet": "Get-PfbNetworkInterfaceTlsPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8933,7 +9713,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", + "cmdlet": "Get-PfbSubnet", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -8943,7 +9723,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", + "cmdlet": "Get-PfbSubnet", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -8953,9 +9733,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterface", - "parameter": "Address", - "wireName": "address", + "cmdlet": "Get-PfbSubnet", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8963,9 +9743,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterfaceConnector", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbSubnet", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8973,9 +9753,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNetworkInterfaceConnector", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbSubnet", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8983,9 +9763,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "Destination", + "wireName": "destination", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -8993,9 +9773,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "SourceName", + "wireName": "source.name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9003,9 +9783,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Prefix", - "wireName": "prefix", + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "Count", + "wireName": "count", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9013,9 +9793,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Gateway", - "wireName": "gateway", + "cmdlet": "Invoke-PfbNetworkPing", + "parameter": "PacketSize", + "wireName": "packet_size", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9023,9 +9803,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSubnet", - "parameter": "Mtu", - "wireName": "mtu", + "cmdlet": "Invoke-PfbNetworkTrace", + "parameter": "Destination", + "wireName": "destination", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9033,9 +9813,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Invoke-PfbNetworkTrace", + "parameter": "SourceName", + "wireName": "source.name", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9043,9 +9823,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbNetworkInterface", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9053,9 +9833,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNetworkInterface", + "parameter": "Address", + "wireName": "address", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9063,9 +9843,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbNetworkInterface", + "parameter": "AttachedServers", + "wireName": "attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9073,9 +9853,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNode", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9083,9 +9863,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9093,9 +9873,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9103,9 +9883,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "New-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9113,9 +9893,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbSubnet", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9123,9 +9903,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroup", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbSubnet", + "parameter": "Prefix", + "wireName": "prefix", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9133,9 +9913,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", + "cmdlet": "New-PfbSubnet", + "parameter": "Gateway", + "wireName": "gateway", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9143,9 +9923,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "GroupId", - "wireName": "group_ids", + "cmdlet": "New-PfbSubnet", + "parameter": "Mtu", + "wireName": "mtu", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9153,9 +9933,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbSubnet", + "parameter": "Vlan", + "wireName": "vlan", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9163,9 +9943,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "New-PfbSubnet", + "parameter": "LinkAggregationGroupName", + "wireName": "link_aggregation_group", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9173,9 +9953,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbDns", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9183,9 +9963,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbDns", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9193,9 +9973,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupNode", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbNetworkInterface", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9203,9 +9983,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Remove-PfbNetworkInterface", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9213,9 +9993,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9223,9 +10003,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbNetworkInterfaceTlsPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9233,9 +10013,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNodeGroupUse", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Remove-PfbSubnet", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9243,9 +10023,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", + "cmdlet": "Remove-PfbSubnet", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9253,9 +10033,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbDns", + "parameter": "Domain", + "wireName": "domain", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9263,9 +10043,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroup", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbDns", + "parameter": "Nameservers", + "wireName": "nameservers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9273,9 +10053,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroup", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbDns", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9283,9 +10063,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroupNode", - "parameter": "GroupName", - "wireName": "group_names", + "cmdlet": "Update-PfbDns", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9293,9 +10073,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNodeGroupNode", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbDns", + "parameter": "CaCertificate", + "wireName": "ca_certificate", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9303,9 +10083,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNode", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbDns", + "parameter": "CaCertificateGroup", + "wireName": "ca_certificate_group", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9313,29 +10093,29 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNode", - "parameter": "Id", - "wireName": "ids", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbDns", + "parameter": "NewName", + "wireName": "name", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Update-PfbNodeGroup", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbDns", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Update-PfbNodeGroup", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbDns", + "parameter": "Sources", + "wireName": "sources", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9343,7 +10123,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", + "cmdlet": "Update-PfbNetworkInterface", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -9353,7 +10133,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", + "cmdlet": "Update-PfbNetworkInterface", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9363,9 +10143,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Address", + "wireName": "address", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9373,9 +10153,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "AttachedServers", + "wireName": "attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9383,9 +10163,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessKey", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "RdmaEnabled", + "wireName": "rdma_enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9393,19 +10173,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", + "cmdlet": "Update-PfbNetworkInterface", + "parameter": "Services", + "wireName": "services", + "status": "not-found-in-resource", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9413,9 +10193,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9423,9 +10203,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "LaneSpeed", + "wireName": "lane_speed", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9433,9 +10213,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "LanesPerPort", + "wireName": "lanes_per_port", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9443,9 +10223,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "PortCount", + "wireName": "port_count", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9453,9 +10233,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbNetworkInterfaceConnector", + "parameter": "PortSpeed", + "wireName": "port_speed", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9463,9 +10243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbSubnet", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9473,9 +10253,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbSubnet", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9483,9 +10263,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbSubnet", + "parameter": "Prefix", + "wireName": "prefix", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9493,9 +10273,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbSubnet", + "parameter": "Gateway", + "wireName": "gateway", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9503,9 +10283,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbSubnet", + "parameter": "Mtu", + "wireName": "mtu", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9513,9 +10293,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Update-PfbSubnet", + "parameter": "LinkAggregationGroup", + "wireName": "link_aggregation_group", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9523,9 +10303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbSubnet", + "parameter": "Vlan", + "wireName": "vlan", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9533,9 +10313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbNode", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9543,9 +10323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbNode", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9553,9 +10333,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbNode", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9563,9 +10343,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Get-PfbNode", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9573,9 +10353,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNode", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9583,9 +10363,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9593,9 +10373,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNodeGroup", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9603,7 +10383,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "cmdlet": "Get-PfbNodeGroup", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9613,7 +10393,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "cmdlet": "Get-PfbNodeGroup", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9623,7 +10403,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "cmdlet": "Get-PfbNodeGroup", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9633,19 +10413,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", - "parameter": "TotalOnly", - "wireName": "total_only", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "group_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9653,9 +10423,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbNodeGroupNode", + "parameter": "GroupId", + "wireName": "group_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9663,7 +10433,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNodeGroupNode", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -9673,7 +10443,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNodeGroupNode", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -9683,7 +10453,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNodeGroupNode", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9693,7 +10463,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNodeGroupNode", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9703,7 +10473,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "cmdlet": "Get-PfbNodeGroupNode", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9713,19 +10483,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", - "parameter": "TotalOnly", - "wireName": "total_only", - "status": "no-spec-enum-found", + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9733,9 +10503,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9743,9 +10513,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbNodeGroupUse", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9753,9 +10523,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "node_group_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9763,9 +10533,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "MemberName", + "wireName": "node_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9773,9 +10543,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccount", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "New-PfbNodeGroupNode", + "parameter": "GroupId", + "wireName": "node_group_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9783,7 +10553,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", + "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", @@ -9793,7 +10573,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", + "cmdlet": "Remove-PfbNodeGroup", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9803,9 +10583,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbNodeGroupNode", + "parameter": "GroupName", + "wireName": "group_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9813,9 +10593,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Remove-PfbNodeGroupNode", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9823,9 +10603,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbNode", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9833,9 +10613,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreAccountExport", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbNode", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9843,7 +10623,47 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "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", @@ -9853,7 +10673,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "cmdlet": "Update-PfbNodeGroup", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -9863,7 +10683,37 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "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", @@ -9873,7 +10723,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbObjectStoreAccessKey", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9883,7 +10733,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "cmdlet": "Get-PfbObjectStoreAccessKey", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9893,9 +10743,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRemoteCredential", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9903,9 +10753,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9913,9 +10763,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9923,7 +10773,37 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -9933,7 +10813,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -9943,7 +10823,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -9953,7 +10833,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRole", + "cmdlet": "Get-PfbObjectStoreAccessPolicyAction", "parameter": "TotalOnly", "wireName": "total_only", "status": "no-spec-enum-found", @@ -9963,9 +10843,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9973,9 +10853,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleId", - "wireName": "role_ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -9983,7 +10863,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -9993,7 +10873,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -10003,7 +10883,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -10013,7 +10893,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -10023,7 +10903,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -10033,7 +10913,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRole", "parameter": "TotalOnly", "wireName": "total_only", "status": "no-spec-enum-found", @@ -10043,9 +10923,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10053,9 +10933,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", - "parameter": "RoleId", - "wireName": "role_ids", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10063,7 +10943,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -10073,7 +10963,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -10083,7 +10973,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -10093,7 +10983,207 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "cmdlet": "Get-PfbObjectStoreAccessPolicyRule", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "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", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccount", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "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", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreAccountExport", "parameter": "TotalOnly", "wireName": "total_only", "status": "no-spec-enum-found", @@ -10103,9 +11193,949 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRemoteCredential", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRole", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleName", + "wireName": "role_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "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", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreRoleAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "RoleName", + "wireName": "role_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "RoleId", + "wireName": "role_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUser", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberId", + "wireName": "member_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", + "parameter": "TotalOnly", + "wireName": "total_only", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "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, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Sort", + "wireName": "sort", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbObjectStoreVirtualHost", + "parameter": "Limit", + "wireName": "limit", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessKey", + "parameter": "UserName", + "wireName": "user", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicyRole", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicyRole", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccount", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreAccountExport", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleName", + "wireName": "role_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreVirtualHost", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbObjectStoreVirtualHost", + "parameter": "Hostname", + "wireName": "hostname", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessKey", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessKey", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicy", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "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", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccount", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccount", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccountExport", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreAccountExport", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreRemoteCredential", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "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", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", + "parameter": "RoleName", + "wireName": "role_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreUser", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreUser", + "parameter": "Id", + "wireName": "ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10113,9 +12143,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10123,7 +12153,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", + "cmdlet": "Remove-PfbObjectStoreVirtualHost", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10133,9 +12163,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Remove-PfbObjectStoreVirtualHost", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10143,9 +12173,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreAccessPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10153,9 +12183,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10163,9 +12193,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreTrustPolicyRule", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10173,9 +12203,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "ExportEnabled", + "wireName": "export_enabled", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10183,9 +12213,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbObjectStoreAccountExport", + "parameter": "Policy", + "wireName": "policy", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10193,9 +12223,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10203,9 +12233,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10213,9 +12243,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUser", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "AccessKeyId", + "wireName": "access_key_id", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10223,19 +12253,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", - "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-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "Remote", + "wireName": "remote", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10243,9 +12273,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Update-PfbObjectStoreRemoteCredential", + "parameter": "SecretAccessKey", + "wireName": "secret_access_key", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10253,9 +12283,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10263,9 +12293,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10273,9 +12303,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "Account", + "wireName": "account", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10283,9 +12313,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreRole", + "parameter": "MaxSessionDuration", + "wireName": "max_session_duration", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10293,9 +12323,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreUserAccessPolicy", - "parameter": "TotalOnly", - "wireName": "total_only", + "cmdlet": "Update-PfbObjectStoreTrustPolicyRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10303,7 +12333,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Update-PfbObjectStoreVirtualHost", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10313,7 +12343,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", + "cmdlet": "Update-PfbObjectStoreVirtualHost", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10323,9 +12353,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "AddAttachedServers", + "wireName": "add_attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10333,9 +12363,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "AttachedServers", + "wireName": "attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10343,9 +12373,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbObjectStoreVirtualHost", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "Hostname", + "wireName": "hostname", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10353,19 +12383,19 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessKey", - "parameter": "UserName", - "wireName": "user", - "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": "New-PfbObjectStoreAccessPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbObjectStoreVirtualHost", + "parameter": "RemoveAttachedServers", + "wireName": "remove_attached_servers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10373,9 +12403,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10383,9 +12413,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRole", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10393,9 +12423,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10403,9 +12433,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10413,9 +12443,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10423,9 +12453,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccount", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10433,9 +12463,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreAccountExport", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10443,9 +12473,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRemoteCredential", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10453,9 +12483,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRole", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10463,9 +12493,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10473,9 +12503,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreRoleAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10483,9 +12513,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10493,9 +12523,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUser", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10503,9 +12533,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10513,9 +12543,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10523,7 +12553,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreVirtualHost", + "cmdlet": "Get-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10533,9 +12563,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbObjectStoreVirtualHost", - "parameter": "Hostname", - "wireName": "hostname", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10543,9 +12573,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessKey", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10553,9 +12583,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessKey", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10563,9 +12593,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10573,9 +12603,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10583,9 +12613,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10593,7 +12623,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRole", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -10603,9 +12633,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10613,9 +12643,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10623,9 +12653,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10633,9 +12663,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccessPolicyUser", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10643,7 +12673,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccount", + "cmdlet": "Get-PfbNetworkAccessPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10653,7 +12683,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccount", + "cmdlet": "Get-PfbNetworkAccessPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10663,19 +12693,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreAccountExport", - "parameter": "Name", - "wireName": "names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "recommendation": null - }, - { - "cmdlet": "Remove-PfbObjectStoreAccountExport", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10683,9 +12703,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRemoteCredential", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10693,9 +12713,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRemoteCredential", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkAccessPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10703,9 +12723,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRole", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10713,9 +12733,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRole", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10723,9 +12743,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", - "parameter": "RoleName", - "wireName": "role_names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10733,9 +12753,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreRoleAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10743,9 +12763,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10753,9 +12773,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreTrustPolicyRule", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNetworkAccessRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10763,7 +12783,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUser", + "cmdlet": "Get-PfbNfsExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10773,7 +12793,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUser", + "cmdlet": "Get-PfbNfsExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10783,9 +12803,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10793,9 +12813,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreUserAccessPolicy", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10803,9 +12823,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreVirtualHost", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNfsExportPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10813,9 +12833,9 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbObjectStoreVirtualHost", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10823,9 +12843,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccessPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10833,7 +12853,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccountExport", + "cmdlet": "Get-PfbNfsExportRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10843,9 +12863,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreAccountExport", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10853,9 +12873,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRemoteCredential", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10863,9 +12883,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRemoteCredential", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbNfsExportRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10873,7 +12893,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRole", + "cmdlet": "Get-PfbPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10883,7 +12903,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreRole", + "cmdlet": "Get-PfbPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10893,9 +12913,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreTrustPolicyRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10903,9 +12923,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreVirtualHost", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10913,9 +12933,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbObjectStoreVirtualHost", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicy", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -10923,7 +12943,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -10933,7 +12953,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -10943,7 +12963,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -10953,7 +12973,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -10963,7 +12983,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicy", + "cmdlet": "Get-PfbPolicyAll", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -10973,7 +12993,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyAllMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -10983,7 +13003,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyAllMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -10993,7 +13013,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyAllMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11003,7 +13023,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "cmdlet": "Get-PfbPolicyAllMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11013,7 +13033,22 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", + "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", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11023,9 +13058,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbPolicyAllMember", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11033,9 +13068,39 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyMember", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbPolicyFileSystem", + "parameter": "PolicyName", + "wireName": "policy_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbPolicyFileSystem", + "parameter": "PolicyId", + "wireName": "policy_ids", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbPolicyFileSystem", + "parameter": "MemberName", + "wireName": "member_names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbPolicyFileSystem", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11043,7 +13108,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11053,7 +13118,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11063,7 +13128,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditFileSystemPolicyOperation", + "cmdlet": "Get-PfbPolicyFileSystem", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11073,9 +13138,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11083,9 +13148,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11093,9 +13158,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "MemberName", + "wireName": "member_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11103,9 +13168,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11113,7 +13178,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicy", + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "parameter": "Filter", + "wireName": "filter", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11123,7 +13198,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11133,7 +13208,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11143,7 +13218,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11153,7 +13228,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11163,7 +13238,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11173,7 +13248,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11183,7 +13258,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbAuditObjectStorePolicyMember", + "cmdlet": "Get-PfbPolicyFileSystemSnapshot", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11193,7 +13268,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11203,7 +13278,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11213,7 +13288,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11223,7 +13298,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11233,7 +13308,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessPolicy", + "cmdlet": "Get-PfbQosPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11243,7 +13318,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11253,7 +13328,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11263,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, @@ -11273,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, @@ -11283,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, @@ -11293,7 +13368,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNetworkAccessRule", + "cmdlet": "Get-PfbQosPolicyBucket", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11303,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, @@ -11313,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, @@ -11323,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, @@ -11333,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, @@ -11343,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", @@ -11353,7 +13438,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11363,7 +13448,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11373,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, @@ -11383,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, @@ -11393,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, @@ -11403,7 +13488,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbNfsExportRule", + "cmdlet": "Get-PfbQosPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11413,7 +13498,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11423,7 +13508,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11433,7 +13518,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11443,7 +13528,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11453,7 +13538,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicy", + "cmdlet": "Get-PfbS3ExportPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11463,9 +13548,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11473,9 +13558,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Id", - "wireName": "ids", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11483,9 +13568,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11493,9 +13578,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Sort", - "wireName": "sort", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11503,9 +13588,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAll", - "parameter": "Limit", - "wireName": "limit", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11513,9 +13598,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "Get-PfbS3ExportRule", + "parameter": "Limit", + "wireName": "limit", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11523,9 +13608,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11533,9 +13618,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Id", + "wireName": "ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11543,9 +13628,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", - "parameter": "MemberId", - "wireName": "member_ids", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Filter", + "wireName": "filter", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11553,24 +13638,9 @@ "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", - "parameter": "Filter", - "wireName": "filter", + "cmdlet": "Get-PfbSmbClientPolicy", + "parameter": "Sort", + "wireName": "sort", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -11578,7 +13648,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyAllMember", + "cmdlet": "Get-PfbSmbClientPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11588,7 +13658,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11598,7 +13668,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11608,19 +13678,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", - "parameter": "MemberName", - "wireName": "member_names", - "status": "no-spec-enum-found", - "matchedKey": null, - "specValues": null, - "stableSinceOldestVersion": null, - "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, @@ -11628,7 +13688,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11638,7 +13698,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11648,7 +13708,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystem", + "cmdlet": "Get-PfbSmbClientRule", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11658,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, @@ -11678,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, @@ -11688,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, @@ -11698,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, @@ -11708,7 +13758,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Get-PfbSmbSharePolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11718,7 +13768,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11728,7 +13778,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11738,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, @@ -11758,7 +13798,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11768,7 +13808,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11778,7 +13818,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbPolicyFileSystemSnapshot", + "cmdlet": "Get-PfbSmbShareRule", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11788,7 +13828,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -11798,7 +13838,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -11808,7 +13848,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11818,7 +13858,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -11828,7 +13868,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicy", + "cmdlet": "Get-PfbSshCaPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11838,7 +13878,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11848,7 +13888,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11858,7 +13898,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11868,7 +13908,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11878,7 +13918,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11888,7 +13928,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyBucket", + "cmdlet": "Get-PfbSshCaPolicyAdmin", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11898,7 +13938,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11908,7 +13948,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11918,7 +13958,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11928,7 +13968,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11938,7 +13978,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -11948,7 +13988,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyFileSystem", + "cmdlet": "Get-PfbSshCaPolicyArray", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -11958,7 +13998,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -11968,7 +14008,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -11978,7 +14018,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -11988,7 +14028,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -11998,7 +14038,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12008,7 +14048,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbQosPolicyMember", + "cmdlet": "Get-PfbSshCaPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12018,7 +14058,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12028,7 +14068,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12038,7 +14078,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12048,7 +14088,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12058,7 +14098,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportPolicy", + "cmdlet": "Get-PfbStorageClassTieringPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12068,7 +14108,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12078,7 +14118,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12088,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, @@ -12098,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, @@ -12108,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, @@ -12118,7 +14158,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbS3ExportRule", + "cmdlet": "Get-PfbStorageClassTieringPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12128,7 +14168,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12138,7 +14178,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12148,7 +14188,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12158,7 +14198,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12168,7 +14208,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientPolicy", + "cmdlet": "Get-PfbTlsPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12178,7 +14218,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12188,7 +14228,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12198,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, @@ -12208,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, @@ -12218,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, @@ -12228,7 +14268,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbClientRule", + "cmdlet": "Get-PfbTlsPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12238,7 +14278,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12248,7 +14288,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -12258,7 +14298,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Filter", "wireName": "filter", "status": "no-spec-enum-found", @@ -12268,7 +14308,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Sort", "wireName": "sort", "status": "no-spec-enum-found", @@ -12278,7 +14318,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbSharePolicy", + "cmdlet": "Get-PfbWormPolicy", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12288,7 +14328,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12298,7 +14338,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12308,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, @@ -12318,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, @@ -12328,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, @@ -12338,7 +14378,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSmbShareRule", + "cmdlet": "Get-PfbWormPolicyMember", "parameter": "Limit", "wireName": "limit", "status": "no-spec-enum-found", @@ -12348,7 +14388,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", + "cmdlet": "New-PfbAuditFileSystemPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -12358,9 +14398,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicy", - "parameter": "Id", - "wireName": "ids", + "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": "Filter", - "wireName": "filter", + "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": "Sort", - "wireName": "sort", + "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": "Limit", - "wireName": "limit", + "cmdlet": "New-PfbAuditFileSystemPolicyMember", + "parameter": "MemberId", + "wireName": "member_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12398,7 +14438,17 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicy", + "parameter": "Name", + "wireName": "names", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12408,7 +14458,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12418,7 +14468,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -12428,7 +14478,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyAdmin", + "cmdlet": "New-PfbAuditObjectStorePolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -12438,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, @@ -12448,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, @@ -12458,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, @@ -12468,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, @@ -12478,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, @@ -12488,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, @@ -12498,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, @@ -12508,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, @@ -12518,7 +14568,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", + "cmdlet": "New-PfbNfsExportRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -12528,7 +14578,7 @@ "recommendation": null }, { - "cmdlet": "Get-PfbSshCaPolicyMember", + "cmdlet": "New-PfbNfsExportRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -12538,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, @@ -12548,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, @@ -12558,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, @@ -12568,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, @@ -12578,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, @@ -12588,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, @@ -12598,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, @@ -12608,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, @@ -12618,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, @@ -12628,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, @@ -12638,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, @@ -12648,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, @@ -12658,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, @@ -12668,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, @@ -12678,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, @@ -12688,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, @@ -12698,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, @@ -12708,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, @@ -12718,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, @@ -12728,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, @@ -12738,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, @@ -12748,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, @@ -12758,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, @@ -12768,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, @@ -12778,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, @@ -12788,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, @@ -12798,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, @@ -12808,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, @@ -12818,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, @@ -12828,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, @@ -12838,19 +14888,19 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicy", - "parameter": "Limit", - "wireName": "limit", - "status": "no-spec-enum-found", + "cmdlet": "New-PfbQosPolicyMember", + "parameter": "MemberType", + "wireName": "member_types", + "status": "collision", "matchedKey": null, "specValues": null, "stableSinceOldestVersion": null, "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbS3ExportPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12858,9 +14908,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12868,9 +14918,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12878,9 +14928,9 @@ "recommendation": null }, { - "cmdlet": "Get-PfbWormPolicyMember", - "parameter": "MemberId", - "wireName": "member_ids", + "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": "Filter", - "wireName": "filter", - "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": "Limit", - "wireName": "limit", - "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": "New-PfbAuditFileSystemPolicy", - "parameter": "Name", - "wireName": "names", + "cmdlet": "New-PfbS3ExportRule", + "parameter": "Resources", + "wireName": "resources", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12918,9 +14968,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", - "parameter": "PolicyName", - "wireName": "policy_names", + "cmdlet": "New-PfbSmbClientPolicy", + "parameter": "Name", + "wireName": "names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12928,9 +14978,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", - "parameter": "PolicyId", - "wireName": "policy_ids", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "PolicyName", + "wireName": "policy_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12938,9 +14988,9 @@ "recommendation": null }, { - "cmdlet": "New-PfbAuditFileSystemPolicyMember", - "parameter": "MemberName", - "wireName": "member_names", + "cmdlet": "New-PfbSmbClientRule", + "parameter": "PolicyId", + "wireName": "policy_ids", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -12948,9 +14998,9 @@ "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, @@ -12958,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, @@ -12968,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, @@ -12978,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, @@ -12988,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, @@ -12998,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, @@ -13008,7 +15058,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkAccessRule", + "cmdlet": "New-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13018,7 +15068,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNetworkAccessRule", + "cmdlet": "New-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13028,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, @@ -13038,7 +15088,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNfsExportRule", + "cmdlet": "New-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13048,7 +15098,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbNfsExportRule", + "cmdlet": "New-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13058,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, @@ -13068,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, @@ -13078,7 +15128,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13088,7 +15138,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13098,7 +15148,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13108,7 +15158,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystem", + "cmdlet": "New-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13118,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", @@ -13128,7 +15198,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13138,7 +15208,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13148,7 +15218,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13158,7 +15228,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicy", + "cmdlet": "Remove-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13168,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", @@ -13178,7 +15258,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13188,7 +15268,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13198,7 +15278,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbQosPolicyMember", + "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13208,7 +15288,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportPolicy", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13218,7 +15298,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportRule", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13228,7 +15308,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbS3ExportRule", + "cmdlet": "Remove-PfbNetworkAccessRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13238,7 +15318,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSmbClientPolicy", + "cmdlet": "Remove-PfbNfsExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13248,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, @@ -13258,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, @@ -13268,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, @@ -13278,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, @@ -13288,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, @@ -13298,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", @@ -13308,7 +15398,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13318,7 +15408,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13328,7 +15418,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyAdmin", + "cmdlet": "Remove-PfbPolicyFileSystem", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13338,7 +15428,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13348,7 +15438,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13358,7 +15448,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13368,7 +15458,7 @@ "recommendation": null }, { - "cmdlet": "New-PfbSshCaPolicyArray", + "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13378,7 +15468,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "cmdlet": "Remove-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13388,7 +15478,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicy", + "cmdlet": "Remove-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13398,7 +15488,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13408,7 +15498,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13418,7 +15508,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13428,7 +15518,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditFileSystemPolicyMember", + "cmdlet": "Remove-PfbQosPolicyMember", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13438,7 +15528,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicy", + "cmdlet": "Remove-PfbS3ExportPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13448,7 +15538,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicy", + "cmdlet": "Remove-PfbS3ExportPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13458,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", @@ -13468,7 +15568,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbAuditObjectStorePolicyMember", + "cmdlet": "Remove-PfbS3ExportRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13478,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, @@ -13488,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, @@ -13498,7 +15598,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13508,7 +15608,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13518,7 +15618,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNetworkAccessRule", + "cmdlet": "Remove-PfbSmbClientRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13528,7 +15628,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportPolicy", + "cmdlet": "Remove-PfbSmbSharePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13538,7 +15638,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportPolicy", + "cmdlet": "Remove-PfbSmbSharePolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13548,7 +15648,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13558,7 +15658,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13568,7 +15668,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbNfsExportRule", + "cmdlet": "Remove-PfbSmbShareRule", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13578,7 +15678,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicy", + "cmdlet": "Remove-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13588,7 +15688,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicy", + "cmdlet": "Remove-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13598,7 +15698,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13608,7 +15708,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13618,7 +15718,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13628,7 +15728,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystem", + "cmdlet": "Remove-PfbSshCaPolicyAdmin", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13638,7 +15738,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "PolicyName", "wireName": "policy_names", "status": "no-spec-enum-found", @@ -13648,7 +15748,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "PolicyId", "wireName": "policy_ids", "status": "no-spec-enum-found", @@ -13658,7 +15758,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "MemberName", "wireName": "member_names", "status": "no-spec-enum-found", @@ -13668,7 +15768,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbPolicyFileSystemReplicaLink", + "cmdlet": "Remove-PfbSshCaPolicyArray", "parameter": "MemberId", "wireName": "member_ids", "status": "no-spec-enum-found", @@ -13678,7 +15778,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicy", + "cmdlet": "Remove-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13688,7 +15788,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbQosPolicy", + "cmdlet": "Remove-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13698,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, @@ -13708,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, @@ -13718,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, @@ -13728,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, @@ -13738,7 +15838,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportPolicy", + "cmdlet": "Update-PfbAuditFileSystemPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13748,7 +15848,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportPolicy", + "cmdlet": "Update-PfbAuditFileSystemPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13758,7 +15858,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbS3ExportRule", + "cmdlet": "Update-PfbAuditObjectStorePolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13768,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, @@ -13788,7 +15878,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientPolicy", + "cmdlet": "Update-PfbNetworkAccessPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13798,7 +15888,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientPolicy", + "cmdlet": "Update-PfbNetworkAccessPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13808,7 +15898,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbClientRule", + "cmdlet": "Update-PfbNetworkAccessRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13818,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, @@ -13828,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, @@ -13838,7 +15928,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSmbSharePolicy", + "cmdlet": "Update-PfbNfsExportRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13848,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", @@ -13868,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, @@ -13878,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, @@ -13888,7 +15968,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicy", + "cmdlet": "Update-PfbQosPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13898,7 +15978,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbSshCaPolicy", + "cmdlet": "Update-PfbQosPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -13908,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, @@ -13918,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, @@ -13928,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, @@ -13938,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, @@ -13948,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, @@ -13968,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, @@ -13978,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, @@ -13988,7 +16068,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbStorageClassTieringPolicy", + "cmdlet": "Update-PfbSmbClientPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -13998,7 +16078,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbStorageClassTieringPolicy", + "cmdlet": "Update-PfbSmbClientPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14008,7 +16088,7 @@ "recommendation": null }, { - "cmdlet": "Remove-PfbTlsPolicy", + "cmdlet": "Update-PfbSmbClientRule", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14018,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, @@ -14028,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, @@ -14038,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, @@ -14048,7 +16128,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditFileSystemPolicy", + "cmdlet": "Update-PfbSshCaPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14058,7 +16138,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbAuditFileSystemPolicy", + "cmdlet": "Update-PfbSshCaPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14068,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, @@ -14078,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, @@ -14088,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, @@ -14108,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, @@ -14118,7 +16198,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNfsExportPolicy", + "cmdlet": "Update-PfbStorageClassTieringPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14128,7 +16208,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbNfsExportPolicy", + "cmdlet": "Update-PfbStorageClassTieringPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14138,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, @@ -14148,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, @@ -14158,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, @@ -14168,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, @@ -14178,7 +16268,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbQosPolicy", + "cmdlet": "Update-PfbTlsPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14188,7 +16278,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbQosPolicy", + "cmdlet": "Update-PfbTlsPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14198,9 +16288,9 @@ "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, @@ -14208,9 +16298,9 @@ "recommendation": null }, { - "cmdlet": "Update-PfbS3ExportPolicy", - "parameter": "Id", - "wireName": "ids", + "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-PfbS3ExportRule", - "parameter": "Name", - "wireName": "names", + "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-PfbSmbClientPolicy", - "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": "Id", - "wireName": "ids", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "EnabledTlsCiphers", + "wireName": "enabled_tls_ciphers", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14248,9 +16338,19 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSmbClientRule", - "parameter": "Name", - "wireName": "names", + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "Location", + "wireName": "location", + "status": "no-spec-enum-found", + "matchedKey": null, + "specValues": null, + "stableSinceOldestVersion": null, + "recommendation": null + }, + { + "cmdlet": "Update-PfbTlsPolicy", + "parameter": "MinTlsVersion", + "wireName": "min_tls_version", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14258,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, @@ -14278,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, @@ -14288,7 +16388,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSshCaPolicy", + "cmdlet": "Update-PfbWormPolicy", "parameter": "Name", "wireName": "names", "status": "no-spec-enum-found", @@ -14298,7 +16398,7 @@ "recommendation": null }, { - "cmdlet": "Update-PfbSshCaPolicy", + "cmdlet": "Update-PfbWormPolicy", "parameter": "Id", "wireName": "ids", "status": "no-spec-enum-found", @@ -14308,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, @@ -14328,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, @@ -14338,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, @@ -14349,8 +16449,8 @@ }, { "cmdlet": "Update-PfbWormPolicy", - "parameter": "Name", - "wireName": "names", + "parameter": "MinRetention", + "wireName": "min_retention", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14359,8 +16459,8 @@ }, { "cmdlet": "Update-PfbWormPolicy", - "parameter": "Id", - "wireName": "ids", + "parameter": "Mode", + "wireName": "mode", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14890,7 +16990,7 @@ { "cmdlet": "Update-PfbRealmDefaults", "parameter": "Name", - "wireName": "names", + "wireName": "realm_names", "status": "no-spec-enum-found", "matchedKey": null, "specValues": null, @@ -14900,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, @@ -15687,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", @@ -15749,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, @@ -15767,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", @@ -15779,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, @@ -15977,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", @@ -15997,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", @@ -16017,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", @@ -16087,6 +18397,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", @@ -16137,6 +18457,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", @@ -16825,10 +19155,6 @@ "cmdlet": "New-PfbDns", "parameter": "Name" }, - { - "cmdlet": "New-PfbNetworkInterface", - "parameter": "AttachedServers" - }, { "cmdlet": "New-PfbNodeGroup", "parameter": "Name" @@ -16949,17 +19275,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 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' { 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' + } + } + } +} diff --git a/Tests/Issue31.DriftConfidence.Tests.ps1 b/Tests/Issue31.DriftConfidence.Tests.ps1 new file mode 100644 index 0000000..2491370 --- /dev/null +++ b/Tests/Issue31.DriftConfidence.Tests.ps1 @@ -0,0 +1,73 @@ +#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' + ) + + # 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 + # 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. +'@ + } +} diff --git a/Tests/New-PfbApiToken.Tests.ps1 b/Tests/New-PfbApiToken.Tests.ps1 new file mode 100644 index 0000000..9f39484 --- /dev/null +++ b/Tests/New-PfbApiToken.Tests.ps1 @@ -0,0 +1,96 @@ +#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 '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 + + 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 + } + } + } +} diff --git a/Tests/New-PfbArrayConnection.Tests.ps1 b/Tests/New-PfbArrayConnection.Tests.ps1 new file mode 100644 index 0000000..8784fd7 --- /dev/null +++ b/Tests/New-PfbArrayConnection.Tests.ps1 @@ -0,0 +1,135 @@ +#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*' + } + + 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' { + 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 + } + } +} 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') + } + } + } +} 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 + } + } +} diff --git a/Tests/New-PfbFleetMember.Tests.ps1 b/Tests/New-PfbFleetMember.Tests.ps1 new file mode 100644 index 0000000..974ecea --- /dev/null +++ b/Tests/New-PfbFleetMember.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 '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') + } + } + + 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' { + 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 + } + } +} diff --git a/Tests/New-PfbLegalHoldEntity.Tests.ps1 b/Tests/New-PfbLegalHoldEntity.Tests.ps1 new file mode 100644 index 0000000..49f417c --- /dev/null +++ b/Tests/New-PfbLegalHoldEntity.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 'New-PfbLegalHoldEntity - query parameters (#31)' { + + BeforeEach { + Mock -ModuleName PureStorageFlashBladePowerShell Assert-PfbConnection { } + Mock -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest { } + } + + 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 + -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' + } + } + } + + 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 -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 + } + } + + It 'sends -Recursive:$true when supplied' { + New-PfbLegalHoldEntity -FileSystemNames '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 -FileSystemNames '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 -FileSystemNames 'fs1' -Confirm:$false -Array $fakeArray + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body.Count -eq 0 + } + } + } +} 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' + } + } + } +} 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') + } + } + } +} 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' + } + } + } +} 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' + } + } + } +} diff --git a/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 b/Tests/New-PfbPolicyFileSystemReplicaLink.Tests.ps1 new file mode 100644 index 0000000..3a6f32f --- /dev/null +++ b/Tests/New-PfbPolicyFileSystemReplicaLink.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 '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: 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 + + 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 '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)' { + 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') + } + } + } + + 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 + } + } +} 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') } + } + } +} 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' + } + } + } +} 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' + } + } + } +} 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' + } + } + } +} 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/Tests/Update-PfbActiveDirectory.Tests.ps1 b/Tests/Update-PfbActiveDirectory.Tests.ps1 new file mode 100644 index 0000000..9f34c41 --- /dev/null +++ b/Tests/Update-PfbActiveDirectory.Tests.ps1 @@ -0,0 +1,165 @@ +#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 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 + + 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 + } + } + } +} diff --git a/Tests/Update-PfbAdmin.Tests.ps1 b/Tests/Update-PfbAdmin.Tests.ps1 new file mode 100644 index 0000000..a5cd4f0 --- /dev/null +++ b/Tests/Update-PfbAdmin.Tests.ps1 @@ -0,0 +1,149 @@ +#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 '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 + + 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' + } + } + + 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 + } + } + } +} 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 + } + } + } +} 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 + } + } +} 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 + } + } + } +} diff --git a/Tests/Update-PfbBucketAuditFilter.Tests.ps1 b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 new file mode 100644 index 0000000..72abd49 --- /dev/null +++ b/Tests/Update-PfbBucketAuditFilter.Tests.ps1 @@ -0,0 +1,138 @@ +#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' -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 + -not $QueryParams.ContainsKey('bucket_names') + } + } + + 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 + + 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 + } + } + } +} 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 + } + } + } +} diff --git a/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 new file mode 100644 index 0000000..63140c7 --- /dev/null +++ b/Tests/Update-PfbDirectoryServiceRole.Tests.ps1 @@ -0,0 +1,112 @@ +#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 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 'has no -RoleNames parameter' { + (Get-Command Update-PfbDirectoryServiceRole).Parameters.Keys | Should -Not -Contain 'RoleNames' + } + } + + 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') { + $keys | Should -Contain $p + } + } + } +} diff --git a/Tests/Update-PfbDns.Tests.ps1 b/Tests/Update-PfbDns.Tests.ps1 new file mode 100644 index 0000000..f3c49b4 --- /dev/null +++ b/Tests/Update-PfbDns.Tests.ps1 @@ -0,0 +1,188 @@ +#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 '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 } | + 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 + } + } + } +} 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 + } + } + } +} 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 + } + } +} 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 + } + } + } +} 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 + } + } + } +} 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*' + } + } +} 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*' + } + } +} 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 + } + } + } +} 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 + } + } + } +} 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*' + } + } +} 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' + } + } +} 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' + } + } +} diff --git a/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 b/Tests/Update-PfbManagementAccessPolicy.Tests.ps1 new file mode 100644 index 0000000..a268d1a --- /dev/null +++ b/Tests/Update-PfbManagementAccessPolicy.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-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' -NewName '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' -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 -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 + + 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 + } + } + } +} 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 + } + } + } +} diff --git a/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 b/Tests/Update-PfbNetworkInterfaceConnector.Tests.ps1 new file mode 100644 index 0000000..e41691e --- /dev/null +++ b/Tests/Update-PfbNetworkInterfaceConnector.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-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 '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 + + 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 + } + } + } +} 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 + } + } + } +} 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' + } + } +} 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 + } + } + } +} diff --git a/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 new file mode 100644 index 0000000..ca1abe8 --- /dev/null +++ b/Tests/Update-PfbObjectStoreRemoteCredential.Tests.ps1 @@ -0,0 +1,138 @@ +#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, 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)) + } + } + + 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 + } + } + } +} diff --git a/Tests/Update-PfbObjectStoreRole.Tests.ps1 b/Tests/Update-PfbObjectStoreRole.Tests.ps1 new file mode 100644 index 0000000..2934b7b --- /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 -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 + } + } + } +} diff --git a/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 new file mode 100644 index 0000000..f1596ad --- /dev/null +++ b/Tests/Update-PfbObjectStoreVirtualHost.Tests.ps1 @@ -0,0 +1,155 @@ +#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 '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 + + Should -Invoke -ModuleName PureStorageFlashBladePowerShell Invoke-PfbApiRequest -Times 1 -Exactly -ParameterFilter { + $Body['remove_attached_servers'][0].name -eq 'srv-d' + } + } + + 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 + + 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 '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' + } + } +} diff --git a/Tests/Update-PfbOidcIdp.Tests.ps1 b/Tests/Update-PfbOidcIdp.Tests.ps1 new file mode 100644 index 0000000..b72b41c --- /dev/null +++ b/Tests/Update-PfbOidcIdp.Tests.ps1 @@ -0,0 +1,103 @@ +#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' -NewName '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' -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' } ` + -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' + } + } +} diff --git a/Tests/Update-PfbQosPolicy.Tests.ps1 b/Tests/Update-PfbQosPolicy.Tests.ps1 new file mode 100644 index 0000000..2b1fad1 --- /dev/null +++ b/Tests/Update-PfbQosPolicy.Tests.ps1 @@ -0,0 +1,138 @@ +#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 -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 + + 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 + } + } + } +} 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[]' + } + } +} diff --git a/Tests/Update-PfbSaml2Idp.Tests.ps1 b/Tests/Update-PfbSaml2Idp.Tests.ps1 new file mode 100644 index 0000000..fbbc917 --- /dev/null +++ b/Tests/Update-PfbSaml2Idp.Tests.ps1 @@ -0,0 +1,122 @@ +#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' ` + -NewName '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 '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' } ` + -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' + } + } +} 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' + } + } +} 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 + } + } + } +} diff --git a/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 new file mode 100644 index 0000000..ee7a891 --- /dev/null +++ b/Tests/Update-PfbStorageClassTieringPolicy.Tests.ps1 @@ -0,0 +1,142 @@ +#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 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 + + 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 '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 + + 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 + } + } + } +} 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 + } + } + } +} 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') + } + } +} 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 + } + } +} 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 + } + } + } +} 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 + } + } + } +} 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 }