Pure Storage FlashArray Demote

Pure Storage FlashArray Demote

Certified
Enterprise Edition

Demote a Pure Storage FlashArray ActiveDR pod

Sets requested_promotion_state to demoted on an ActiveDR pod via PATCH /api/{version}/pods?names={name}, then waits up to waitTimeout for the pod to reach that state. A pod already demoted is a no-op. If the pod is still transitioning when waitTimeout elapses, the task returns successfully with the last-observed promotionStatus rather than failing.

yaml
type: io.kestra.plugin.ee.purestorage.pods.Demote

Demote an ActiveDR pod before a planned failback.

yaml
id: purestorage_demote_pod
namespace: company.team

tasks:
  - id: demote_pod
    type: io.kestra.plugin.ee.purestorage.pods.Demote
    host: "{{ secret('PURESTORAGE_HOST') }}"
    apiToken: "{{ secret('PURESTORAGE_API_TOKEN') }}"
    name: "{{ inputs.pod_name }}"
Properties

FlashArray API token

Static API token used to authenticate. It is exchanged for a short-lived session token via the FlashArray login endpoint; this plugin does not perform the username/password to API-token exchange. Store this value as a Kestra secret and reference it via {{ secret('PURESTORAGE_API_TOKEN') }}.

FlashArray management IP or hostname

Hostname or IP address of the Pure Storage FlashArray management interface (for example: flasharray.example.com or 192.168.1.20). The REST API is reached at https://{host}: {port}/api/.

Pod name

Name of the ActiveDR pod to demote.

REST API version override

Pins the Purity//FA REST API version to use (for example: 2.30), bypassing runtime version discovery (GET /api/api_version). Optional: when unset, the highest supported 2.x version is auto-detected.

HTTP client configuration

Optional HTTP client overrides such as timeouts, TLS settings, and proxy. When timeout is not set, a default 10s connect / 60s read-idle timeout is applied so an unreachable or stalled array fails fast with a clear error instead of hanging the task indefinitely; set timeout explicitly to override. For example:

options: 
  timeout: 
    connectTimeout: PT10S
    readIdleTimeout: PT30S
  ssl: 
    insecureTrustAllCertificates: true # accept self-signed array certs (insecure — lab use only)
Definitions
allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*Requiredobject
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*Requiredobject
tokenstring

The token for bearer token authentication.

type*Requiredobject
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

basicAuthPasswordDeprecatedstring

The password for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

basicAuthUserDeprecatedstring

The username for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

connectTimeoutDeprecatedstring
Formatduration

The time allowed to establish a connection to the server before failing.

connectionPoolIdleTimeoutDeprecatedstring
Formatduration

The time an idle connection can remain in the client's connection pool before being closed.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logLevelDeprecatedstring
Possible Values
ALLTRACEDEBUGINFOWARNERROROFFNOT_SPECIFIED

The log level for the HTTP client.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

maxContentLengthDeprecatedinteger

The maximum content length of the response.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

proxyAddressDeprecatedstring

The address of the proxy server.

proxyPasswordDeprecatedstring

The password for proxy authentication.

proxyPortDeprecatedinteger

The port of the proxy server.

proxyTypeDeprecatedstring
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

proxyUsernameDeprecatedstring

The username for proxy authentication.

readIdleTimeoutDeprecatedstring
Formatduration

The time allowed for a read connection to remain idle before closing it.

readTimeoutDeprecatedstring
Formatduration

The maximum time allowed for reading data from the server before failing.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

Reference (ref) of the pluginDefaults to apply to this task.

Default443

FlashArray port

Port for the FlashArray REST API. Defaults to 443.

Defaulthttps

HTTP scheme

Protocol scheme used to reach the FlashArray REST API. Defaults to https. Set to http only for testing against local stubs; production arrays always use https.

DefaultPT2M

State transition wait timeout

Maximum time to wait for the pod to reach its requested promotion state. Defaults to PT2M. Polled every 2 seconds within this window; if the timeout elapses before the target state is reached, the task returns successfully with the last-observed state rather than failing. Capped at PT30M: values above that are clamped down to PT30M (with a warning logged) to avoid tying up a worker thread indefinitely.

Last-observed promotion status

For example: demoted, demoting.

Whether the pod reached the demoted state within waitTimeout