-
Notifications
You must be signed in to change notification settings - Fork 1.2k
v3.0.0 Migration Guide
Version 5.0.0 of the Azure Naming Tool introduces significant enhancements including a modern redesigned UI, SQLite database storage option, and Azure resource name validation capabilities. This guide will help you successfully migrate from previous versions to v5.0.0.
- Latest .NET Version: Upgraded from .NET 8.0 to .NET 10.0
- Performance Improvements: Enhanced runtime performance and efficiency
- Security Updates: Latest security patches and improvements
- Modern Features: Access to newest .NET capabilities
- Long-term Support: Better long-term maintainability
- New Dashboard: Two-column hero layout with logo and custom content
- Configuration Overview: Stats grid showing all enabled component counts
- Improved Navigation: Streamlined modern tab interface
- Better Mobile Support: Responsive design improvements
- Enhanced Performance: Faster data access and queries
- Better Scalability: Handles larger configurations more efficiently
- Improved Reliability: Transactional support and data integrity
- Easy Migration: Built-in migration tool from file-based storage
- Real-time Validation: Check if resource names already exist in Azure
- Conflict Detection: Prevent naming conflicts before deployment
- Multi-subscription Support: Validate across multiple Azure subscriptions
- Configurable: Enable/disable per your requirements
- Bulk Operations: Process multiple naming requests in a single call
- Improved Error Handling: Better error messages and validation
- Extended Filtering: More options for querying configurations
- Performance Improvements: Faster response times
- Fixed Component Name Matching: Resolved issues with ResourceOrg, ResourceProjAppSvc, and ResourceFunction
- Custom Home Content: Now loads correctly in Admin page editor
- Improved Logging: Enhanced admin logs for troubleshooting
- Better Error Messages: More helpful error descriptions
Before performing ANY migration steps, you MUST create complete backups:
- ✅ Export configuration JSON from Admin page
- ✅ Backup
repositoryfolder (if using file-based storage) - ✅ Backup
settingsfolder - ✅ Backup custom logo and CSS files
- ✅ Document admin passwords and API keys
- ✅ Store all backups in a safe location OUTSIDE the installation directory
The application MUST be restarted at these critical points:
- After initial v5.0.0 deployment - Restart to initialize new features
- After restoring configuration from JSON - Restart to load restored settings
- After SQLite migration - Restart to switch to new database (CRITICAL)
How to restart:
- Azure App Service: Azure Portal → Your App Service → Click Restart
-
Docker:
docker restart azurenamingtool - Stand-alone: Stop and restart the application process
💡 Pro Tip: After each restart, wait 30-60 seconds before accessing the application to ensure all services are fully initialized.
Before upgrading, it's CRITICAL to backup your existing configuration to prevent any data loss. Complete ALL backup options below:
- Stop making changes to your current configuration
- Navigate to the Admin page in your current Azure Naming Tool installation
- Go to the Configuration tab
- Under Backup/Restore Configuration, click Export Configuration (JSON)
- Save the downloaded JSON file to a safe location
- Verify the file: Open the JSON file and confirm it contains your configuration data
- Store safely: Keep this file in a secure location OUTSIDE your installation directory
- Note: This backup includes all component configurations but excludes admin settings (passwords, API keys)
If using the file-based storage (default in v4.x):
-
STOP the application before copying files:
- Azure App Service: Azure Portal → Stop the App Service
-
Docker:
docker stop azurenamingtool - Stand-alone: Stop the application process
-
Navigate to your installation directory
-
Copy the entire
repositoryfolder to a backup location -
Copy the entire
settingsfolder to preserve admin settings -
Copy any custom files in
wwwroot/images/andwwwroot/css/ -
Store these backups in a safe location OUTSIDE your installation directory
-
Verify backups: Ensure all files were copied successfully and are readable
-
START the application again if continuing to use the current version:
- Azure App Service: Azure Portal → Start the App Service
-
Docker:
docker start azurenamingtool - Stand-alone: Start the application process
Backup Checklist (Complete ALL items):
- ✅ Configuration JSON exported from Admin page AND verified
- ✅
repositoryfolder backed up (if applicable) - ✅
settingsfolder backed up (if applicable) - ✅ Custom logo files backed up (if customized)
- ✅ Custom CSS files backed up (if customized)
- ✅ Documentation of admin password and API keys created
- ✅ All backup files verified and stored in secure location
- ✅ Application restarted if it was stopped for backup
If you have made any customizations to the Azure Naming Tool code:
-
Document all code changes:
- Note any modified files in the
srcdirectory - Document custom components or services added
- Save copies of modified CSS/styling files
- Note any modified files in the
-
Export customizations:
- Custom logo: Located in
wwwroot/images/(if modified) - Custom CSS: Check
wwwroot/css/for any custom files - Modified resource types or components
- Custom home content from Admin page
- Custom logo: Located in
-
Create a customization document:
- List all custom changes made
- Note file paths and specific modifications
- Document any custom API integrations or webhooks
Review the installation documentation for your specific deployment environment to ensure you understand the requirements for v5.0.0:
- Azure App Service - Installation Guide
- Azure Container Instance - Installation Guide
- Docker - Installation Guide
- Stand-alone - Installation Guide
- .NET 10.0 Runtime (ASP.NET Core) - UPDATED FROM .NET 8.0
- Minimum 512MB RAM (1GB recommended)
- Persistent storage for database (file system or SQLite)
- Upgraded to .NET 10.0 LTS - Improved performance and security (supported until November 2028)
- Bootstrap removed - Custom modern CSS framework for better performance
- Modern UI with improved performance and responsiveness
- SQLite database option for better scalability (default for new installations)
- Azure validation integration (requires Azure authentication)
- Enhanced API capabilities
- Updated dependencies: EF Core 10.0, Swashbuckle 10.0, jQuery 3.7.1
Choose your deployment method and follow the installation guide:
v5.0.0 requires .NET 10.0 runtime. You MUST update your App Service runtime before deploying.
-
Update App Service Runtime to .NET 10.0:
Option A: Azure Portal (Recommended)
- Go to Azure Portal → Your App Service
- Navigate to Settings → Configuration
- Click on General settings tab
- Under Stack settings:
- Windows App Service: .NET version → Select .NET 10
- Linux App Service: Stack → Select .NET, Major version → .NET 10, Minor version → 10.0
- Click Save at the top
- Click Continue to confirm the restart
- IMPORTANT: Wait 2-3 minutes for the runtime update to complete
Option B: Azure CLI
⚠️ IMPORTANT: Azure CLI commands may not reliably set the runtime stack. After running these commands, you MUST verify and manually set the Stack Settings in the Azure Portal to ensure .NET 10 is properly configured.For Windows App Service:
az webapp config set --resource-group <resource-group-name> --name <app-name> --net-framework-version "v10.0"
For Linux App Service:
# Use PowerShell variable to avoid pipe character issues $version = 'DOTNETCORE:10.0' az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version $version
After running CLI commands, verify in Azure Portal:
- Go to Azure Portal → Your App Service
- Navigate to Settings → Configuration → General settings
- Check Stack settings - verify .NET 10 is selected
- If not correct, manually select .NET 10 and click Save
Verify via CLI (optional):
Windows:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query netFrameworkVersion # Should return: "v10.0"
Linux:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion # Should return: "DOTNETCORE:10.0"
Note: The Azure Portal's Stack Settings UI may not display the runtime correctly even when it's configured properly via CLI. Always verify the actual runtime configuration by checking the Portal and manually correcting if needed.
-
STOP the current App Service:
- Go to Azure Portal → Your App Service
- Click Stop and wait for it to fully stop
- This prevents file conflicts during deployment
-
Download the latest v5.0.0 release from GitHub Releases
-
Extract the files to a local directory
-
Deploy to Azure App Service using one of these methods:
- Visual Studio: Right-click project → Publish
-
Azure CLI:
az webapp deploy --resource-group <resource-group-name> --name <app-name> --src-path <path-to-zip-file> --type zip --restart true
- GitHub Actions: Use provided workflow file
- Azure Portal: Deployment Center → Deploy from zip file
-
Configure App Settings (if needed):
- Verify
.NET 10runtime is selected - Set
ASPNETCORE_ENVIRONMENTif needed - Configure any custom environment variables
- Verify
-
START the App Service:
- Click Start in Azure Portal
- Wait 30-60 seconds for the application to fully initialize
- Verify the application loads by accessing the URL
-
VERIFY DEPLOYMENT:
- Access your App Service URL
- Check the footer or About page for version "5.0.0"
- Verify the modern UI loads correctly
- Test basic functionality (navigate to Configuration page)
Common Issues:
- "HTTP Error 500.31": App Service runtime not updated to .NET 10.0 - go back to step 1
- Application won't start: Check App Service logs in Portal → Diagnose and solve problems → Application Logs
- Database errors: Normal for first start - will be resolved after configuration restore and restart
v5.0.0 uses a new Docker image based on .NET 10.0 runtime.
-
STOP the current container (if running):
docker stop azurenamingtool docker rm azurenamingtool
-
Pull the latest v5.0.0 image:
# Pull the .NET 10.0-based image docker pull ghcr.io/mspnp/azurenamingtool:v5.0.0 # Or use latest tag (ensure it's v5.0.0 or higher) docker pull ghcr.io/mspnp/azurenamingtool:latest
-
Run with persistent storage:
docker run -d \ -p 80:80 \ -v $(pwd)/repository:/app/repository \ -v $(pwd)/settings:/app/settings \ --name azurenamingtool \ --restart unless-stopped \ ghcr.io/mspnp/azurenamingtool:v5.0.0
Windows PowerShell:
docker run -d ` -p 80:80 ` -v ${PWD}/repository:/app/repository ` -v ${PWD}/settings:/app/settings ` --name azurenamingtool ` --restart unless-stopped ` ghcr.io/mspnp/azurenamingtool:v5.0.0
-
Verify container started:
# Check container is running docker ps # View logs to verify .NET 10.0 startup docker logs azurenamingtool # Should see: "Now listening on: http://[::]:80"
-
Wait 30-60 seconds, then access the application at
http://localhost -
VERIFY DEPLOYMENT:
- Check container logs:
docker logs azurenamingtool | grep "Application started" - Access http://localhost and verify v5.0.0 loads
- Check footer for version "5.0.0"
- Check container logs:
Docker Compose Example:
version: '3.8'
services:
azurenamingtool:
image: ghcr.io/mspnp/azurenamingtool:v5.0.0
container_name: azurenamingtool
ports:
- "80:80"
volumes:
- ./repository:/app/repository
- ./settings:/app/settings
restart: unless-stopped
environment:
- ASPNETCORE_ENVIRONMENT=ProductionCommon Issues:
-
Container fails to start: Check logs with
docker logs azurenamingtool- may need to remove old volumes -
Port already in use: Change
-p 8080:80to use different host port -
Volume permission issues: On Linux, ensure proper permissions:
sudo chown -R 1000:1000 ./repository ./settings
v5.0.0 requires .NET 10.0 runtime to be installed on your server/workstation.
-
Install .NET 10.0 Runtime (if not already installed):
Windows:
- Download from: https://dotnet.microsoft.com/download/dotnet/10.0
- Choose "ASP.NET Core Runtime 10.0.x" (includes .NET Runtime)
- Run the installer (e.g.,
dotnet-runtime-10.0.0-win-x64.exe) - Verify installation:
dotnet --list-runtimes - Look for:
Microsoft.AspNetCore.App 10.0.x
Linux (Ubuntu/Debian):
# Add Microsoft package repository wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb # Install ASP.NET Core 10.0 Runtime sudo apt-get update sudo apt-get install -y aspnetcore-runtime-10.0 # Verify installation dotnet --list-runtimes
Linux (RHEL/CentOS):
# Add Microsoft package repository sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm # Install ASP.NET Core 10.0 Runtime sudo yum install aspnetcore-runtime-10.0 # Verify installation dotnet --list-runtimes
macOS:
# Using Homebrew brew install dotnet@10 # Verify installation dotnet --list-runtimes
-
STOP the current application (if running):
- Press Ctrl+C in the terminal/console
- Or stop the Windows service if installed as a service
- Or kill the process:
pkill -f AzureNamingTool - Ensure the process is fully stopped:
ps aux | grep AzureNamingTool
-
Download and extract v5.0.0:
- Download from GitHub Releases
- Extract to your installation directory (backup old version first!)
- Ensure file permissions are correct (Linux/macOS):
chmod +x AzureNamingTool.dll
-
START the application:
# Navigate to installation directory cd /path/to/azurenamingtool # Run the application dotnet AzureNamingTool.dll
For production (run in background):
# Linux (systemd service) sudo systemctl restart azurenamingtool # Or use nohup nohup dotnet AzureNamingTool.dll > output.log 2>&1 &
-
Wait 30-60 seconds for initialization
-
Access the application at
http://localhost:5000(or your configured port) -
VERIFY DEPLOYMENT:
- Check the console output for "Application started"
- Look for:
Now listening on: http://localhost:5000 - Access the URL and verify v5.0.0 loads
- Check footer for version "5.0.0"
Creating a Windows Service (Optional):
# Using NSSM (Non-Sucking Service Manager)
nssm install AzureNamingTool "C:\Program Files\dotnet\dotnet.exe" "C:\AzureNamingTool\AzureNamingTool.dll"
nssm set AzureNamingTool AppDirectory "C:\AzureNamingTool"
nssm start AzureNamingToolCreating a Linux systemd Service (Optional):
# Create service file
sudo nano /etc/systemd/system/azurenamingtool.service
# Add this content:
[Unit]
Description=Azure Naming Tool v5.0.0
After=network.target
[Service]
Type=notify
WorkingDirectory=/opt/azurenamingtool
ExecStart=/usr/bin/dotnet /opt/azurenamingtool/AzureNamingTool.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=azurenamingtool
User=azurenamingtool
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
# Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable azurenamingtool
sudo systemctl start azurenamingtool
sudo systemctl status azurenamingtoolCommon Issues:
- "No application to execute": Wrong directory - ensure you're in the folder containing AzureNamingTool.dll
- "Framework not found": .NET 10.0 not installed - go back to step 1
-
Port already in use: Change port in appsettings.json or use environment variable:
ASPNETCORE_URLS=http://localhost:8080 -
Permission denied (Linux): Ensure proper file permissions:
chmod -R 755 /path/to/azurenamingtool
� CRITICAL: After deployment completes and the application starts, you MUST restart it again before proceeding to Step 5. This ensures all v5.0.0 features are properly initialized.
Restart again now:
- Azure App Service: Azure Portal → Restart
- Docker:
docker restart azurenamingtool- Stand-alone: Stop (Ctrl+C) and run
dotnet AzureNamingTool.dllagain
After successfully deploying v5.0.0 and restarting the application, restore your configuration:
Prerequisites:
- ✅ v5.0.0 is deployed and running
- ✅ Application has been restarted at least once
- ✅ You have your configuration JSON backup file ready
-
Access the Admin page:
- Navigate to your new v5.0.0 installation
- Log in with the default password (or your existing password if preserved)
-
Navigate to Configuration tab:
- Click on Admin in the navigation
- Select the Configuration tab
- Scroll to Backup/Restore Configuration
-
Import your configuration:
- Under Restore Configuration from JSON, click Choose File
- Select your previously exported JSON backup file
- Click Restore Configuration from JSON Backup
- Confirm the restoration when prompted
-
Verify the restoration:
- Wait for the success message
- Don't navigate away immediately
-
🔄 RESTART THE APPLICATION (REQUIRED):
This step is CRITICAL - the application MUST be restarted after restoring configuration!
-
Azure App Service:
- Go to Azure Portal → Your App Service
- Click Restart
- Wait for restart to complete (60-90 seconds)
-
Docker:
docker restart azurenamingtool
Wait 60 seconds after restart
-
Stand-alone:
- Stop the application (Ctrl+C)
- Wait 10 seconds
- Restart with
dotnet AzureNamingTool.dll
-
-
Verify after restart:
- Log back into the application
- Navigate to the Configuration page
- Verify all components are loaded correctly
- Check Reference page to ensure resource types display properly
- Test name generation on the Generate page
- Confirm custom settings are preserved
⚠️ Warning: If you skip the restart after restoring configuration, some settings may not be properly loaded and the application may not function correctly.
v5.0.0 introduces SQLite database support for improved performance and reliability. This is optional but recommended for production environments.
⚠️ WARNING:
- Migrating to SQLite is a ONE-WAY operation
- BACKUP EVERYTHING before proceeding (even if you just did in Step 1)
- The application MUST BE RESTARTED after migration completes
- Ensure you have adequate disk space (at least 2x your current data size)
- Complete Steps 1-5 (Deploy v5.0.0 and restore configuration)
-
Create a NEW backup of your current configuration (even if already on v5.0.0):
- Export Configuration JSON from Admin page
- Save with a name like
pre-sqlite-backup-[date].json - Store in a safe location
- Ensure the application is running on file-based storage (default)
- Verify disk space is available (check storage size in Azure or local disk)
DO NOT proceed without completing this backup:
- Stop making any changes to your configuration
- Navigate to Admin → Configuration tab
- Under Backup/Restore Configuration, click Export Configuration (JSON)
- Save as
pre-sqlite-backup-[date].json - Verify the backup file is complete and readable
- Store in a secure location
-
Access Admin page:
- Navigate to Admin → Configuration tab
- Scroll to Storage Migration section
-
Review migration information:
- Current storage provider is shown (should be "FileSystem")
- Read the migration warnings and requirements carefully
- Ensure you understand this is a one-way operation
-
Create pre-migration backup (if not done above):
- Click Export Configuration (JSON) one more time
- This is your last safety net before migration
-
Initiate migration:
- Click Migrate to SQLite
- You will see two confirmation prompts:
- First confirmation: Acknowledge the migration process
- Second confirmation: Type
MIGRATEto proceed
- Click Confirm on both prompts
- DO NOT close the browser or navigate away during migration
-
Monitor migration progress:
- The migration process will:
- Export current configuration to JSON
- Initialize SQLite database
- Import all data to SQLite
- Update storage provider setting
- This may take several minutes depending on data size
- Wait for the success message before proceeding
- The migration process will:
-
🔄 RESTART THE APPLICATION (ABSOLUTELY CRITICAL):
The application WILL NOT work with SQLite until it is restarted!
-
Azure App Service:
- Go to Azure Portal → Your App Service
- Click Stop and wait for it to fully stop
- Click Start and wait 60-90 seconds
-
Docker:
docker stop azurenamingtool # Wait 10 seconds docker start azurenamingtool # Wait 60 seconds
-
Stand-alone:
- Stop the application (Ctrl+C)
- Wait 10 seconds for cleanup
- Restart with
dotnet AzureNamingTool.dll - Wait 60 seconds for initialization
-
-
Verify migration (after restart):
- Wait 60-90 seconds after restart before testing
- Log back into the Admin page
- Check Admin → Configuration tab → Storage Migration section
- Verify "Current Storage Provider" shows SQLite
- Navigate to Configuration page and verify all components loaded
- Test name generation to ensure functionality
- Check Generated Names Log (if you had entries before)
- Test all major features before proceeding
⚠️ If application doesn't work after restart:
- Check Admin Logs for errors
- Verify
azurenamingtool.dbfile exists in the application directory- Check file permissions on the database file
- If issues persist, use the Rollback Procedure below
After successful migration and verification (wait at least 24-48 hours):
- The original file-based storage remains in the
repositoryfolder - You can archive this folder for long-term backup purposes
-
DO NOT delete until:
- SQLite has been working correctly for several days
- You have multiple backups of the SQLite database
- You are confident you won't need to rollback
If you need to rollback from SQLite to file-based storage:
-
STOP the application:
- Azure App Service: Azure Portal → Stop
-
Docker:
docker stop azurenamingtool - Stand-alone: Stop the process (Ctrl+C)
-
Restore backup files:
- Restore your pre-migration backup JSON or files to the
repositoryfolder - Ensure all files are in place
- Restore your pre-migration backup JSON or files to the
-
Remove SQLite database:
- Delete or rename the
azurenamingtool.dbfile - This prevents the app from trying to use SQLite
- Delete or rename the
-
Update configuration:
- Edit
appsettings.json - Find the storage provider setting
- Change from "Sqlite" back to "FileSystem"
- Edit
-
START the application:
- Azure App Service: Azure Portal → Start → Wait 60 seconds
-
Docker:
docker start azurenamingtool→ Wait 60 seconds -
Stand-alone: Run
dotnet AzureNamingTool.dll→ Wait 60 seconds
-
Verify rollback:
- Log into Admin page
- Check that FileSystem storage is active
- Verify configuration loaded correctly
Symptom: After importing JSON, components don't appear
Solution:
- Verify the JSON file is valid and not corrupted
- Check Admin Logs for any error messages
- Restart the application after restoring
- Try importing individual components using the Component Import feature
Symptom: Migration process stops or shows errors
Solution:
- Ensure you have a valid backup before retrying
- Check available disk space (SQLite needs space to create database)
- Review Admin Logs for specific error messages
- If migration fails, the application remains on file-based storage
- Contact support with error logs if issue persists
Symptom: Application fails to start after SQLite migration
Solution:
- Check application logs for error details
- Verify
azurenamingtool.dbfile was created - Ensure file permissions allow read/write to database
- Try rollback procedure (see Step 6)
- Restore from pre-migration backup
Symptom: Azure validation features are not available
Solution:
- Ensure proper Azure authentication is configured
- Check that Managed Identity or Service Principal has necessary permissions
- Verify network connectivity to Azure Resource Manager
- Review Admin → Azure Validation settings
- Check Admin Logs for authentication errors
After completing the migration, verify these items:
- ✅ All resource components appear in Configuration page
- ✅ Custom components (if any) are present
- ✅ Resource types display correctly on Reference page
- ✅ Name generation works on Generate page
- ✅ Admin settings preserved (verify password, API keys)
- ✅ Custom logo appears (if customized)
- ✅ Custom home content displays on dashboard (if configured)
- ✅ Generated Names Log contains previous entries (if applicable)
- ✅ API endpoints respond correctly (test with Swagger)
- ✅ Azure validation configured and working (if enabled)
- ✅ Application performance is acceptable
- ✅ All backups are stored safely and verified
- ✅ Before deploying v5.0.0 - Export JSON + backup folders
- ✅ Before SQLite migration - Export JSON again as safety net
- ✅ Store backups safely - Outside installation directory
- 🔄 After deploying v5.0.0 - Restart to initialize features
- 🔄 After restoring configuration - Restart to load settings
- 🔄 After SQLite migration - CRITICAL restart to switch database
- Azure App Service: Portal → Stop/Start (wait 60-90 seconds)
-
Docker:
docker stop/start azurenamingtool(wait 60 seconds) -
Stand-alone: Ctrl+C to stop,
dotnet AzureNamingTool.dllto start
- ✅ Wait 60 seconds after restart
- ✅ Access application URL
- ✅ Log into Admin page
- ✅ Check Configuration page loads
- ✅ Test name generation works
If you encounter issues during migration:
- Check Admin Logs: Admin page → View Admin Log
- Review Documentation: Azure Naming Tool Wiki
- Search Issues: GitHub Issues
- Report Bugs: Create New Issue
- Community Support: Join discussions on GitHub