Sync BunnyCDN edge IPs to Cisco FMC Dynamic Objects with secure credential management and scheduling
Project description
🐰 bunny2fmc
Synkroniserer BunnyCDN edge server IP-adresser til en Cisco FMC Dynamic Object med sikker credential-gempling og automatisk scheduling.
Hvad gør scriptet?
- Henter aktuelle IPv4 (og evt. IPv6) adresser fra BunnyCDN's API
- Opretter/finder Dynamic Object på FMC
- Sammenligner nuværende mappings med Bunny's liste
- Tilføjer nye og fjerner forældede IP'er
- Ingen deploy nødvendig - Dynamic Objects opdateres on-the-fly
- Sikker gempling: Credentials gemmesto i OS Keyring (Windows Credential Manager / Linux Secret Service)
- Automatisk scheduling: Konfigurer interval ved første setup, køres via cron
Installation
Fra source (local pip install)
# Clone eller cd til repository
cd /path/to/Bunny_Sync_FMC
# Installer som development package
pip install -e .
# Eller installer normalt
pip install .
Verificer installation
bunny2fmc --help
Initial Setup
Kør først setup for at konfigurere credentials og sync interval:
bunny2fmc --setup
Du bliver spurgt om:
- FMC Base URL: f.eks.
https://192.168.3.122 - FMC Username: Dit FMC login
- FMC Password: Dit FMC password (gemmes sikkert i OS Keyring)
- Dynamic Object Name: f.eks.
BunnyCDN_Dynamic - Include IPv6: Ja/Nej
- Sync Interval: Minutter mellem kørsler (f.eks. 15)
Alle credentials gemmesto sikkert i dit operativsystems native credential manager.
Daglig Brug
Kør sync nu
bunny2fmc
eller eksplicit:
bunny2fmc --run
Vis aktuel konfiguration
bunny2fmc --show-config
Genopsæt configuration
bunny2fmc --setup
Slet gemte credentials
bunny2fmc --clear-config
Automatisk Scheduling med Cron
Konfigurér cron job til at køre scriptet automatisk. Intervallet du angav ved setup bruges som reference.
Eksempel: 15 minutters interval
Hvis du satte interval til 15 minutter ved setup, tilføj til crontab:
crontab -e
*/15 * * * * bunny2fmc --run >> ~/.local/share/bunny2fmc/logs/cron.log 2>&1
Andre intervals
Hvert 5. minut:
*/5 * * * * bunny2fmc --run >> ~/.local/share/bunny2fmc/logs/cron.log 2>&1
Hver time:
0 * * * * bunny2fmc --run >> ~/.local/share/bunny2fmc/logs/cron.log 2>&1
Hver 6. time:
0 */6 * * * bunny2fmc --run >> ~/.local/share/bunny2fmc/logs/cron.log 2>&1
Dagligt kl. 03:00:
0 3 * * * bunny2fmc --run >> ~/.local/share/bunny2fmc/logs/cron.log 2>&1
Note: Intervallet du angav ved
bunny2fmc --setuper din reference. Sæt cron-intervallet til at matche eller være hyppigere.
Logging
Alle kørsler logges til:
~/.local/share/bunny2fmc/logs/bunny2fmc.log
Logfilerne roteres automatisk når de når 10 MB (max 5 backups gemmes).
Tjek logs
# Seneste log
tail -f ~/.local/share/bunny2fmc/logs/bunny2fmc.log
# Se hele loghistorie
ls -lh ~/.local/share/bunny2fmc/logs/
Sikkerhed
Credential Gempling
-
Credentials gemmesto IKKE i plain text
-
Bruger dit operativsystems native secure storage:
- Windows: Windows Credential Manager
- Linux: Secret Service (D-Bus)
- macOS: Keychain
-
Passwords er aldrig tilgængelige via config-filer eller command-line
Best Practices
- Brug en dedikeret FMC bruger med minimal adgang (kun Dynamic Objects)
- Tjek logs regelmæssigt for fejl eller uventet adfærd
- Test med
--setupførst før du sætter op i production - Gem dine scripts i
/opteller/usr/localfor production use
FMC Konfiguration
Oprettelse af Dynamic Object i firewall-regler
Scriptet opretter automatisk et Dynamic Object (f.eks. BunnyCDN_Dynamic) på FMC. For at det har effekt, skal du manuelt oprette en firewall-regel der bruger dette objekt:
- Log ind på FMC → Policies → Access Control
- Opret/rediger en Access Control Policy
- Tilføj en ny regel:
- Source/Destination: Vælg "Dynamic Objects" →
BunnyCDN_Dynamic - Action: Allow/Trust (afhængig af dit behov)
- Logging: Aktiver efter behov
- Source/Destination: Vælg "Dynamic Objects" →
- Deploy policyen til dine firewalls
Vigtigt: Dynamic Objects opdateres automatisk uden deploy, men selve firewall-reglen skal deployes første gang den oprettes.
Eksempel use case
Tillad trafik fra BunnyCDN edge servere til dine webservere:
Source: Dynamic Object "BunnyCDN_Dynamic"
Destination: Webserver network
Action: Allow
Krav
- Python 3.8+
- Linux server (eller Windows/macOS for testing)
- Netværksadgang til FMC og BunnyCDN API
- FMC bruger med rettigheder til at oprette/redigere Dynamic Objects
keyringPython package (installeres automatisk)
Troubleshooting
"No stored credentials found"
Løsning: Kør bunny2fmc --setup først
bunny2fmc --setup
Credentials gemmes ikke i keyring
Kontroller at din Linux server har Secret Service installeret:
# Debian/Ubuntu
sudo apt-get install gnome-keyring
# RHEL/CentOS
sudo yum install gnome-keyring
Cron job kører ikke
Kontroller:
- Crontab er korrekt:
crontab -l - Cron daemon kører:
systemctl status cron(ellercrondpå CentOS) - Se cron logs:
grep CRON /var/log/syslogellerjournalctl -u cron
Sync fejl
Se logfilen for detaljer:
tail -50 ~/.local/share/bunny2fmc/logs/bunny2fmc.log
Development
# Clone repo
git clone <repo-url>
cd Bunny_Sync_FMC
# Opret venv
python3 -m venv .venv
source .venv/bin/activate
# Installer dependencies
pip install -e ".[dev]"
# Kør tests
pytest
# Lint
flake8 bunny2fmc/
black bunny2fmc/
Legacy Scripts
De gamle scripts er stadig tilgængelige:
bunny_to_FMC.py- Environment-based versionbunny_to_FMC-interaktiv.py- Interactive version
Brug bunny2fmc CLI-toolet for nye deployments.
Distribution Strategy
Repository Struktur
-
Privat GitHub (
https://github.com/IronKeyVault/Bunny_Sync_FMC):- Source of truth for alt udvikling
- Indeholder hele kodebase (gamle scripts, notes, configs)
- Kun for interne team medlemmer
-
PyPI (
https://pypi.org/project/bunny2fmc):- Public distribution punkt
- Alle brugere kan installere med:
pip install bunny2fmc - Synkroniseret fra privat repo
Release Workflow
Når du er klar til at udgive en ny version:
./release.sh
Scriptet vil:
- Spørge for nyt versionsnummer (f.eks. 1.0.2)
- Opdatere
pyproject.tomlogbunny2fmc/__init__.py - Committe og pushe til GitHub
- Bygge pakken
- Uploade til PyPI
Eksempel:
./release.sh
Enter new version (e.g., 1.0.2): 1.0.2
✓ Release v1.0.2 complete
Hvornår kan jeg slette den gamle public repo?
Du kan slette https://github.com/IronKeyVault/bunny2fmc når:
-
✅ PyPI har den seneste version
- Verificer på https://pypi.org/project/bunny2fmc/
- Alle nye releases går direkte til PyPI via
release.sh
-
✅ Ingen users refererer til det
- Hvis andre har installeringer fra Git URL, skal de updateres til:
pip install bunny2fmc(fra PyPI i stedet)
-
✅ Du er sikker på at PyPI er det eneste public distribution point
- Alt udvikling fortsætter i privat repo
- Releases håndteres via
./release.sh
Sletning
Når du er 100% sikker, kan du slette repoet:
- Gå til https://github.com/IronKeyVault/bunny2fmc
- Settings → Danger Zone → Delete Repository
- Bekræft ved at skrive repo-navnet
Efter sletning:
- Alt udvikling/history ligger stadig på privat repo
- Alle brugere bruger PyPI (bedst praksis)
- Enklere repository-management
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bunny2fmc-1.0.2.tar.gz.
File metadata
- Download URL: bunny2fmc-1.0.2.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a10df1bdeddf6669ac37c6da307beb1d71a88aefb0f093bc8810b8848d8d0965
|
|
| MD5 |
38aa179ee41633cbbcbc79d709a3894a
|
|
| BLAKE2b-256 |
0f9dda4d42fc2f4493bfc05b10e6b205e203e0942b4187d4580138e749161baa
|
File details
Details for the file bunny2fmc-1.0.2-py3-none-any.whl.
File metadata
- Download URL: bunny2fmc-1.0.2-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b7fe8b62509b25b55bf5442162fdcd7942018c7f1e270a4e11cc92fa79cc1c2
|
|
| MD5 |
524e5f83c33d6500e6df148491b44a6b
|
|
| BLAKE2b-256 |
073bba037ca8ebada321345fad7e09e7e6c132789482bbc9dfb340b3b072356e
|