Files
vultr-api/examples/basic_usage.py
HWANG BYUNGHA 184054c6c1 Initial commit: Vultr API v2 Python wrapper with FastAPI server
- vultr_api/: Python library wrapping Vultr API v2
  - 17 resource modules (instances, dns, firewall, vpc, etc.)
  - Pagination support, error handling

- server/: FastAPI REST server
  - All API endpoints exposed via HTTP
  - X-API-Key header authentication
  - Swagger docs at /docs

- Podman quadlet config for systemd deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 01:08:17 +09:00

106 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""
Vultr API 기본 사용 예제
"""
import os
import sys
# vultr_api 패키지 경로 추가 (개발용)
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from vultr_api import VultrClient
from vultr_api.client import VultrAPIError
def main():
# API 키 설정 (환경 변수에서 가져오기)
api_key = os.environ.get("VULTR_API_KEY")
if not api_key:
print("VULTR_API_KEY 환경 변수를 설정해주세요")
print("export VULTR_API_KEY='your-api-key'")
sys.exit(1)
# 클라이언트 생성
client = VultrClient(api_key=api_key)
try:
# 1. 계정 정보 조회
print("=" * 50)
print("계정 정보")
print("=" * 50)
account = client.account.get()
print(f"이메일: {account.get('email')}")
print(f"이름: {account.get('name')}")
print(f"잔액: ${account.get('balance')}")
print(f"보류 요금: ${account.get('pending_charges')}")
print()
# 2. ACL 정보 조회
print("=" * 50)
print("ACL (IP 접근 제어)")
print("=" * 50)
acl = client.account.get_acl()
print(f"ACL 활성화: {acl.get('acl_enabled', False)}")
acls = acl.get("acls", [])
if acls:
print("허용된 IP:")
for ip in acls:
print(f" - {ip}")
else:
print("허용된 IP: 없음 (모든 IP 허용)")
print()
# 3. 인스턴스 목록
print("=" * 50)
print("인스턴스 목록")
print("=" * 50)
instances_resp = client.instances.list()
instances = instances_resp.get("instances", [])
if instances:
for inst in instances:
status = inst.get("status", "unknown")
power = inst.get("power_status", "unknown")
print(f"- {inst.get('label', 'No Label')}")
print(f" ID: {inst.get('id')}")
print(f" IP: {inst.get('main_ip')}")
print(f" 리전: {inst.get('region')}")
print(f" 상태: {status} ({power})")
print(f" 플랜: {inst.get('plan')}")
print()
else:
print("인스턴스가 없습니다")
print()
# 4. 리전 목록 (일부만)
print("=" * 50)
print("사용 가능한 리전 (일부)")
print("=" * 50)
regions_resp = client.regions.list(per_page=10)
regions = regions_resp.get("regions", [])
for region in regions[:5]:
print(f"- {region.get('id')}: {region.get('city')}, {region.get('country')}")
print()
# 5. 플랜 목록 (일부만)
print("=" * 50)
print("사용 가능한 플랜 (일부)")
print("=" * 50)
plans_resp = client.plans.list(per_page=10)
plans = plans_resp.get("plans", [])
for plan in plans[:5]:
print(f"- {plan.get('id')}")
print(f" CPU: {plan.get('vcpu_count')}vCPU, RAM: {plan.get('ram')}MB")
print(f" 가격: ${plan.get('monthly_cost')}/월")
print()
except VultrAPIError as e:
print(f"API 오류 발생: {e.message}")
if e.status_code:
print(f"상태 코드: {e.status_code}")
sys.exit(1)
if __name__ == "__main__":
main()