Ireland
Release Date: June 30th, 2021
Namer: Lenny Goodell and MIke Johanson (Intel)
The Ireland Release is the 2nd major release and 8th overall community release of EdgeX Foundry. Note: Ireland is not backward compatible with any previous releases of EdgeX (versions 1.x)!
This slide deck contains information about the changes and new features of the Ireland release.
Release Major Themes
- V2 APIs - all new REST endpoints using improved model objects (for request and responses) and improved API URIs,
- Use of message bus between Device Services and Application Services (Core Data can also subscribe to the sensor readings or be removed if persistence is not necessary)
- Improved security to include enabling the Consul API through the API Gateway, providing a common means for all services to retrieve secrets from the secret store, and a means for Consul to bootstrap with its ACL system enabled which provides for better protection of the key/value configuration.
- Simplified Device Profiles
- Addition of new Device Services (LLRP, GPIO, CoAP, and UART)
- New Graphical User Interface
- Removal of a lot of technical debt accumulated over four years (example: port assignments that align with IANA defined dynamic/private port range definition)
Known Bugs
- Create and modified fields will be missing when querying Device and Device Service on Core Metadata (see https://github.com/edgexfoundry/edgex-go/issues/3630)
- Core command will crash if the device service address for the device service is unreachable (see https://github.com/edgexfoundry/edgex-go/issues/3611)
- The edgex-launch.sh script is still referenced in the make run of the edgex-go Makefile. This script was deprecated and removed. (see https://github.com/edgexfoundry/edgex-go/issues/3607)
- Note: the launch script is no longer used for Ireland. Information in the bug lists rationale and work arounds.
- App service panics when MQTTSecretSend AuthMode is blank - a bug in the app functions SDK (https://github.com/edgexfoundry/app-functions-sdk-go/issues/920)
- Note: Fixed for Ireland & Jakarta. see https://github.com/edgexfoundry/app-functions-sdk-go/pull/926
- App SDK 2.0.1 and App Service Configurable 2.0.1 released. Latest Ireland compose files have been updated with App Service Configurable 2.0.1
- Call to log correlation ID results in unsupported value type in the app functions SDK (see https://github.com/edgexfoundry/app-functions-sdk-go/issues/923)
- Note: Fixed for Ireland & Jakarta. see https://github.com/edgexfoundry/app-functions-sdk-go/issues/923
- App SDK 2.0.1 and App Service Configurable 2.0.1 released. Latest Ireland compose files have been updated with App Service Configurable 2.0.1
- FilterByResource on the app functions SDK creates a new event without required fields (see https://github.com/edgexfoundry/app-functions-sdk-go/issues/922)
- Note: Fixed for Ireland & Jakarta. see https://github.com/edgexfoundry/app-functions-sdk-go/issues/922
- App SDK 2.0.1 and App Service Configurable 2.0.1 released. Latest Ireland compose files have been updated with App Service Configurable 2.0.1
- App Service Configurable Profiles missing/incorrect MQTT MessageBus settings (see https://github.com/edgexfoundry/app-service-configurable/issues/304)
- Note: fixed for Jakarta, see: https://github.com/edgexfoundry/app-service-configurable/pull/305
- The device-coap service uses an older base Alpine image that contains a number of critical CVE issues and needs to be updated.
- Note: Fixed for Ireland & Jakarta. see https://github.com/edgexfoundry/device-coap-c/pull/16
- Latest Ireland compose builder has been updated with Device Coap 2.0.1
- REST endpoints do not gracefully handle request timeout configured by bootstrap (see https://github.com/edgexfoundry/edgex-go/issues/2462)
- Note: fixed for Jakarta, see: https://github.com/edgexfoundry/go-mod-bootstrap/pull/267
- [Makefile] Clean deletes non-EdgeX volumes (see https://github.com/edgexfoundry/edgex-compose/issues/156)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/edgex-compose/pull/168
- Logging of EDGEX_CONF_DIR override is incorrect (see https://github.com/edgexfoundry/go-mod-bootstrap/issues/264)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/go-mod-bootstrap/pull/266
- Compose Builder doesn't handle command properly for secure TAF functional compose file (see https://github.com/edgexfoundry/edgex-compose/issues/164)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/edgex-compose/pull/165
- Compose Builder make down fails due to removal of add-device-random.yml (see https://github.com/edgexfoundry/edgex-compose/issues/150)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/edgex-compose/pull/151
- Compose Builder doesn't handle command properly for secure TAF functional compose file (see https://github.com/edgexfoundry/edgex-compose/issues/164)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/edgex-compose/pull/165
- Miss created and modified fields when querying Device and Device Service (see https://github.com/edgexfoundry/edgex-go/issues/3630)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/go-mod-core-contracts/pull/653
- The Id field should accept the empty string in update DTO if the name is provided (see https://github.com/edgexfoundry/go-mod-core-contracts/issues/640)
- Note: fixed for Jakarta, see https://github.com/edgexfoundry/go-mod-core-contracts/pull/648
Service by Service Significant Feature List
General
- Upgraded to Go 1.16, Redis to 6.2.4, Consul to 1.9.5, Kong to 2.4.1, Vault to 1.7.2
- All services had their APIs updated to the new V2 API formats and object models
- Port assignments were changed for all services to align them with IANA dynamic/private port ranges) in order to avoid conflicts with standard system and service ports
- Archive/removal of unused services & code (Logging service, MongoDB, Drools Rules Engine)
Core / Supporting Services
- Core Data is made optional (as an optional subscriber) when using the message bus to send events/readings to application services.
- Device Profiles were greatly simplified
- A new graphical user interface (using Angular.js) was added (offering a new Device wizard, data visualization, service status monitoring and more)
Device Services
- Device Services send event/readings to Application Services via message bus (default) - allowing for better QoS and removing the need for Core Data when persistence is not needed
- Contribution of new GPIO, CoAP, LLRP and UART Device Services. These will be upgraded to v2.0 over the summer of 2021.
- New structured custom configuration capability
Security
- Secrets provider for all – providing a common means for all services to retrieve secrets from the secret store (ex: Vault)
- Enable Consul API through API Gateway
- Secured Consul: Consul is now bootstrapped and started with its ACL system enabled (better authentication/authorization)
Application Services
- LLRP Inventory App Service (in Go)
- New structured custom configuration capability
- New filter functions for ProfileName and SourceName
- Encryption function use of Secret Provider for encryption key
- New template for quick start of new custom app service
- New custom trigger capability for custom app services
- Multiple message bus subscriptions which enables multiple filter by subscriptions
- New Context Storage capability (Key Value store on the App Function Context)
- Export to multiple HTTP endpoints via function chaining
- URL/PublishTopic placeholder capability (using key/values from Context Storage to replace placeholders in export URL or PublishTopic)
- Cleaned Up Configuration to include trigger configuration structured better and configurable pipeline that is more concise and consolidated
DevOps
- Cleaned up Docker image naming/descriptions/archive tagging
- Cleaned/improved Docker Compose creation and organization
- Community notifications on build failures
- Repository Badging – improve adopter comfort
- Developer Documentation
Test/QA
- Integration testing (from DS to rules engine checks)
- Performance testing
Changelogs
Core, Supporting, System Management, and Security Services Changelog
Go Device Service SDK Changelog
C Device Service SDK Changelog - coming soon
App Service Configuragle Changelog
BACnet Device Service Changelog - coming soon
Camera Device Service Changelog
Grove Device Service Changelog - coming soon
Modbus Device Service Changelog
Random Device Service Changelog
Virtual Device Service Changelog
Release Design Decisions
- Per Monthly Architect's meeting (9/21/20) - Add configuration to allow default overrides for HTTP request maximum size and number of simultaneous requests.
- Per Monthly Architect's meeting (11/30/20) - modules will be tagged with the release number of the release they go with. Specifically, the tag will be a pointer to the release of edgex-go that the module goes with. The project's release czar will tag as part of the release process. The readme to the module should be updated to indicate which module version goes with each EdgeX release version. DevOps will make some changes to the CI/CD Pipelines/process to not update on a patch. ADR 10 will be updated to reflect this change.
- Per Monthly Architect's meeting (11/30/20), Docker image names will drop the 'go', 'docker' and 'c' prefix or suffix from their names.
- Per Monthly Architect's meeting (11/30/20), Go 1.15 with Alpine 3.12 will be used for build stage in Dockerfiles. Subsequent decision was made by the TSC to upgrade to Go 1.16.
- Per Monthly Architect's meeting (1/26/21), service keys will be used in configuration.toml for constants maps
- Per Monthly Architect's meeting (3/15/21), in Device Profiles, make the following changes: in deviceCommands section, remove get/set section. Rename parameter to defaultValue, add a readWrite indicator, in deviceCommands use a single resourceOperations section.
- Per Core working group meeting (11/19/20) - We will remove base64 encoding for floats (as part of event `Readings`) for Ireland. It was determined that E-notation is good enough to use going forward and helps reduce complexity. If future requirements/use cases raise new needs, we will revisit for future releases.
- Per Core Working Group meeting (1/7/21), remove delete by ID from API set as there is no longer a get by ID (can add it back in if needed)
- Per Core Working Group meeting (1/14/21), Remove CRON field in scheduler (it wasn't implemented in the code)
- Per Core Working Group meeting (1/21/21), remove metadata check when adding the event. Bring it back if it gets requested.
- Per Core Working Group meeting (2/4/21), make put/set/write consistent across Device Profile and Core Command - use set.
- Per Core Working Group meeting (2/18/21), create a convenience method on Metadata, for getting device resoruces.
- Per Core Working Group meeting (2/18/21), change PropertyValue on Device Profiles to ResourceProperties
- Per Core Working Group meeting (2/18/21), add sourceName to Event. In the coreCommand section of Device Profiles, also change name field to sourceName.
- Per Core Working Group meeting (3/4/21), Versionable is deemed required on request/response objects and Event (because App Service can receive just an Event) DTO; for other objects, version is optional
- Per Core Working Group meeting (3/25/21) and ratified by TSC later, Compose files were to be organized in by branch per release name in edgex-compose repository. The "release" folder is removed.
- Per Core Working Group meeting (3/25/21), created timestamp is removed from Event/Reading objects. Origin timestamp is now required. Origin is expected to represent nanoseconds (was sometimes represented milliseconds)
- Per Core Working Group meeting (4/8/21), the Core Command APIs will add a new property called Parameters. Parameters are applied to both GET (the expected return - resourceNames) and SET (what you need to send)
- Per Core Working Group meeting( 4/15/21), All env vars to move to use of underscores (versus dashes/hyphen) as the standard and avoiding having to do lots of hyphen character conversion.
- Per Core Working Group meeting (4/22/21) and Monthly Architects meeting of 4/19/21, error messages should provide enough detail as to allow a developer to debug and understand the error.
- Per Core Working Group meeting (4/22/21), admin state to be added to interval action (like in device/device service) to enable / disable the interval action without having to delete/re-add the interval action.
- Per Core Working Group meeting (4/22/21), Attributes in device profiles were switch to allow for JSON types (not just string only).
- Per Core Working Group meeting (4/29/21), Redis Pub/Sub was made the default message bus implementation in Core Data.
- Per Core Working Group meeting (5/20/21), remove runOnce property from Interval for now. It creates problems on restart of the service (should it be rerun or only run when first created). Create an issue and relook in later release or when use case warrants.
- Per Core Working Group meeting (5/20/21), the protocol was dropped from ServiceInfo as it is always HTTP (and HTTP by default). While it could be HTTPS in the future, this could not be used/implemented easily without other certificates, etc.
- Per Core Working Group meeting (5/20/21) and approved by TSC via email, move all EdgeX ports to the IANA dynamic/private port area.
- Per Core Working Group meeting (5/26/21), in order to prevent Core Data Subscribe from receiving its own messages published to message bus, changed the publish and subscribe topics so Core Data doesn't receive its own events.
- Per TSC meeting (6/16/21), default configuration for the system was to make sending via message bus the default for getting event/readings north (versus REST to core data) in device services.