Skip to content

Releases: thin-edge/thin-edge.io

1.4.2

14 Jan 18:14
5101467
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🚀 Features

  • installation|cli: Trigger tedge multicall with symlinks as well as sub-commands - #3313

🐛 Bug Fixes

  • cli: cleanup empty profiles - #3310
  • cli: tedge cert create-csr should use cloud profile's CN - #3316
  • configuration: support symlinks in atomic file write methods - #3324
  • cli: Update component crates descriptions - #3317

📓 Documentation

  • doc: Add documentation example missing arg - #3320

⛵ Refactor

  • refactor: Simplify command state update methods - #3309
  • c8y: Simplify SmartREST publish topics - #3292

🔎 Testing

  • testing: pretty print json payloads and disable robotidy to preserve leading whitespace - #3314

Full Changelog: https://github.com/thin-edge/thin-edge.io/compare/1.4.1..1.4.2

1.4.1

19 Dec 15:15
b48c19c
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🐛 Bug Fixes

  • workflows: process non-versioned in-progress commands on startup - #3306
  • workflows: Persist workflow definition of pending commands on start - #3307

Full Changelog: https://github.com/thin-edge/thin-edge.io/compare/1.4.0..1.4.1

1.4.0

17 Dec 12:33
8abce11
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

✨ Highlights

Cloud profiles

Support connecting thin-edge.io to multiple Cumulocity tenants. Check out the docs for more details.

Using workflows in custom operation handlers

Use the power of thin-edge.io workflows to handle the execution of custom operation handlers. Not only does this promote a more robust handling of the execution of the custom operation, but it also encourages users to implement a cloud-agnostic handler which enables you to trigger the operations from any cloud.

See the docs for more details.

Support uploading files to Cumulocity

A new subcommand has been added which allows users or process/s to upload a file to Cumulocity easily.

Example

Upload a csv file to Cumulocity as an event with an attached binary file.

tedge upload c8y \
    --file "/opt/data/some_data.csv" \
    --mime-type "text/csv" \
    --type "tedge_data_logger_snapshot" \
    --text "Data logger data" \
    --json "{\"additionalData\":{\"application\":\"data-logger\"}}"

See the reference page for all the options.

🚀 Features

  • c8y: allow operation handlers to match on json payloads - #3144
  • workflows: support reloading workflows at runtime - #3180
  • c8y: support user topics when handling custom operation - #3189
  • c8y: support Cumulocity SmartREST 1.0 - #3196
  • workflows: add workflow support for custom operation handlers - #3225
  • cli: add filtering to tedge config list - #3264
  • c8y: add c8y createBulk topics to bridge - #3286
  • configuration|c8y: support Cumulocity legacy file upload/download operations - #3285
  • feat: Support multiple cloud profiles - #3278
  • c8y|cli: tedge upload c8y - #3274

🐛 Bug Fixes

  • packaging: target incompatibility with armv6 package for raspberry pi - #3182
  • c8y|bridge: remove duplicate subscription in c8y built-in bridge - #3188
  • mqtt|c8y: Trim reason field in "succeed custom operation" SmartREST message - #3179
  • mqtt|c8y: replace hardcoded topic prefix for SmartREST templates when creating bridge config - #3198
  • software: agent stops processing on ill-formed software_update command payloads - #3209
  • c8y|bridge: Subscribe to C8Y topics using QoS 1 - #3201
  • workflows: agent leaves interrupted operations in non-final state - #3210
  • troubleshooting: show config set instructions in certificate error message - #3221
  • c8y: c8y http proxy wrongly assumes any hostname is from the same tenant - #3222
  • troubleshooting: tedge-agent error does not show which file does not exist - #3223
  • fix: Don't fail if only some operations could not be loaded - #3236
  • workflows: builtin workflows don't have to be removed - #3258
  • fix: skip publishing error message if operation update is not required - #3266
  • fix: ensure concurrent server always responds to shutdown signal - #3291
  • c8y: split c8y JSON over MQTT messages using newline delimiter - #3302

