mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 02:54:26 +00:00
categories.yml moves from roles/ to the repository-root meta/, joining packages.yml. utils/roles/categories.py owns its location plus the tree-walking helpers that were stranded in entity/name.py, so no caller spells the path or duplicates the lookup. meta/distros.yml becomes the SPOT for every distribution: os_family, Galaxy platform name, dev-environment base image, and the pkgmgr/pkgmgr-virgin/environment reference templates. It replaces seven scattered copies (DISTRO_FAMILY, VALID_DISTROS, _DISTROS, _CANONICAL_PLATFORMS, two shell arrays, a Makefile literal). INFINITO_DISTROS is no longer a static default but generated by utils/env/handlers/infinito/distros.py; the shell consumers read it through the env layer. Drops dead CLI surface found along the way: --categories-file and --roles-dir on the provision CLI plus three unused parameters of generate_dynamic_inventory, and the positional roles_file of the invokable categories command. tests/lint/repository/test_distros_spot.py pins the copies that cannot call the SPOT (workflow literals, docs table) and forbids composing a pkgmgr reference outside it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
25 lines
797 B
Python
25 lines
797 B
Python
from utils.roles.categories import (
|
|
categories_file,
|
|
flatten_categories,
|
|
load_categories_tree,
|
|
)
|
|
|
|
|
|
def get_entity_name(role_name):
|
|
"""
|
|
Get the entity name from a role name by removing the
|
|
longest matching category path from categories.yml.
|
|
"""
|
|
categories_tree = load_categories_tree(str(categories_file()))
|
|
all_category_paths = flatten_categories(categories_tree)
|
|
|
|
role_name_lc = role_name.lower()
|
|
all_category_paths = [cat.lower() for cat in all_category_paths]
|
|
empty_match = False
|
|
for cat in sorted(all_category_paths, key=len, reverse=True):
|
|
if role_name_lc.startswith(cat + "-"):
|
|
return role_name[len(cat) + 1 :]
|
|
if role_name_lc == cat:
|
|
empty_match = True
|
|
return "" if empty_match else role_name
|