module ChefMetal class Provisioner def create_machine(instance) end def delete_machine(instance) end def stop_machine(instance) end end end module ChefMetal class Instance def create end def delete end def stop end def converge end def end end - MachineList (physical) - Driver (lists, creates, deletes associated machines) EC2 LXC Docker BareMetal - Machine (physical) - Transport SSH (+Rsync) WinRM LXC IPC Docker API - Provisioner Chef Client Puppet - Cluster (logical) Chef server Puppet master - Instance (logical) create delete exists? provision verify execute upload/download