This report concludes work on a research project to explore the feasibility of infrastructure as code, summarizing the problem addressed by the research, the research solution approach, and results. Infrastructure as code (IaC) is a set of practices that use code to set up virtual machines and networks, install packages, and configure environments. Successful IaC adoption by software sustainers requires a broad set of skills and knowledge. This project addresses the problem of accelerating IaC adoption among software sustainment organizations. Our goal was to answer this question:
What are the challenges and limitations to automatically generate the IaC scripts needed to instantiate a deployment that is identical to an original system deployment, including measures of the amount of manual intervention needed to perform the tasks, and the amount and type of specialized knowledge needed about the system and IaC technology?
Our approach included developing prototype tools to inventory the system computing nodes, applying heuristic rules to make sense of the inventory, populating a model of the deployment architecture, and automatically generating IaC scripts from that model.