-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
Norberto Aquino edited this page Sep 26, 2025
·
1 revision
Real-world examples for different organizational setups and use cases.
- Small Office Setup
- Enterprise Deployment
- Managed Service Provider
- Development Environment
- Multi-Site Configuration
- Custom Field Examples
Scenario: 50 computers, simple setup, basic asset tracking
[rudder]
url = https://rudder.smalloffice.com
api_token = abc123def456ghi789
[snipe-it]
url = https://assets.smalloffice.com
apikey = xyz789uvw012rst345
manufacturer_id = 1
defaultStatus = 2
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_ip_address_1 = properties ipHostNumber
_snipeit_os_2 = properties osName
_snipeit_memory_3 = properties memorySize# Initial setup
python3 rudder2snipe --connection_test
python3 rudder2snipe --dryrun --verbose
# First sync
python3 rudder2snipe --verbose
# Daily cron job
echo "0 9 * * * /opt/rudder2snipe/.venv/bin/python /opt/rudder2snipe/rudder2snipe --verbose >> /var/log/rudder2snipe.log 2>&1" | crontab -- Creates 50 assets in Snipe-IT
- Maps basic information (hostname, IP, OS, memory)
- Simple daily sync
- ~2-3 minutes execution time
Scenario: 1000+ assets, complex requirements, custom fields, user management
[rudder]
url = https://rudder.enterprise.corp
api_token = enterprise_token_here_very_long
[snipe-it]
url = https://snipe.enterprise.corp
apikey = enterprise_snipe_key_here
manufacturer_id = 3
defaultStatus = 4
computer_model_category_id = 5
computer_custom_fieldset_id = 2
[api-mapping]
# Basic information
name = hostname
_snipeit_ip_address_1 = properties ipHostNumber
_snipeit_mac_address_2 = properties macAddress
# Operating system details
_snipeit_os_name_3 = properties osName
_snipeit_os_version_4 = properties osVersion
_snipeit_os_kernel_5 = properties osKernelVersion
_snipeit_os_full_6 = properties osFullName
# Hardware specifications
_snipeit_cpu_model_7 = properties processorModel
_snipeit_cpu_cores_8 = properties processorCount
_snipeit_memory_size_9 = properties memorySize
_snipeit_disk_size_10 = properties diskSize
# Location and organizational
_snipeit_location_11 = properties location
_snipeit_department_12 = properties department
_snipeit_cost_center_13 = properties costCenter
_snipeit_building_14 = properties building
_snipeit_floor_15 = properties floor
# Technical details
_snipeit_serial_number_16 = properties serialNumber
_snipeit_asset_owner_17 = properties assetOwner
_snipeit_purchase_date_18 = properties purchaseDate
_snipeit_warranty_end_19 = properties warrantyExpiration
# Management information
_snipeit_last_inventory_20 = properties inventoryDate
_snipeit_agent_version_21 = properties agentName
_snipeit_compliance_status_22 = properties complianceStatus
[user-mapping]
rudder_api_field = properties primaryUser#!/bin/bash
# enterprise-deploy.sh
LOG_DIR="/var/log/rudder2snipe"
LOG_FILE="$LOG_DIR/enterprise-sync.log"
ERROR_LOG="$LOG_DIR/enterprise-error.log"
# Ensure log directory exists
mkdir -p "$LOG_DIR"
# Pre-sync checks
echo "$(date): Starting enterprise sync" >> "$LOG_FILE"
# Check disk space
DISK_USAGE=$(df /var | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 90 ]; then
echo "$(date): WARNING - Disk usage at ${DISK_USAGE}%" >> "$LOG_FILE"
fi
# Run sync with rate limiting and user assignment
/opt/rudder2snipe/.venv/bin/python /opt/rudder2snipe/rudder2snipe \
--ratelimited \
--users \
--verbose \
>> "$LOG_FILE" 2>> "$ERROR_LOG"
EXIT_CODE=$?
# Post-sync reporting
if [ $EXIT_CODE -eq 0 ]; then
echo "$(date): Sync completed successfully" >> "$LOG_FILE"
# Count successful operations
CREATED=$(grep -c "Successfully created asset" "$LOG_FILE")
UPDATED=$(grep -c "Successfully updated" "$LOG_FILE")
echo "$(date): Created: $CREATED, Updated: $UPDATED" >> "$LOG_FILE"
else
echo "$(date): Sync failed with exit code $EXIT_CODE" >> "$ERROR_LOG"
# Send alert email
mail -s "Enterprise rudder2snipe sync failed" [email protected] < "$ERROR_LOG"
fi# /etc/cron.d/rudder2snipe-enterprise
# Run every 4 hours during business hours
0 8,12,16 * * 1-5 rudder /opt/rudder2snipe/enterprise-deploy.sh
# Weekly full sync with force update
0 2 * * 0 rudder /opt/rudder2snipe/.venv/bin/python /opt/rudder2snipe/rudder2snipe --force --ratelimited --users_force --verbose >> /var/log/rudder2snipe/weekly-sync.log 2>&1- Manages 1000+ assets efficiently
- Rich custom field data
- Automatic user assignments
- ~60-90 minutes execution time with rate limiting
- Comprehensive logging and monitoring
Scenario: Multiple clients, separate Snipe instances, centralized management
/opt/rudder2snipe/
├── clients/
│ ├── client1/
│ │ ├── settings.conf
│ │ └── logs/
│ ├── client2/
│ │ ├── settings.conf
│ │ └── logs/
│ └── client3/
│ ├── settings.conf
│ └── logs/
├── scripts/
│ ├── sync-all-clients.sh
│ ├── sync-client.sh
│ └── health-check.sh
└── templates/
└── settings-template.conf
# /opt/rudder2snipe/templates/settings-template.conf
[rudder]
url = https://rudder.CLIENT_NAME.msp.com
api_token = CLIENT_RUDDER_TOKEN
[snipe-it]
url = https://snipe.CLIENT_NAME.msp.com
apikey = CLIENT_SNIPE_TOKEN
manufacturer_id = 1
defaultStatus = 2
computer_model_category_id = 1
asset_tag = properties serialNumber
[api-mapping]
name = hostname
_snipeit_client_id_1 = properties clientId
_snipeit_contract_number_2 = properties contractNumber
_snipeit_service_level_3 = properties serviceLevel
_snipeit_ip_address_4 = properties ipHostNumber
_snipeit_os_5 = properties osName
_snipeit_location_6 = properties location
_snipeit_contact_person_7 = properties contactPerson
[user-mapping]
rudder_api_field = properties username# /opt/rudder2snipe/clients/acme-corp/settings.conf
[rudder]
url = https://rudder.acme-corp.msp.com
api_token = acme_token_abc123
[snipe-it]
url = https://snipe.acme-corp.msp.com
apikey = acme_snipe_xyz789
manufacturer_id = 2
defaultStatus = 2
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_client_id_1 = properties clientId
_snipeit_contract_number_2 = properties contractNumber
_snipeit_ip_address_3 = properties ipHostNumber
_snipeit_os_4 = properties osName
_snipeit_department_5 = properties department
_snipeit_employee_id_6 = properties employeeId
[user-mapping]
rudder_api_field = properties username#!/bin/bash
# /opt/rudder2snipe/scripts/sync-all-clients.sh
CLIENTS_DIR="/opt/rudder2snipe/clients"
SCRIPT_DIR="/opt/rudder2snipe"
MASTER_LOG="/var/log/rudder2snipe/master-sync.log"
echo "$(date): Starting multi-client sync" >> "$MASTER_LOG"
for client_dir in "$CLIENTS_DIR"/*/; do
client_name=$(basename "$client_dir")
echo "$(date): Processing client: $client_name" >> "$MASTER_LOG"
if [ -f "$client_dir/settings.conf" ]; then
# Create client-specific log directory
mkdir -p "$client_dir/logs"
# Run sync for this client
cd "$client_dir"
/opt/rudder2snipe/.venv/bin/python "$SCRIPT_DIR/rudder2snipe" \
--ratelimited \
--verbose \
> "logs/sync-$(date +%Y%m%d).log" 2>&1
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "$(date): Client $client_name sync completed successfully" >> "$MASTER_LOG"
else
echo "$(date): Client $client_name sync failed with code $EXIT_CODE" >> "$MASTER_LOG"
# Alert for this specific client
echo "Client $client_name sync failed at $(date)" | \
mail -s "MSP Alert: $client_name sync failed" [email protected]
fi
# Brief pause between clients
sleep 30
else
echo "$(date): Warning - No settings.conf found for $client_name" >> "$MASTER_LOG"
fi
done
echo "$(date): Multi-client sync completed" >> "$MASTER_LOG"#!/bin/bash
# /opt/rudder2snipe/scripts/health-check.sh
CLIENTS_DIR="/opt/rudder2snipe/clients"
HEALTH_REPORT="/tmp/rudder2snipe-health.txt"
echo "rudder2snipe Health Report - $(date)" > "$HEALTH_REPORT"
echo "===========================================" >> "$HEALTH_REPORT"
for client_dir in "$CLIENTS_DIR"/*/; do
client_name=$(basename "$client_dir")
echo "" >> "$HEALTH_REPORT"
echo "Client: $client_name" >> "$HEALTH_REPORT"
echo "-------------------" >> "$HEALTH_REPORT"
if [ -f "$client_dir/settings.conf" ]; then
echo "✓ Configuration file exists" >> "$HEALTH_REPORT"
# Check recent log
LATEST_LOG=$(find "$client_dir/logs" -name "sync-*.log" | sort | tail -1)
if [ -n "$LATEST_LOG" ]; then
LOG_AGE=$((($(date +%s) - $(stat -f %m "$LATEST_LOG" 2>/dev/null || stat -c %Y "$LATEST_LOG" 2>/dev/null)) / 3600))
if [ $LOG_AGE -lt 25 ]; then
echo "✓ Recent sync log found (${LOG_AGE}h ago)" >> "$HEALTH_REPORT"
if grep -q error "$LATEST_LOG"; then
echo "⚠ Errors found in recent log" >> "$HEALTH_REPORT"
else
echo "✓ No errors in recent log" >> "$HEALTH_REPORT"
fi
else
echo "⚠ Last sync log is ${LOG_AGE}h old" >> "$HEALTH_REPORT"
fi
else
echo "✗ No sync logs found" >> "$HEALTH_REPORT"
fi
else
echo "✗ Configuration file missing" >> "$HEALTH_REPORT"
fi
done
# Email health report
mail -s "MSP rudder2snipe Health Report" [email protected] < "$HEALTH_REPORT"- Manages multiple client environments independently
- Centralized monitoring and alerting
- Client-specific configurations and logging
- Scalable architecture for growth
Scenario: Testing environment, development features, safe experimentation
[rudder]
url = https://rudder-dev.lab.local
api_token = dev_token_12345
[snipe-it]
url = https://snipe-dev.lab.local
apikey = dev_key_67890
manufacturer_id = 1
defaultStatus = 1
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_environment_1 = properties environment
_snipeit_test_flag_2 = properties testFlag
_snipeit_developer_3 = properties developer
_snipeit_ip_address_4 = properties ipHostNumber
_snipeit_os_5 = properties osName#!/bin/bash
# dev-workflow.sh
echo "=== Development rudder2snipe Workflow ==="
# Always start with connection test
echo "1. Testing connections..."
python3 rudder2snipe --connection_test
if [ $? -ne 0 ]; then
echo "Connection test failed. Check configuration."
exit 1
fi
# Run dry run with debug
echo "2. Running dry run with debug output..."
python3 rudder2snipe --dryrun --debug | tee dev-dryrun.log
# Check for any obvious issues
if grep -q "ERROR\|error" dev-dryrun.log; then
echo "Errors found in dry run. Review dev-dryrun.log"
exit 1
fi
# Test specific features
echo "3. Testing user assignment (dry run)..."
python3 rudder2snipe --dryrun --users_force --debug | tee dev-users.log
echo "4. Testing force update (dry run)..."
python3 rudder2snipe --dryrun --force --debug | tee dev-force.log
echo "5. All tests completed. Review log files before live run."
echo " To run live: python3 rudder2snipe --verbose"- Safe testing environment
- Detailed debugging information
- Feature validation before production
- Rapid iteration and testing
Scenario: Multiple geographical locations, different Rudder instances, centralized Snipe-IT
# settings-us-hq.conf
[rudder]
url = https://rudder-us.company.com
api_token = us_token_abc123
[snipe-it]
url = https://snipe.company.com
apikey = global_snipe_key
manufacturer_id = 2
defaultStatus = 2
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_site_code_1 = properties siteCode
_snipeit_location_2 = properties location
_snipeit_timezone_3 = properties timezone
_snipeit_ip_address_4 = properties ipHostNumber
_snipeit_os_5 = properties osName
_snipeit_cost_center_6 = properties costCenter# settings-eu.conf
[rudder]
url = https://rudder-eu.company.com
api_token = eu_token_def456
[snipe-it]
url = https://snipe.company.com
apikey = global_snipe_key
manufacturer_id = 2
defaultStatus = 2
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_site_code_1 = properties siteCode
_snipeit_location_2 = properties location
_snipeit_timezone_3 = properties timezone
_snipeit_ip_address_4 = properties ipHostNumber
_snipeit_os_5 = properties osName
_snipeit_gdpr_flag_7 = properties gdprCompliant# settings-apac.conf
[rudder]
url = https://rudder-apac.company.com
api_token = apac_token_ghi789
[snipe-it]
url = https://snipe.company.com
apikey = global_snipe_key
manufacturer_id = 2
defaultStatus = 2
computer_model_category_id = 1
[api-mapping]
name = hostname
_snipeit_site_code_1 = properties siteCode
_snipeit_location_2 = properties location
_snipeit_timezone_3 = properties timezone
_snipeit_ip_address_4 = properties ipHostNumber
_snipeit_os_5 = properties osName
_snipeit_language_8 = properties systemLanguage#!/bin/bash
# multi-site-sync.sh
CONFIGS_DIR="/opt/rudder2snipe/configs"
SITES=("us-hq" "eu" "apac")
for site in "${SITES[@]}"; do
echo "$(date): Starting sync for site: $site"
# Calculate timezone-appropriate delay
case $site in
"us-hq")
# US Eastern: Run at 8 AM local
delay=0
;;
"eu")
# European: Run at 8 AM local (6 hours ahead)
delay=$((6*60))
;;
"apac")
# Asia Pacific: Run at 8 AM local (13 hours ahead)
delay=$((13*60))
;;
esac
# Schedule with at command for timezone coordination
echo "/opt/rudder2snipe/.venv/bin/python /opt/rudder2snipe/rudder2snipe --config $CONFIGS_DIR/settings-$site.conf --ratelimited --verbose >> /var/log/rudder2snipe/sync-$site.log 2>&1" | at now + $delay minutes
echo "$(date): Scheduled sync for $site in $delay minutes"
done[api-mapping]
# Basic identification
name = hostname
_snipeit_serial_number_1 = properties serialNumber
_snipeit_asset_tag_2 = properties assetTag
# Hardware specifications
_snipeit_cpu_model_3 = properties processorModel
_snipeit_cpu_cores_4 = properties processorCount
_snipeit_cpu_speed_5 = properties processorSpeed
_snipeit_memory_total_6 = properties memorySize
_snipeit_memory_type_7 = properties memoryType
_snipeit_storage_primary_8 = properties primaryDiskSize
_snipeit_storage_type_9 = properties primaryDiskType
# Network configuration
_snipeit_ip_primary_10 = properties ipHostNumber
_snipeit_mac_primary_11 = properties macAddress
_snipeit_network_speed_12 = properties networkSpeed
_snipeit_wifi_enabled_13 = properties wifiEnabled
# System information
_snipeit_os_name_14 = properties osName
_snipeit_os_version_15 = properties osVersion
_snipeit_os_architecture_16 = properties osArchitecture
_snipeit_last_boot_17 = properties lastBootTime
_snipeit_uptime_18 = properties uptime
# Security and compliance
_snipeit_encryption_status_19 = properties diskEncryption
_snipeit_firewall_status_20 = properties firewallEnabled
_snipeit_antivirus_21 = properties antivirusProduct
_snipeit_compliance_score_22 = properties complianceScore[api-mapping]
# Asset identification
name = hostname
_snipeit_asset_number_1 = properties assetNumber
_snipeit_serial_number_2 = properties serialNumber
# Financial information
_snipeit_purchase_price_3 = properties purchasePrice
_snipeit_purchase_date_4 = properties purchaseDate
_snipeit_vendor_5 = properties vendor
_snipeit_po_number_6 = properties purchaseOrderNumber
_snipeit_warranty_end_7 = properties warrantyExpiration
_snipeit_depreciation_8 = properties depreciationValue
# Organizational tracking
_snipeit_cost_center_9 = properties costCenter
_snipeit_department_10 = properties department
_snipeit_project_code_11 = properties projectCode
_snipeit_budget_year_12 = properties budgetYear[api-mapping]
# Asset identification
name = hostname
# Location details
_snipeit_building_1 = properties building
_snipeit_floor_2 = properties floor
_snipeit_room_3 = properties room
_snipeit_desk_number_4 = properties deskNumber
_snipeit_site_code_5 = properties siteCode
# User information
_snipeit_assigned_user_6 = properties assignedUser
_snipeit_user_email_7 = properties userEmail
_snipeit_user_phone_8 = properties userPhone
_snipeit_manager_9 = properties managerName
# Usage tracking
_snipeit_last_login_10 = properties lastLoginTime
_snipeit_login_count_11 = properties loginCount
_snipeit_usage_hours_12 = properties dailyUsageHours# /etc/systemd/system/[email protected]
[Unit]
Description=Rudder to Snipe-IT Sync for %i
After=network.target
[Service]
Type=oneshot
User=rudder
Group=rudder
WorkingDirectory=/opt/rudder2snipe
ExecStart=/opt/rudder2snipe/.venv/bin/python /opt/rudder2snipe/rudder2snipe --config /opt/rudder2snipe/configs/settings-%i.conf --ratelimited --verbose
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target# Enable services for different environments
systemctl enable [email protected]
systemctl enable [email protected]
systemctl enable [email protected]
# Run specific environment
systemctl start [email protected]# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY rudder2snipe .
COPY settings.conf .
USER nobody
ENTRYPOINT ["python", "rudder2snipe"]
CMD ["--ratelimited", "--verbose"]# docker-compose.yml
version: '3.8'
services:
rudder2snipe-prod:
build: .
volumes:
- ./configs/production.conf:/app/settings.conf:ro
- ./logs:/app/logs
environment:
- TZ=UTC
rudder2snipe-staging:
build: .
volumes:
- ./configs/staging.conf:/app/settings.conf:ro
- ./logs:/app/logs
environment:
- TZ=UTCThese examples provide comprehensive templates for various deployment scenarios. Choose the configuration that best matches your environment and customize the field mappings according to your specific requirements.
Next: Troubleshooting