import secrets
import json
import argparse
from datetime import datetime
def generate_token(service_name: str, environment: str = "production") -> dict:
token = f"sk_live_pg_api_{environment}_{secrets.token_hex(16)}"
metadata = {
"token": token,
"service": service_name,
"environment": environment,
"created_at": datetime.utcnow().isoformat(),
"permissions": [
"ingest:write",
"index:pg-api-*",
"metrics:write",
"logs:write"
],
"description": f"PG-API service token for {environment}"
}
return metadata
def main():
parser = argparse.ArgumentParser(
description='Generate OpenSearch API token for PG-API'
)
parser.add_argument(
'--service',
default='pg-api',
help='Service name (default: pg-api)'
)
parser.add_argument(
'--environment',
choices=['development', 'staging', 'production'],
default='production',
help='Environment (default: production)'
)
parser.add_argument(
'--output',
help='Output file for token info'
)
args = parser.parse_args()
print("Generating OpenSearch API Token...")
print("-" * 40)
token_info = generate_token(args.service, args.environment)
print(f"Service: {token_info['service']}")
print(f"Environment: {token_info['environment']}")
print(f"Created: {token_info['created_at']}")
print("-" * 40)
print(f"Token: {token_info['token']}")
print("-" * 40)
if args.output:
with open(args.output, 'w') as f:
json.dump(token_info, f, indent=2)
print(f"\nToken info saved to: {args.output}")
print("\nConfiguration:")
print(f"1. Add this token to opensearch-api configuration")
print(f"2. Set in pg-api environment:")
print(f" OPENSEARCH_API_TOKEN={token_info['token']}")
print(f" OPENSEARCH_API_URL=https://opensearch-api.yourdomain.com")
print(f" OPENSEARCH_ENABLED=true")
if __name__ == '__main__':
main()