IAC
Infrastructure As Code
"A long time ago, in a data center far, far away, an ancient group of powerful beings known as sysadmins used to deploy infrastructure manually. Every server, every route table entry, every database configuration, and every load balancer was created and managed by hand. It was a dark and fearful age: fear of downtime, fear of accidental misconfiguration, fear of slow and fragile deployments, and fear of what would happen if the sysadmins fell to the dark side (i.e. took a vacation). The good news is that thanks to the DevOps Rebel Alliance, we now have a better way to do things: Infrastructure-as-Code (IAC)."
https://blog.gruntwork.io/a-comprehensive-guide-to-terraform-b3d32832bacaProvisioning
Provisioning tools are designed to provision servers, load balancers, databases, firewalls etc.
Pulumi
Templating
Configuration Management
Configuration Management tools are designed to install and manage software on existing servers.
SaltStack
Chef
InTune
Key Differences
Declarative tools allow you to define the target state and the tool works out how to get there.
Procedural tools need you define how to get from the current state to the target state.
GPL Based tools use a General-purpose Programming Language
DSL based tools use a Domain-Specific Language
GPL
Chef - Ruby
Pulumi - JavaScript, TypeScript, Python, Go, C#, Java...
DSL
Terraform - HCL
Puppet - Puppet Language
Ansible - YAML
CloudFormation - YAML, JSON
OpenStack Heat - YAML
Some tools store the state of your infrastructure and distribute updates from a Master serer.
Bibliography
2021https://www.techregister.co.uk/what-should-hashicorp-do-now/