📓 Documentation

  • workflows: add missing variable available in workflow states - #3164
  • firmware: add notes to firmware on-boarding instructions - #3181
  • c8y: add required ports information for cloud connections - #3194
  • monitoring: add tedge-watchdog decision page - #3193
  • c8y: remove docs for measurements with units - #3245
  • workflows: remove workflow warnings - #3287
  • yocto|firmware: update yocto instructions to use new kas project location - #3298

⛵ Refactor

  • refactor: reorder crates/core/c8y_api/src/smartrest/operation.rs - #3161
  • configuration|c8y: add support to define_tedge_config for (optionally) multi-value fields - #3126
  • refactor: flexible Authorization header type of HTTP request - #3190
  • refactor: Merge log_manager crate under tedge_log_manager - #3215
  • refactor: update crate dependencies - #3216
  • c8y: simplify c8y_http_proxy - #3224
  • certificates: Untangle certificate request, creation and renewal - #3268
  • cli: use CommonArgs for common arguments - #3273
  • refactor: Extract operation implementation details from CumulocityConverter - #3260
  • refactor: Extract supported_operations module from c8y_api - #3277
  • refactor: Create a module with SmartREST message id consts - #3282

🔎 Testing

  • testing: add bridge health status keywords - #3167
  • testing: format robotframework system tests - #3169
  • mqtt|testing: check publishing of telemetry data whilst mapper is down - #3187
  • monitoring|testing: Create a tedge-watchdog test suite - #3138
  • testing: update robotframework-c8y library - #3276

📋 Miscellaneous Tasks

  • developer-exp: update packages in dev container image - #3172
  • developer-exp: add support for building against specific gnu libc versions - #3175
  • configuration: Use tempfile in config-manager and downloader to ensure tmpfiles are always deleted - #3178
  • chore: Fix Rust 1.82 clippy lints - #3195
  • mqtt|c8y: Improve validation of SmartREST payloads - #3191
  • chore(deps): Bump crate-ci/typos from 1.26.1 to 1.26.8 - #3207
  • troubleshooting|cli: Make --debug flag override RUST_LOG - #3208
  • developer-exp: Enable line numbers for logs when using RUST_LOG - #3211
  • mqtt: Add a warning about clearing command metadata being unsupported - #3213
  • feat: Group workspace crates first in top-level Cargo.toml and deduplicate yansi and toml dependencies - #3214
  • troubleshooting: Attach topic to c8y message conversion error - #3217
  • software|configuration: Change which download errors are retryable - #3229
  • mqtt: wait for mosquitto to start rather than blindly sleeping in tedge connect - #3246
  • troubleshooting|cli: Add --log-level to tedge and c8y-remote-access-plugin - #3254
  • developer-exp: publish devcontainer image - #3265
  • chore: fix rust 1.83 clippy lints - #3272
  • troubleshooting|cli: Add --log-level to tedge-write and tedge-apt-plugin - #3271
    ...
Read more

1.3.1

04 Oct 13:07
0866b9b
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🚀 Features

  • profile: Support skipping operations in device profile - #3142
  • troubleshooting: allow to init remote access plugin with non-standard user/group - #3131
  • packaging: add tedge-apt-plugin as recommended dependency of tedge-agent - #3152

🐛 Bug Fixes

  • monitoring: Ignore extra HealthStatus fields in service monitor - #3132
  • registration: c8y mapper panics on unexpected registration message - #3134
  • firmware|workflows: Capability message for firmware_update workflow - #3146
  • configuration: Stop chowning in tedge-agent - #3148
  • troubleshooting|c8y: check if log exists before trying to upload it - #3150
  • packaging: add mosquitto as a weak dependency to tedge - #3151
  • mqtt: Increase default MQTT max payload size to 256 MiB - #3130

📓 Documentation

  • docs: Add tedge-write documentation page - #3116
  • monitoring: publish pid as number instead of string - #3127

🔎 Testing

  • aws|testing: extend AWS system tests using robotframework-aws library - #3097
  • testing: update source to testing libraries - #3135
  • testing: format code and add ci check for robotframework formatting - #3129

📋 Miscellaneous Tasks

  • registration: Simplify entity auto-registration - #3139

