Skip to content

configure.flexfs

configure.flexfs is the management CLI for flexFS Enterprise. It provides CRUD operations on all admin server resource types, communicating with the admin server over its REST API.

The tool follows a verb/resource model: a verb subcommand (create, delete, list, show, or update) is paired with a <resource> and, for create and update, a set of --field flags. The init creds, deinit creds, license, and version subcommands manage credentials and print build metadata.

It runs in two modes. When run without arguments from a terminal, it starts an interactive REPL with tab completion and command history:

configure.flexfs> list volumes
configure.flexfs> show volume <volume-name>
configure.flexfs> create volume --name test --metaStoreID 1 --blockStoreID 1
configure.flexfs> exit

Commands can also be run directly from the shell in single-command mode:

Terminal window
configure.flexfs list volumes --json
configure.flexfs create volume --name test --metaStoreID 1 --blockStoreID 1

These flags apply to every subcommand.

FlagTypeDefaultDescriptionVisibility
--adminAddrstring""Admin server address (overrides credentials file)Internal
--credsFilestring~/.flexfs/configure/credsCredentials file pathPublic
--jsonboolfalseOutput results as JSON (create, list, and show only)Public
--noAdminSSLboolfalseDisable SSL for admin server connectionsInternal
--reportErrorsboolfalseReport errors and panics to Paradigm4Public
--tokenstring""Account auth token (overrides credentials file)Internal
SubcommandDescriptionVisibility
createCreate a resourcePublic
deinit credsRemove the credentials filePublic
deleteDelete a resourcePublic
init credsInitialize the credentials filePublic
licensePrint license informationPublic
listList resourcesPublic
showShow details for a single resourcePublic
updateUpdate an existing resourcePublic
versionPrint the build versionPublic

The verbs operate on the following resource types. create, delete, show, and update name the resource by its command name (show block-store 1); list names it by its API name (list block-stores). The API name is also used in REST paths and JSON output.

ResourceAPI NameVerbsDescription
accountaccountslist, show, updateUser account
block-apiblock-apislist, showBlock store API type
block-storeblock-storesallBlock store (bucket configuration)
meta-storemeta-storesallMetadata store
providerprovidersallCloud provider
proxy-groupproxy-groupsallProxy group
regionregionsallProvider region
volumevolumesallVolume
volume-proxy-groupvolume-proxy-groupscreate, delete, list, showVolume-to-proxy-group association
volume-tokenvolume-tokensallVolume access token

delete, show, and update identify a resource by its key:

ResourceKey
account, block-store, meta-store, proxy-group<id> (numeric ID)
block-api<code>
provider<code>
region<providerCode> <code>
volume<id> (volume ID or name)
volume-proxy-group<volumeID> <proxyGroupID> (volume ID or name, then proxy group ID)
volume-token<token>

Volume names are unique only within an account. When a name matches volumes in more than one account, the command fails and lists the matching volume IDs; use the volume ID instead.

Terminal window
configure.flexfs create <resource> --field=value ...

Creates a new resource of the given type. The fields accepted depend on the resource; each resource’s fields are documented in the ### subsections below. Fields marked required must be supplied on create.

The --flags field on volumes and volume tokens draws its values from a shared vocabulary documented in Accepted Volume and Token Flags.

Accounts cannot be created with configure.flexfs; the following fields are accepted on update.

FlagTypeDefaultDescriptionVisibility
--emailstring""Email addressPublic
--namestring""Account namePublic
--tokenstring""Auth token (UUID)Public

The following fields are available on create. On update, only --address, --namespace, --password, --prefix, and --username are accepted.

An update that changes --prefix is refused with 409 while any volume that has not finished retirement cleanup uses the block store, and one that changes --namespace is refused with 409 while any such volume has blocks stored.

FlagTypeDefaultDescriptionVisibility
--addressstring""Endpoint addressPublic
--apiCodestring""Block API code (s3, gcs, azure, oci) (required, create only)Public
--bucketstring""Block storage bucket (required, create only)Public
--namespacestring""Object storage namespace (required for oci, rejected for every other API)Public
--passwordstring""Access passwordPublic
--prefixstringflexfsKey prefix within bucketPublic
--providerCodestring""Provider code (required, create only)Public
--regionCodestring""Region code (required, create only)Public
--usernamestring""Access usernamePublic

The following fields are available on create. On update, only --address and --token are accepted.

FlagTypeDefaultDescriptionVisibility
--addressstring""Server address (required for create)Public
--providerCodestring""Provider code (required, create only)Public
--regionCodestring""Region code (required, create only)Public
--tokenstring""Auth token (UUID, auto-generated if omitted)Public

The following fields are available on both create and update.

FlagTypeDefaultDescriptionVisibility
--codestring""Provider code (required for create)Public
--namestring""Provider name (required for create)Public

The following fields are available on create. On update, only --addresses is accepted.

