rsyslog/GENERICIZATION.md
dvirlabs bd120cc643
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/cron/woodpecker Pipeline was successful
Set generic project
2026-04-19 16:58:34 +03:00

166 lines
4.7 KiB
Markdown

# Repository Genericization - Summary
## What Was Changed
Your rsyslog repository has been made generic with environment-based configuration. All hardcoded paths and server-specific settings can now be configured via a configuration file.
## Files Created/Modified
### New Files
1. **config.env** - Template configuration file
- Contains all configurable variables with defaults
- Checked into Git (safe to share)
- Use as reference for what can be configured
2. **config.local.env** - Environment-specific overrides (create this locally)
- Copy from config.env and customize for your server
- Gitignored - won't be committed
- Use for sensitive/server-specific settings
3. **validate-syntax.sh** - Comprehensive validation script
- Validates shell script syntax
- Checks configuration file format
- Validates Ansible playbooks
- Validates rsyslog config syntax
- Exit code 0 = all pass, exit code 1 = failures
4. **CONFIGURATION.md** - Setup and usage documentation
- Quick start guide
- Configuration options explained
- Troubleshooting tips
5. **.gitignore** - Prevents accidental commits
- Ignores config.local.env and *.local.env
- Ignores SSH keys and credentials
- Standard patterns for Python, editors, logs
### Modified Files
1. **apply.sh** - Now loads configuration
- Reads config.env or config.local.env
- Uses variables for paths instead of hardcoded values
- More verbose output showing what paths it's using
2. **drift-check.sh** - Now loads configuration
- Reads config.env or config.local.env
- Uses variables for server and Git paths
- More transparent about what it's comparing
## How to Use
### Step 1: Create local configuration
```bash
cp config.env config.local.env
```
### Step 2: Edit for your server
```bash
nano config.local.env
```
Update these key variables:
- `SERVER_HOSTNAME` - Your server IP/hostname
- `RSYSLOG_MAIN_CONFIG` - Server path to main config (e.g., `/etc/rsyslog.conf`)
- `RSYSLOG_CONFIG_DIR` - Server path to config dir (e.g., `/etc/rsyslog.d`)
- `PUSHGATEWAY_URL` - Your Prometheus pushgateway (if using metrics)
### Step 3: Validate everything
```bash
./validate-syntax.sh
```
All checks should pass ✓
### Step 4: Use your scripts
```bash
./apply.sh # Apply config to server
./drift-check.sh # Check if server matches Git
```
## Configuration Options
### Server Paths (Customize per environment)
- `RSYSLOG_MAIN_CONFIG` - Where rsyslog.conf lives on server
- `RSYSLOG_CONFIG_DIR` - Where modular configs live on server
### Git Paths (Usually same for all)
- `GIT_RSYSLOG_MAIN_CONFIG` - Path to config in Git (default: files/rsyslog.conf)
- `GIT_RSYSLOG_CONFIG_DIR` - Path to configs in Git (default: files/rsyslog.d)
### Ansible
- `ANSIBLE_INVENTORY` - Path to hosts.yml
- `ANSIBLE_PLAYBOOK_DIR` - Path to playbooks dir
- `ANSIBLE_CONFIG` - Path to ansible.cfg
### Other
- `REPO_NAME` - Label for your repo
- `PUSHGATEWAY_URL` - For Prometheus metrics
- `LOG_LEVEL` - debug/info/warn/error
## Adapting for Other Services
To use this for a different service (nginx, apache, etc.):
1. Update file paths in config.env:
```env
GIT_MAIN_CONFIG="nginx.conf"
GIT_CONFIG_DIR="nginx.d"
MAIN_CONFIG="/etc/nginx/nginx.conf"
CONFIG_DIR="/etc/nginx/conf.d"
```
2. Update the validation/restart command in apply.sh
3. That's it! The scripts work with any service.
## Configuration Loading Order
Scripts load config in this order:
1. Check for `config.local.env` (local overrides)
2. Fall back to `config.env` (defaults)
3. Use environment variables if set
This allows you to:
- Keep generic defaults in Git (config.env)
- Override locally for each server (config.local.env)
- Keep secrets out of version control
## Validation
Run this anytime you make changes:
```bash
./validate-syntax.sh
```
Checks for:
✓ Bash script syntax errors
✓ Required config variables
✓ Configuration file format
✓ Ansible playbook syntax
✓ rsyslog config syntax
## Next Steps
1. ✓ Repository is now generic
2. → Create config.local.env for each server
3. → Run validate-syntax.sh before deploying
4. → Check Ansible playbooks work for your server list
5. → Update .woodpecker.yml if needed for CI/CD secrets
## Files Not Changed
These remain as-is for now (as requested):
- ansible/playbooks/* - You'll review per server
- ansible/inventory/hosts.yml - You'll update with your servers
- .woodpecker.yml - Kept as-is, already parameterized
## Key Improvements
**Generic** - Works on any server with configuration
**Validated** - Built-in syntax checking
**Safe** - Local overrides never committed to Git
**Portable** - Easy to adapt for different services
**Documented** - Clear configuration options
**Maintainable** - Centralized config, no hardcoding