Full Changelog: https://github.com/thin-edge/thin-edge.io/compare/1.3.0..1.3.1

1.3.0

16 Sep 22:18
61fdb06
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🚀 Features

  • c8y|aws|az: make aws and azure topic prefixes configurable in built-in bridge - #3052
  • profile: support device profile operation - #2920
  • c8y: use custom topic prefix in mapper service name - #3078
  • workflows: report to the cloud workflow definition errors - #3079
  • c8y: add an option to use c8y operation ID to update its status - #3076
  • troubleshooting: avoid using explicit path to the c8y-remote-access-plugin binary - #3112
  • configuration|installation|cli: support setting config dir via env variable - #3113
  • containers|packaging: use explicit user/group id in container image - #3118
  • containers|packaging: initialize the remote access plugin in the container image - #3120

🐛 Bug Fixes

  • workflows: don't send status update for sub-workflow operations - #3050
  • mqtt: increase max packet size for built-in bridge - #3059
  • software: software artifacts are downloaded twice when the update-list feature is not available - #3065
  • software: display error information for failed software update due to unrecognised type - #3058
  • profile: create device_profile workflow before loading workflows from disk - #3101
  • configuration: tedge write remove hardcoded path - #3099
  • cli: c8y-remote-access-plugin help - #3121
  • c8y: handle error when jwt token could not be retrieved - #3119
  • bridge: builtin bridge disconnected when under heavy load - #3122

📓 Documentation

  • mqtt|security: fix deprecated mTLS setting in user docs - #3100
  • profile: device profile operation guide - #3102

⛵ Refactor

  • refactor: Executing takes extra MQTT messages - #3049
  • workflows: improve handling of workflow default values - #3064
  • refactor: restore visibility of tedge api relied upon by thick edge - #3090
  • configuration: Simplify config manager control flow - #3086
  • mqtt|c8y: include topic prefix in c8y last-will service name - #3108

🔎 Testing

  • testing: retry connecting to broker in bridge test proxy - #3072
  • testing: improve tedge-write RobotFramework suite - #3094

📋 Miscellaneous Tasks

  • c8y: don't process operation status duplicates - #3053
  • chore(deps): Bump crate-ci/typos from 1.23.7 to 1.24.1 - #3082
  • software|configuration: fix issues in atomically_write_file_* functions - #3081
  • configuration: Only use tedge-write after normal copy fails due to permissions and improve tedge-write logging - #3069
  • chore(deps): Bump crate-ci/typos from 1.24.1 to 1.24.3 - #3092
  • general: Extract atomic write function into a module - #3091
  • configuration: Fix process exit code and stderr printing 2 times - #3098
  • chore(deps): Bump peter-evans/create-pull-request from 6 to 7 - #3104
  • chore(deps): Bump crate-ci/typos from 1.24.3 to 1.24.4 - #3103
  • containers|packaging: fix docker linting warnings - #3117
  • testing: Reformat Robot Framework files with robotframework-tidy - #3109
  • workflows: improve workflow builtin actions - #3105

🔎 CI/CD

  • ci: update codecov range - #3060
  • testing: don't fail cargo test on warnings - #3084

Full Changelog: https://github.com/thin-edge/thin-edge.io/compare/1.2.0..1.3.0

1.2.0

01 Aug 21:01
bbfef48
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🚀 Highlights

Support Cumulocity IoT device availability feature #2940

The Cumulocity IoT Device monitoring feature is supported out-of-the-box with thin-edge.io. This makes it easier to monitor if your device is online and sending data (with minimal bandwidth).

Check out the documentation for more details.

Cumulocity Remote Access connections are now independent when using systemd #3007

If you're using systemd, then the Cumulocity Cloud Remote Access feature is even more useful as thin-edge.io now uses systemd socket activation to launch the connection meaning that the connection is now fully independent of other services...to put it another way, if you're using the Cumulocity IoT Cloud Remote Access feature to connect securely to your device with SSH, then you can now restart all of the thin-edge.io services, or even do a full thin-edge.io update without getting disconnected!

tedge config supports appending/removing values in an array-type tedge configs - #2943

