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

142 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```bash
# 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:
```bash
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.