FlagTypeDefaultDescriptionVisibility
--addressesstring""Comma-separated proxy addresses (required for create)Public
--providerCodestring""Provider code (required, create only)Public
--regionCodestring""Region code (required, create only)Public

The following fields are available on create. On update, only --code and --name are accepted.

FlagTypeDefaultDescriptionVisibility
--codestring""Region code (required for create)Public
--namestring""Region name (required for create)Public
--providerCodestring""Provider code (required, create only)Public

The following fields are available on create. On update, --blockSize, --compression, --encryption, and --id are not accepted, and a retired volume cannot be updated (409).

A volume name is 3 to 63 characters of letters, digits, ., -, and _, starting and ending with a letter or digit, and cannot contain ... The block size must be a power of 2 from 256 KiB to 8 MiB; the units KiB, MiB, and GiB (or K, M, G, KB, MB, GB, all read as powers of 1024) are accepted in any case.

FlagTypeDefaultDescriptionVisibility
--blockSizestring4MiBBlock size, e.g. 4MiB, 256KiB, or raw bytes (create only)Public
--blockStoreIDint640Block store ID (required for create)Public
--compressionstringlz4Compression algorithm: lz4, snappy, zstd, or none (create only)Public
--encryptionboolfalseEnable end-to-end encryption (create only)Public
--flagsstring""Comma-separated mount flags (see Accepted Volume and Token Flags)Public
--idstringauto-generatedVolume ID, UUID (create only)Public
--maxBlocksint640Max block count, 0 = unlimitedPublic
--maxInodesint640Max inode count, 0 = unlimitedPublic
--maxProxiedint640Max proxied blocks per file, 0 = unlimitedPublic
--metaStoreIDint640Metadata store ID (required for create)Public
--namestring""Volume name (required for create)Public
--notesstring""Free-form notesPublic
--retentionstring7dRetention duration (e.g. 7d, 168h, 30m) or seconds; -1 = foreverPublic

Volume-to-proxy-group associations cannot be updated; the following fields are accepted on create only.

FlagTypeDefaultDescriptionVisibility
--proxyGroupIDint640Proxy group ID (required)Public
--volumeIDstring""Volume ID or name (required)Public

The following fields are available on create. On update, only --flags, --mountPath, and --notes are accepted.

FlagTypeDefaultDescriptionVisibility
--flagsstring""Comma-separated mount flags, plus the volume token flags (see Accepted Volume and Token Flags)Public
--mountPathstring""Subdirectory path to mount as root (e.g. /data/project). Also scopes the token’s reporting queries.Public
--notesstring""Free-form notesPublic
--tokenstringauto-generatedAccess token, UUID (create only)Public
--volumeIDstring""Volume ID or name (required, create only)Public

The --flags field on volumes and volume tokens accepts a comma-separated list of mount options. When set on a volume, they apply to all mounts of that volume. When set on a volume token, they are merged with the volume-level flags (token flags take precedence).

Most flags are accepted in both places. The volume token flags below are accepted on a volume token only.

Boolean flags are enabled by name. Key-value flags use name=value syntax (e.g., umask=0027,attrvalid=3600); values are validated when set, so a flag that is accepted here is one that will be honored.

Flag names are matched case-insensitively and ignoring hyphens, so noAtime, noatime, and no-atime are the same flag, as are anonUID and anon-uid. Whitespace is not significant and is removed before the list is stored.

FlagEffect
aclEnable extended ACL support (implies xattr)
allsquashMap every uid / gid to the anonymous uid / gid (implies rootsquash)
noatimeDisable access-time updates
noexecPrevent execution of files
nonemptyAllow mounting over a non-empty directory
noprefetchDisable block prefetching
noproxyBypass proxy servers for all block I/O
noproxyreadsBypass proxy servers for block reads
noproxywritesBypass proxy servers for block writes
nosuidDisable SUID/SGID special permissions
reporterrorsRequire mounts to report panics and background failures to Paradigm4 (--reportErrors), including the mount log of a client that fails to start. An admin or free server started with --reportMountErrors adds this flag to every volume it serves
roRead-only (implies noatime)
rootsquashMap uid 0 / gid 0 to the anonymous uid / gid (implies acl)
xattrEnable extended attribute support

These flags are accepted on a volume token and rejected on a volume.