This might not sound very interesting but if you're using custom SmartREST 2.0 templates with thin-edge.io, then the adding and remove templates just became a lot easier. You can easily add and remove single values without having to check what any existing values are.

For example, adding and removing values to the c8y.smartrest.templates setting is shown below (also including a comparison without how it previous was done).

# before - each time you set a new value you have to provide the old values
tedge config set c8y.smartrest.templates mycollection1
tedge config set c8y.smartrest.templates mycollection1,mycollection2
tedge config set c8y.smartrest.templates mycollection1,mycollection2,mycollection3

# after - only add the value you want
tedge config add c8y.smartrest.templates mycollection1
tedge config add c8y.smartrest.templates mycollection2
tedge config add c8y.smartrest.templates mycollection3

# Or remove a single value without checking what was previously set
tedge config remove c8y.smartrest.templates mycollection2

Note These new command is not just limited to the c8y.smartrest.templates configuration, but any array based configuration like c8y.topics, az.topics or aws.topic.

🚀 Features

  • aws: retry aws connection check when establishing initial connection - #3004
  • c8y|cli: tedge cert upload usability improvements - #2961
  • configuration: avoid using 444 permissions in example tedge-configuration file - #2948
  • configuration: use loopback ip address instead of alias to improve compatibility - #2952
  • configuration|troubleshooting: Use workflows for config and log management operations - #2844
  • mqtt: Add reconnection backoff to built-in bridge - #2915
  • software: add extra context to errors when atomically writing to file - #2975
  • software: skip package download if the url is empty - #2905
  • troubleshooting: add path and method used to HTTP error messages to improve debugability - #2957
  • troubleshooting: skip filtering by date when a static path is used - #2991
  • troubleshooting|c8y: upload c8y log file on failure by default - #3009
  • troubleshooting|c8y: use direct c8y connection for c8y-remote-access-plugin - #3006
  • workflows: workflow support combining fixed strings with variable expansions - #2918

🐛 Bug Fixes

  • c8y: Remove unwanted host header before forwarding request to Cumulocity - #2946
  • c8y: use MQTT as well as HTTP host to determine possible tenant url - #2977
  • childdevices: tedge-agent skip legacy topic subscription when running as a child device - #3035
  • childdevices: tedge-agent use the root topic when provided by the cli flag - #3033
  • cli: tedge config get returns 1 when a key is not set - #2995
  • configuration: make tedge-write not reset owner/group - #2974
  • configuration: use octal format for file permission in generated example file - #2958
  • configuration|c8y: Parse root certificate from either file or directory in tedge cert upload - #2953
  • fix: stop OperationHandler spawning extra tasks - #3046
  • mqtt: built-in MQTT bridge handling of QoS 0 messages published to the cloud topic - #3028
  • mqtt: Handle messages republished by MQTT bridge following a disconnection event - #3018
  • mqtt|cli: disconnect cleanly from local MQTT broker in tedge connect - #3025
  • mqtt|cli: Ensure the MQTT connection is properly closed - #2936
  • mqtt|cli: tedge mqtt ignoring ctrl-c when connection fails - #2950
  • packaging: improve compatibility of user/group existence check in package maintainer scripts - #2942
  • software: Include software plugin output in workflow log - #2895
  • software|mqtt: too many software list requests - #2964
  • workflows: command steps are executed twice - #2937

📓 Documentation

  • aws: fix link to the example aws policy - #2998
  • c8y: add advanced software mgmt descriptions - #2985
  • c8y: add instructions for Cumulocity IoT custom domains - #2970
  • c8y|aws|az: improve mapper documentation via adding user-context - #3000
  • configuration: change config management permissions in the example - #2955
  • docs: fix broken links in markdown files - #2962
  • docs: Fix outdated Apama plugin documentation - #2996
  • docs: update internal release process - #2934
  • firmware: improve onboarding instructions - #2971
  • mqtt|certificates: add common errors section for update-ca-certificates when rehashing fails - #2992

⛵ Refactor

  • c8y: operations module - #3012
  • c8y|registration: c8y mapper republishes metadata message with @id - #2925
  • monitoring: Refactor health status code - #2919
  • workflows: rename workflow related structs - #2912

