Balena fleet management
Project description
FCT-Kiwi
A command-line tool for Balena device configuration management, allowing you to easily change, clone, purge, retrieve, and manage variables across devices and fleets.
Table of Contents
Installation
pip install fct-kiwi
Authentication
To use this tool, you need to set up your Balena API key as an environment variable:
- Create a
.envfile in the same directory as the script - Add your Balena API key:
BALENA_API_KEY=your_api_key_here
Commands
Usage in other scripts
To use this packages functionality in other scripts simply import the functions you need from the following list.
from fleet_control import clone, change, etc...
Change
Change or create specified variable(s) to target device(s).
# Basic usage
fct change 'NODE_WEATHER_DEBUG=0=*' 4D163 4D164
# Change multiple variables
fct change 'NODE_WEATHER_DEBUG=0=* ANOTHER_VAR=value=service' 4D163 4D164
# Target a fleet
fct change 'NODE_WEATHER_DEBUG=0=*' Staging4_x
# Use a file containing variables
fct change --file variables.txt '' 4D163 4D164
Clone
Clone configuration from a source device or fleet to target device(s).
# Clone from one device to others
fct clone 4E288 4D163 4D164
# Clone from a fleet to a device
fct clone Staging4_x 4D163
# Clone from a fleet to another fleet
fct clone Staging4_x fleet_name
# Clone with exclusions
fct clone --exclude "VAR1 VAR2" 4E288 4D163 4D164
Purge
Purge all custom variables in target device(s).
# Purge all custom variables from devices
fct purge 4E288 4D163 4D164
# Purge with exclusions
fct purge --exclude "VAR1 VAR2" 4E288 4D163 4D164
Get
Fetch variable value(s) for a device.
# Get a specific variable
fct get 4E288 UAVCAN_CHASSIS_CURRENT_T2
# Get all custom variables
fct get 4E288 --custom
# Get all variables (device + fleet)
fct get 4E288 --all-vars
# Save variables to a file
fct get 4E288 --output result.json
Delete
Delete the overwritten value for specified variable(s) on the target device(s).
# Delete a variable
fct delete 'NODE_WEATHER_DEBUG=0=*' 4D163 4D164
# Delete multiple variables
fct delete 'VAR1=value=service VAR2=value=*' 4D163 4D164
# Delete variables from a file
fct delete --file variables.txt '' 4D163 4D164
Move
Move target(s) from its current fleet to a specified fleet.
# Move devices to a new fleet
fct move Staging4_x 4E288 4D163 4D164
# Move keeping custom device variables
fct move --keep-vars Staging4_x 4E288 4D163 4D164
# Move keeping custom device and service variables
fct move --keep-service-vars Staging4_x 4E288 4D163 4D164
# Move with cloning (keep custom and previous fleet variables)
fct move --clone Staging4_x 4E288 4D163 4D164
# Move and pin to specific release
fct move --semver "1.3.11+rev87" Staging4_x 4E288 4D163 4D164
Schedule
Schedule variable changes to be applied at a specific time.
# Schedule a change for tomorrow at 3 AM (default)
fct schedule 'WEATHER_NODE_DEBUG=0=main' 4B058 4D163
# Schedule with a specific date and time
fct schedule --date '2025-02-25 12:06:00' 'WEATHER_NODE_DEBUG=0=main' 4B058 4D163
# Schedule with a file containing variables
fct schedule --file vars.json --date '2025-02-25 12:06:00' '' 4B058
# Schedule with different timezone
fct schedule --tz 'America/New_York' 'WEATHER_NODE_DEBUG=0=main' 4B058 4D163
Initialize
Initialize a target device with previous device tags, remove old device, delete default config variables, and move to specified fleet.
# Initialize a device and move it to a fleet
fct initialize Staging4_x 4E288
File Format
When using the --file option, the file should contain JSON formatted variables:
{
"env_vars": {
"VAR1_NAME": "VAR1_VALUE",
"VAR2_NAME": 2
},
"service_vars": {
"main": {
"SERVICE_VAR1_NAME": "SERVICE_VAR1_VALUE",
"SERVICE_VAR2_NAME": "SERVICE_VAR2_VALUE"
}
}
}
For variable scheduling:
{
"purge": false,
"Target": [
{
"is_fleet": "TARGET1_TYPE",
"name": "TARGET1_NAME"
},
{
"is_fleet": "TARGET2_TYPE",
"name": "TARGET2_NAME"
}
],
"variables": [
{
"name": "VAR1_NAME",
"value": "VAR1_VALUE",
"service": "VAR1_TYPE"
},
{
"name": "VAR2_NAME",
"value": "VAR2_VALUE",
"service": "VAR2_TYPE"
},
]
}
Error Handling
The tool will return appropriate error messages if:
- The Balena API key is not set
- No variables are provided when required
- Target devices or fleets cannot be found
- API requests fail
Dependencies
- balena-sdk
- click
- python-dotenv
Author
Juan Pablo Castillo - juan.castillo@kiwibot.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fct_kiwi-1.0.2.tar.gz.
File metadata
- Download URL: fct_kiwi-1.0.2.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.8.0-57-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c87065af903af5655ef36673ff4ee75b4c32a85054515327c469c8136b16555
|
|
| MD5 |
d7c45d85c1a6a890d8f33e39d4210321
|
|
| BLAKE2b-256 |
60ea99bdde6a0fb9e679a5eccbb0e72b4273d1e1eafd38224987549013e63f7e
|
File details
Details for the file fct_kiwi-1.0.2-py3-none-any.whl.
File metadata
- Download URL: fct_kiwi-1.0.2-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.8.0-57-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30e01e3404308acc2c7e12c286ed137bfa5bb41ca8761d8e93a1611e57cd99a4
|
|
| MD5 |
ccc493af9133e02702931f579060b425
|
|
| BLAKE2b-256 |
e1d56e24e97ddbed0fc7d2524bc7aa99b36e1a1252d2e324b515128137a40a26
|