Automating infrastructure provisioning, configuration, and application deployment