Releases: thin-edge/thin-edge.io
1.3.1
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
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
Full Changelog: https://github.com/thin-edge/thin-edge.io/compare/1.2.0..1.3.0
1.2.0
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...
1.1.1
What's Changed
All notable changes to this project will be documented in this file.
🐛 Bug Fixes
⛵ Refactor
- (entity) Simplify entity registration code flow #2884
Full Changelog: 1.1.0...1.1.1
1.1.0
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
What's Changed
🐛 Bug Fixes
-
Retry internal id lookup when not found #2533 by @albinsuresh in #2690
-
Fix missing supported operations #2689 by @albinsuresh in #2695
📓 Documentation
- docs: fix broken anchor to rugpi instructions by @reubenmiller in #2691
📋 Miscellaneous Tasks
-
Log memory usage of the agent and the mapper by @didier-wenzek in #2693
-
chore: remove deprecated and unused plugins by @reubenmiller in #2709
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):
- tedge-release - all architectures except for armv6
- tedge-release-armv6 - armv6 only repository
Full Changelog: 1.0.0...1.0.1
1.0.0 - Production grade edge device management
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:
- Firmware Management
- Software Management
- Configuration Management
- Log Management
- Remote Access
- Health Monitoring
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
- Only send 114 when operations changed by @Bravo555 in #2588
- Limit the length of the message for failed operation by @Ruadhri17 in #2586
- fixed services shown as child devices #2584 by @Bravo555 in #2620
- Fix entity store file permission on mapper startup #2598 by @albinsuresh in #2638
- Fix tedge-agent stuck on too many pending operations by @didier-wenzek in #2640
- tedge-apt-plugin update list missing keep config options by @rina23q in #2681
Documentation
- Add a legacy documentation section by @didier-wenzek in #2581
- Improve certificate related documentation by @didier-wenzek in #2585
- docs: update supported platform information by @reubenmiller in #2594
What's Changed in 1.0.0 (full list)
- Bump actions/upload-pages-artifact from 2 to 3 by @dependabot in #2538
- Bump actions/deploy-pages from 3 to 4 by @dependabot in #2539
- Remove reference to version in installation scripts by @jarhodes314 in #2553
- docs: remove tedge-log-plugin and tedge-configuration-plugin references by @reubenmiller in #2554
- Fix new clippy warnings by @Bravo555 in #2563
- docs: remove deprecated domain model by @reubenmiller in #2559
- docs: move connect external device under security section by @reubenmiller in #2560
- feat: add user warning when an invalid custom operation filename is used by @reubenmiller in #2562
- docs(operations): add tip about valid filenames for custom operations by @reubenmiller in #2564
- Bump crate-ci/typos from 1.16.0 to 1.17.0 by @dependabot in #2561
- docs: add instructions to reconnect with c8y after changing settings by @reubenmiller in #2555
- docs(smartrest): add full example of using a custom smart rest operation by @reubenmiller in #2565
- docs: update MacOS instructions for building rugpi images by @reubenmiller in #2556
- dev: add CODEOWNERS definition by @reubenmiller in #2557
- ci: enable merge queue by @reubenmiller in #2570
- ci: fix incompatible PR checks from merge queue trigger by @reubenmiller in #2572
- Rename configuration
enable.sudo
tosudo.enable
by @Ruadhri17 in #2571 - chore: update system test dependencies by @reubenmiller in #2577
- ci: only run filter step on PRs by @reubenmiller in #2578
- test: refactor service tests by removing unnecessary logic by @reubenmiller in #2575
- chore: upgrade tempfile to resolve dependentabot alert about rustix by @reubenmiller in #2576
- test: don't configure repos when installing thin-edge.io via local deb packages by @reubenmiller in #2579
- test: filter MQTT message to avoid false negatives when thin-edge.io splits measurements by @reubenmiller in #2580
- Add
refresh-bridges
command by @Bravo555 in #2573 - Add a legacy documentation section by @didier-wenzek in #2581
- Add examples to
tedge config list --doc
by @didier-wenzek in #2583 - Improve doc TOC by @didier-wenzek in #2582
- build(deps): Bump crate-ci/typos from 1.17.0 to 1.17.1 by @dependabot in #2589
- docs: move c8y token docs and expand on details and alternatives by @reubenmiller in #2558
- reenable default settings for dbg profile by @Bravo555 in #2590
- Only send 114 when operations changed by @Bravo555 in #2588
- docs: remove the child device configuration management page by @reubenmiller in #2593
- Limit the length of the message for failed operation by @Ruadhri17 in #2586
- Improve certificate related documentation by @didier-wenzek in #2585
- docs: update supported platform information by @reubenmiller in #2594
- docs: make markdown compatible with mdx v3 by @reubenmiller in #2599
- Restart tedge-agent after self update by @albinsuresh in #2587
- Use JSON over MQTT to listen C8Y operations by @rina23q in #2596
- fix: update h2 dependency by @reubenmiller in #2610
- test: use random service name in tests to avoid side effects from concurrent runs by @reubenmiller in #2618
- docs: correct note about certificate chain order by @reubenmiller in #2607
- build(deps): Bump dorny/paths-filter from 2 to 3 by @dependabot in #2621
- test: use local ca to generate device certificates by @reubenmiller in #2619
- build(deps): B...
1.0.0 Release Candidate 1
What's Changed in 1.0.0-rc.1 (Summary)
We made it 🎉 thin-edge.io 1.0.0 (Release Candidate 1) is here 🚀
We wanted to publicly communicate our commitment to bringing the production ready thin-edge.io to the community. We're using the release candidate to enable users to try it out and provide some feedback before the 1.0.0 release. We're still updating some of the documentation around some of the new features, but this will be done before the release candidate phase has ended.
You can monitor the progress of the 1.0.0 release, but the goal is to finalize the 1.0.0 release in January 2024, so please provide feedback as soon as possible.
New Features
Support for Firmware Updates - aka. Operating System A/B Updates
With the help of the workflows feature, thin-edge.io now supports integrating with OS A/B update solutions such as:
- mender (yocto image)
- Rugpi
We have included instructions and examples to build two types of images, however the methodology demonstrated can be used to create other integrations like:
- Rauc
- SWUpdate
Please reach out to use to assist in adding new integrations.
Consolidated tedge-agent
The tedge-log-plugin and tedge-configuration-plugin are now deprecated, and their functionality has been rolled into the tedge-agent. This makes it much easier to manage as you only have a single service. You can still deactivate the log or configuration functionality via the tedge.toml.
Container
A public container image is now published to the Github Container Registry (ghcr.io). The containers are ideal for running thin-edge.io under a true single-process container setup. The image contains all of the thin-edge.io binaries which can be called.
The image is a multi-platform image which supports the following Platforms/Architectures:
- linux/arm/v6
- linux/arm/v7
- linux/arm64
- linux/amd64
Two different images are available which are based on our release cycle:
- tedge-main - Published every time a PR is closed (merged into the main branch)
- tedge - Published on official releases (e.g.
1.0.0-rc.1
)
We're still working on the documentation, however we've added the following demos under the tedge-demo-container repository for working examples on how to use it:
Support for multiple timestamp formats
Telemetry data can now be published either using the previous ISO-8601 format, or unix timestamps (e.g. seconds since 1970-01-01). The unix timestamps accepts floats, so you can also provide the fraction of a second (e.g. 1703083945.123567
). Unix timestamps are much easier for machines to parse, and for user's to write their own parsers in plugins.
Below shows a simple example how to use the unix timestamp when creating an event (in the past):
tedge mqtt pub \
te/device/main///e/example \
'{"text":"Unix timestamps","time":1703083945.123567}'
HTTPS/TLS support
HTTPS/TLS support has been added to the File Transfer Service (included in the tedge-agent
service), and the Cumulocity Auth Proxy Service (included in the tedge-mapper-c8y
service). Users with certificate knowledge (e.g. how to create both server and client services)
The configuration of certificates still requires advanced certificate knowledge, as the correct server and client certificates need to be generated etc. We will look at improving the configuration story for beginners in 2024.
Minor Changes
- Give the default failure "reason" when commands failed by @rina23q in #2463
- tedge cert upload c8y: ambiguous file/folder not found error - missing path in error message by @PradeepKiruvale in #2473
- Create sm-plugins and operations/c8y directories by tedge init by @rina23q in #2469
- logs.path location should be explicit rather than implicit by @PradeepKiruvale in #2480
- Config setting to disable auto-registration of entities by @PradeepKiruvale in #2486, #2490
- Don't restart tedge-agent on (re)connect by @jarhodes314 in #2505
- New tedge cli command to renew current self-signed certificate by @PradeepKiruvale in #2502, #2509, #2520
- Ordered processing of entity registration messages before any other messages by @albinsuresh in #2466
- feat: run initializations before starting main process by @reubenmiller in #2516
- Move
config_update
file download from tedge-mapper-c8y to tedge-agent by @Bravo555 in #2511 - tedge-apt-plugin: support settings to control if configuration files are kept or replaced when included in a debian package by @PradeepKiruvale in #2518
- Make entity store persistent #2428 by @albinsuresh in #2522
Fixes
- log entry erroneously set to ERROR when handling device/services registered with custom topic schema by @PradeepKiruvale in #2441
- Stop duplicate messages being sent by
tedge-log-plugin
andtedge-configuration-plugin
on file reload by @Bravo555 in #2454, #2536 - Support quotes in Cumulocity failureReason field by @jarhodes314 in #2493
- Fix broken mosquitto config generation for Azure by @jarhodes314 in #2515
- adjust the expected return code when user is missing "Tenant manager" admin rights by @reey in #2529
What's Changed in 1.0.0-rc.1 (full list)
- fix(#2445): add c8y proxy config settings by @Bravo555 in #2446
- Extend tedge-agent with config and log management by @albinsuresh in #2436
- Improve error messages for c8y-http-proxy and tedge-agent by @Bravo555 in #2437
- Delete ported PySys tests by @gligorisaev in #2324
- Close stdin of child processes by @didier-wenzek in #2455
- Create aggregated log file in temp dir #2443 by @albinsuresh in #2460
- Add HTTPS/TLS support to the auth proxy by @jarhodes314 in #2430
- Add testing steps for configuration list by @gligorisaev in #2465
- Kill scripts still running after a timeout by @didier-wenzek in #2458
- log entry erroneously set to ERROR when handling device/services registered with custom topic schema by @PradeepKiruvale in #2441
- Give the default failure "reason" when commands failed by @rina23q in #2463
- Stop duplicate messages being sent by
tedge-log-plugin
andtedge-configuration-plugin
on file reload by @Bravo555 in #2454 - Replace routerify in file transfer server with axum by @jarhodes314 in #2461
- Fix typos by @didier-wenzek in #2470
- tedge cert upload c8y: ambiguous file/folder not found error - missing path in error message by @PradeepKiruvale in #2473
- Create sm-plugins and operations/c8y directories by tedge init by @rina23q in #2469
- Operation Workflow Specification & Implementation by @didier-wenzek in #2071
- Add firmware_update support to c8y mapper by @rina23q in #2464
- logs.path location should be explicit rather than implicit by @PradeepKiruvale in #2480
- fix: use taplo for formatting Cargo.toml by @Bravo555 in #2476
- Config setting to disable auto-registration of entities by @PradeepKiruvale in #2486
- Add HTTPS/certificate authentication support to file transfer service by @jarhodes314 in #2474
- Add support for operation workflow triggering device restart by @didier-wenzek in #2479
- Add tedge config agent.state.path setting by @didier-wenzek in #2492
- feat: add tedge-write as new multicall b...
0.13.1
What's Changed in 0.13.1 (Summary)
Fixes
- c8y: use qos 0 when publishing to c8y/s/uat to request a Cumulocity IoT token by @PradeepKiruvale in #2420
- c8y: Fix send_event() in c8y_http_proxy to create events under child devices by @rina23q in #2421
- c8y: custom operation option to disable quoting of results to enable c8y_RelayArray compatibility by @reubenmiller in #2439
- general: add http.client.host/port setting options by @Bravo555 in #2411
- troubleshooting: tedge-log-manager - wait for upload before marking operation successful by @Bravo555 in #2435
What's Changed in 0.13.1 (full list)
- tests: update tests after latest 0.13.0 release by @reubenmiller in #2406
- Add a custom error message for invalid use of
default(value = ...)
indefine_tedge_config!
by @jarhodes314 in #2401 - Tedge ops plugins init use async move_file by @albinsuresh in #2405
- docs: enforce/normalize v1 format on all te2mqtt code blocks by @reubenmiller in #2408
- Use default(variable = "AutoFlag::Auto") by @didier-wenzek in #2407
- tests: include more readable mqtt logs in Get Logs keyword by @reubenmiller in #2410
- tests: use stop/start over restart for service to improve flaky system test by @reubenmiller in #2415
- use qos 0 when publishing to c8y/s/uat to request a Cumulocity IoT token by @PradeepKiruvale in #2420
- tests: hide cumulocity iot token message from the test log output by @reubenmiller in #2425
- Disable nested child device operation support #2409 by @albinsuresh in #2424
- chore: update dev and system test images by @reubenmiller in #2422
- docs: fix incorrect mqtt sub command by @reubenmiller in #2431
- Fix send_event() in c8y_http_proxy to create events under child devices by @rina23q in #2421
- add http.client.host/port setting options by @Bravo555 in #2411
- misleading log entry when state file does not exist in tedge-agent by @PradeepKiruvale in #2434
- C8y Mapper consumes Uploader Actor by @rina23q in #2361
- tedge-log-manager: wait for upload before marking operation successful by @Bravo555 in #2435
- custom operation option to disable quoting of results to enable c8y_RelayArray compatibility by @reubenmiller in #2439
- Remove git dependency for ws_stream_tungstenite by @jarhodes314 in #2442
- fix: use FTS for
log_upload
andconfig_snapshot
operations by @Bravo555 in #2440
Full Changelog: 0.13.0...0.13.1
0.13.0 - New MQTT V1 API
What's Changed in 0.13.0 (Summary)
New Features
Support for any linux distribution
A lot of hard work has gone into supporting thin-edge.io on any linux distribution. A new revamped installation script will automatically detect your linux distribution whether it is Ubuntu/Debian, Rocky Linux, Alpine or Poky (yocto), we have you covered.
thin-edge.io now publishes packages on cloudsmith in the following formats:
- deb (Debian/Ubuntu)
- apk (Alpine Linux)
- rpm (RHEL/Fedora/Rocky Linux/Alma Linux)
- tarball (for any other linux distribution without one of the above package managers)
The documentation has been updated to included the new simplified instructions so that you can deploy thin-edge.io in a simple memorable one-liner on your preferred linux distribution.
Community support for additional service managers (e.g. for distributions without systemd)
The support for additional service managers has been extended (via the community) allowing thin-edge.io to run seamlessly on linux distributions that don't have systemd installed.
The following service managers are provided along with an easy to use install script which will auto detect the correct system manager for your system (if you don't really know or care about which service manager to use):
- sysvinit
- openrc
- runit
- s6-overlay
- supervisord
Check out the documentation for more details.
New MQTT API te/ topics
The new thin-edge.io MQTT API has been implemented to provide a consistent interface across the entire topic.
This release marks the transition from the now deprecated tedge/#
topics to the new te/#
topics. The new te/#
topics implement the same features as the legacy interface plus much more.
The new MQTT API documents the full interface and brings the following functionality:
- Device/service registration via MQTT
- Publishing telemetry data to any device, child device or service on running on either types
- All metrics now support a custom type in the topic
- Public interface to send commands on the local
te/
topic - More reliable processing of commands by leveraging MQTT retained messages for state transitions
- Support custom root prefixes (e.g. being able to replace
te/
with a custom prefix) - Support for updating digital twin data such as custom fragments (
twin
) - thin-edge.io errors are published on the
te/errors
topic (replacingtedge/errors
)
Services are now registered in Cumulocity IoT under new external identities, which will result in duplicated services in the cloud. The renaming was done so that the external identities would be consistent across all entities (child devices, services etc.). If you don't want to see the older services, then you they can be deleted by using the Cumulocity API or using tools such as go-c8y-cli, for example:
c8y devices list --query "c8y_Agent.name eq 'thin-edge.io'" --includeAll \
| c8y devices services list --includeAll \
| c8y identity list --filter "externalId notlike '*:*'" \
| c8y inventory delete
If you are having trouble with removing the old services then please reach out to us and we can offer assistance!
Local Cumulocity IoT API proxy #2261, #2230
A local Cumulocity IoT API proxy is provided by default to simplify accessing the Cumulocity IoT REST api from 3rd party components which makes requesting a local JWT token a thing of the past!
Check out the documentation for more details.
Generic configuration and log plugins
The c8y-configuration-plugin
and c8y-log-plugin
plugins have been refactored to be cloud agnostic. The plugins now only rely on the thin-edge.io interface (both local MQTT and API).
The table below shows the package names which are deprecated and their replacements:
Deprecated Package | New Package |
---|---|
c8y-configuration-plugin | tedge-configuration-plugin |
c8y-log-plugin | tedge-log-plugin |
Note: In the near future, the c8y-firmware-plugin
will also be refactored, but it didn't make it into this release.
Since the plugins are now cloud agnostic, the configuration files used by the plugins have been relocated to the following paths, but don't worry this happens automatically during initialization of each plugin.
/etc/tedge/c8y/c8y-configuration-plugin.toml
➡️/etc/tedge/plugins/tedge-configuration-plugin.toml
/etc/tedge/c8y/c8y-log-plugin.toml
➡️/etc/tedge/plugins/tedge-log-plugin.toml
Re-using thin-edge.io plugins on child device
With the changes to the thin-edge.io MQTT API and the rewriting of the generic plugins, it enabled us to be able to run the same plugins either on the main device (e.g. the current/default setup) or on a child device. This allows you to reduce the amount of could you have to write even further.
The following plugins can be run either in main or child device mode:
- tedge-agent (software management)
- tedge-log-plugin (log management)
- tedge-configuration-plugin (configuration management)
Detailed documentation and examples are not yet available, however they will be updated in the next coming weeks. However below shows a brief example how to run the tedge-agent on a child device to provide software management on child devices:
tedge-agent --mqtt-device-topic-id "device/child1//"
~80% Reduction of installation size - #2295
thin-edge.io installation size has dramatically decreased from ~40MB down to 8MB by packaging the binaries as a single "multi-call" binary. This is a significant step forward to reducing the overall footprint to allow running thin-edge.io on even smaller devices.
Minor changes
- cli: Allow log filtering with $RUST_LOG by @Bravo555 in #2130
- cli: use tedge instead of mosquitto as owner of mosquitto files/folders by @reubenmiller in #2156
- feat(azure): extend supported topics on Azure IoT Hub bridge by @reubenmiller in #2278
- general: Disable lock file if directory does not exist or no permissions by @Ruadhri17 in #2190
- general: Handle binary uploads/downloads without attempting conversion to UTF-8 by @jarhodes314 in #2319
- general: tedge-agent creates /var/tedge/cache directory on start-up by @rina23q in #2293
- monitoring(collectd): increase the default intervals to avoid spamming iot platforms by @reubenmiller in #2141
- mqtt: allow non-root users to read mosquitto configuration files by @Ruadhri17 in #2269
- mqtt: Implement a converter that bridges the old MEA (measurements, events and alarms) topics to the new ones by @PradeepKiruvale in #2125
- troubleshooting: Add support for
config-dir
flag to c8y-remote-access-plugin by @Ruadhri17 in #2211 - troubleshooting: Check if sudo is available when using tedge agent operations by @Ruadhri17 in #2224
Bug fixes
- cli: Exit with code 0 if service manager not present by @Ruadhri17 in #2204
- cli: Fix the wrong exit code after the cloud connection test failure by @Ruadhri17 in #2182
- cli: tedge connect c8y --test must not use a persistent MQTT session by @didier-wenzek in #2209
- configuration: Fix: plugins don't update their internal representation of config files on file change by @Ruadhri17 in #2262
- installation: explicitly remove all packages to avoid problems when dependencies are changed by @reubenmiller in #2124
- installation: remove sudo dependency from installation scripts
- mapper(aws): tedge-mapper-aws health message uses two different timestamp formats for up and down messages by @PradeepKiruvale in #2320
- mapper(aws): tedge-mapper-aws prints errors for known non-json mosquitto bridge health status messages by @PradeepKiruvale in #2247
- mapper(azure): azure tedge mapper fails to translate health status messages by @PradeepKiruvale in #2273
- mapper(c8y): Avoid subscribing to s/dcr and forwarding s/ucr by @jarhodes314 in #2173
- mapper(c8y): Use MQTT clean session for the mosquitto c8y bridge connection by @jarhodes314 in #2171
- mqtt: Adding missing tests for c8y-log-manager and fixing a bug that causes mqtt actor termination by @Ruadhri17 in #2161
- mqtt: Don't log authentication configuration when connecting to MQTT broker by @Bravo555 in #2249
- mqtt: Enable concurrent processing of incoming and outgoing MQTT messages by @jarhodes314 in #2327
- mqtt: Fix tedge agent's mqtt actor termination when wrong payload was parsed by @Ruadhri17 in...