A command-line tool to compare Ops Manager product tile configurations between versions, identifying configuration changes required during upgrades.
When upgrading product tiles (e.g., TAS from 6.0.22 to 10.2.5), operators need to understand:
- What new configuration properties must be set
- What existing properties are no longer supported
- What properties have changed constraints or defaults
- Whether current configuration values remain valid
This tool automates that analysis by comparing tile metadata and cross-referencing with your current Ops Manager configuration.
- Automatic Tile Downloads: Download tiles directly from Pivotal Network without manual steps
- Smart Caching: Reuse downloaded tiles across comparisons
- Interactive Selection: Fuzzy version matching with user-friendly prompts
- CI-Friendly: Non-interactive mode for automated workflows
- Smart Property Comparison: Automatically detects new, removed, and changed properties between tile versions
- Current Config Analysis: Cross-references changes with your actual Ops Manager configuration
- Auto-Detect Product GUID: Automatically finds product GUID from Ops Manager using product slug
- Formatted Reports Always: Get professional upgrade analysis reports even without Ops Manager credentials
- Intelligent Categorization: Classifies changes as Required Actions, Warnings, or Informational
- Actionable Recommendations: Provides specific guidance for each configuration change
- Multiple Output Formats: Human-readable text reports and machine-readable JSON
- Constraint Validation: Checks if current values meet new requirements
- Quick Start Guide - Get up and running in 5 minutes
- User Guide - Comprehensive usage documentation
- Examples - Real-world scenarios and use cases
Download the latest release from GitHub Releases:
Linux (amd64):
curl -L https://github.com/malston/tile-diff/releases/latest/download/tile-diff-linux-amd64 -o tile-diff
chmod +x tile-diff
sudo mv tile-diff /usr/local/bin/Linux (arm64):
curl -L https://github.com/malston/tile-diff/releases/latest/download/tile-diff-linux-arm64 -o tile-diff
chmod +x tile-diff
sudo mv tile-diff /usr/local/bin/macOS (Intel):
curl -L https://github.com/malston/tile-diff/releases/latest/download/tile-diff-darwin-amd64 -o tile-diff
chmod +x tile-diff
sudo mv tile-diff /usr/local/bin/macOS (Apple Silicon):
curl -L https://github.com/malston/tile-diff/releases/latest/download/tile-diff-darwin-arm64 -o tile-diff
chmod +x tile-diff
sudo mv tile-diff /usr/local/bin/Windows (PowerShell):
Invoke-WebRequest -Uri https://github.com/malston/tile-diff/releases/latest/download/tile-diff-windows-amd64.exe -OutFile tile-diff.exe
# Move to a directory in your PATH, e.g., C:\Program Files\tile-diff\Verify the installation:
tile-diff --versionVerify checksums (optional but recommended):
# Download checksums file
curl -L https://github.com/malston/tile-diff/releases/latest/download/checksums.txt -o checksums.txt
# Verify your downloaded binary
sha256sum -c checksums.txt --ignore-missingRequirements:
- Go 1.21+
Steps:
# Clone the repository
git clone https://github.com/malston/tile-diff.git
cd tile-diff
# Build the binary
make build
# Optionally install to PATH
sudo cp tile-diff /usr/local/bin/Interactive Mode:
export PIVNET_TOKEN="your-pivnet-api-token"
./tile-diff \
--product-slug cf \
--old-version 6.0 \
--new-version 10.2.5tile-diff will:
- Resolve version strings (prompts if multiple matches)
- Show available product files (e.g., TAS vs Small Footprint)
- Handle EULA acceptance (one-time per product)
- Cache downloads for reuse
Non-Interactive Mode (CI/Scripts):
./tile-diff \
--product-slug cf \
--old-version '6.0.22+LTS-T' \
--new-version '10.2.5+LTS-T' \
--product-file "TAS for VMs" \
--pivnet-token "$PIVNET_TOKEN" \
--accept-eula \
--non-interactiveIf you've already downloaded tiles:
./tile-diff \
--old-tile srt-6.0.22.pivotal \
--new-tile srt-10.2.5.pivotalOption 1: Auto-detect product GUID (Recommended)
./tile-diff \
--product-slug harbor-container-registry \
--old-version 2.11.0 \
--new-version 2.13.2 \
--ops-manager-url https://opsman.example.com \
--username admin \
--password your-password \
--skip-ssl-validationThe tool will automatically query Ops Manager to find the product GUID based on the product slug.
Option 2: Explicit product GUID
./tile-diff \
--old-tile srt-6.0.22.pivotal \
--new-tile srt-10.2.5.pivotal \
--product-guid cf-abc123xyz \
--ops-manager-url https://opsman.example.com \
--username admin \
--password your-password \
--skip-ssl-validationOption 3: Formatted report without credentials
./tile-diff \
--old-tile harbor-2.11.0.pivotal \
--new-tile harbor-2.13.2.pivotalEven without Ops Manager credentials, you'll get a professional formatted upgrade analysis report showing all potential changes.
./tile-diff \
--product-slug cf \
--old-version 6.0.22 \
--new-version 10.2.5 \
--format json- Go to the Broadcom Support Portal: https://support.broadcom.com/
- Sign in with your Broadcom account
- Navigate to your API token settings
- Copy your "UAA API Token" (64+ characters, not the legacy 20-char token)
- Use it via flag or environment variable:
# Via environment variable (recommended)
export PIVNET_TOKEN="your-token-here"
./tile-diff --product-slug cf --old-version 6.0 --new-version 10.2
# Via flag
./tile-diff --pivnet-token "your-token-here" --product-slug cf --old-version 6.0 --new-version 10.2Important: For legal reasons, EULAs must be accepted through the Broadcom Support Portal web interface. The API does not support programmatic EULA acceptance for regular users (only for Broadcom/VMware employees).
First-time download workflow:
- Run tile-diff command
- If EULA not accepted, you'll be directed to the web URL
- Accept the EULA in your browser
- Press Enter to continue the download
Interactive mode:
./tile-diff --product-slug cf --old-version 6.0 --new-version 10.2
# Will pause and show EULA URL if neededNon-interactive mode:
# For CI/CD: Accept EULAs through web first, then use --accept-eula to acknowledge
./tile-diff \
--product-slug cf \
--old-version 6.0.22 \
--new-version 10.2.5 \
--accept-eula \
--non-interactiveOnce accepted for a product, the acceptance is remembered locally and you won't be prompted again.
tile-diff - Ops Manager Product Tile Comparison
================================================
Mode: Pivnet Download
Product: cf
Versions: 6.0.22 -> 10.2.5
Resolving and downloading old tile (6.0.22)...
β Old tile: /Users/user/.tile-diff/cache/srt-6.0.22.pivotal
Resolving and downloading new tile (10.2.5)...
β New tile: /Users/user/.tile-diff/cache/srt-10.2.5.pivotal
Loading old tile: /Users/user/.tile-diff/cache/srt-6.0.22.pivotal
Found 274 properties
Loading new tile: /Users/user/.tile-diff/cache/srt-10.2.5.pivotal
Found 272 properties
Comparing tiles...
Comparison Results:
===================
β¨ New Properties (8):
+ .properties.new_security_setting (boolean)
+ .properties.enhanced_monitoring (string)
...
ποΈ Removed Properties (4):
- .properties.deprecated_timeout (integer)
- .properties.old_feature (string)
...
π Changed Properties (2):
~ .properties.authentication_method: Type changed from string to selector
~ .properties.memory_limit: Constraints changed
Summary:
Properties in old tile: 274
Properties in new tile: 272
Added: 8, Removed: 4, Changed: 2
Configurable properties:
Old tile: 184
New tile: 182
Querying Ops Manager API...
Found 599 total properties
Configurable: 184
Currently configured: ~156
Generating actionable report...
================================================================================
Ops Manager Tile Upgrade Analysis
================================================================================
Old Version: /Users/user/.tile-diff/cache/srt-6.0.22.pivotal
New Version: /Users/user/.tile-diff/cache/srt-10.2.5.pivotal
Total Changes: 12
Required Actions: 2
Warnings: 4
Informational: 6
================================================================================
π¨ REQUIRED ACTIONS
================================================================================
These changes MUST be addressed before upgrading:
1. .properties.new_security_setting
Type: boolean
Action: Must configure this property before upgrading
2. .properties.authentication_method
Type: selector
Action: Must configure this property before upgrading
================================================================================
β οΈ WARNINGS
================================================================================
These changes should be reviewed:
3. .properties.deprecated_timeout
Change: Property removed in new version
Recommendation: Property will be ignored after upgrade - review and remove from config
4. .properties.memory_limit
Change: Constraints changed
Recommendation: Review this change and verify compatibility
================================================================================
βΉοΈ INFORMATIONAL
================================================================================
New optional features available:
5. .properties.new_optional_feature
Type: boolean
Default: false
Note: Optional - review for potential improvements
6. .properties.enhanced_monitoring
Type: string
Default: basic
Note: Optional - review for potential improvements
- Go 1.21+
omCLI (Ops Manager CLI)- Access to product tile
.pivotalfiles - Access to Ops Manager API (for current config comparison)
- Ginkgo v2 (for running acceptance tests)
# Clone the repository
git clone https://github.com/malston/tile-diff.git
cd tile-diff
# Install dependencies
go mod download
# Install Ginkgo (if not already installed)
go install github.com/onsi/ginkgo/v2/ginkgo@latest
# Build
make build
# Run unit tests
make test
# Run acceptance tests (requires PIVNET_TOKEN)
export PIVNET_TOKEN="your-pivnet-api-token"
make acceptance-test
# Run all tests (unit + acceptance)
make test-allThe project includes comprehensive test coverage at multiple levels:
Unit tests cover individual packages and run without external dependencies:
# Run all unit tests with coverage
make test
# Generate HTML coverage report
make test-coverage
# Run tests for a specific package
go test -v ./pkg/compare/...Acceptance tests use Ginkgo v2 and verify end-to-end functionality against live Pivnet:
# Set your Pivnet API token
export PIVNET_TOKEN="your-pivnet-api-token"
# Run Ginkgo acceptance tests
make acceptance-test
# Or run Ginkgo directly with verbose output
ginkgo -v ./test
# Run specific test suites
ginkgo -v --focus="Cache Verification" ./test
ginkgo -v --focus="EULA Handling" ./testNote: Acceptance tests require a valid PIVNET_TOKEN environment variable. Tests will be skipped if the token is not set.
Integration tests use real tile files and are tagged separately:
# Run integration tests (requires actual tile files)
go test -v -tags=integration ./test/...See test/README.md for detailed documentation on test structure and organization.
tile-diff/
βββ cmd/
β βββ tile-diff/ # CLI entry point
βββ pkg/
β βββ metadata/ # Tile metadata extraction
β βββ api/ # Ops Manager API client
β βββ compare/ # Comparison logic
βββ docs/ # Documentation
βββ Makefile # Build tasks
MIT