Server : nginx/1.18.0 System : Linux localhost 6.14.3-x86_64-linode168 #1 SMP PREEMPT_DYNAMIC Mon Apr 21 19:47:55 EDT 2025 x86_64 User : www-data ( 33) PHP Version : 8.0.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /lib/python3/dist-packages/uaclient/entitlements/ |
from typing import List, Type # noqa: F401
from uaclient.config import UAConfig
from uaclient.entitlements import fips
from uaclient.entitlements.base import UAEntitlement # noqa: F401
from uaclient.entitlements.cc import CommonCriteriaEntitlement
from uaclient.entitlements.cis import CISEntitlement
from uaclient.entitlements.esm import ESMAppsEntitlement, ESMInfraEntitlement
from uaclient.entitlements.livepatch import LivepatchEntitlement
from uaclient.entitlements.ros import ROSEntitlement, ROSUpdatesEntitlement
from uaclient.util import is_config_value_true
ENTITLEMENT_CLASSES = [
CommonCriteriaEntitlement,
CISEntitlement,
ESMAppsEntitlement,
ESMInfraEntitlement,
fips.FIPSEntitlement,
fips.FIPSUpdatesEntitlement,
LivepatchEntitlement,
ROSEntitlement,
ROSUpdatesEntitlement,
] # type: List[Type[UAEntitlement]]
def entitlement_factory(name: str):
"""Returns a UAEntitlement class based on the provided name.
The return type is Optional[Type[UAEntitlement]].
It cannot be explicit because of the Python version on Xenial (3.5.2).
"""
for entitlement in ENTITLEMENT_CLASSES:
if name in entitlement().valid_names:
return entitlement
return None
def valid_services(
allow_beta: bool = False, all_names: bool = False
) -> List[str]:
"""Return a list of valid (non-beta) services.
@param allow_beta: if we should allow beta services to be marked as valid
@param all_names: if we should return all the names for a service instead
of just the presentation_name
"""
cfg = UAConfig()
allow_beta_cfg = is_config_value_true(cfg.cfg, "features.allow_beta")
allow_beta |= allow_beta_cfg
entitlements = ENTITLEMENT_CLASSES
if not allow_beta:
entitlements = [
entitlement
for entitlement in entitlements
if not entitlement.is_beta
]
if all_names:
names = []
for entitlement in entitlements:
names.extend(entitlement().valid_names)
return sorted(names)
return sorted(
[entitlement().presentation_name for entitlement in entitlements]
)