Infrastructure Script Testing
Test Ansible playbooks, shell scripts, and provisioning configs on a real server
Test Ansible playbooks, shell scripts, or cloud-init configs on a fresh server. Validate they converge. Run them twice to check idempotency.
This is one of gibil's strongest differentiators — it's a real server with a real kernel, not a container pretending to be one.
Workflow
# Forge a clean server
gibil create --name config-test --ttl 15
# Run provisioning
gibil run config-test "apt-get install -y ansible && ansible-playbook /root/project/playbook.yml" --json
# → {"exit_code": 0, "stdout": "changed=12 ..."}
# Run again — check idempotency
gibil run config-test "ansible-playbook /root/project/playbook.yml" --json
# → {"exit_code": 0, "stdout": "changed=0 ..."}
gibil destroy config-testOr upload and run a local script directly:
gibil exec config-test --script ./setup.sh --jsongibil exec base64-encodes the script, transfers it to the server, runs it, and returns structured output. Safe for any script type.
What you can test
- Ansible playbooks and roles — full convergence testing
- Shell provisioning scripts —
setup.sh,bootstrap.sh, install sequences - Cloud-init configs — validate user-data scripts
- Package install sequences — apt, npm, pip in the right order
- Service configuration — systemctl, nginx, postgres
- Firewall rules — iptables, ufw on a real network stack
Why gibil
Scripts that pass here will pass on production Linux servers. Scripts that pass in a container might not.
- Real OS — Ubuntu 24.04 with systemd, real networking, real package management
- Root access — no permission workarounds
- Ephemeral — destructive tests are safe, the server burns after
Every gibil server runs Ubuntu 24.04. If your production target is a different OS, results may differ — but for the vast majority of Linux provisioning, this is a faithful test environment.
Next steps
- CLI:
gibil exec— upload and run scripts - CLI:
gibil run— run remote commands - Bug Reproduction — clean-state debugging