⚠️ Early Preview: This tool is currently in early preview and provided without guarantees. Resource counts should be verified independently before making licensing decisions.
A Python tool that discovers and counts DDI Objects and Active IPs across AWS, Azure, and Google Cloud Platform (GCP) for Infoblox Universal DDI licensing assessment.
- Multi-Cloud Support: Discover resources across AWS, Azure, and GCP
- DDI Object Counting: Count VPCs, subnets, DNS zones, and other network infrastructure
- Active IP Tracking: Identify IP addresses assigned to running instances and services
- Flexible Output: Support for JSON, CSV, and TXT output formats
- Parallel Processing: Configurable worker threads for improved performance
- Modular Design: Clean separation between cloud providers and shared utilities
- Python 3.8 or higher
- AWS CLI (for AWS discovery)
- Google Cloud SDK (for GCP discovery)
- Network access to cloud provider APIs
macOS/Linux:
git clone https://github.com/your-username/Infoblox-Universal-DDI-cloud-usage.git
cd Infoblox-Universal-DDI-cloud-usage
./setup_venv.sh
Windows:
git clone https://github.com/your-username/Infoblox-Universal-DDI-cloud-usage.git
cd Infoblox-Universal-DDI-cloud-usage
setup_venv.bat
# Activate virtual environment
source venv/bin/activate # macOS/Linux
# or
venv\Scripts\activate.bat # Windows
# Run discovery
python main.py aws --format json
python main.py azure --format json
python main.py gcp --format json
The setup scripts handle everything automatically:
macOS/Linux:
./setup_venv.sh
Windows:
setup_venv.bat
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # macOS/Linux
# or
venv\Scripts\activate.bat # Windows
# Install dependencies
pip install -r requirements.txt
Environment Variables:
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
AWS Profile/SSO:
export AWS_PROFILE="your_profile"
aws sso login --profile your_profile
Required Permissions (Read-Only):
- EC2ReadOnlyAccess - For EC2, VPC, and Load Balancer discovery across all regions
- Route53ReadOnlyAccess - For DNS zone and record discovery (global)
- IAMReadOnlyAccess - For account information and cross-account discovery
- OrganizationsReadOnlyAccess - For multi-account discovery (if using AWS Organizations)
Azure CLI:
az login
Service Principal:
export AZURE_CLIENT_ID="your_client_id"
export AZURE_CLIENT_SECRET="your_client_secret"
export AZURE_TENANT_ID="your_tenant_id"
export AZURE_SUBSCRIPTION_ID="your_subscription_id"
Required Permissions (Read-Only):
- Reader - Built-in role for subscription-level read access across all subscriptions
- Network Reader - For network resource discovery across all resource groups (read-only)
- Management Group Reader - For multi-subscription discovery (if using Management Groups)
gcloud CLI:
gcloud auth login
gcloud auth application-default login
export GOOGLE_CLOUD_PROJECT="your-project-id"
Service Account:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
export GOOGLE_CLOUD_PROJECT="your-project-id"
Required Permissions (Read-Only):
- Compute Instance Viewer - For Compute Engine instance discovery across all zones
- Network Viewer - For VPC and subnet discovery across all regions
- DNS Reader - For Cloud DNS zone and record discovery (global)
- Project IAM Viewer - For multi-project discovery and project listing (read-only)
python main.py {provider} [options]
Providers:
aws
- Amazon Web Servicesazure
- Microsoft Azuregcp
- Google Cloud Platform
Options:
--format {json,csv,txt}
- Output format (default: txt)--workers <number>
- Number of parallel workers (default: 8)--full
- Save detailed resource data (default: summary only)
# Basic discovery with default settings
python main.py aws
# High-performance discovery with JSON output
python main.py aws --format json --workers 12
# Full discovery with detailed output
python main.py azure --format json --full
# GCP discovery with CSV output
python main.py gcp --format csv --full
Generated in the output/
directory:
*_native_objects_*.{format}
- Detailed resource information (with--full
)*_resource_count_*.{format}
- DDI Objects and Active IPs count results
The tool generates detailed reports showing breakdowns first, with the key sizing numbers prominently displayed at the end:
Resource Breakdowns:
- DDI Objects breakdown (vpc, subnet, route53-zone, etc.)
- Active IPs breakdown (ec2-instance, load-balancer, etc.)
Key Sizing Numbers (at the end):
- DDI Objects Count - Total DDI objects for licensing
- Active IPs Count - Total active IP addresses
The tool counts two main categories:
The tool identifies and counts various DDI (DNS, DHCP, IPAM) objects across your cloud infrastructure:
Network Infrastructure:
- VPCs/Networks
- Subnets
- Route Tables
- Network Interfaces
DNS Resources:
- DNS Zones (Hosted Zones)
- DNS Records (A, AAAA, CNAME, MX, etc.)
- DNS Policies
Load Balancing:
- Load Balancers (Application, Network, Classic)
- Target Groups
- Health Checks
Other DDI Objects:
- NAT Gateways
- Internet Gateways
- VPN Connections
- Direct Connect (AWS)
Tracks IP addresses currently assigned to running resources:
Compute Resources:
- EC2 Instances (AWS)
- Virtual Machines (Azure)
- Compute Instances (GCP)
Network Services:
- Load Balancers
- NAT Gateways
- VPN Endpoints
- Database Instances
Other IP Sources:
- Container Services
- Serverless Functions
- Network-attached Storage
Infoblox-Universal-DDI-cloud-usage/
├── aws_discovery/ # AWS discovery module
│ ├── aws_discovery.py # Core AWS discovery logic
│ ├── discover.py # AWS CLI entry point
│ ├── config.py # AWS configuration
│ └── utils.py # AWS utilities
├── azure_discovery/ # Azure discovery module
│ ├── azure_discovery.py # Core Azure discovery logic
│ ├── discover.py # Azure CLI entry point
│ ├── config.py # Azure configuration
│ └── utils.py # Azure utilities
├── gcp_discovery/ # GCP discovery module
│ ├── gcp_discovery.py # Core GCP discovery logic
│ ├── discover.py # GCP CLI entry point
│ ├── config.py # GCP configuration
│ └── utils.py # GCP utilities
├── shared/ # Shared utilities
│ ├── base_discovery.py # Base discovery class
│ ├── output_utils.py # Output formatting
│ ├── resource_counter.py # Resource counting logic
│ ├── constants.py # Shared constants
│ ├── logging_utils.py # Logging utilities
│ ├── validation.py # Input validation
│ └── config.py # Base configuration
├── main.py # Main entry point
├── requirements.txt # Project dependencies
├── setup_venv.sh # Linux/macOS setup script
├── setup_venv.bat # Windows setup script
└── output/ # Generated output files