Skip to content

SolarWinds NCM Import Tool

SolarWinds NCM Import Tool: Automated Device Migration to rConfig V8

Section titled “SolarWinds NCM Import Tool: Automated Device Migration to rConfig V8”

The SolarWinds NCM Import Tool enables seamless migration of network devices from SolarWinds Network Configuration Manager to rConfig V8. This command-line utility automates the process of connecting to SolarWinds SWIS API, executing SWQL queries to extract device inventory with organizational metadata (node groups, custom properties), applying filters, mapping machine types, and importing devices with proper templates and credentials—eliminating manual data entry and ensuring consistency across your device inventory.

SolarWinds NCM

Available in rConfig V8.1.1 This tool significantly reduces migration time by automating SolarWinds SWIS API integration, SWQL-based device extraction, machine type mapping, and bulk imports with custom property and node group mapping.

While SolarWinds NCM provides comprehensive network configuration management, rConfig V8 offers a modern, cost-effective platform with:

Open-source foundation: No per-device licensing costs, reducing total cost of ownership significantly

Modern architecture: Cloud-ready platform with RESTful API and contemporary web interface

Flexible deployment: Self-hosted or cloud-based options with containerization support

Active development: Regular updates driven by community feedback and modern DevOps practices

Enhanced automation: Advanced templating engine with Jinja2 support for complex configuration changes

Custom integrations: Open API enables seamless integration with monitoring, ticketing, and automation platforms

Simplified licensing: Predictable pricing without complex node-based or feature-based licensing tiers

The SolarWinds NCM Import Tool makes this transition seamless with automated SWIS API-based device extraction, intelligent SWQL filtering, and comprehensive organizational structure mapping.

The import process follows four steps:

  1. Setup SolarWinds connection: Configure SWIS API endpoint, authentication, and device filters
  2. Create device type mappings: Define how SolarWinds machine types translate to rConfig templates, vendors, and credentials
  3. Load devices from SolarWinds: Connect to SWIS API, execute SWQL queries, apply filters, and generate import-ready JSON
  4. Import devices to rConfig: Bulk import devices with validated configurations and immediate backup scheduling

The import tool uses the following file locations:

  • Connection file: storage/app/rconfig/solarwinds_connection.json
  • Connection stub: storage/app/rconfig/solarwinds_connection.stub.json
  • Mappings file: storage/app/rconfig/solarwinds_mappings.json
  • Temporary files: storage/app/rconfig/tempdir/
  • Import JSON files: storage/app/rconfig/tempdir/rconfig_import_YYYY-MM-DD_HH-mm-ss.json
  • Failure logs: storage/app/rconfig/tempdir/solarwinds_import_failures_YYYY-MM-DD_HH-mm-ss.txt

These directories are created automatically if they don’t exist.

Before importing devices, ensure you have:

  • Access to SolarWinds NCM instance with SWIS API enabled
  • SolarWinds credentials with API access permissions
  • Network connectivity from rConfig server to SolarWinds SWIS endpoint (default port 17778)
  • Administrator access to rConfig V8
  • Device templates configured in rConfig matching your SolarWinds machine types
  • At least one credential set created in rConfig (required for device authentication)
  • SSH/command-line access to the rConfig server
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection
  • --setup - Configure SolarWinds SWIS API connection interactively
  • --test - Test existing connection to SolarWinds
  • --show - Display current connection configuration
  • --edit-filters - Configure node filters (groups, machine types, statuses)
  • --set-url=URL - Update SWIS URL only
  • --clear - Remove connection configuration
  • --info - Display command help and usage information
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --setup

You’ll be prompted to provide:

