GibilGibil

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-test

Or upload and run a local script directly:

gibil exec config-test --script ./setup.sh --json

gibil 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 scriptssetup.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

On this page