We are thrilled to announce the latest release of Infrahub (0.14), marking the start of our open beta.
This release focuses on preparing for the open beta by cleaning up and improving documentation and introducing key features like the Resource Manager.
Main changes
Unified storage
Resource Manager
The resource manager simplifies resource management and allocation.
This initial implementation supports IP Prefixes and IP Addresses, with future support for additional resources like VLAN, IDs, and interfaces.
Key features of the Resource Manager include:
- Inline Allocation: Allocate resources from a pool directly when creating an object.
- Branch Agnostic: Resource allocation works across branches. A resource allocated in one branch won’t be allocated in another.
- Idempotent: If the same consumer requests a resource multiple times, the Resource Manager will always return the same value. This reduces the complexity of managing resource allocation on the client side in an idempotent way.
Schema
Human Friendly Identifier (hfid)
In addition to the automatically generated internal ID (UUID) for each object, Infrahub now allows defining fields that form a human-friendly identifier (hfid
).
The hfid can uniquely reference objects across systems, even before an object is created in Infrahub.
While mostly invisible in the frontend, hfid
is crucial for building robust data synchronization between systems and creating truly idempotent scripts.
Applied to the network industry:
- the
hfid
of a device could be its name:atl1-edge01
- the
hfid
of an interface will be the combination of the name of the device and the name of the interface: `["atl1-edge01", "Ethernet1"]
The fields that will compose the human_friendly_id
must be defined in the schema
hfid support in GraphQL
hfid
can be used as an alternative to the ID in most GraphQL operations, including:
- Update Mutation
- Upsert Mutation
- Delete Mutation
- Related Node in all Mutations
Other
Documentation update
We have significantly improved and added new content to the documentation, including a new FAQ section.
Breaking Changes
Remove support for non-isolated branch
Support for branches in non-isolated mode has been removed.
Although useful, it posed challenges for operations dependent on other nodes in the graph, such as schema management, constraints validation, and IPAM.
All branches now operate in isolated mode by default, similar to branches in Git. A branch need to be rebased to stay in sync with main.
Migration Guide
To migrate your instance of Infrahub to the latest version, please run the following commands and restart all instances of Infrahub.
infrahub db migrate
infrahub db update-core-schema
if you are running in docker these commands need to run from the container where Infrahub is installed
Migration of the demo instance
If you are using the demo environment, you can migrate to the latest version with the following commands
invoke demo.stop
invoke demo.build
invoke demo.migrate
invoke demo.start
If you don't want to keep your data, you can start a clean instance with the following command
invoke demo.destroy demo.build demo.start demo.load-infra-schema demo.load-infra-data
All data will be lost, please make sure to backup everything you need before running this command.
The repository https://github.com/opsmill/infrahub-demo-edge has also been updated, it's recommended to pull the latest changes into your fork.
Changelog
🚀 Features
- Update schema manager to inherit property of generics and fix process_human_friendly_id @dgarros (#3449)
- Hide profile select if no data + select first generic if only 1 result @pa-lem (#3431)
- Added global utilization on resource pool details @bilalabbad (#3437)
- Add GraphQL mutations to allocate resources from pool @dgarros (#3397)
- Remove support for Non Isolated branch @dgarros (#3365)
- Added Global Error boundary to catch exception on frontend app @bilalabbad (#3403)
- Prevent dropdown and enum creation for inherited fields @pa-lem (#3400)
- feat(utilities): add benchmark tool @fatih-acar (#3393)
- Added resource pool allocation details page @bilalabbad (#3385)
- Field description in question mark tooltip @pa-lem (#3386)
- Optional pool selector for prefix relationships @pa-lem (#3338)
- Required message for relationships many (multiselect) @pa-lem (#3383)
- Support GraphQL query on previous version of the schema @dgarros (#3359)
- IP Prefix and pool utilization properties @ajtmccarty (#3319)
- Extend InfrahubDatabase to work as a proxy to access the schema @dgarros (#3335)
- feat(backend): add usage telemetry push job @fatih-acar (#3279)
- feat(sdk): add tls config options @fatih-acar (#3321)
- Add GraphQL query & mutation to list and delete API tokens @ogenstad (#3339)
- Resource manager page for list and details view @bilalabbad (#3325)
- Add MLAG models to the demo schema @wvandeun (#3309)
- Initial support for HFID @dgarros (#3310)
- implement initial json_schema endpoint @morganpartee (#3042)
- Do not generate node ID locally @gmazoyer (#3303)
- Resource Manager: Add ip address pool @ogenstad (#3300)
- Namespace selector in IPAM view @pa-lem (#3261)
- feat(backend): allow TLS for all dependencies @fatih-acar (#3293)
- Introduce Context object for Typer @dgarros (#3285)
- Update IPAM tree on create/delete of a prefix @bilalabbad (#3290)
- Filter menu: Display all child groups when group title matches but none have children @bilalabbad (#3292)
- feat(backend): integrate NATS for cache, message, and lock @fatih-acar (#2993)
- Initial Prototype of Resource Manager @dgarros (#3235)
🐛 Bug Fixes
- Fix mutation for pool assignment on fields for relationships of cardinality many @pa-lem (#3477)
- Fix link for allocated ip address to IPAM @bilalabbad (#3484)
- Improve support for Profile in Artifact & Proposed Change @dgarros (#3471)
- Fix test to include only required relationships of cardinality many only in create form @pa-lem (#3476)
- fix off-by-one type error in ip address parent identification @ajtmccarty (#3480)
- Updates peers to display in form for relationships inputs @pa-lem (#3419)
- Fixed default value on textarea input + fixed label missing on json input @bilalabbad (#3451)
- new relationship constraint for peer type @ajtmccarty (#3396)
- small fix for diff payload with multiple relationship changes @ajtmccarty (#3442)
- Fix get artifact API endpoint @gmazoyer (#3440)
- Added basic validation on proposed change creation form @bilalabbad (#3450)
- Ensure hfid is defined to generate an identifier @dgarros (#3448)
- Fix menu overflow @pa-lem (#3446)
- Raise user-friendly error and exit if git-agent is unable to reach Infrahub @ogenstad (#3445)
- fixes for IP reconciliation logic @ajtmccarty (#3381)
- Prevent menu from disappearing on small screens @pa-lem (#3432)
- GraphiQL link preserves QSP @bilalabbad (#3424)
- Fix password length details on details view @bilalabbad (#3423)
- Fix mutation data for relationship select @pa-lem (#3415)
- Thread mutation fix depending on the view @pa-lem (#3408)
- Support display_label for Generic node in Graphql @dgarros (#3361)
- Fix typo in INFRAHUB_STORAGE_QUERYSTRING_AUTH @dgarros (#3353)
- [FIX] min time is not applied anymore on past date on time selector @bilalabbad (#3311)
- Fix query for hierarchical children in relationships many @pa-lem (#3304)
🧰 Maintenance
- Add exception in schema_manager for ip_namespace @dgarros (#3486)
- Convert attribute variables on CoreGraphQLQuery to read-only @dgarros (#3479)
- Add section about performance benchmark tool to docs @dgarros (#3482)
- Update schema for IP Prefix Pool and IP Address Pool @dgarros (#3468)
- fixes identifier description of IpPrefixPoolGetResource and IpAddresPoolGetResource mutations @wvandeun (#3467)
- Rename default_prefix_size -> default_prefix_length for IP Address pool @ogenstad (#3465)
- update readme screenshot @petercrocker (#3470)
- Add optional initial agent user @ogenstad (#3390)
- Set order_weight for resource pool objects @ogenstad (#3447)
- Add tests for allocation queries @ogenstad (#3421)
- Rename CorePrefixPool -> CoreIPPrefixPool @ogenstad (#3425)
- Add condition to backend.validate-generated documentations files are changed @BeArchiTek (#3418)
- Add relationship name to generated identifier @dgarros (#3398)
- Rename Groups & Profiles to Object Management and add resourcepool @ogenstad (#3344)
- Add logic to resource pool allocation query @ogenstad (#3387)
- Run IPAM reconcilement after assignment from pool @ogenstad (#3384)
- Add utilization_branches for frontend and resource_id to allocation @ogenstad (#3374)
- Only allocate ip prefixes & addresses if available across all branches @ogenstad (#3363)
- Remove get_account_by_id and get_account functions that aren't used currently @dgarros (#3349)
- Small update for the demo environment in the doc @dgarros (#3357)
- Cleanup schema path parsing and analysis @dgarros (#3351)
- Major documentation updates @petercrocker (#3332)
- Add skeleton for IPPrefix pool utilization query @ogenstad (#3330)
- Remove "contact opsmill" from swagger docs @petercrocker (#3333)
- Switch to reflect member_types of BuiltinIPPrefix @ogenstad (#3323)
- fix(backend): use correct label value for query metrics @fatih-acar (#3298)
- Set integer enum values to strings, otherwise keep the previous logic of _.join @FragmentedPacket (#3283)
- Update SDK readme and links @petercrocker (#3273)
- Update /api/info endpoint to read version from FastAPI app @dgarros (#3284)
- Update ruff=0.4.3 @ogenstad (#3268)