How a person defines DevOps often depends on their scope of interest/responsibility within an IT environment. Those with an infrastructure management background are going to lean towards an Infrastructure as Code (IaC) definition. Application developers typically focus on application development processes and agility. There are also people who tell you that DevOps is an end-to-end solution combining infrastructure management and application development.
I see Infrastructure management and application development as two separate disciplines, where infrastructure is used to build a platform consumed by application developers. Application developers can configure the platform as required within the constraints of said platform.
There is no doubt that DevOps principals have influenced how infrastructure is managed at scale using IaC strategies. However, there is a point where DevOps principals may no longer be relevant for IaC, especially when it comes to the management of bare metal.
Continuous integration/continuous delivery (CI/CD) pipelines play a core role in shipping code from development to production; within the pipeline unit and integration tests are run against the code to ensure reliable delivery and reduce risk of faults.
Many hardware vendors supply emulators to replicate the behaviour expected from the hardware platforms. An emulator’s replication of a physical hardware platform should typically be considered a best effort and not necessarily an entirely accurate a representation. A VM running the Network Operating System (NOS) for a white box switching solution would not be able to test how a change impacts the performance of an ASIC contained within physical switches.
Some companies can afford to purchase enough hardware dedicated to testing new workflows or updated impacts, others cannot. The level of accuracy between the test and production environment determines the testing reliability of a CI/CD pipeline.
Introducing version control to track changes is one of the most significant value propositions that IaC provides to operational teams. Issues caused by manual infrastructure changes can be incredibly challenging to troubleshoot as sometimes the intended change isn’t exactly what was changed. Increasing the number of changes made using IaC reduces the amount of time it takes to find which settings were changed.
CI/CD pipelines are frequently integrated with version control systems, enabling automatic execution of pipelines when a repo receives a new commit. If the hardware vendor provides emulators for their hardware platform, the pipeline should build a virtual environment to represent the current environment to run integration testing.
Test results can be used to provide more than simple pass / fail validation, and tests can be used to determine the impact of a change which can then be used to determine if additional steps are required before, during or after application of a new configuration.
Many environments and application services have a state that can impact how seamless a failover is. In a virtualised environment, higher workload density increases the number of applications potentially impacted by an interruption caused by a change, even if that impact is only a blip.
Using a CICD pipeline to detect interruptions caused by the change allows for better change planning or incorporation of steps to perform workload migrations and clean failovers. The use of emulators might be adequate for this level of testing; however, physical reproduction is always a better option.
Continuous iterations required
Working towards a high degree test coverage requires continual iterations which include lessons from previous successes and failures. Agile project management strategies provide a practical framework for managing iteration work in progress.
Physical infrastructure isn’t ephemeral unless you live in the Twilight Zone physical devices do not suddenly appear and disappear from racks. There are configuration changes which can be performed on demand and those which cannot.
Storage platforms have supported storage nodes as individual nodes within a cluster, allowing for the addition and removal of nodes as required. However, the process of changing storage nodes places additional load on the storage solution while data rebalancing operations occur or evacuated. Some changes may require that some protection features are disabled or tuned down to prevent unneeded load on the system. Typically, these are the types of changes which build the foundation of a storage solution provided for consumption.
There are many areas when DevOps principals influence and improve IaC strategies; however, physical hardware management is different from software management, and the suitability of different principals varies between environments and goals.