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
- FCT-Kiwi
Installation
pip install fct-kiwi
Authentication
To use this tool, you need to set up some environment variables if you haven't already, please refer to the Environment variables section to set all the variables that don't have a default, this can be done in your terminal as environment variables, for example:
export BALENA_API_KEY="your_api_key_here"
Or an environment variables file to handle all at once can be defined as shown in the next section.
Environment variables
By default this is the order in which variables are read:
.envfile- default
- os.environ
Other variables might be needed for certain commands and are set by default, but can be overridden if necessary.
- Create a
.envfile in the same directory as the script or set the path into your environment asexport FCT_ENV_PATH="/path/to/my/.env" - Add your Balena API key:
BALENA_API_KEY=your_api_key_here - Add other variables in new lines, this is a list of all variables used:
| Variable | Description | Default |
|---|---|---|
BALENA_API_KEY |
Balena API key | |
PROJECT_ID |
GCP Project | |
SPREADSHEET_NAME |
Google Sheets file for logging | SD Logs |
LOCATION_ID |
GCP Queue location | |
QUEUE_ID |
GCP Queue identifier | |
AUTHOR |
Google Sheets author signature | default |
ORGANIZATION_HANDLE |
Balena Organization Handle | |
GOOGLE_APPLICATION_CREDENTIALS |
GCP Service account file | serviceAccountKey.json |
TAGS_BY_VERSION_FILE |
Tags by version file location | tags_by_version.json |
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...
Otherwise you can use all commands from your terminal.
Change
Change or create specified variable(s) to target device(s).
# Basic usage
fct change 'VAR_NAME=0=*' 4X002 4X003
# Change multiple variables
fct change 'VAR_NAME=0=* ANOTHER_VAR=value=service_name' 4X002 4X003
# Target a fleet
fct change 'VAR_NAME=0=*' FLEET_NAME
# Use a file containing variables
fct change --file variables.txt '' 4X002 4X003
Clone
Clone configuration from a source device or fleet to target device(s).
# Clone from one device to others
fct clone 4X001 4X002 4X003
# Clone from a fleet to a device
fct clone FLEET_NAME 4X002
# Clone from a fleet to another fleet
fct clone FLEET_NAME ANOTHER_FLEET_NAME
# Clone with exclusions
fct clone --exclude "VAR1 VAR2" 4X001 4X002 4X003
Purge
Purge all custom variables in target device(s).
# Purge all custom variables from devices
fct purge 4X001 4X002 4X003
# Purge with exclusions
fct purge --exclude "VAR1 VAR2" 4X001 4X002 4X003
Get
Fetch variable value(s) for a device.
# Get a specific variable
fct get 4X001 VAR_NAME
# Get all custom variables
fct get 4X001 --custom
# Get all variables (device + fleet)
fct get 4X001 --all-vars
# Save variables to a file
fct get 4X001 --output result.json
Delete
Delete the overwritten value for specified variable(s) on the target device(s).
# Delete a variable
fct delete 'VAR_NAME=0=*' 4X002 4X003
# Delete multiple variables
fct delete 'VAR1=value=service VAR2=value=*' 4X002 4X003
# Delete variables from a file
fct delete --file variables.txt '' 4X002 4X003
Move
Move target(s) from its current fleet to a specified fleet.
# Move devices to a new fleet
fct move FLEET_NAME 4X001 4X002 4X003
# Move keeping custom device variables
fct move --keep-vars FLEET_NAME 4X001 4X002 4X003
# Move keeping custom device and service variables
fct move --keep-service-vars FLEET_NAME 4X001 4X002 4X003
# Move with cloning (keep custom and previous fleet variables)
fct move --clone FLEET_NAME 4X001 4X002 4X003
# Move and pin to specific release
fct move --semver "1.3.11+rev87" FLEET_NAME 4X001 4X002 4X003
Schedule
Schedule functions to run at a specific time. Service account file path required for creating the task. Set with the GOOGLE_APPLICATION_CREDENTIALS variable set in the .env file or in your environment.
Schedule change
Change or create specified variable(s) to target device(s).
# Schedule a change for tomorrow at 3 AM (default)
fct schedule change 'VAR_NAME=0=main' 4X001 4X002
# Schedule with a specific date and time
fct schedule change --date '2025-02-25 12:06:00' 'VAR_NAME=0=main' 4X001 4X002
# Schedule with a file containing variables
fct schedule change --date '2025-02-25 12:06:00' --file vars.json
# Schedule with different timezone
fct schedule change --tz 'America/New_York' 'VAR_NAME=0=main' 4X001 4X002
Schedule update
Pins the specified devices to the selected release in that fleet.
# Schedule a pin to release for tomorrow at 3 AM (default)
fct schedule update FLEET_NAME 1.3.19+rev43 4X001 4X002
# Direct input with date and timezone
fct schedule update --date '2025-04-01T15:30:00Z' --tz 'Europe/London' FLEET_NAME 1.3.19+rev43 4X001
# Use a JSON file for targets and release info
fct schedule update --date '2025-02-25 12:06:00' --file file.json
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 FLEET_NAME 4X001
Rename
Rename a target device with new ID. Optional new tags for corresponding version read from configuration file. Configuration file path set with the TAGS_BY_VERSION_FILE variable set in the .env file or in your environment.
# Rename a device
fct rename 4A001 4B222
# Rename a device and specify new version
fct rename --version "4.3F" 4A001 4B222
File Format
Changing variables
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"
}
}
}
Scheduling
Variable changes
{
"targets": [
"TARGET1_NAME",
"TARGET2_NAME"
],
"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"
}
}
}
}
Pin devices to release
{
"targets": [
"TARGET1_NAME",
"TARGET2_NAME"
],
"fleet": "FLEET_NAME",
"release": "RELEASE_SEMVER"
}
Tags by version
{
"4.3B":{
"Tag1": "value1",
"Tag2": "value2",
}
}
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.8.2.tar.gz.
File metadata
- Download URL: fct_kiwi-1.8.2.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.10 Linux/6.11.0-1012-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f36c9bffe6532b56975053d50ef774d2468a1f170d28ecf152aa49918fe6a793
|
|
| MD5 |
a4b59c02b3aafc036119914823391fcf
|
|
| BLAKE2b-256 |
cf7710916872862251d15f65852bd35689b8c9ae03f4e9e28d4f7c0742380e6f
|
File details
Details for the file fct_kiwi-1.8.2-py3-none-any.whl.
File metadata
- Download URL: fct_kiwi-1.8.2-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.10 Linux/6.11.0-1012-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c0fdc70840dc721a386c2a5432b40b9c4c1ce9fdcaf964d7a6ee2d99743660c
|
|
| MD5 |
dd85c8b69eb453477016a16af6c4c158
|
|
| BLAKE2b-256 |
fa30738f3032e7aa361d31396592b9ff31e9315777caaff6d96cf69187ac4c50
|