🔎 Testing

  • c8y|testing: use more robust http parsing in the c8y-proxy host header tests - #2956
  • mqtt|cli|testing: ensure the MQTT connection is properly closed - #2944
  • mqtt|testing: built-in bridge system test compatibility - #2911
  • mqtt|testing: remove OpenSSL Error check because of flakiness - #2989
  • plugins|testing: fix unit test to pass when the unit socket file exists - #3041
  • testing: don't remove systemd-tmpfiles-setup service which is responsible for creating tmp folders - #2979
  • testing: fix regex escaping in function description - #2930
  • testing: improve debugging of bootstrap script and include systemd/cgroup compat check - [#2981](#298...
Read more

1.1.1

29 May 15:30
8bd6a3a
Compare
Choose a tag to compare

What's Changed

All notable changes to this project will be documented in this file.

🐛 Bug Fixes

  • (mqtt) Publish mosquitto bridge status to c8y when enabled #2901 #2903

⛵ Refactor

  • (entity) Simplify entity registration code flow #2884

Full Changelog: 1.1.0...1.1.1

1.1.0

22 May 15:42
ea66825
Compare
Choose a tag to compare

What's Changed

🚀 Features

Highlights

Configure devices in offline mode #2843

Now you can configure your device even if you don't have internet connectivity. This is suitable for factory scenarios, where the devices might not have internet, but you wish to pre-configure thin-edge.io to connect to your cloud provider once internet connection is restored.

Just use the new --offline flag when connecting:

tedge connect c8y --offline
tedge connect aws --offline
tedge connect az --offline

If you're using a self-signed certificate, then you will have to upload the public certificate manually from a machine with internet connectivity (e.g. by copying it via ssh on the local network etc.).

Filter out uninteresting software packages with an exclude filter #2869

Previously thin-edge.io only supported an include filter in the apt specific software management plugin (e.g. tedge-apt-plugin). Now you can specify an include and exclude filter which will be applied to the output of all software management plugins!

This allows you to focus on the software packages that are meaningful to you, and you can save on network bandwidth.

Example

If you want to ignore all of the software packages related to libraries and Linux kernel modules, then just set the following command:

tedge config set software.plugin.exclude "^(glibc|lib|kernel-|iptables-module).*"

Restart the tedge-agent, then you're good to go!

Draft Helm chart for Kubernetes deployment #2775

A draft helm chart has been added to the project so that users can start using thin-edge.io in Kubernetes environments. Contributions are welcomed, and we'll eventually promote it from the Draft status and publish the helm chart.

Create Certificate Signing Request with tedge cli #2783

A new tedge command (tedge cert create-csr) has been added to make it easier to integrate thin-edge.io with your preferred Public Key Infrastructure (PKI). The command will read the existing certificate information from an existing device certificate so it is more convenient then looking up the equivalent openssl command.

Misc.

The following features are maybe not as flashy as the features above, but the are still very useful.

  • (cli): Avoid modifying files if they are up to date in tedge init #2876

  • (cli): Update service manager fallback message #2872

  • (configuration): tedge agent creates tedgeUrl when not provided in config snapshot payload #2826

  • (fts): improve is a directory error detection to support other OS targets #2747

  • (logs): only enable ansi colors in logs when stderr is a terminal #2738

  • (packaging): remove adduser debian dependency declaration #2883

  • (remote-access): support reading child connection string from stdin #2874

  • (software): c8y-mapper sends software list to advanced software management endpoint #2771

  • (watchdog): Limit tedge-watchdog interval to 1s minimum

  • (workflow): improve workflow log readability for humans #2860

🐛 Bug Fixes

  • (certificates): Do not panic changing ownership of device cert to unknown user #2875

  • (cli) Ignore port when comparing configure url with expected url

  • (cli): Honor c8y.mqtt setting on tedge connect #2789

  • (cli): ignore port when comparing cloud urls #2865

  • (cli): set directory ownership using given user/group instead of root #2746

  • (config|log): Uploader supports multipart/form-data and attaches filename #2811

  • (mqtt): Add tedgeUrl field for firmware command created by c8y-mapper #2795

  • (mqtt): apply delay to mqtt connect errors by default #2832

  • (mqtt): Finish auto-registration even on bad input #2737 #2889

  • (remote-access) Spawn process using current process path and config dir

  • (remote-access) Switch to env::args for establishing the executable name #2892

  • (remote-access): spawn process using current process path and config dir #2888

  • (remote-access): Use configured certificates when connecting to auth proxy in remote access plugin #2809

  • (software): tedge-agent publishes "types" for software_list and software_update #2730

  • (software|restart): Check sudo.enable in software and restart managers #2749

  • (file-watcher): use canonical path when watching a directory #2758

📜 Deprecation Notices

Workflow: build-in restart workflow action has been removed #2852

Technically this is a deprecation, however since it was only used in the official firmware integrations (e.g. Rugpi, RAUC, Mender OSS), we have replaced this functionality with the ability to call other workflows from an existing workflow.

📓 Documentation

  • (mapper): remove out of date and unused section #2736

  • (yocto): add missing build dependency file #2765

  • (mqtt): Document commands to de-register entities #2755

  • (mqtt): Correct topic and payload in registration in reference c8y-mapper guide #2827

  • (mqtt): remove retain from cmd/health/check examples #2828

  • (mqtt): Update doc: Troubleshooting > Monitoring Service Health #2855

  • (firmware): use RAUC image in the Yocto build instructions #2861

Full Changelog: 1.0.1...1.1.0

1.0.1

16 Feb 09:42
64def4e
Compare
Choose a tag to compare

What's Changed

🐛 Bug Fixes

📓 Documentation

📋 Miscellaneous Tasks

Notes

The release artifacts are no longer uploaded to the Github release as these were less useful, however you can download all of the artifacts directly from our cloudsmith.io repositories (for all the linux packages and the tarballs):

Full Changelog: 1.0.0...1.0.1

1.0.0 - Production grade edge device management

07 Feb 09:19
9cf6904
Compare
Choose a tag to compare

What's Changed in 1.0.0 (Summary)

🎉 thin-edge.io 1.0.0 is here 🚀

Thanks to everyone for contributing to the project, as this is the result of a lot of hard work from many people. And whilst 1.0.0 is a massive milestone in the project, we're still committed to continuing implementing new features, so stay tuned.

The documentation has been improved focussing on consistency and readability. Below are some notable links to highlight some of the features that thin-edge.io provides out of the box:

And if you don't find what you want then you can check out our the new Community Plugins page, to explore the ever growing list of plugins.

Need help upgrading to 1.0.0? Then check out the Legacy Guide.

New Features

Cumulocity - Support software types

You no longer need to prefix software versions in Cumulocity IoT using the ::<type> syntax! We now support the of official software type as defined in the Cumulocity IoT Device Library. This enables users to also filter for software types in the UI.

Check out the user docs for Software Management for more details.

Implemented by @rina23q in #2613

Cumulocity - Listen to Cumulocity Operation in their JSON format

The Cumulocity operations are now received via the c8y/devicecontrol/operations MQTT topic instead of the c8y/s/ds SmartREST topic. This lays the groundwork for a future features.

Implemented by @rina23q in #2596

New command to recreate mosquitto bridges

The mosquitto bridges are automatically recreated when upgrading thin-edge.io, and only the bridges which are configured will be recreated.

You can manually refresh the bridge configuration by running:

tedge refresh-bridges

Implemented by @Bravo555 in #2573

Restart tedge-agent after self updates

Note If you are upgrading from anything prior to 1.0.0, you will still need to restart the tedge-agent (or just restart the whole device). All future self updates of thin-edge.io will not require this step.

Implemented by @albinsuresh in #2587

Minor improvements

  • Add support for commands with multiple arguments in custom operations by @Ruadhri17 in #2602
  • Default configuration for tedge operation plugins by @albinsuresh in #2637
  • Bypass duplicate message filtering on mapper startup with config flag by @Ruadhri17 in #2632

Fixes

Documentation

What's Changed in 1.0.0 (full list)

Read more