hcp/vault/common.py (47 lines of code) (raw):
import os
import sys
from pathlib import Path
from elastic.pipes.core import Pipe
from typing_extensions import Annotated
class Context(Pipe.Context):
notes = "Either [b]token[/b] or [b]token-file[/b] may be specified, not both."
url: Annotated[
str,
Pipe.Config("url"),
Pipe.Help("URL of the Vault instance"),
Pipe.Notes("default: from environment VAULT_ADDR"),
] = None
token: Annotated[
str,
Pipe.Config("token"),
Pipe.Help("Vault API authentication token"),
Pipe.Notes("default: from environment VAULT_TOKEN"),
] = None
token_file: Annotated[
str,
Pipe.Config("token-file"),
Pipe.Help("file containing the Vault API authentication token"),
] = None
def __init__(self):
if not self.url:
if url := os.environ.get("VAULT_ADDR", None):
self.logger.debug(" read URL from environment 'VAULT_ADDR'")
self.url = url
if self.token and self.token_file:
self.logger.error("both 'token' and 'token-file' are specified")
sys.exit(1)
elif self.token_file:
token_file = Path(self.token_file).expanduser()
if token := token_file.read_text():
self.logger.debug(f" read token from file '{token_file}'")
self.token = token
elif not self.token:
if token := os.environ.get("VAULT_TOKEN", None):
self.logger.debug(" read token from environment 'VAULT_TOKEN'")
self.token = token
if not self.url:
self.logger.error("Vault URL is not defined")
sys.exit(1)
if not self.token:
self.logger.error("Vault token is not defined")
sys.exit(1)