Homer - Configuration manager for network devices
-------------------------------------------------
Homer allows to manage the lifecycle of the configuration for network devices, generating and deploying their
configuration.
The configuration generation is based on ``YAML`` files to define variables and ``Jinja2`` templates.
The ``YAML`` files allow for hierarchical override of variables based on the device role, site or hostname.
Once generated, the configuration can be deployed to the selected devices.
The device list can either live hardcoded in the configuration files or be dynamically gathered from Netbox.
When using Netbox as inventory both the Virtual Chassis endpoint and the Device endpoint are used to select
all the devices that matches the configured whitelist of device roles and statuses.
Also when using Netbox as inventory for each device additional metadata is exposed to the templates, namely:
- ``role``: device role slug
- ``site``: device site slug
- ``type``: device type slug
- ``ip4``: primary IPv4 without netmask
- ``ip6``: primary IPv6 without netmask
- ``netbox_object``: the Netbox device object. Directly exposed data should always be preferred in templates.
It is exposed to not be a blocker in case some additional data is needed that is not yet exposed by
Homer explicitely. It could be removed in a future release.
If any metadata is present in the ``YAML`` inventory file when using Netbox as inventory, this additional metadata
ie exposed too to the templates, with the Netbox values having precedence in case of overlapping keys.
When using Netbox to gather dynamic configuration, it's also possible to write a custom plugin in the form of a
Python module that implements a class called ``NetboxDeviceDataPlugin`` that inherits from
`homer.netbox.BaseNetboxDeviceData` and is in the Python ``PATH``.
Assuming that the plugin class implements a method named ``_get_name``, it will be accessible within the templates
with ``netbox.device_plugin.name``.
Raw data
{
"_id": null,
"home_page": "https://gerrit.wikimedia.org/r/plugins/gitiles/operations/software/homer",
"name": "homer",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "network, switch, router, configuration, deploy",
"author": "Riccardo Coccioli",
"author_email": "rcoccioli@wikimedia.org",
"download_url": "https://files.pythonhosted.org/packages/02/04/f5413c92d5e0274e07624a5687df550388ad88e5845b4e744c2d650f7ca5/homer-0.7.0.tar.gz",
"platform": "GNU/Linux",
"description": "Homer - Configuration manager for network devices\n-------------------------------------------------\n\nHomer allows to manage the lifecycle of the configuration for network devices, generating and deploying their\nconfiguration.\n\nThe configuration generation is based on ``YAML`` files to define variables and ``Jinja2`` templates.\nThe ``YAML`` files allow for hierarchical override of variables based on the device role, site or hostname.\nOnce generated, the configuration can be deployed to the selected devices.\n\nThe device list can either live hardcoded in the configuration files or be dynamically gathered from Netbox.\nWhen using Netbox as inventory both the Virtual Chassis endpoint and the Device endpoint are used to select\nall the devices that matches the configured whitelist of device roles and statuses.\n\nAlso when using Netbox as inventory for each device additional metadata is exposed to the templates, namely:\n\n- ``role``: device role slug\n- ``site``: device site slug\n- ``type``: device type slug\n- ``ip4``: primary IPv4 without netmask\n- ``ip6``: primary IPv6 without netmask\n- ``netbox_object``: the Netbox device object. Directly exposed data should always be preferred in templates.\n It is exposed to not be a blocker in case some additional data is needed that is not yet exposed by\n Homer explicitely. It could be removed in a future release.\n\nIf any metadata is present in the ``YAML`` inventory file when using Netbox as inventory, this additional metadata\nie exposed too to the templates, with the Netbox values having precedence in case of overlapping keys.\n\nWhen using Netbox to gather dynamic configuration, it's also possible to write a custom plugin in the form of a\nPython module that implements a class called ``NetboxDeviceDataPlugin`` that inherits from\n`homer.netbox.BaseNetboxDeviceData` and is in the Python ``PATH``.\nAssuming that the plugin class implements a method named ``_get_name``, it will be accessible within the templates\nwith ``netbox.device_plugin.name``.\n",
"bugtrack_url": null,
"license": "GPLv3+",
"summary": "Configuration manager for network devices",
"version": "0.7.0",
"project_urls": {
"Homepage": "https://gerrit.wikimedia.org/r/plugins/gitiles/operations/software/homer"
},
"split_keywords": [
"network",
" switch",
" router",
" configuration",
" deploy"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "53c929e6be4b95e079df3d5662aa5c55400fc2007d7f808ab6a53456dde52940",
"md5": "aa18a7320c3c59d68855f4d27da4e049",
"sha256": "11a62cb0aeedc91ffd90bb1d6a3acb79500cbedb7da67ac0dbe07ea683300a09"
},
"downloads": -1,
"filename": "homer-0.7.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "aa18a7320c3c59d68855f4d27da4e049",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 33298,
"upload_time": "2024-07-22T08:50:11",
"upload_time_iso_8601": "2024-07-22T08:50:11.121180Z",
"url": "https://files.pythonhosted.org/packages/53/c9/29e6be4b95e079df3d5662aa5c55400fc2007d7f808ab6a53456dde52940/homer-0.7.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0204f5413c92d5e0274e07624a5687df550388ad88e5845b4e744c2d650f7ca5",
"md5": "b3d889a0d4d384c16673878d01d7cc2c",
"sha256": "efaf9b3948f6aecdf88cc87c0296a18aed77c152489a7f85c571965fb16f9e57"
},
"downloads": -1,
"filename": "homer-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "b3d889a0d4d384c16673878d01d7cc2c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 55774,
"upload_time": "2024-07-22T08:50:13",
"upload_time_iso_8601": "2024-07-22T08:50:13.264480Z",
"url": "https://files.pythonhosted.org/packages/02/04/f5413c92d5e0274e07624a5687df550388ad88e5845b4e744c2d650f7ca5/homer-0.7.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-22 08:50:13",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "homer"
}