Over the years we've seen hundreds of software integrations into the CenturyLink Cloud. Many introduced new challenges to us (arghh!), especially as we all work to follow industry-wide best practices.

I am pleased to report that with increased volume came a common set of solutions that support these best practices and virtually eliminate challenges faced by end customers and partner integrators alike. Using the bpformation toolset a factory approach is achievable for even the smallest integration effort.


Blueprints are an amazing tool for all consumers of the CenturyLink Cloud Infrastructure-as-a-Service (IaaS). True - by definition a Cloud vendor must maintain a set of orchestration that enables instant provisioning of resources like new servers or storage. CenturyLink is no different in this respect. What sets CenturyLink apart is extending this orchestration, called Blueprints, directly to end customers and service integrators.

Long ago we realized that just deploying a server is of limited value. It's enabling a new service or business process through the development or installation of software that customers really want. By extending Blueprints, our end customers deploy a fully functioning service (which may be composed of multiple servers and applications) repeatably, consistently, all at the press of a single button.


While great in theory, we found that many of the Blueprints are missing some key controls that have come to be regarded for good reason as commonplace:

  • While the Software Development Lifecycle (SLDC) is well understood in the software industry, it's a relative newcomer to IaaS. Supporting development, testing, and production releases of the automation itself (not the software that ultimately gets deployed mind you) is difficult.
  • Documentation and Repeatable configurations of this automation is necessary at any non-trivial level of scale.
  • Blueprints designed via the ad-hoc Control Portal lack the depth and control one would expect as part of a mature CI/CD environment, or any CLI/script-based interaction for that matter.

Best Practices

We all know when things aren't going smoothly. These are the times to lean in and align what's happening now with best practices across the industry as a whole or even from a specific Center of Excellence. To sum up a few of the commonalities:

  • Identify changes and maintain version control across automation releases
  • Support change rollback.
  • Encourage reusability. .
  • Maintain separate environments for development, testing, and production.

Achieving any of these using a hand-administered web interface is impossible.


The solution we've implemented relies on the bpformation toolset. This is a command line interface (CLI) with available Python extensions that allows create, read, update, and delete (CRUD) operations against Blueprints from a command line or programmatic endpoint.

Using bpformation we can:

  • List, List OS, Upload, Publish, Upload and Publish, Delete, Download, and Execute Packages
  • List, Export, Import, Update, Delete, and Execute Blueprints

define server templates, packages, and blueprints

Blueprint workflows are represented using JSON objects that can be clearly read, easily modified, and, being text-based, are natively supported by version control like Git.

    "execute": {
        "https_port": "443",
        "email_address": "noreply@ctl.io"
    "metadata": {
        "name": "Demo Blueprint", "version": "0.1", "visibility": "private"
    "tasks": [
            "name": "Server", "description": "My Demo Server",
            "cpu": "1", "ram": "1",
            "tasks": [
                {"name": "Patch Server", "type": "package"},
                {"name": "Install Software", "type": "package"}
            "template": "CENTOS-6-64-TEMPLATE",
            "type": "server",


How Do I Easily Upload and Publish My Blueprint Packages?

Use the bpformation command line upload-and-public to transfer a Blueprint Package to CenturyLink Cloud and publish for general availability.

upload and publish example

How do I Lifecycle My Blueprints?

Very easily! Let's assume we have our credentials for a development, QA, and production environments.

# Export development Blueprint or start from scratch
> bpformation --config devel.ini blueprint export --id 1234 --file foobar.json

# Update existing QA Blueprint with fixes to support another
# round of QA testing
> bpformation --config qa.ini blueprint update --file foobar.json

# When ready for public release use import into production as a new Blueprint
> bpformation --config prod.ini blueprint add --file foobar.json

What else can I do with bpformation?

At CenturyLink Cloud in the Marketplace Provider Program we've found uses across the board -- from enabling a single engineer to build and maintain the integrations for a dozen products to supported automated QA and publishing of all partner provided Blueprints prior to public release.