Files
Pulse/docs/installer-v2-rollout.md
rcourtman 0fcfad3dc5 feat: add shared script library system and refactor docker-agent installer
Implements a comprehensive script improvement infrastructure to reduce code
duplication, improve maintainability, and enable easier testing of installer
scripts.

## New Infrastructure

### Shared Library System (scripts/lib/)
- common.sh: Core utilities (logging, sudo, dry-run, cleanup management)
- systemd.sh: Service management helpers with container-safe systemctl
- http.sh: HTTP/download helpers with curl/wget fallback and retry logic
- README.md: Complete API documentation for all library functions

### Bundler System
- scripts/bundle.sh: Concatenates library modules into single-file installers
- scripts/bundle.manifest: Defines bundling configuration for distributables
- Enables both modular development and curl|bash distribution

### Test Infrastructure
- scripts/tests/run.sh: Test harness for running all smoke tests
- scripts/tests/test-common-lib.sh: Common library validation (5 tests)
- scripts/tests/test-docker-agent-v2.sh: Installer smoke tests (4 tests)
- scripts/tests/integration/: Container-based integration tests (5 scenarios)
- All tests passing ✓

## Refactored Installer

### install-docker-agent-v2.sh
- Reduced from 1098 to 563 lines (48% code reduction)
- Uses shared libraries for all common operations
- NEW: --dry-run flag support
- Maintains 100% backward compatibility with original
- Fully tested with smoke and integration tests

### Key Improvements
- Sudo escalation: 100+ lines → 1 function call
- Download logic: 51 lines → 1 function call
- Service creation: 33 lines → 2 function calls
- Logging: Standardized across all operations
- Error handling: Improved with common library

## Documentation

### Rollout Strategy (docs/installer-v2-rollout.md)
- 3-phase rollout plan (Alpha → Beta → GA)
- Feature flag mechanism for gradual deployment
- Testing checklist and success metrics
- Rollback procedures and communication plan

### Developer Guides
- docs/script-library-guide.md: Complete library usage guide
- docs/CONTRIBUTING-SCRIPTS.md: Contribution workflow
- docs/installer-v2-quickref.md: Quick reference for operators

## Metrics

- Code reduction: 48% (1098 → 563 lines)
- Reusable functions: 0 → 30+
- Test coverage: 0 → 8 test scenarios
- Documentation: 0 → 5 comprehensive guides

## Testing

All tests passing:
- Smoke tests: 2/2 passed (8 test cases)
- Integration tests: 5/5 scenarios passed
- Bundled output: Syntax validated, dry-run tested

## Next Steps

This lays the foundation for migrating other installers (install.sh,
install-sensor-proxy.sh) to use the same pattern, reducing overall
maintenance burden and improving code quality across the project.
2025-10-20 15:13:38 +00:00

4.9 KiB
Raw Blame History

Installer v2 Rollout Plan

1. Overview

The Docker agent installer (install-docker-agent.sh) has been refactored into a modular, testable v2. Key improvements include:

  • Shared library usage (scripts/lib/*.sh) for logging, HTTP, and systemd helpers, reducing duplication and easing maintenance.
  • Support for --dry-run, enabling administrators to preview actions safely.
  • Bundled single-file distribution generated by scripts/bundle.sh for curl based installs, while keeping modular sources in the repository.
  • New smoke and integration tests to catch regressions.

Benefits:

  • Users: Clearer logging, dry-run validation, safer rollbacks, and improved error handling.
  • Developers: Consistent helper functions, faster iteration on fixes, and reusable testing infrastructure.

2. Rollout Strategy

Phase 1: Alpha Testing (Internal)

  • Enable v2 via feature flag for internal environments only.
  • Exercise on development clusters, CI agents, and dogfood installations.
  • Validate dry-run, full install, multi-target, and uninstall scenarios.
  • Duration: ~1 week.

Phase 2: Beta Testing (Early Adopters)

  • Announce availability in release notes and internal channels.
  • Provide explicit opt-in instructions (PULSE_INSTALLER_V2=1).
  • Monitor install success metrics, support channels, and gather structured feedback from operators.
  • Duration: ~2 weeks.

Phase 3: General Availability

  • Flip feature flag default to v2 while retaining v1 as fallback for one full release cycle.
  • Publish deprecation notice for the legacy installer.
  • After the grace period, remove v1 from distribution.
  • Duration: 1 release cadence (approx. 46 weeks).

3. Feature Flag Mechanism

Users can select installer versions via environment variable:

# Enable v2 (early adopter)
export PULSE_INSTALLER_V2=1
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...

# Force legacy v1
export PULSE_INSTALLER_V2=0
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...

# Server-side pseudo-code
if [[ "${PULSE_INSTALLER_V2:-0}" == "1" ]]; then
  serve dist/install-docker-agent.sh
else
  serve scripts/install-docker-agent-legacy.sh
fi

The download endpoint should inspect the flag (query parameter, header, or environment variable) and serve the appropriate script.

4. Testing Checklist

Before Rollout

  • Smoke tests (scripts/tests/run.sh) passing
  • Integration tests (scripts/tests/integration/...) passing
  • Ubuntu 20.04 & 22.04 validated
  • Debian 11 & 12 validated
  • With and without Docker binary
  • Multi-target configuration verified
  • Uninstall path verified
  • Documentation updated (INSTALL, FAQ, etc.)
  • Release notes drafted

During Rollout

  • Monitor error rates (CI dashboards, telemetry)
  • Watch support channels/tickets for installer issues
  • Sample successful installations daily
  • Collect structured feedback from early adopters

5. Success Metrics

  • Installation success rate ≥ 99%
  • Median installation duration (baseline ±10%)
  • Top error categories and frequency trending downward
  • Positive/neutral user feedback (no significant negative trend)
  • Rollback requests < 1%

6. Rollback Plan

If blocking issues surface:

Quick Rollback (< 5 minutes)

  1. Replace served script with v1 variant:
    cp scripts/install-docker-agent-legacy.sh /var/www/html/install-docker-agent.sh
    # or update symlink pointing to dist/install-docker-agent.sh
    
  2. Update documentation to reflect temporary rollback.
  3. Broadcast notice in release channels/support chat.

File references

  • Legacy: scripts/install-docker-agent-legacy.sh
  • Bundled v2: dist/install-docker-agent.sh
  • Served location: /download/install-docker-agent.sh (symlink/HTTP root)

7. Communication Plan

Announcements

  • Release notes covering v2 highlights and rollout phases.
  • Update product docs (INSTALL.md, quick reference).
  • Post in GitHub Discussions / community forums.
  • Optional blog post for broader awareness.

User Guidance

  • Explain how to opt-in/out using PULSE_INSTALLER_V2.
  • Highlight new capabilities (--dry-run, improved messaging).
  • Provide support contact and bug-reporting instructions.
  • Link to troubleshooting resources.

8. Known Limitations

  • Limited testing on non-systemd init systems (manual startup handled but not optimized).
  • ARM architectures covered via dry-run and download stubs; on-device testing pending.
  • Requires Bash 4.0+ (same as v1) — document for older environments.

9. Post-Rollout Tasks

  • Remove feature flag after one successful release cycle.
  • Retire legacy installer artifacts and adjust CI pipelines.
  • Update all docs to reference v2 only.
  • Apply modular pattern to remaining installers (install.sh, install-sensor-proxy.sh, pulse-auto-update.sh).
  • Expand integration tests to cover additional distributions and scenarios.