Based on the Wikipedia concept

Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools

It works well for provisioning tools like Ansible, Chef, Puppet and PowerShell DSC, which are well known automation tools, very useful during the continous development process. During a long time this was the closest way we could create the whole infrastructure our application needed using code. Nonetheless, with the aparition of Infrastructure as a Service we became capable of truly managing networking, computing and storage infrastructure.

If we have in count another point of view of IT Infrastructure that defines it as

the composition of physical and virtual resources that support the flow, storage, processing and analysis of data.

then it looks clearer to me that infrastructure might refers more to the networking/computing/storage resources, namely IaaS resources. Tools that come to my mind are Azure Resource Manager Templates and AWS CloudFormation; which create infrastructure from the ground, having in count of course that provisioning tools works as a nice complement to automate the configuration of the system.

Should Infrastructure as Code be used to refer provisioning/automation/deployment tools or it should just highlight those which through code allows the automation and management of virtual resources?

2

There are 2 best solutions below

4
On

A tool that comes to my mind is Azure Resource Manager Templates and IMHO is in the IaaS solutions where the IaC really takes shape.

Let's talk about the Azure Resource Manager Template, it allows people to create or recreate the resources conveniently through the code, just like a template. And as you say,

Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files

So, in my own opinion, Infrastructure as Code should just highlight those which through code allows the automation and management of virtual resources. It's more appropriate for IaC. Let's assume that if the Infrastructure cannot be managed by code, we must not think it's Infrastructure as Code.

1
On

Should Infrastructure as Code be used to refer provisioning/automation/deployment tools or it should just highlight those which through code allows the automation and management of virtual resources?

Neither. IaC does not refer to tools. It refers to a process. From your own quote:

Infrastructure as code (IaC) is the process of managing and provisioning computer data centers....

The difference is simple:

  • In the old days, if you knew your software required Windows 7 SP2, the process would be to enter a ticket for your systems engineer to apply Windows 7 SP2 to a server.

  • In the IaC era, if you know your software requires Windows 7 SP2, the process would be to modify source code and check it in.

The old process was time-consuming, took control away from the developer, and was not very repeatable, which could lead to errors or small differences in the way things are set up on the O/S. It could also be difficult to roll back. System "versions" might be stored as VM images or backups, which tend to be very large.

The new process, if set up right, is completely repeatable, very quick, and puts the developer in the driver's seat. You can keep as many versions as you like in source control, and rolling back is as simple as rolling back software.

The act of implementing IaC is the act of enabling the latter process-- purchasing, integrating with, or developing tools that allow you to modify the system with a code check-in. That's why the "code" part is so important. If you manage the code, you manage the hardware.