FlagEffect
adminAllows the token to run reporting queries against the metadata server — /find, /analyze/* and /duplicates, which list file and directory names along with their owners and permissions

A flag set on a volume applies to every token of that volume, so a grant meant for one token belongs on that token. Grant it when creating or updating a volume token:

Terminal window
configure.flexfs create volume-token \
--volumeID <volume-name> \
--flags admin \
--notes "reporting for the storage team"

admin says nothing about how a volume is mounted and has no effect on a mount, so the same token can be used for both. It is still worth issuing a separate token for reporting, so that the grant can be withdrawn without disturbing any mount.

Where a volume token also sets a mount path, its reporting queries are confined to that subdirectory, exactly as its mounts are. See Metadata REST API.

FlagTypeEffect
anongid=Nuint32GID squashed callers are mapped to
anonuid=Nuint32UID squashed callers are mapped to
attrvalid=Nuint64Attribute cache TTL in seconds
attrvalidnsec=Nuint32Nanosecond offset for attrvalid (0 to 999999999)
entryvalid=Nuint64Directory entry cache TTL in seconds
entryvalidnsec=Nuint32Nanosecond offset for entryvalid (0 to 999999999)
negentryvalid=Nuint64Negative lookup cache TTL in seconds
negentryvalidnsec=Nuint32Nanosecond offset for negentryvalid (0 to 999999999)
umask=NNNNoctalFile creation mask, with or without a leading 0 — 27 and 0027 mean the same thing; max 0777

For boolean flags, either the local mount option or the server-side flag can enable the behavior — neither side can disable what the other enables. For key-value flags, the server-side value takes precedence over the local mount option when set. The squash flags do not follow either rule; see below.

Volume token flags are outside these rules entirely: they are not mount options, so there is nothing on the mount side for them to combine with.

rootsquash, allsquash, anonuid and anongid are the only flags a mount is refused for setting locally as an unprivileged user — setting them here is how a volume squashes mounts whose users it does not control. (Other options can be unavailable to a non-root mount without refusing it: SUID/SGID cannot be enabled, and allow_other may not be permitted.)

They are also the exception to the combining rules above. Setting rootsquash or allsquash here replaces the mount’s entire local squash configuration rather than combining with it: --rootSquash, --allSquash, --anonUID and --anonGID are all discarded, whether or not this side states an identity of its own — an unstated identity falls back to 65534, not to what the mount asked for. So a local --allSquash does not take effect against a volume that sets only rootsquash, which is the one case where a locally enabled boolean is disabled by the server side.

A mount whose root is being squashed chooses neither what it is squashed to nor how widely: use anonuid / anongid here to pick a non-default identity, and allsquash here to squash every caller.

Terminal window
configure.flexfs deinit creds

Removes the credentials file for configure.flexfs. Removing a file that is not there is not an error: deinit creds is idempotent.

Terminal window
configure.flexfs delete <resource> <key>

Deletes the resource of the given type identified by its key.

delete volume retires the volume instead of removing its record: its volume tokens are deleted, mounts are refused, and the metadata server then deletes the volume’s files and blocks without waiting for the retention period. The volume’s name stays reserved while its record exists. Deleting a retired volume removes its record once its data has been deleted, and is refused with 409: volume data is still being deleted before then. See Retiring a Volume.

A provider, region, block store, meta store, or proxy group that a volume uses cannot be deleted (409: in use by a volume), unless every such volume is retired and its data has been deleted. Deleting a block store, meta store, region, or provider then also deletes the records of those volumes, but not the other stores they used: deleting a block store, for example, leaves their meta store. Deleting a proxy group only detaches those volumes from it. Deleting a provider also deletes its regions, and deleting a region also deletes its block stores, meta stores, and proxy groups. To delete a proxy group that active volumes use, first remove its volume associations.

Terminal window
configure.flexfs init creds [flags]

Initializes a credentials file for configure.flexfs with the admin server address and an account token. If --token is omitted, the command prompts for it interactively. init on its own does the same thing as init creds.

FlagTypeDefaultDescriptionVisibility
--adminAddrstring""Admin server address (required)Public
--forceboolfalseOverwrite existing credentials filePublic
--tokenstring""Account auth token (will prompt if omitted)Public
Terminal window
configure.flexfs list <resource> [flags]

Lists all instances of the given resource. The table shows a summary set of columns; show or --json gives every field. Columns other than a resource’s key that are empty across every row are hidden unless --json is set.

list all lists every resource type in this order: accounts, block-apis, block-stores, meta-stores, providers, proxy-groups, regions, volumes, volume-proxy-groups, volume-tokens.

list volumes leaves out retired volumes whose data has been deleted; list volumes --cleaned lists only those. Other commands still find such a volume by name or volume ID.

Every list <resource> accepts a --<field> filter for each column of that resource — for example list block-stores --providerCode aws or list volumes --name myvol. Filters match exactly and combine with AND. Run configure.flexfs list <resource> --help for the exact set a given resource accepts.

In addition, list volume-proxy-groups and list volume-tokens accept a join filter that the raw columns do not provide:

FlagTypeDefaultDescriptionVisibility
--volumeNamestring""Filter by volume namePublic
Terminal window
configure.flexfs show <resource> <key>

Shows the full details for a single resource identified by its key.

Terminal window
configure.flexfs update <resource> <key> --field=value ...

Updates an existing resource identified by its key. At least one --field must be specified.

update accepts the same per-resource fields as create, with the per-resource restrictions noted in each field table above (for example, block-store update accepts only --address, --namespace, --password, --prefix, and --username; volume update does not accept --blockSize, --compression, --encryption, or --id). The --flags vocabulary is documented under Accepted Volume and Token Flags.