This is a complete reference for allDocumentation Index
Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
Use this file to discover all available pages before exploring further.
tensor9 CLI commands. For installation instructions, see Install. For common workflows and examples, see Common Workflows.
Usage
Authentication
Most commands require authentication via API key. Set your API key using the environment variable:Command Groups
The tensor9 CLI organizes commands into logical groups:- vendor: Vendor setup and management
- app: Application management
- stack: Stack and release management
- form-factor: Form factor management
- appliance: Customer appliance management
- install: Listing app installs across appliances
- Kubernetes: Kubernetes RBAC roles and EKS access
- General commands: Help, update, install, report
General Commands
help
Display help information about available commands.-group(optional): Show help for a specific command group
env
Report on the current Tensor9 environment.report
Generate a comprehensive report about your vendor account.-vendorId(optional): The vendor ID to report on (auto-discovered if not specified)-detailed(optional): Produce a detailed report-all(optional): Show all items instead of truncating lists-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
- Vendor details
- All apps and their stacks
- Customer appliances
- Active releases
portal
Start a local web portal for managing your apps and appliances.-vendorId(optional): The vendor ID (auto-discovered from API key if not specified)-applianceName(optional): Appliance name if you have multiple appliances (Buyer)-port(optional): Port to run the server on (default: 8080)-noBrowser(optional): Don’t automatically open browser
whoami
Display information about the currently authenticated user.-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
Vendor Commands
vendor setup
Set up Tensor9 in your AWS account. This creates your control plane for managing customer appliances.-region(optional): The cloud region. Auto-detected if not provided.-awsProfile(optional): AWS profile to use for credentials.-vendorId(optional): The vendor ID to set up Tensor9 for (auto-discovered if not specified)-force(optional): Force setup to proceed even if it would overwrite existing resources
Your Tensor9 AWS account should be a dedicated AWS account used only for Tensor9. This reduces the risk of conflicts with other infrastructure.
vendor report
Generate a detailed report of the vendor’s resources.-vendorId(optional): The vendor ID to report on. Auto-discovered if not specified.-detailed(optional): Produce a detailed report.-all(optional): Show all items instead of truncating lists.
vendor upgrade
Upgrade your Tensor9 vendor infrastructure or control-plane software. UseInfrastructure to re-apply the Tensor9 Terraform modules against your AWS account, or Software to deploy the latest control-plane software to your VCtrl instance.
-reason: Operator note describing the motivation for this upgrade.
-kind: Upgrade kind. One ofInfrastructure(default) orSoftware.-region: AWS region. Auto-detected if not provided.-awsProfile: AWS profile to use for credentials.-vendorId: Vendor ID. Auto-discovered from API key if not specified.-targetDefId: Specific upgrade definition to target (e.g.,fabric-2026.04.24). Defaults to the latest registered definition for the chosen kind.
A vendor upgrade holds a 5-minute lease while running. If a previous upgrade was interrupted, wait for the lease to expire before retrying.
App Commands
app create
Create a new app.-name: The app name (alphanumeric, underscores, hyphens; 3-64 characters)-displayName: A friendly name for the app.
-stackType: The type of stack to bind to the app. Must be one of: CloudFormation, Terraform, TerraformWorkspace, DockerContainer, DockerCompose, Helm.-nativeStackId: The native id of the stack to bind to the app (e.g.arn:aws:cloudformation:us-west-2:1234:stack/my-stack/abcdfor CloudFormation).-vanityDomain: A custom vanity domain name for this app. This is used to create endpoints used by your app, including per-appliance endpoints for appliances that install your app. e.g.any-prem.vendor.co.-json: Output as JSON instead of human-readable text.
app signup-link
Generate a signup link for customers to sign up for your app.-appId: The app ID-appName: The app name
https://portal.tensor9.com/buyerSignup?appId=... that you can send to customers.
app list
List applications by vendor.-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
app retrieve
Retrieve application details.-appId: The ID of the app to retrieve.
Stack Commands
stack publish
Upload a stack definition to your control plane.-appName: The name of the app to upload the stack for.-stackS3Key: The name for the stack archive (without file extension).-stackType: The type of stack. Must be one of:CloudFormation,Terraform,TerraformJson,Kube,TerraformWorkspace,DockerContainer,DockerCompose,Helm.
-dir: ForTerraformWorkspace: The directory containing.tffiles. Defaults to the current directory.-file: ForDockerCompose: The path to thedocker-compose.ymlfile. (ForTerraformWorkspace, use-dirinstead).
s3://t9-ctrl-000001/my-app-stack.tf.tgz.
stack bind
Bind an origin stack (e.g., CloudFormation, Terraform, Docker, etc.) to your app.-stackType: The type of stack to bind. Must be one of:CloudFormation,Terraform,TerraformJson,Kube,TerraformWorkspace,DockerContainer,DockerCompose,Helm.- Note: You must provide either
-nativeStackIdor-gitHubUrl.
-appName: The name of the app to bind the stack to.-appVersion: The version of the app to bind to (defaults to latest).-stackName: A friendly name for the stack being bound.-nativeStackId: The native ID of the stack.- TerraformWorkspace:
s3://my-bucket/my-stack.tf.tgz - DockerContainer:
123456789012.dkr.ecr.us-west-2.amazonaws.com/my-container:latest - CloudFormation:
arn:aws:cloudformation:us-west-2:0011223344556677:stack/my-stack/...
- TerraformWorkspace:
-gitHubUrl: A GitHub URL pointing to a directory containing Terraform files (mutually exclusive with-nativeStackId).-subPath: For-gitHubUrlwithTerraformWorkspace: the subdirectory within the checkout containing the root module (main.tf).-credentialType: The type of credential to use for cross-account or cross-cloud access. (e.g.,AwsRoleArn,GcpTrustedServiceAccountEmail,GitHubUserAndToken,DigitalOceanToken, etc.)-credential: The credential value.
You only need to bind once per app. Future publishes of the same stack don’t require re-binding.
stack unbind
Unbind an origin stack (e.g., CloudFormation stack) from your app.-appName: The name of the app to unbind from.-appId: The ID of the app to unbind from.
-stackId: The Tensor9 stack ID (found intensor9 report).-stackName: The friendly name of the stack to unbind.- Note: If neither is specified and only one stack is bound to the app, that stack will be automatically targeted.
stack release create
Release a stack to one or more appliances.-appName: The name of the app to release.-vendorVersion: Version string (e.g.,v5.4.0).-description: A short description of the release.-notes: A description of the release (detailed notes).
-projectionIds: The IDs of the projections to release to. Must be JSON-encoded as a list of strings (e.g.,["0000000000000001:9a961d63e1120abe:0e4348b322904268", "0000000000000001:230d826ab554c3e7:6a40a3b5d3c807a5"]).-testApplianceor-testApplianceName: The name of a test appliance to use for this release.-customerNameor-buyerName: The name of the customer to release to.-all: Release to all appliances.
-stackIdor-stackName: Required if the app has multiple stacks bound to it.-tuningDoc: A file containing the tuning document for this release.-tuningDocFmt: The format of the tuning document file:Json,Yaml. (Defaults toJson).
stack release retire
Retire a release of an app.-releaseId: The ID of the release to retire.- OR:
-vendorVersion: The vendor version of the release to retire.-appName: The name of the app to retire a release for.
-stackName: The name of the stack to retire releases for.-customerNameor-buyerName: The name of the customer to retire a release for.-reason: The reason for retiring the release.
stack list
List stack definitions for a vendor.-vendorId: The vendor ID.
stack retrieve
Retrieve a specific stack definition.-vendorId: The vendor ID.-stackId: The stack ID to retrieve.
stack release list
List stack releases for an app.-appName: App name to list releases for.-appId: App ID to list releases for.
-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
stack release download
Download released stacks for one or more appliances.-appName: The name of the app to download the release for.-vendorVersion: The vendor version to download (e.g.,v5.4.0). Use-latestto download the most recent release.
-stackId: The stack ID to download. Required if the app has multiple stacks bound to it.-outDir: The directory to download the stack(s) to. Defaults to the current directory.-historyRetention: Number of previous release snapshots to keep in.tensor9/history/. Defaults to10.
stack release-pending list
List pending stack releases.-vendorId: The vendor ID.-appId: App ID to filter pending releases.
stack release-bundle download
Download a release bundle.-releaseId: The release ID to download.-projectionId: The projection ID.-outputFile: Path to save the downloaded bundle.
stack release-bundle apply
Apply a release bundle manually from a local file or presigned URL.-releaseBundleFmt: Format (e.g., Tgz_2024_12_07).-bxEndpoint: Coordinator endpoint to use.
-releaseBundleFile: Path to the bundle file.-releaseBundleUrl: Presigned URL for air-gapped deployments.
Terraform Commands
tf import
Import or adopt an existing resource into Tensor9 management. This command handles two scenarios:-
State recovery — You lost your local Terraform state (e.g., crash, environment rebuild). The resource was previously deployed through Tensor9. Running
tf importrecovers your local state. -
Resource adoption — A deployment failed because the resource already exists (e.g., “BucketAlreadyOwnedByYou”, “resource already exists”). Running
tf import --nativeIdtells Tensor9 to adopt the existing resource instead of trying to create a new one.
--version: Vendor version of the release (e.g.,1.0.0)--resource: The twin resource name from your compiled stack, optionally module-qualified (e.g.,aws_s3_bucket_main_twin,module.vpc.aws_s3_bucket_main_twin)
--customerName: Customer name (e.g.,acme-corp)--customerId: Customer ID--applianceName: Appliance name--applianceId: Appliance ID--installationId: Installation ID (most specific — use when other scopes are ambiguous)
--nativeId: The resource’s import ID. Required when a deployment failed because the resource already exists. The format depends on the resource type — see Terraform provider docs for the expected format.--stackName: Stack name to disambiguate when multiple stacks contain a resource with the same name--dir: Directory containing your Terraform configuration (defaults to current directory)--tfBin: Path to the tofu/terraform binary (auto-discovered by default)
What is
--nativeId? It’s the value you would pass to tofu import for this resource type. The format varies by resource:aws_s3_bucket— bucket name (e.g.,my-bucket)aws_instance— instance ID (e.g.,i-1234567890abcdef0)aws_lb— ARN (e.g.,arn:aws:elasticloadbalancing:...)aws_ecs_service—cluster-name/service-name
After adopting a resource, run
tofu apply to reconcile your deployment. This applies any configuration differences (such as tags) between your stack definition and the existing resource.Form Factor Commands
svc-spec-doc template generate
Generate a service specification document by analyzing your app’s bound stacks and mapping discovered services to target environment equivalents.-appName: The app name (must have Terraform stacks bound)-targetEnv: Customer environment (Aws, Gcp, Azure, DigitalOcean, Kube, Metal, BareMetal)
-output: Output file path. Use-or omit for stdout.
- Analyzes Terraform stacks bound to your app
- Discovers AWS services (EKS, RDS, VPC, etc.)
- Maps each service to its target environment equivalent
- Generates a service specification document with dependencies and version constraints
After generating the service specification document, review the
tuning fields for each service. Since scaling requirements for private deployments often differ from your cloud deployment, this is an opportunity to tune resource allocations (storage size, replicas, CPU, memory) for the specific form factor.form-factor create
Create a new form factor for your app (e.g.,aws-connected, digitalocean-connected).
-appName: The name of the app to create a form factor for.-formFactorName: A name for the form factor (must match:[a-z0-9_\-]{1,64}).-env: The environment for the form factor. One of:Aws,Gcp,Azure,DigitalOcean,Kube,Metal,Local,BareMetal.-connectivity: The connectivity for the form factor. One of:Connected,Disconnected,AirGapped.
-description: A description for the form factor.-svcSpecDoc: Path to JSON file containing service specification documents. Usesvc-spec-doc template generateto generate a starter file.
form-factor export
Export an existing form factor as SvcSpecDoc JSON for modification and evolution.-appName: The name of the app that owns the form factor.-formFactorName: The name of the form factor to export.
-version: Specific version to export (e.g.,1.2.0). Defaults to current (latest) version.-output: Output file path. Use-or omit for stdout.
form-factor create. The exported JSON can be modified and then used with form-factor evolve to create a new version.
The export includes:
- Service requirements (
ExactandOneOf) - Service tunings (converted to tuning JSON)
- Service dependency requirements
env and connectivity are not included in the SvcSpecDoc as they cannot be changed during evolution. The export includes these as informational comments in the output.form-factor promote
Promote a form factor version to Preferred status.-appName: The name of the app that owns the form factor.-formFactorName: The name of the form factor.-version: The version to promote (e.g.,1.2.0).
form-factor retire
Retire a form factor version.-appName: The name of the app that owns the form factor.-formFactorName: The name of the form factor.-version: The version to retire (e.g.,1.0.0).
form-factor evolve
Evolve an existing form factor to a new version using a modified SvcSpecDoc.-appName: The name of the app that owns the form factor.-formFactorName: The name of the form factor to evolve.-svcSpecDoc: Path to the SvcSpecDoc JSON file (typically generated viaform-factor export) with updated service requirements.
-name: New name for the form factor (defaults to current name).-description: New description for the form factor (defaults to current description).
- Major: Breaking changes (e.g., stricter constraints, new requirements, removed choices).
- Minor: Compatible additions (e.g., relaxed constraints, new choices, removed requirements).
- Patch: Metadata changes only (e.g., name or description updates).
env and connectivity cannot be changed during evolution. Changing these requires creating a new form factor instead.- Export:
tensor9 form-factor export -appName my-app -formFactorName aws-connected -output config.json - Edit: Modify
config.jsonwith updated service requirements or tunings. - Evolve:
tensor9 form-factor evolve -appName my-app -formFactorName aws-connected -svcSpecDoc config.json
form-factor version lifecycle
When you evolve a form factor, the new version starts as Active. Existing installs stay pinned to their original version until explicitly upgraded. See Form factor versioning for details on version statuses (Preferred, Active, Retiring, Retired).service specification document format
The service specification document is a JSON file used withform-factor create and form-factor evolve to define service requirements and dependencies.
name: The dependency identifierversionConstraints: Semver constraint you specify (e.g.,>=1.24.0,>=1.24.0 <2.0.0)installMethod: EitherManaged(Tensor9 installs it) orPreInstalled(customer already has it). Note: private Kubernetes environments only supportPreInstalled.
Appliance Setup Commands
appliance setup create
Create a setup script that can be used to set up an appliance.-customerName: The name of the customer that will own the appliance.-appName: The name of the app to be installed into that appliance.-cloud: The cloud to set up the appliance in: Aws, Gcp, Azure, Private, Local.-formFactorName: The name of the form factor the appliance will have.
-privateCloudName: The name of the private cloud the appliance will be in. Must be owned by the same customer that will own the appliance.-vendorMetadata: JSON-encoded map of string key/value pairs to set on the resulting install once the appliance is set up and the app is installed.
appliance setup list
List appliance setups.-appId: The ID of the app to list appliance setups for.-buyerId: The ID of the customer to list appliance setups for.
appliance setup retrieve
Retrieve appliance setup info.-applianceSetupKey: The appliance setup key of the appliance setup to retrieve.
Appliance Commands
appliance list
List all appliances.-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
appliance retrieve
Retrieve appliance details.-applianceName+-customerName: Retrieve by appliance name.-applianceId: Retrieve by appliance ID.
-applianceName: The name of the appliance to retrieve. Requires-customerName. Alternative: use-applianceId.-customerName: The name of the customer that owns the appliance. Required with-applianceName.-applianceId: The ID of the appliance to retrieve. Alternative: use-applianceNamewith-customerName.-outputFmt: Output format: Human (default), Json, Raw, Csv.-raw: Output raw value only (alias for-outputFmt Raw).-json: Output as JSON (alias for-outputFmt Json).-csv: Output as CSV (alias for-outputFmt Csv).
appliance check
Health check an appliance.-applianceId: The appliance ID of the appliance to health check.
Install Commands
install list
List installs across apps, customers, or appliances. An install represents one of your apps running on a specific customer’s appliance.-appName: List all installs for an app. Alternative:-appId.-customerName: List all installs for a customer. Alternative:-customerId.-applianceName: List installs on a specific appliance. Requires-customerName. Alternative:-applianceId.
Kubernetes Commands
kube role list
List Tensor9 Kubernetes RBAC roles and their default state. Prints thekubectl commands to check current bindings on the cluster. Run by the customer using a customer API key.
-applianceName: Appliance name (required if the customer has multiple appliances).-namespace: Override namespace (auto-discovered from appliance configuration).-clusterWide: UseClusterRoleBindingscope instead of namespace-scopedRoleBinding.
| Role | Default | Description |
|---|---|---|
install | disabled | Full infrastructure provisioning. Required for Tensor9 to perform infrastructure provisioning and upgrades. |
steady-state | enabled | Read-only monitoring. Required for Tensor9 to monitor appliance health. |
deploy | disabled | Create or modify vendor workloads |
operate-readonly | disabled | Read-only troubleshooting |
operate-readwrite | disabled | Write troubleshooting |
operate-admin | disabled | Full troubleshooting |
kube role enable
Print thekubectl apply command needed to enable a Tensor9 RBAC role. This command does not mutate the cluster; it prints the command that the customer must run to apply the binding.
-role: The role to enable. One of:install,steady-state,deploy,operate-readonly,operate-readwrite,operate-admin.
-applianceName: Appliance name (required if multiple appliances).-namespace: Override namespace (auto-discovered).-clusterWide: Generate aClusterRoleBindinginstead of a namespace-scopedRoleBinding.
kube role disable
Print thekubectl delete command needed to disable a Tensor9 RBAC role. This command does not mutate the cluster; it prints the command that the customer must run to remove the binding.
-role: The role to disable. One of:install,steady-state,deploy,operate-readonly,operate-readwrite,operate-admin.
-applianceName: Appliance name (required if multiple appliances).-namespace: Override namespace (auto-discovered).-clusterWide: Target aClusterRoleBindinginstead of a namespace-scopedRoleBinding.
aws eks grant-access
Grant an IAM role full admin access to an EKS cluster. This command mutates the cluster: it creates an access entry, associatesAmazonEKSClusterAdminPolicy, and updates the local kubeconfig.
-clusterName: The EKS cluster name.-roleArn: The full IAM role ARN to grant access to (e.g.,arn:aws:iam::123456789012:role/MyRole).
-region: AWS region. Defaults tous-west-2.-awsProfile: AWS profile to use for credentials.-skipKubeconfig: Skip the local kubeconfig update step.
- Ensures the cluster’s authentication mode is
API_AND_CONFIG_MAP. - Creates an access entry for the IAM role.
- Associates the
AmazonEKSClusterAdminPolicywith the access entry. - Updates the local kubeconfig to point at the cluster (unless
-skipKubeconfigis set).
Advanced Commands
appliance setup
Set up an appliance (run by customer in their environment).-setupKey: A single-use setup key identifying which appliance is being set up and how to set it up.-cloudRegion: Cloud region (e.g.,aws:us-west-2,gcp:us-central1).
-autoApprove: Automatically approve infrastructure changes. Required for non-interactive setups.-vanityDomain: The vanity domain for the appliance (e.g.,app-name.company.com).-domainSuffix: Domain suffix for the appliance (e.g.,app-name.internal.company.com).-privateZone: Whether the domain suffix should be a private zone instead of a public zone.-gcpProjectId: The project ID of the GCP project the appliance will live in. Only applies if setting up an appliance in GCP. Defaults to the project ID of the GCP environment running this action (if any).-resourceTags: JSON-encoded key/value pairs to apply as tags on all cloud resources created by the appliance.-credentialType: The type of credential to use to set up your appliance. Must be paired with-credential.-credential: The credential to use to set up your appliance. Must be paired with-credentialType.-buyerSvcSpec: Path to a service spec JSON file containing service selections and configurations. When provided, the setup record is updated with customer inputs before proceeding with setup.-json: Output the created appliance as JSON instead of human-readable text.-kubeClusterMode: Kubernetes cluster mode for Kube form factors: DedicatedCluster or VCluster.-kubeCfg: Path to kubeconfig file for Kube form factors.-vClusterName: vCluster name (required whenkubeClusterMode=VCluster).-vClusterHostNamespace: Host namespace for vCluster (required whenkubeClusterMode=VCluster).
machine setup
Set up a machine in a private cloud.-type: Machine type (Ctrl or Iso)-ip: IP address exposed to other machines in the private cloud
-zone: Zone name (e.g.,datacenter-1)-gpu: GPU type (None, NvidiaT4, NvidiaA10, NvidiaA100, etc.)-force: Force setup even if already set up
Common Options
These options are available on most commands:-apiKey: Your Tensor9 API key (can also useT9_API_KEYenvironment variable)-vendorId: Your vendor ID (usually auto-discovered from API key)-awsProfile: AWS CLI profile for credentials-help: Show help for the command
Exit Codes
0: Success1: General error2: Command parsing error
Environment Variables
T9_API_KEY: Your Tensor9 API key
Getting Help
For command-specific help:Related Topics
- Install tensor9 CLI: Installation instructions
- Common Workflows: Step-by-step guides for common tasks
- Quick Start Guides: Get started with Tensor9