Micro Focus is now part of OpenText. Learn more >

You are here

You are here

6 lessons from the everything-as-code shift

Joydip Kanjilal Consultant, Independent

The last few years have seen a surge in demand for geographically dispersed applications. That's made it challenging, if not impossible, to properly manage these applications.

One way to solve the problem is to consider and treat all of your components and processes as code. Here's what you need to know about everything as code—its features, its benefits, where it might fit with your organization's needs—and six lessons before you dive into implementing the practice.

The problem: Configuration sprawl

Manual procedures are no longer feasible for provisioning, upgrading, monitoring, and decommissioning thousands of computing endpoints such as virtual machines, containers, and other computing devices. We dwell in a technological era in which companies no longer rely on physical servers located in a corporate data center.

Before you start building your software, you must configure and deploy a workflow such as CI/CD. These workflows are created from static scripts and configuration files, and because of that there might not be any versioning or testability. As your teams get larger, these configuration files can quickly go out of sync. You'll need manual efforts to keep it all running and up to date.

This challenge has grown even more with COVID-19, as companies have had to deal with changes in operating plans now that their workforces are remote across the globe. As such, the need to eliminate manual and repetitive tasks has never been higher. Fortunately, you can take an everything-as-code approach to programmatically manage the infrastructure in the same way that you write code to build software.

Enter everything as code

An everything-as-code approach treats operations, infrastructure, security, configuration management, and compliance as application code, so that everything adheres to the same software development practices. It is methodology or practice in which you write infrastructure as software, where everything is expressed as code.

In other words, it treats all aspects of a system as code, in the process changing the focus from manual tasks to automated workflows. 

Everything as code can be extended to IT components such as operating systems, network configurations, and pipelines. Embracing code at every stage of the software development lifecycle can open doors to automation, resulting in high-quality software delivered more quickly.

Writing code may not be the only way to build software and configure and manage infrastructure, but it is an essential skill anyway. And the practice has been made so simple that even many non-programmers in your IT group can write code—via simple code in the configuration files, for instance—to automate infrastructure.

How to apply everything as code 

Everything as code can help you scale operations by reusing the same configuration files and tools across large-scale environments.

For example, you can take advantage of the everything-as-code approach to:

  • Create Docker containers for your application binaries and use YAML to create Docker Compose files
  • Take advantage of the Docker command-line interface to push images into a container registry
  • Leverage Kubernetes to automate the deployment and management of containers

You can perform all these steps in your DevOps CI/CD pipelines. But now imagine that this needs to be done multiple times to accommodate different environments. When using the everything-as-code approach, you can assign parameters and values that correspond to each environment, such as the name, number of assets, etc.

You can even create temporary environments and then tear them down when they are no longer needed. If you were to do all this manually, it would be an error-prone and cumbersome process.

Six things you should know

Here are the lessons I've learned; you can benefit from these before you decide to implement everything as code in your enterprise.

1. It helps both software developers and IT engineers work more efficiently 

They can take advantage of everything as code to scale their operations by reusing configuration files across different environments. Everything as code helps reduce the risk of human error and increases consistency across IT systems and processes. You don't have to worry so much about losing institutional knowledge if an employee who managed a critical system wants to leave the organization.

2. A mindset shift is a prerequisite to using everything as code successfully in your organization

IT operations pros should adopt a development mentality and automate whatever and wherever possible. Both the development and operations teams should work together to improve processes and develop software that can hit the market early.

3. Success depends heavily on the efforts of your team

Team leaders should emphasize empathy, feedback, and emotional attention—that is, paying attention to team members' emotional states. Empathy helps team members to understand where their co-workers are coming from and how they can help. Feedback helps teams identify challenges and celebrate successes. Emotional attention helps build confidence and reliability within the team. 

4. The ability to follow high-quality procedures or gates is one of the most appealing features 

These are comparable to those used in the software development lifecycle. For example, you can leverage code reviews and pull requests to ensure that, at the bare minimum, a second person knows what an infrastructure component or pipeline is. Automation is essential here, given that you can use static analysis tools to get real-time insights into any best practices you aren't complying with and recommendations on how to improve your code.

5. Testing infrastructure code is complex, and you must create automated tests 

To test infrastructure code correctly, you must deploy it into a real-world environment and validate that it works as intended. Terratest is an open-source tool you can use for this purpose. It is adept at testing Kubernetes APIs, Docker, Google Cloud Platform, and Amazon Web Services, and executing shell commands locally and on remote servers.

6. Do not define all infrastructure for all environments—dev, stage, and production—in a single file 

This prohibition also applies to any collection of files that you deploy as a single unit. If your infrastructure were specified in a single location, you would need to have the rights to access or modify anything. As a result, your code will be insecure and risky. The greater the amount of code you have in a one place, the more difficult it may be to comprehend, test, review, and maintain it over time.

How to get started

Development teams are under pressure to deliver speed, flexibility, and accuracy—and that's exactly what everything as code delivers. To get started, you need to define policies to govern how the software will be built, deployed, and monitored.

Since everything as code allows you to develop and manage the entire application delivery pipeline, you should define all your workflows as code.

Keep learning

Read more articles about: Enterprise ITIT Ops