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)
- 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)
- 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)
- 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)
- FilterByResource on the app functions SDK creates a new event without required fields (see https://github.com/edgexfoundry/app-functions-sdk-go/issues/922)
- The device-coap service uses an older base Alpine image that contains a number of critical CVE issues and needs to be updated.
Service by Service Significant Feature List
- 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 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
- 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)
- 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
- 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
- Integration testing (from DS to rules engine checks)
- Performance testing
C Device Service SDK Changelog - coming soon
BACnet Device Service Changelog - coming soon
Grove Device Service Changelog - coming soon
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.