1

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?

EliuX
  • 11,389
  • 6
  • 45
  • 40

2 Answers2

1

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.

Charles Xu
  • 29,862
  • 2
  • 22
  • 39
  • The Wikipedia concept doesn't explicitly say virtual resources so most of the people had put emphasis just inn the provisioning, so they includes regular provisioning tools. – EliuX Sep 01 '18 at 00:40
  • @EliuX So what about you? – Charles Xu Sep 03 '18 at 00:52
  • I acknowledge that most of the time it will be used for regular provisioning/automation tools, but I believe it should be better classification so if you are asked to do IaC somebody can really understand the scope. So basically point of view is alike to yours but it needs other people to give their opinions to reach to a valid response based on diverses points of views. That's the right thing to do. – EliuX Sep 03 '18 at 02:28
  • Yeah, I'm unfamiliar with IaC, so my opinion is the common one as usual. I think if anyone will have self-point different from others if he/she works with IaC for a part of the time. – Charles Xu Sep 03 '18 at 02:36
1

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.

John Wu
  • 50,556
  • 8
  • 44
  • 80
  • For that use case you mentioned, yes there is a source code, but not for managing infrastructure but for provisioning already existing computer resources. For instance, Vagrant does that but doesnt construct infrastructure IMHO. An infrastructure goes beneath the operative system layer and more related to resources, in this case virtualized. if somebody tells you there is a repository for the IaC of your project, would you suppose it will create the virtual resources in your IaaS or its just for provision them? What is missing is some sort of layering in the definition. – EliuX Sep 05 '18 at 03:17