Skip to content

ibm

wrknv.managers.subrosa.ibm

IBM Vault Variant for SubRosaManager

Manages IBM Vault (HashiCorp Vault) versions for development.

Classes

IbmVaultVariant

IbmVaultVariant(config: WorkenvConfig | None = None)

Bases: SubRosaManager

IBM Vault (HashiCorp Vault) variant of secret management tools.

Source code in wrknv/managers/subrosa/base.py
def __init__(self, config: WorkenvConfig | None = None) -> None:
    super().__init__(config)

    # Override install path to use subrosa directory
    self.install_path = pathlib.Path("~/.wrknv/subrosa").expanduser()
    self.install_path.mkdir(parents=True, exist_ok=True)

    # Get workenv bin directory for symlinking active version
    self.workenv_bin_dir = get_workenv_bin_dir(config)

    # Metadata file for tracking active versions
    self.metadata_file = self.install_path / "metadata.json"
    self.metadata = self._load_metadata()
Attributes
variant_name property
variant_name: str

Variant name for this secret manager.

Functions
get_available_versions
get_available_versions() -> list[str]

Get available HashiCorp Vault versions from releases API.

Source code in wrknv/managers/subrosa/ibm.py
def get_available_versions(self) -> list[str]:
    """Get available HashiCorp Vault versions from releases API."""
    try:
        # HashiCorp provides a JSON API for releases
        api_url = "https://releases.hashicorp.com/vault/index.json"

        logger.debug(f"Fetching Vault versions from {api_url}")

        response = get(api_url)
        data = response.json()

        versions = []
        include_prereleases = self.config.get_setting("include_prereleases", False)

        # Parse versions from release data
        for version_str, _version_data in data.get("versions", {}).items():
            # Skip pre-releases unless configured
            if not include_prereleases and any(
                tag in version_str for tag in ["-rc", "-beta", "-alpha", "-dev"]
            ):
                continue

            versions.append(version_str)

        logger.debug(f"Found {len(versions)} Vault versions")

        # Sort versions
        try:
            from packaging.version import parse as parse_version

            versions.sort(key=lambda v: parse_version(v), reverse=True)
        except Exception:
            versions.sort(reverse=True)

        return versions

    except Exception as e:
        raise ToolManagerError(f"Failed to fetch Vault versions: {e}") from e
get_checksum_url
get_checksum_url(version: str) -> str | None

Get checksum URL for HashiCorp Vault version.

Source code in wrknv/managers/subrosa/ibm.py
def get_checksum_url(self, version: str) -> str | None:
    """Get checksum URL for HashiCorp Vault version."""
    # HashiCorp provides SHA256SUMS file
    return f"https://releases.hashicorp.com/vault/{version}/vault_{version}_SHA256SUMS"
get_download_url
get_download_url(version: str) -> str

Get download URL for HashiCorp Vault version.

Source code in wrknv/managers/subrosa/ibm.py
def get_download_url(self, version: str) -> str:
    """Get download URL for HashiCorp Vault version."""
    platform_info = self.get_platform_info()
    os_name = platform_info["os"]  # darwin, linux, windows
    arch = platform_info["arch"]  # amd64, arm64, etc.

    # HashiCorp uses different arch naming for ARM
    if arch == "arm64":
        hc_arch = "arm64"
    elif arch == "amd64" or arch == "x86_64":
        hc_arch = "amd64"
    else:
        hc_arch = arch

    # HashiCorp naming: vault_1.15.0_darwin_arm64.zip
    return f"https://releases.hashicorp.com/vault/{version}/vault_{version}_{os_name}_{hc_arch}.zip"

Functions