# API Endpoints e Comandi per Raccolta Dati ## 1. VMware vSphere API ### 1.1 REST API Endpoints ```bash # Base URL BASE_URL="https://vcenter.domain.local/rest" # Authentication curl -X POST $BASE_URL/com/vmware/cis/session \ -u 'automation@vsphere.local:password' # Get all VMs curl -X GET $BASE_URL/vcenter/vm \ -H "vmware-api-session-id: ${SESSION_ID}" # Get VM details curl -X GET $BASE_URL/vcenter/vm/${VM_ID} \ -H "vmware-api-session-id: ${SESSION_ID}" # Get hosts curl -X GET $BASE_URL/vcenter/host \ -H "vmware-api-session-id: ${SESSION_ID}" # Get datastores curl -X GET $BASE_URL/vcenter/datastore \ -H "vmware-api-session-id: ${SESSION_ID}" # Get clusters curl -X GET $BASE_URL/vcenter/cluster \ -H "vmware-api-session-id: ${SESSION_ID}" ``` ### 1.2 PowerCLI Commands ```powershell # Connect Connect-VIServer -Server vcenter.domain.local -User automation@vsphere.local # Get all VMs with details Get-VM | Select-Object Name, PowerState, NumCpu, MemoryGB, @{N='UsedSpaceGB';E={[math]::Round($_.UsedSpaceGB,2)}}, VMHost, ResourcePool | Export-Csv -Path vms.csv # Get hosts Get-VMHost | Select-Object Name, ConnectionState, PowerState, Version, NumCpu, MemoryTotalGB, @{N='MemoryUsageGB';E={[math]::Round($_.MemoryUsageGB,2)}} | Export-Csv -Path hosts.csv # Get datastores Get-Datastore | Select-Object Name, Type, CapacityGB, FreeSpaceGB, @{N='PercentFree';E={[math]::Round(($_.FreeSpaceGB/$_.CapacityGB*100),2)}} | Export-Csv -Path datastores.csv # Get performance stats Get-Stat -Entity (Get-VM) -Stat cpu.usage.average,mem.usage.average -Start (Get-Date).AddDays(-7) -IntervalMins 5 | Export-Csv -Path performance.csv ``` --- ## 2. Proxmox VE API ### 2.1 REST API ```bash # Base URL PROXMOX_URL="https://proxmox.domain.local:8006/api2/json" # Get ticket (authentication) curl -k -d "username=automation@pam&password=password" \ $PROXMOX_URL/access/ticket # Get nodes curl -k -H "Cookie: PVEAuthCookie=${TICKET}" \ $PROXMOX_URL/nodes # Get VMs on node curl -k -H "Cookie: PVEAuthCookie=${TICKET}" \ $PROXMOX_URL/nodes/${NODE}/qemu # Get containers curl -k -H "Cookie: PVEAuthCookie=${TICKET}" \ $PROXMOX_URL/nodes/${NODE}/lxc # Get storage curl -k -H "Cookie: PVEAuthCookie=${TICKET}" \ $PROXMOX_URL/nodes/${NODE}/storage # Get cluster status curl -k -H "Cookie: PVEAuthCookie=${TICKET}" \ $PROXMOX_URL/cluster/status ``` ### 2.2 CLI Commands ```bash # List VMs pvesh get /cluster/resources --type vm # VM status qm status ${VMID} # Container list pct list # Storage info pvesm status # Node info pvesh get /nodes/${NODE}/status ``` --- ## 3. Network Devices ### 3.1 Cisco IOS Commands ```bash # Via SSH ssh admin@switch.domain.local # System information show version show inventory show running-config # Interfaces show interfaces status show interfaces description show interfaces counters errors show ip interface brief # VLANs show vlan brief show vlan id ${VLAN_ID} # Spanning Tree show spanning-tree summary show spanning-tree root # Routing show ip route show ip protocols # CDP/LLDP show cdp neighbors detail show lldp neighbors # Performance show processes cpu history show memory statistics show environment all ``` ### 3.2 HP/Aruba Switch Commands ```bash # System info show system show version show running-config # Interfaces show interfaces brief show interfaces status # VLANs show vlans # Spanning tree show spanning-tree # Logging show log ``` --- ## 4. Firewall APIs ### 4.1 pfSense/OPNsense API ```bash # Base URL FW_URL="https://firewall.domain.local/api" # Get system info curl -X GET "${FW_URL}/core/system/status" \ -H "Authorization: Bearer ${API_TOKEN}" # Get interfaces curl -X GET "${FW_URL}/interfaces/overview/export" \ -H "Authorization: Bearer ${API_TOKEN}" # Get firewall rules curl -X GET "${FW_URL}/firewall/filter/searchRule" \ -H "Authorization: Bearer ${API_TOKEN}" # Get VPN status curl -X GET "${FW_URL}/ipsec/sessions" \ -H "Authorization: Bearer ${API_TOKEN}" ``` ### 4.2 Fortinet FortiGate API ```bash # Base URL FORTI_URL="https://fortigate.domain.local/api/v2" # System status curl -X GET "${FORTI_URL}/monitor/system/status" \ -H "Authorization: Bearer ${API_TOKEN}" # Interface stats curl -X GET "${FORTI_URL}/monitor/system/interface/select" \ -H "Authorization: Bearer ${API_TOKEN}" # Firewall policies curl -X GET "${FORTI_URL}/cmdb/firewall/policy" \ -H "Authorization: Bearer ${API_TOKEN}" # VPN status curl -X GET "${FORTI_URL}/monitor/vpn/ipsec" \ -H "Authorization: Bearer ${API_TOKEN}" ``` --- ## 5. Storage Arrays ### 5.1 Pure Storage API ```bash # Base URL PURE_URL="https://array.domain.local/api" # Get array info curl -X GET "${PURE_URL}/1.19/array" \ -H "api-token: ${API_TOKEN}" # Get volumes curl -X GET "${PURE_URL}/1.19/volume" \ -H "api-token: ${API_TOKEN}" # Get hosts curl -X GET "${PURE_URL}/1.19/host" \ -H "api-token: ${API_TOKEN}" # Get performance metrics curl -X GET "${PURE_URL}/1.19/array/monitor?action=monitor" \ -H "api-token: ${API_TOKEN}" ``` ### 5.2 NetApp ONTAP API ```bash # Base URL NETAPP_URL="https://netapp.domain.local/api" # Get cluster info curl -X GET "${NETAPP_URL}/cluster" \ -u "admin:password" # Get volumes curl -X GET "${NETAPP_URL}/storage/volumes" \ -u "admin:password" # Get aggregates curl -X GET "${NETAPP_URL}/storage/aggregates" \ -u "admin:password" # Get performance curl -X GET "${NETAPP_URL}/cluster/counter/tables/volume" \ -u "admin:password" ``` ### 5.3 Generic SAN Commands ```bash # Via SSH to array management interface # Show system info show system show controller show disk # Show volumes/LUNs show volumes show luns show mappings # Show performance show statistics show disk-statistics ``` --- ## 6. Monitoring Systems ### 6.1 Zabbix API ```bash # Base URL ZABBIX_URL="https://zabbix.domain.local/api_jsonrpc.php" # Authenticate curl -X POST $ZABBIX_URL \ -H "Content-Type: application/json-rpc" \ -d '{ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "automation", "password": "password" }, "id": 1 }' # Get hosts curl -X POST $ZABBIX_URL \ -H "Content-Type: application/json-rpc" \ -d '{ "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid", "host", "status"] }, "auth": "'${AUTH_TOKEN}'", "id": 1 }' # Get problems curl -X POST $ZABBIX_URL \ -H "Content-Type: application/json-rpc" \ -d '{ "jsonrpc": "2.0", "method": "problem.get", "params": { "recent": true }, "auth": "'${AUTH_TOKEN}'", "id": 1 }' ``` ### 6.2 Prometheus API ```bash # Base URL PROM_URL="http://prometheus.domain.local:9090" # Query instant curl -X GET "${PROM_URL}/api/v1/query?query=up" # Query range curl -X GET "${PROM_URL}/api/v1/query_range?query=node_cpu_seconds_total&start=2024-01-01T00:00:00Z&end=2024-01-02T00:00:00Z&step=15s" # Get targets curl -X GET "${PROM_URL}/api/v1/targets" # Get alerts curl -X GET "${PROM_URL}/api/v1/alerts" ``` ### 6.3 Nagios/Icinga API ```bash # Icinga2 API ICINGA_URL="https://icinga.domain.local:5665" # Get hosts curl -k -u "automation:password" \ "${ICINGA_URL}/v1/objects/hosts" # Get services curl -k -u "automation:password" \ "${ICINGA_URL}/v1/objects/services" # Get problems curl -k -u "automation:password" \ "${ICINGA_URL}/v1/objects/services?filter=service.state!=0" ``` --- ## 7. Backup Systems ### 7.1 Veeam API ```powershell # Connect to Veeam server Connect-VBRServer -Server veeam.domain.local -User automation # Get backup jobs Get-VBRJob | Select-Object Name, JobType, IsScheduleEnabled, LastResult # Get backup sessions Get-VBRBackupSession | Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-7)} | Select-Object Name, JobName, Result, CreationTime # Get restore points Get-VBRRestorePoint | Select-Object VMName, CreationTime, Type # Get repositories Get-VBRBackupRepository | Select-Object Name, Path, @{N='FreeGB';E={[math]::Round($_.GetContainer().CachedFreeSpace.InGigabytes,2)}} ``` ### 7.2 CommVault API ```bash # Base URL CV_URL="https://commvault.domain.local/webconsole/api" # Login curl -X POST "${CV_URL}/Login" \ -H "Content-Type: application/json" \ -d '{"username":"automation","password":"password"}' # Get jobs curl -X GET "${CV_URL}/Job?clientName=${CLIENT}" \ -H "Authtoken: ${TOKEN}" # Get clients curl -X GET "${CV_URL}/Client" \ -H "Authtoken: ${TOKEN}" ``` --- ## 8. Database Queries ### 8.1 Asset Management DB ```sql -- MySQL/MariaDB queries for asset database -- Get all racks SELECT rack_id, location, total_units, occupied_units, (total_units - occupied_units) AS available_units, max_power_kw, ROUND(occupied_units * 100.0 / total_units, 2) AS utilization_percent FROM racks ORDER BY location, rack_id; -- Get all servers SELECT s.hostname, s.serial_number, s.model, s.cpu_model, s.cpu_cores, s.ram_gb, s.rack_id, s.rack_unit, s.status, s.environment FROM servers s ORDER BY s.rack_id, s.rack_unit; -- Get network devices SELECT n.hostname, n.device_type, n.vendor, n.model, n.management_ip, n.firmware_version, n.rack_id, n.status FROM network_devices n ORDER BY n.device_type, n.hostname; -- Get contracts SELECT c.vendor, c.service_type, c.contract_type, c.start_date, c.end_date, DATEDIFF(c.end_date, NOW()) AS days_to_expiry, c.annual_cost FROM contracts c WHERE c.end_date > NOW() ORDER BY c.end_date; ``` ### 8.2 Database Server Queries ```sql -- MySQL - Database sizes SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 'Size_GB' FROM information_schema.tables GROUP BY table_schema ORDER BY SUM(data_length + index_length) DESC; -- PostgreSQL - Database sizes SELECT datname AS database_name, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database ORDER BY pg_database_size(datname) DESC; -- SQL Server - Database sizes SELECT DB_NAME(database_id) AS DatabaseName, (size * 8.0 / 1024) AS SizeMB FROM sys.master_files WHERE type = 0 ORDER BY size DESC; ``` --- ## 9. Cloud Provider APIs ### 9.1 AWS (Boto3) ```python import boto3 # EC2 instances ec2 = boto3.client('ec2') instances = ec2.describe_instances() # S3 buckets s3 = boto3.client('s3') buckets = s3.list_buckets() # RDS databases rds = boto3.client('rds') databases = rds.describe_db_instances() # Cost Explorer ce = boto3.client('ce') cost = ce.get_cost_and_usage( TimePeriod={'Start': '2024-01-01', 'End': '2024-01-31'}, Granularity='MONTHLY', Metrics=['UnblendedCost'] ) ``` ### 9.2 Azure (SDK) ```python from azure.identity import DefaultAzureCredential from azure.mgmt.compute import ComputeManagementClient from azure.mgmt.storage import StorageManagementClient credential = DefaultAzureCredential() # VMs compute_client = ComputeManagementClient(credential, subscription_id) vms = compute_client.virtual_machines.list_all() # Storage accounts storage_client = StorageManagementClient(credential, subscription_id) storage_accounts = storage_client.storage_accounts.list() ``` --- ## 10. SNMP OIDs Reference ### 10.1 Common System OIDs ```bash # System description .1.3.6.1.2.1.1.1.0 # sysDescr # System uptime .1.3.6.1.2.1.1.3.0 # sysUpTime # System name .1.3.6.1.2.1.1.5.0 # sysName # System location .1.3.6.1.2.1.1.6.0 # sysLocation ``` ### 10.2 UPS OIDs (RFC 1628) ```bash # UPS identity .1.3.6.1.2.1.33.1.1.1.0 # upsIdentManufacturer .1.3.6.1.2.1.33.1.1.2.0 # upsIdentModel # Battery status .1.3.6.1.2.1.33.1.2.1.0 # upsBatteryStatus .1.3.6.1.2.1.33.1.2.2.0 # upsSecondsOnBattery .1.3.6.1.2.1.33.1.2.3.0 # upsEstimatedMinutesRemaining # Input .1.3.6.1.2.1.33.1.3.3.1.3 # upsInputVoltage .1.3.6.1.2.1.33.1.3.3.1.4 # upsInputCurrent .1.3.6.1.2.1.33.1.3.3.1.6 # upsInputTruePower # Output .1.3.6.1.2.1.33.1.4.4.1.2 # upsOutputVoltage .1.3.6.1.2.1.33.1.4.4.1.3 # upsOutputCurrent .1.3.6.1.2.1.33.1.4.4.1.4 # upsOutputPower .1.3.6.1.2.1.33.1.4.4.1.5 # upsOutputPercentLoad ``` ### 10.3 Network Interface OIDs ```bash # Interface description .1.3.6.1.2.1.2.2.1.2 # ifDescr # Interface status .1.3.6.1.2.1.2.2.1.8 # ifOperStatus # Interface traffic .1.3.6.1.2.1.2.2.1.10 # ifInOctets .1.3.6.1.2.1.2.2.1.16 # ifOutOctets # Interface errors .1.3.6.1.2.1.2.2.1.14 # ifInErrors .1.3.6.1.2.1.2.2.1.20 # ifOutErrors ``` --- ## 11. Example Collection Script ### 11.1 Complete Data Collection ```bash #!/bin/bash # collect_all_data.sh - Orchestrate all data collection OUTPUT_DIR="/tmp/datacenter-collection-$(date +%Y%m%d_%H%M%S)" mkdir -p $OUTPUT_DIR echo "Starting datacenter data collection..." # VMware echo "Collecting VMware data..." python3 collect_vmware.py > $OUTPUT_DIR/vmware.json # Network devices echo "Collecting network configurations..." ./collect_network.sh > $OUTPUT_DIR/network.json # Storage echo "Collecting storage data..." python3 collect_storage.py > $OUTPUT_DIR/storage.json # Monitoring echo "Collecting monitoring data..." ./collect_monitoring.sh > $OUTPUT_DIR/monitoring.json # Databases echo "Querying databases..." mysql -h db.local -u reader -pPASS asset_db < queries.sql > $OUTPUT_DIR/asset_db.csv # SNMP devices echo "Polling SNMP devices..." ./poll_snmp.sh > $OUTPUT_DIR/snmp.json echo "Collection complete. Data saved to: $OUTPUT_DIR" tar -czf $OUTPUT_DIR.tar.gz $OUTPUT_DIR ``` --- ## 12. Rate Limiting Reference ### 12.1 Vendor Rate Limits | Vendor | Endpoint | Limit | Time Window | |--------|----------|-------|-------------| | VMware vCenter | REST API | 100 req | per minute | | Zabbix | API | 300 req | per minute | | Pure Storage | REST API | 60 req | per minute | | Cisco DNA Center | API | 10 req | per second | | AWS | API (varies) | 10-100 req | per second | ### 12.2 Retry Strategy ```python import time from functools import wraps def rate_limited_retry(max_retries=3, backoff_factor=2): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): for attempt in range(max_retries): try: return func(*args, **kwargs) except RateLimitException: if attempt == max_retries - 1: raise wait_time = backoff_factor ** attempt logger.warning(f"Rate limited. Waiting {wait_time}s before retry {attempt+1}/{max_retries}") time.sleep(wait_time) except Exception as e: logger.error(f"Error: {e}") raise return wrapper return decorator ``` --- **Documento Versione**: 1.0 **Ultimo Aggiornamento**: 2025-01-XX **Maintainer**: Automation Team