Home Automated Operations Waypoint 0.2 is adding foundational features for CI/CD

Waypoint 0.2 is adding foundational features for CI/CD

-

It may only seem like a minute ago that HashiCorp announced and released Waypoint as a 0.1 version, but it was October 15th, 2020 at HashiConf. Waypoint is Hashicorp’s first step into the CI/CD market, providing a consistent workflow to build, deploy and release applications across multiple platforms including Kubernetes, Nomad, AWS ECS, GCP Run, Azure Container Instance and many more. It uses a set of plugins very similar in concept to Terraform providers and Packer builders to expand Waypoint functionality to other platforms. Let’s see how Waypoint 0.2 stacks up.

Waypoint Logo

Like all of Hashicorp products, Waypoint is a single downloadable binary that is designed to do a single job and do it well in the traditional UNIX way. For Waypoint, its goal is to reduce the complexity surrounding deployments. It does this by attempting to address two major challenges.

First, Waypoints attempts to simplify the complexity of the many moving parts of a deployment, including Containers, schedulers, YAML files and more. These things are still needed and have in many ways drove the modernization of the infrastructure layer but they have a steep learning curve

The second is deployment fragmentation. Depending on the target of the deployment, the tool used to deploy is often different. For example Docker and Kubectl for Kubernetes, Packer and Terraform for deploying VM’s, or custom scripts and command-line interfaces for serverless. Hashicorp believes that by providing a consistent workflow across various platforms, deployments will be simplified and therefore more repeatable and safer.

The GA 0.1 release was surprisingly well-featured for what is effectively an MP, a minimally viable product. It features TLS certificates automatically generated via LetsEncrypt, the ability to execute external applications with the Waypoint Exec command, logging, a basic but functional read-only UI and more.

Fast-forward 3 months and we have had the first update to Waypoint with the release of 0.2 on the 10th of December 2020.

What’s new in Waypoint 0.2

There have been a number of significant new features added to the product.

The first is the ability to configure applications via Environment Variables that are synced with an external system such as Hashicorp Vault, Amazon Parameter Store or Kubernetes ConfigMaps. What is more when the source information is changed your applications are automatically updated. In 0.1 all variables needed to be declared at the command line meaning that all values were needed to be known and shared with the Waypoint user, NOT really good security practice especially with regards to identity roles.

A Waypoint config file can sync values from multiple sources as shown with this code snippet from the announcement blog:

project = "blog"
app = "web" {
   config {
       env = {
           THEME = configdynamic("kubernetes", {
               name = "blog-config"
               key = "theme"
           })
           DATABASE_HOST = "postgresql"
           DATABASE_USERNAME = configdynamic("vault", {
               path = "database/postgres/blog"
               key = "username"
           })
           DATABASE_PASSWORD = configdynamic("vault", {
               path = "database/postgres/blog"
               key = "password"
           })
       }
   }
   # ...
}

Above we can see that the theme is dynamically synced from a Kubernetes ConfigMap, the Database username and password are retrieved from Vault and the Database host is a statically assigned value. So as you can see a massive increase in flexibility and a large increase in the security stature of the product.

The next new Waypoint feature is templating and variables

In the initial release your path to a Docker template file and the image name had to be absolute, 0.2 has introduced a variable called “path.app” and “artifact.image” below is an example of code that shows both these features being utilized.

app "blog" {
  build {
    use "docker" {
      dockerfile = templatefile("${path.app}/Dockerfile.tpl", {
        theme = "rainbow"
      })
    }
    registry {
      use "docker" {
        image = artifact.image
        tag = gitrefpretty()
      }
    }
  }
  # ...
}

Above we can see that Docker is using the templatefile function with the path.app variable to replace the absolute path statement, docker then uses the artifact.image variable as the value for the image.

The introduction of variables into config is a massive move forward in allowing Waypoint code to be DRY.

Other improvements

Other improvements include enhancements to Waypoint logs to include entry-point related information. This is an improvement to diagnostic capabilities when attempting to understand why your application failed to launch.

The stability issues with Waypoint Exec have been resolved, it now releases memory on exit of the service. Furthermore, Waypoint Exec also has full access to all the configuration variables, including the new dynamic synced variables.

This version of Waypoint also supports online backup and restore of the Waypoint database which will allow greater control of the Waypoint environment.

Waypoint futures

Waypoint Futures

One of the things that is interesting about Waypoint is that there is a published roadmap that gives an insight into the future of the product. On the page, you can see the direction that Hashicorp is moving the product, features like App Promotion moving workspace movement from Development to UAT through to Production, more improvements to waypoint exec. But for me the most exciting upcoming feature is Remote Runners. According to Hashicorp this feature will allow the remote running of deployment plans, enabling the ability to integrate into the concept of the build server; a commonly utilized construct in operational deployment.

Summary

Summary

For a product that has only been GA for three months Waypoint is improving quickly, and each new feature adds foundation to the product. This is only 0.2, but already you can see the roadmap taking shape. This release has added some much-needed features, the addition of variables into Waypoint, HCL is a massive step forward not just from the perspective of DRY code principles but also from a teamwork perspective. Variable naming is now centralized in the config file making code more readable.

But for me, the best feature about the Waypoint 0.2 release is not any of the new features but the fact that HashiCorp is being very open with their roadmap of this product. This is rare for a software vendor to openly talk futures, this information is usually hidden behind the paywall of a signed NDA.

NEWSLETTER

Sign up to receive our top stories directly in your inbox

Join our community to receive the latest news, free content, jobs and upcoming events to your inbox.


TOP STORIES