The Inventory manages host information with a centralized configuration stored in etcd. It supports creating, updating, and retrieving host details, making it ideal for environments where host configurations are centrally managed and accessed programmatically.
main.py: The entry point of the application, orchestrating the primary logic and interactions.etcd_client.py: Manages interactions with the etcd server, including operations like put, get, and delete.hostinventory.py: Handles functionalities for managing host inventory, such as adding and updating hosts.config.py: Contains configuration details for the etcd connection and other global settings.parser.py,utils.py: Provide utility functions for parsing data and other helper functions.inventory.py,base_formatter.py,formatters.py: Involved in formatting and managing the output of host data in various formats.factories.py,expressions.py: Support frameworks for creating and evaluating expressions, enhancing data manipulation and querying capabilities.
- Host Management: Perform actions like creating, updating, or removing hosts from the inventory.
- Output Formats: Supports multiple formats including CSV, JSON, XML, table, block, RFC4180 CSV, typed CSV, and script.
- Dynamic Filtering: Use logical expressions for filtering, e.g.,
processor=='intel' && cores>=4. - Ansible Dynamic Inventory Module: To be developed (TBD).
Due to issues with the python-etcd library, the following environment variable is set if not already configured: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python.
-
Install the required dependencies from the
requirements.txtfile:pip install -r requirements.txt -
Configure the etcd connection parameters in
config.py.
Ensure the etcd host and port are correctly set in config.py to match your etcd server settings.
Test the application by running the scripts provided in test_main.py to ensure all functionalities work as expected.
The table below lists the common fields used to describe each host in the inventory:
| Field Identifier | Contents | Comment |
|---|---|---|
| key | hostname | |
| monitored | yes/no | |
| mode | primary role | |
| roles | additional roles | |
| arch | CPU architecture | |
| macaddr | MAC address | |
| cores | CPU cores | |
| cpumodel | CPU codename | |
| swap | swap size | |
| tmpsize | tmp size | Size of /tmp |
| serialnum | enclosure serial | |
| console | remote management | |
| mgmt type | console management type | |
| osver | OS version | e.g., alma9, rhel8 |
| backedup | date of last backup | |
| bios | BIOS update date | |
| ht | hyperthreading on/off | |
| dnsdomain | e.g., company.com | |
| release | internal OS release string | |
| image | deployment image string | |
| modelname | hardware model name | |
| site | site code | |
| os | OS type | |
| ipaddr | IP address of 1st interface | |
| location | rack location | |
| memory | RAM MB amount | |
| owner | company internal ownership | |
| disks | disk size | |
| ddate | deployment date | |
| ssd | swap disk | |
| service | distributed service name | e.g., service name1, service name2 |
Contributions are welcome. Please fork the repository, make your changes, and submit a pull request for review.