Types of IaC tools

There are following IaC tools types can be accomplish different tasks.

Provisioning tools
These tools are used to provision a infrastructure components (servers, databases, network components etc.) using a simple declarative code:

Configuration management
Designed to install and manage software on existing infrastructure resources.
Code can be checked in to version control repository that allows to reuse and redistribute as needed.
Another feature is idempotency - this means that you can run the code multiple times, and everytime you run it - it only makes changes that are necessary to bring the system to a desired state.
Example of configuration management IaC tools: Orchestration and templating
These can be used to create a custom image for a virtual machine or a container. These images already contain all required software and dependencies installed on them - this eliminates the need to install the software after the image or a container is deployed.
Example of images: custom images from osboxes.org, AMIs in AWS and docker images from docker hub or other registries.
These tools also promote the immutable infrastructure unlike configuration management tools - this means that once the VM or container is deployed, it is designed to remain unchanged: