Exercise 3: Why Terraform Is the Wrong Tool for Installing nginx on an Existing Server — Possible Solution ==================================================================== Terraform's job, per the chapter, is PROVISIONING infrastructure -- it creates the VM, the network, the database instance itself. It has no built-in concept of "log into a running machine and install a package." Once a server already exists, getting software installed and configured on it is a fundamentally different kind of task than declaring "this VM should exist" -- it requires connecting to the machine, running commands or applying configuration files inside it, and managing the ongoing state of software already running there. That is explicitly named in the chapter as Ansible's job, not Terraform's: Ansible CONFIGURES infrastructure that already exists -- installing software, editing config files, restarting services -- typically on machines Terraform (or some other provisioning step) already brought into being. Using Terraform for this specific task would mean either misusing its `provisioner` mechanism to shell out and run ad hoc install commands (a pattern the chapter's own Chapter 9 will cover specifically as something to avoid except as a last resort) or simply not being able to express the task at all in Terraform's own resource model, since "install nginx on an existing machine" isn't a resource to be created, updated, or destroyed -- it's an ongoing configuration action on something that already exists. The right tool: Ansible -- exactly as the chapter's warn-box states, and exactly the tool this site's own bucket list still has outstanding as Terraform's natural complement. WHY THIS WORKS AS AN ANSWER ------------------------------ This explains WHY the task doesn't fit Terraform's own resource model (provisioning vs. configuring is a difference in KIND, not just convention) rather than only stating "wrong tool," and correctly names Ansible as the specific tool built for this exact job.