SolarWinds SWIS URL: Full URL to your SolarWinds SWIS API endpoint (e.g., https://solarwinds.company.com:17778)

Username: SolarWinds account username with API access

Password: Account password (optional storage - not recommended for production)

SSL Verification: Enable/disable SSL certificate verification (disable for self-signed certificates)

Password storage: Option to encrypt and store password in config file (not recommended for production)

The setup creates storage/app/rconfig/solarwinds_connection.json:

{
"swis_url": "https://solarwinds.company.com:17778",
"username": "api_user",
"password": null,
"password_encrypted": false,
"verify_ssl": true,
"timeout": 30,
"created_at": "2025-01-25T14:30:00Z",
"last_tested": "2025-01-25T14:35:00Z",
"connection_status": "success",
"solarwinds_version": "2023.4",
"node_count": 1547,
"filters": {
"include_groups": [],
"exclude_groups": [],
"include_machine_types": [],
"exclude_machine_types": [],
"include_statuses": [1],
"custom_property_filters": []
}
}

SWIS (SolarWinds Information Service) is a RESTful API that provides access to SolarWinds data:

  • Endpoint: https://server:17778/SolarWinds/InformationService/v3/Json/Query
  • Authentication: HTTP Basic Authentication (username/password)
  • Query Language: SWQL (SolarWinds Query Language) - SQL-like syntax
  • Default Port: 17778 (HTTPS)
  • Response Format: JSON

Verify SolarWinds SWIS connectivity:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --test

Output on success:

Testing connection to: https://solarwinds.company.com:17778
✓ Connection successful!
SolarWinds version: 2023.4
Total nodes: 1547

The test executes a simple SWQL query:

SELECT TOP 1 ServerName, ServerVersion FROM Orion.Websites
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --show

Output displays:

Current SolarWinds Connection Configuration:
SWIS URL: https://solarwinds.company.com:17778
Username: api_user
Password: not stored (will prompt)
Verify SSL: yes
Timeout: 30s
Connection Status: success
Last Tested: 2025-01-25T14:35:00Z
SolarWinds Version: 2023.4
Total Nodes: 1547
Active Filters:
Include Groups: Core Routers, Distribution Switches
Exclude Machine Types: Unknown, Unmanaged
Include Statuses: Up

SolarWinds organizes devices by node groups, machine types, and custom properties. Configure filters to selectively import devices:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --edit-filters

The tool will:

  1. Connect to SWIS API: Authenticate using stored credentials
  2. Execute SWQL queries: Retrieve available node groups, machine types, and metadata
  3. Configure node group filters: Choose to include all, include specific, or exclude specific groups
  4. Configure machine type filters: Choose to include all, include specific, or exclude specific types
  5. Configure status filters: Select which node statuses to import (Up, Down, Warning, Unknown)
  6. Save configuration: Update connection file with filter settings

Example node group filter configuration:

Available Node Groups in SolarWinds:
- Core Routers (145 nodes)
- Distribution Switches (298 nodes)
- Access Switches (652 nodes)
- DMZ Firewalls (89 nodes)
- Lab Equipment (63 nodes)
Filter by node groups?
Import all groups
Include specific groups
Exclude specific groups

Example machine type filter configuration:

Available Machine Types:
- Cisco IOS (458 nodes)
- Juniper JUNOS (189 nodes)
- Cisco NXOS (97 nodes)
- Arista EOS (79 nodes)
- Unknown (24 nodes)
Filter by machine types?
Import all machine types
Include specific types
Exclude specific types

Example status filter configuration:

Which node statuses to include?
☑ Up
☐ Down
☐ Warning
☐ Unknown

Filter estimation:

After configuring filters, the tool estimates the device count based on applied filters.

SolarWinds organizes devices using:

Node Groups (Custom groupings)
└── Nodes (Devices)
├── Machine Type (Device type/OS)
├── Status (Up/Down/Warning/Unknown)
├── Custom Properties (User-defined fields)
└── Location (Physical location)

Mapping to rConfig:

  • Node Groups → Device groups or tags (configured in mappings)
  • Machine Types → Templates (configured in mappings)
  • Custom Properties → Tags (configured in mappings)
  • Status → Filter criteria (Up/Down/Warning/Unknown)

BEST PRACTICE: Configure filters before loading devices to reduce processing time and focus on production devices only. Use status filter “Up” to exclude devices that are down or in maintenance mode.

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings
  • --list - Display all existing device type mappings
  • --add - Create a new device type mapping interactively
  • --edit=TYPE - Modify an existing mapping for specified machine type
  • --delete=TYPE - Remove a device type mapping
  • --info - Display command help and usage information
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --add

You’ll be prompted to provide:

SolarWinds machine type: The machine type from SolarWinds (e.g., Cisco IOS, Juniper JUNOS, Arista EOS)

rConfig device type: The internal device type name (e.g., cisco_ios)

Template ID: The device template ID to use for this machine type

Vendor ID: The vendor ID associated with this machine type

Category ID: The category ID for organizing devices

Credential ID: The pre-created credential set ID (devices will use this by default)

Default Group ID: Optional device group ID to assign devices to

Prompts: Device enable and main prompts (use {device_name} as placeholder)

Tags: Multi-select tags for device classification (use Space to select, Enter to confirm)

Custom property tag mapping: Map SolarWinds custom properties to additional tags (optional)

Node group mapping: Map SolarWinds node groups to rConfig device groups (optional)

  • Cisco IOS: Cisco IOS routers and switches
  • Cisco NXOS: Cisco Nexus data center switches
  • Cisco ASA: Cisco ASA firewalls
  • Cisco IOS-XR: Cisco carrier-grade routers
  • Juniper JUNOS: Juniper JunOS devices
  • Arista EOS: Arista Networks switches
  • HP ProCurve: HP ProCurve switches
  • Palo Alto PAN-OS: Palo Alto firewalls
  • Fortinet FortiOS: Fortinet FortiGate firewalls
  • F5 BIG-IP: F5 BIG-IP load balancers
  • Dell OS10: Dell networking switches

Map SolarWinds custom properties to rConfig tags for automatic tagging:

Do you want to map SolarWinds custom properties to additional tags? (yes/no)
> yes
You can map SolarWinds custom property names to specific tag IDs.
Example: Map "Location" property to a location tag
Enter SolarWinds custom property name (e.g., "Location", "Role"):
> Location
Enter tag ID to assign based on this property:
> 10
Add another custom property mapping? (yes/no)
> yes
Enter SolarWinds custom property name (e.g., "Location", "Role"):
> Role
Enter tag ID to assign based on this property:
> 15
Add another custom property mapping? (yes/no)
> no

This automatically assigns tags to devices based on their SolarWinds custom property values during import.

Map SolarWinds node groups to rConfig device groups:

Do you want to map SolarWinds node groups to rConfig device groups? (yes/no)
> yes
You can map SolarWinds node group names to specific device group IDs.
Enter SolarWinds node group name (e.g., "Core Routers"):
> Core Routers
Enter rConfig device group ID:
> 1
Add another node group mapping? (yes/no)
> yes
Enter SolarWinds node group name (e.g., "Core Routers"):
> Distribution Switches
Enter rConfig device group ID:
> 2
Add another node group mapping? (yes/no)
> no
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --list

Output displays all configured mappings:

=== CISCO IOS ===
rConfig Type: cisco_ios
Template ID: 1
Vendor ID: 1
Category ID: 2
Credential ID: 5
Default Group ID: 1
Prompts:
- device_enable_prompt: {device_name}>
- device_main_prompt: {device_name}#
Tags: 5, 8
Custom Property Tag Mapping:
- Location: Tag ID 10
- Role: Tag ID 15
Node Group Mapping:
- Core Routers: Group ID 1
- Distribution Switches: Group ID 2
Terminal window
# Edit existing mapping
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --edit="Cisco IOS"
# Delete mapping
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --delete="Cisco IOS"

The mappings are stored in storage/app/rconfig/solarwinds_mappings.json:

{
"Cisco IOS": {
"template_id": 1,
"vendor_id": 1,
"category_id": 2,
"credential_id": 5,
"default_group_id": 1,
"prompts": {
"device_enable_prompt": "{device_name}>",
"device_main_prompt": "{device_name}#"
},
"tags": [5, 8],
"device_type": "cisco_ios",
"custom_property_tag_mapping": {
"Location": 10,
"Role": 15
},
"node_group_mapping": {
"Core Routers": 1,
"Distribution Switches": 2
}
}
}

CAUTION: Accurate mappings are critical for successful imports. Verify template, vendor, category, and credential IDs exist in rConfig before creating mappings. Credential sets must be created in rConfig before running mappings setup.

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-load-devices
  • --batch-size=N - Number of nodes to fetch per SWQL query (default: 100)
  • --max-nodes=N - Maximum number of nodes to import (for testing)
  • --info - Display command help and usage information
  1. Prerequisite checks: Validates connection and mappings exist
  2. Connection test: Verifies SolarWinds SWIS API connectivity
  3. Filter display: Shows active filters for confirmation
  4. SWQL query execution: Fetches nodes from SolarWinds using SWQL queries
  5. Node group extraction: Retrieves node group memberships for each device
  6. Custom property extraction: Fetches custom properties for each device
  7. Filter application: Applies group, machine type, and status filters
  8. Device processing: For each node:
    • Extracts name, IP, model, machine type, groups, properties
    • Looks up device type mapping
    • Applies credential from mapping
    • Maps custom properties to additional tags
    • Maps node groups to device groups
    • Validates data completeness
  9. JSON generation: Creates timestamped import file
  10. Failure logging: Records nodes that failed processing

The tool executes these SWQL queries:

Main node query:

SELECT NodeID, Caption, IPAddress, IPAddressType, MachineType,
Vendor, Location, Status, SysName
FROM Orion.Nodes
WHERE Status IN (1)
AND MachineType NOT IN ('Unknown', 'Unmanaged')
ORDER BY NodeID

Node group membership:

SELECT c.Name
FROM Orion.ContainerMembers cm
INNER JOIN Orion.Container c ON cm.ContainerID = c.ContainerID
WHERE cm.MemberPrimaryID LIKE 'N:{NodeID}'

Custom properties:

SELECT * FROM Orion.NodesCustomProperties
WHERE NodeID = {NodeID}

If password was not stored during setup, you’ll be prompted:

Password for api_user: ********

The password is used for HTTP Basic Authentication to the SWIS API.

Before processing, active filters are displayed:

Active filters:
Include Groups: Core Routers, Distribution Switches
Exclude Machine Types: Unknown, Unmanaged
Include Statuses: Up
Proceed with node loading? (yes/no)
Loading SolarWinds connection info...
✓ Found connection to: https://solarwinds.company.com:17778
Connecting to SolarWinds...
✓ Connected successfully
Active filters:
Include Groups: Core Routers, Distribution Switches
Exclude Machine Types: Unknown, Unmanaged
Include Statuses: Up
Proceed with node loading? (yes/no)
> yes
Fetching nodes from SolarWinds...
Retrieved 856 nodes from SolarWinds
Processing nodes ████████████████████ 100%
Node loading completed successfully!
Generated rConfig compatible data: rconfig_import_2025-01-25_14-45-30.json
Valid devices processed: 823
33 nodes failed processing. See solarwinds_import_failures_2025-01-25_14-45-30.txt

Success file: storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json

Failures file: storage/app/rconfig/tempdir/solarwinds_import_failures_2025-01-25_14-45-30.txt

All devices in a mapping use the same credential set specified in the mapping:

  • device_cred_id: Set from mapping’s credential_id field
  • No per-device credential extraction
  • Credential must be pre-created in rConfig before mapping setup

Benefits:

  • Simplifies credential management
  • Forces credential consolidation (best practice)
  • More secure than storing credentials in JSON
  • User controls credential assignment via mappings

Advanced scenarios:

If different devices of the same type need different credentials:

  • Create multiple mappings with appropriate filters
  • Manually override credentials post-import
[
{
"device_name": "core-rtr-01",
"device_ip": "10.1.1.1",
"device_model": "Cisco IOS",
"template_id": 1,
"vendor_id": 1,
"device_category_id": 2,
"device_cred_id": 5,
"prompts": {
"device_enable_prompt": "core-rtr-01>",
"device_main_prompt": "core-rtr-01#"
},
"tags": [5, 8, 10, 15],
"solarwinds_machine_type": "Cisco IOS",
"solarwinds_node_groups": ["Core Routers"],
"solarwinds_custom_properties": {
"Location": "DC-East",
"Role": "Core"
},
"solarwinds_location": "DC-East",
"solarwinds_vendor": "Cisco",
"group_id": 1,
"connection_type": "ssh",
"port": 22
},
{
"device_name": "dist-sw-01",
"device_ip": "10.2.1.10",
"device_model": "Cisco NXOS",
"template_id": 2,
"vendor_id": 1,
"device_category_id": 2,
"device_cred_id": 5,
"prompts": {
"device_enable_prompt": "dist-sw-01>",
"device_main_prompt": "dist-sw-01#"
},
"tags": [5, 8, 10, 20],
"solarwinds_machine_type": "Cisco NXOS",
"solarwinds_node_groups": ["Distribution Switches"],
"solarwinds_custom_properties": {
"Location": "DC-East",
"Role": "Distribution"
},
"solarwinds_location": "DC-East",
"solarwinds_vendor": "Cisco",
"group_id": 2,
"connection_type": "ssh",
"port": 22
}
]

For large SolarWinds deployments (1000+ nodes):

Terminal window
# Increase batch size for faster loading (not currently implemented in pagination logic)
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-load-devices --batch-size=200
# Test with limited nodes first
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-load-devices --max-nodes=50

After processing, view a summary breakdown:

Would you like to view a summary? (yes/no)
> yes
823 devices processed successfully
Machine type breakdown:
- Cisco IOS: 458 devices
- Juniper JUNOS: 189 devices
- Cisco NXOS: 97 devices
- Arista EOS: 79 devices
Node group breakdown:
- Core Routers: 145 devices
- Distribution Switches: 298 devices
- Access Switches: 380 devices
Location breakdown:
- DC-East: 412 devices
- DC-West: 411 devices

NOTE: The {device_name} placeholder in prompts is automatically replaced with the actual device hostname during the loading process.

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices /path/to/rconfig_import.json
  • --group=ID - Assign all imported devices to specified device group (default: 1)
  • --dry-run - Preview import without modifying database
  • --info - Display command help and usage information

When run without a file path, the command offers:

What would you like to do?
Show information about this command
Import devices from a JSON file
Import from the latest available JSON file
Select from all available import files
Exit

Latest file mode: Automatically finds and uses the most recent JSON file

Select file mode: Displays all available import files with:

  • Filename
  • Modification date
  • File size
  • Device count (parsed from file)
  1. JSON validation: Verifies file structure and required fields
  2. Device validation: Checks each device for:
    • Required fields present
    • Valid IP address format
    • Template exists in database
    • Vendor exists in database
    • Category exists in database
    • Credential set exists in database
    • Prompts structure is valid
    • No duplicate devices (by name or IP)
  3. Validation report: Shows failed devices with specific errors
  4. User confirmation: Prompts to continue with valid devices only
  5. Transaction-based import: All valid devices imported in single transaction
  6. Device creation: Creates device records with mapped configurations
  7. Relationship linking: Associates:
    • Tags (many-to-many, includes custom property tags)
    • Vendor (many-to-many, single vendor)
    • Category (many-to-many, single category)
    • Template (many-to-many, single template)
  8. Duplicate handling: Automatically skips devices that already exist
  9. Summary report: Displays import statistics

Required fields:

  • device_name
  • device_ip (must be valid IP format)
  • device_model
  • template_id (must exist in database)
  • vendor_id (must exist in database)
  • device_category_id (must exist in database)
  • device_cred_id (credential set must exist if > 0)
  • prompts.device_enable_prompt
  • prompts.device_main_prompt

Duplicate detection:

  • No existing device with same device_name
  • No existing device with same device_ip

Test the import without making changes:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
--dry-run \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json

Output preview:

Running in dry-run mode - no database changes will be made
Found 823 devices in the import file
Validating devices ████████████████████ 100%
8 devices failed validation:
Device: old-switch-01
- Template ID 99 not found
Device: test-device-02
- Invalid IP address: 999.999.999.999
Continue with 815 valid devices? (yes/no)
> yes
Dry run completed. 815 devices would be imported.

Execute the actual import:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
--group=2 \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json

Or use the interactive menu to select the latest file:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices
# Select: "Import from the latest available JSON file"

Import results:

Found 823 devices in the import file
Validating devices ████████████████████ 100%
Importing devices ████████████████████ 100%
Import completed successfully!
Imported: 815 devices
Skipped: 8 devices (already exist)

NOTE: All imports use database transactions. If any error occurs during import, all changes are rolled back automatically.

Terminal window
# Step 0: Setup SolarWinds connection
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --setup
# Enter SWIS details:
# - SWIS URL: https://solarwinds.company.com:17778
# - Username: api_user
# - Password: ********
# - Verify SSL: yes
# Test the connection
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --test
# Configure device filters
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --edit-filters
# Select filters:
# - Include groups: Core Routers, Distribution Switches
# - Exclude machine types: Unknown, Unmanaged
# - Include statuses: Up
# View connection info
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --show
# Step 1: Create device type mappings
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --add
# Add mappings for SolarWinds types: Cisco IOS, Juniper JUNOS, Cisco NXOS, etc.
# Include custom property tag mappings (Location, Role)
# Include node group mappings (Core Routers → Group 1)
# Verify mappings
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --list
# Step 2: Load devices from SolarWinds
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-load-devices
# The command will:
# - Connect to SolarWinds SWIS API
# - Execute SWQL queries
# - Apply configured filters
# - Fetch node groups and custom properties
# - Process devices in batches
# - Generate timestamped JSON file
# Review summary
# Would you like to view a summary? yes
# Review failures log if any
cat storage/app/rconfig/tempdir/solarwinds_import_failures_2025-01-25_14-45-30.txt
# Step 3: Preview import (dry run)
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
--dry-run \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json
# Step 4: Execute production import
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
--group=1 \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json
# Or use interactive mode to select latest file
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices
# Select: "Import from the latest available JSON file"

Symptoms:

  • Error: “Connection failed: HTTP 401”
  • Error: “Connection failed: Could not resolve host”

Resolution:

Verify SWIS API accessibility:

Terminal window
# Test network connectivity
ping solarwinds.company.com
# Test HTTPS connectivity to SWIS port
curl -k https://solarwinds.company.com:17778
# Verify credentials
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --test

Check connection configuration:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --show

Update SWIS URL if needed:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --set-url=https://correct.url.com:17778

Symptoms:

  • Error: “SSL certificate problem: self signed certificate”
  • Connection fails with SSL errors

Resolution:

Disable SSL verification (not recommended for production):

Edit connection file or re-run setup:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --setup
# When prompted for "Verify SSL certificates?": select "no"

Or install SolarWinds SSL certificate on the rConfig server:

Terminal window
# Export certificate from SolarWinds
# Copy to rConfig server
sudo cp solarwinds.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Symptoms:

  • Error: “HTTP 401: Unauthorized”
  • Error: “Invalid credentials”

Resolution:

Verify credentials in SolarWinds:

  • Log in to SolarWinds Orion web interface
  • Navigate to Settings > All Settings > User Accounts
  • Verify API user exists and has appropriate permissions
  • Ensure account has “API Access” permission enabled

Update connection configuration:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --setup

Symptoms:

  • Error: “SolarWinds connection not configured!”
  • Tool prompts to run setup

Resolution:

Setup connection first:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --setup

Symptoms:

  • Error: “No device type mappings configured!”
  • Error: “Device type mappings file not found!”

Resolution:

Create mappings:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --add

Verify mappings exist:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --list

Symptoms:

  • Nodes logged to failures file with “Unknown machine type ‘xyz’. No mapping found.”

Resolution:

Identify missing machine types from failures log:

Terminal window
cat storage/app/rconfig/tempdir/solarwinds_import_failures_2025-01-25_14-45-30.txt

Create missing mappings:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --add

Invalid template/vendor/category/credential ID

Section titled “Invalid template/vendor/category/credential ID”

Symptoms:

  • Import fails with “Template ID X does not exist”
  • Validation shows “Credential set ID X not found”

Resolution:

Verify IDs exist in rConfig:

  • Navigate to Settings > Templates (or Vendors/Categories/Credentials)
  • Note the correct ID numbers
  • Update mapping with correct IDs:
Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --edit="Cisco IOS"

Symptoms:

  • Error: “No device credentials found in the system”
  • Import halts during mapping creation

Resolution:

Create credential sets in rConfig before creating mappings:

  • Navigate to Settings > Credentials
  • Create credential sets for your device types
  • Note the credential set IDs
  • Re-run mapping creation

Symptoms:

  • Error: “SWQL query failed”
  • Error: “Invalid SWQL syntax”
  • Empty result sets

Resolution:

Test SWQL queries manually in SolarWinds:

  • Log in to SolarWinds Orion web interface
  • Navigate to Settings > SWIS or use SWQL Studio
  • Test the queries manually
  • Verify table names and column names match your SolarWinds version

Common SWQL issues:

  • Table names changed between SolarWinds versions
  • Custom properties table may have different structure
  • Container/group structure varies by configuration

Symptoms:

  • Nodes from excluded groups are imported
  • Node count doesn’t match filter expectations

Resolution:

Verify filter configuration:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --show

Re-configure filters:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --edit-filters

Note: Filters are applied during node loading, not during import. Re-run the load command after changing filters.

Symptoms:

  • Devices don’t have expected tags from custom property mapping
  • Only base tags from mapping are applied

Resolution:

Verify custom property tag mapping configuration:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --list
# Check "Custom Property Tag Mapping" section

Ensure:

  • Custom property names match exactly (case-sensitive)
  • Tag IDs exist in rConfig (Settings > Tags)
  • Custom properties are populated in SolarWinds for the nodes

Update mapping if needed:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --edit="Cisco IOS"

Symptoms:

  • Devices not assigned to expected device groups
  • All devices assigned to default group

Resolution:

Verify node group mapping configuration:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --list
# Check "Node Group Mapping" section

Ensure:

  • Node group names match exactly (case-sensitive)
  • Device group IDs exist in rConfig (Settings > Device Groups)
  • Nodes are members of the groups in SolarWinds

Update mapping if needed:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-device-mappings --edit="Cisco IOS"

Empty or no nodes returned from SolarWinds

Section titled “Empty or no nodes returned from SolarWinds”

Symptoms:

  • Message: “No nodes retrieved from SolarWinds”
  • Warning: “Retrieved 0 nodes from SolarWinds”

Resolution:

Check filters are not too restrictive:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --show

Verify SolarWinds has nodes:

  • Log in to SolarWinds Orion web interface
  • Navigate to Summary > Node Management
  • Confirm nodes exist and are monitored

Temporarily disable all filters:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-connection --edit-filters
# Select "Import all" for all filter categories

Symptoms:

  • Validation shows “Device with same name or IP already exists”
  • Devices automatically skipped during import

Resolution:

Duplicates are automatically skipped. To handle duplicates:

Check existing devices:

  • Navigate to Devices in rConfig
  • Search for the device name or IP
  • Delete or update the existing device if needed

Re-import after cleanup:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json

Symptoms:

  • Import fails with “Import failed: [error message]”
  • Zero devices imported despite validation passing

Resolution:

Check application logs:

Terminal window
tail -f storage/logs/laravel.log

Re-run with dry-run to identify the issue:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-import-devices \
--dry-run \
storage/app/rconfig/tempdir/rconfig_import_2025-01-25_14-45-30.json

Common causes:

  • Database connection issues
  • Foreign key constraint violations
  • Insufficient database permissions
  • Disk space issues

Symptoms:

  • Error: “Connection timeout”
  • Slow node loading with frequent pauses
  • Partial node lists

Resolution:

Adjust timeout in connection file:

storage/app/rconfig/solarwinds_connection.json
# Change: "timeout": 30 to "timeout": 60 or higher

Reduce batch size if queries are timing out:

Terminal window
php /var/www/html/rconfig8/current/artisan rconfig:solarwinds-load-devices --batch-size=50

Setup connection first: Configure and test SolarWinds SWIS connection before proceeding with mappings

Use SSL verification: Enable SSL verification for production deployments; only disable for self-signed certificates in controlled environments

Configure filters strategically: Use filters to import only production devices and reduce processing time

Create credential sets in rConfig first: Ensure all necessary credential sets exist before creating mappings

Map custom properties to tags: Leverage SolarWinds custom properties by mapping to rConfig tags for better organization

Map node groups to device groups: Preserve SolarWinds organizational structure by mapping node groups to rConfig device groups

Use default group assignment: Assign devices to groups via mappings for immediate organization

Test with limited nodes first: Use --max-nodes=50 to validate workflow before full import

Use dry-run mode: Always use --dry-run first to preview changes and catch errors

Review failures logs: Check failures file to identify and fix issues before re-running

Backup rConfig database: Before importing large batches, backup your rConfig database

Verify mappings: Double-check that template, vendor, category, and credential IDs are correct

Keep SolarWinds running: Run both systems in parallel initially to ensure successful migration

Document custom mappings: Keep notes on custom property and node group mappings for future reference

Regular connection testing: Periodically test SolarWinds connection, especially after SolarWinds upgrades

Batch large imports: For 1000+ nodes, consider importing in batches by node group or machine type

Monitor SWQL query performance: Adjust batch size based on SolarWinds server performance and network conditions

Leverage SWQL filtering: Use SWQL WHERE clauses in filters for complex filtering requirements

After successful import:

  1. Verify device inventory: Navigate to Devices and confirm all devices imported correctly

  2. Review credentials: Check that devices have appropriate credential assignments

  3. Test connectivity: Use device debug command to verify connection to sample devices from each machine type

  4. Organize devices: Verify device groups match SolarWinds node group structure

  5. Verify tags: Confirm custom property tags were applied correctly

  6. Verify custom property mapping: Check that devices have tags based on SolarWinds custom properties

  7. Configure schedules: Set up automated backup schedules for device groups

  8. Enable compliance: Apply compliance policies to imported devices

  9. Test backups: Execute manual backup on sample devices to verify templates work correctly

  10. Review relationships: Verify vendor, category, and template associations are correct

  11. Archive SolarWinds data: Export SolarWinds reports and node data for historical reference

  12. Update documentation: Document the migration for team members

  13. Plan decommissioning: Create timeline for SolarWinds NCM decommissioning after successful migration

  14. Monitor backup jobs: Ensure automated backups are executing successfully for all imported devices