WordPress on OpenStack: Murano App vs Glance Image

Ilya Stechkin, Kirill Zaitsev, Dmytro Dovbii, Alexey Deryugin, and Pavel Karpov - January 12, 2016 -

Over the past several months, we’ve been talking a lot about the Community App Catalog itself, but today we’re going to look at what it takes to actually use it. The Community App Catalog offers three different types of assets: Murano Applications, Glance Images, and Heat Templates. We’ve found that there’s some confusion over when to use a Murano app versus a Glance image, so we’ve decided to take a general look at both processes and do a comparative study.

What we’re looking at here is the difference in working with Murano apps versus Glance images for the developers who create those apps and images for end users, but rather than actually create a new app, we’re going to use WordPress as an example.  Why WordPress?  Because, as a complete content management system (as opposed to just a blogging platform) it’s used by many top brands, including The New York Times, CNN, Forbes, Reuters, General Motors, UPS, eBay, SONY, GigaOm, TechCrunch, Samsung, and Mashable. In fact, W3Techs reports that 58.7% of websites, whose content management system they know, use WordPress. That includes large companies who can use OpenStack to easily scale WordPress, and small bloggers who can use the Community App Catalog to easily install WordPress in the first place.

In future articles in this series, we’ll go into the details of creating Murano applications and Glance images for use with the Community App Catalog, but for now we’re just going to look at the two processes from a high level so you know which you’d rather pursue.

(In some cases you might not have a choice as to which method to use. For example, if your application needs to be deployable without Murano, then you will need to use a Glance image.  On the other hand, if your application will need more than one VM, it will generally be more convenient to use a Murano App, particularly if you need to run some other workflow-like task to complete application setup.)

Building a Murano application

Building a Murano Application basically consists of assembling resources and configuration files into a specially constructed *.zip file. You can find the project’s official wiki page here, but before we get into the details, let’s just look at a few terms:

Murano package: A zip archive. It must contain:

  • manifest.yaml file: the entry point of application.
  • Classes folder: contains MuranoPL class definitions.
  • Resources folder (optional): contains execution plan templates and the scripts folder with all the files required for application deployment.
  • UI folder: contains the dynamic UI yaml definitions.
  • logo.png file: an image file associated with your application. This image is displayed in Murano as part of the application description.
  • images.lst file (optional): a list of images required by an application.


In a future article, we’ll explain in detail how to create a Murano Application, but the basic steps are:

  • Create the application classes and specify the workflow MuranoPL, then  place both in the Classes folder.

MuranoPL is a special programming language used by Murano to deploy applications. The language is represented by easily readable YAML and YAQL languages, and is executed on a controller node.

  • Create execution plan templates with scripts and place them in the Resources folder.

An execution plan is a set of special constructions (represented by YAML and bash scripts) used by the murano-agent running on the virtual machine (as opposed to the workflow, which runs on the controller) to execute actions implemented in application classes. The plan may include parts written in different programming languages — for example, some parts of the plan may be shell scripts, others written in puppet, and so on. The simplest example of an execution plan would be a single shell script.

  • Create the UI definition and place it in the UI folder.

The UI definition is a YAML file describing set of parameters required by applications. Defining the UI enables Murano to request those parameters in the dashboard user interface.

  • Create the image.lst file.

The image.lst file specifies the images required by the application.

  • Create or choose and add a logo to your project.

Murano is a very UI-oriented service; having some sort of image as a logo helps users identify your packages.

  • Create the manifest.yaml file.

The manifest.yaml file describes the metadata of the application to Murano.

  • Create a zip file of the entire file structure.

The zip file is what you will import into Murano.


Murano is a relatively young project, but the documentation provides complete information about the steps for composing an application, including numerous examples. It’s enough to quickly learn how to create a Murano app using a simple application such as ApacheHttpServer.

Time required

Development time for a Murano application is directly related to the complexity of the application’s functionality and the complexity of the scripts needed to configure applications on the virtual machine. For example, if the application just installs a package on the VM using apt-get install, putting it together can take just a few minutes, whereas an application that installs multiple applications and links them together can take significantly longer to develop and test.


By default, Murano sends logs to stdout, but it can be configured to save logging information to specific files to ease troubleshooting.

Building a Glance image

Perhaps the most familiar way of creating an application is simply to create a Glance image, such as this one.


  • Install the latest diskimage-builder utility.

Diskimage-builder is a special utility to build cloud-ready images with the required software configuration. You can install it using python-pip:

sudo pip install diskimage-builder
  • Write (or download) an element that installs the WordPress and related software.

An element is a simple Shell script that simply executes Bash commands. To make things simple, you can get the required element for WordPress from my Git repository:

git clone https://github.com/velovec/UsefullElements elements
  • Run the disk-image-create utility from the diskimage-builder package.

Execute the command

sudo ELEMENTS_PATH=elements
disk-image-create -t qcow2 -o wordpress vm ubuntu wordpress

where ELEMENTS_PATH is an environment variable that points to the folder containing our element. The -t option defines the format for the newly created image; qcow2 is the most common. The -o option defines the name of our image. The last three parameters describe which elements should be used: vm and ubuntu are internal elements describing the image type and operating system, and the last one, wordpress in this case, our element from the second step.


The Documentation for creating an image is good enough, but describes methods less efficient than we’re looking at here.

Time required

Development time depends on your shell scripting skills and required functionality. In most cases, creating the image will take something more than the minimum of 30-40 minutes. Also, the process of actually building images takes at least 10 minutes, and depends on Internet bandwidth and the number of required packages.


Information required for image troubleshooting can be found in the disk-image-create log. In some other cases, you can also get useful information from the cloud-init logs from a VM running the final image.

How to use a Murano App or Glance Image from the Community App Catalog

Now that we’ve created these apps, what’s involved in actually using them? Once they’re uploaded to the Community App Catalog (which we’ll discuss in a later article) the user can import them into his or her own environment and run them based on the type of application.

Using Murano Apps from the Community App Catalog

Installing a Murano App from the Community App Catalog is pretty straightforward:

  1. Copy the name of the app
  2. Open your Horizon dashboard
  3. Navigate to Murano -> Manage -> Package Definitions
  4. Click Import Package
  5. Choose Repository as the package source and paste the name of the package in the respective field. (This enables Murano to also install any dependencies required by the app, such as the Apache murano app and the MySQL murano app. This way you have all the building blocks to compose your Murano WordPress Environment.

Launching the Murano App is also straightforward and enables you to configure higher-level parameters of your environment:

  1. In your Horizon dashboard, navigate to Murano -> Application Catalog -> Environments
  2. Create a new Environment
  3. Drag the WordPress app to the new environment
  4. Follow the instructions in the dialog window. You will be asked to configure WordPress, Apache and MySQL parameters along the way.

Using Glance images from the Community App Catalog

Installing a Glance image from the Community App Catalog is even more straightforward:

  1. Copy the URL of the image you want to import
  2. Open your Horizon dashboard and navigate to Project -> Compute -> Images
  3. Click Create Image and paste the url into the «Image Location» field. Glance will download the image for you.

Launching the Glance image is also very easy.

  1. Go to the image list page (if you’re not still there from adding the image)
  2. Choose the Launch action for your image to bring up a standard glance “Launch Instance” dialog, which enables you to set standard parameters such as flavor, and networking.

So now that you’ve seen how to create and use both Murano Apps and Glance Images, which should you choose?


Let’s overview what we’ve learned.

Murano App Glance Image
Number of steps to create 7 3
Time to develop less than an hour 30 – 60 mins
Completeness of documentation Docs provide full information about steps for composing an app, and contain numerous examples. Docs are adequate, but somewhat incomplete and outdated

As we can see, both ways are suitable, but the process of creating Murano apps is better described in manuals. So if you are following the step-by-step instruction you will have the expected results in a predictable amount of time.

And then, of course, there is the matter of complexity. A Murano App can span several VMs; a Glance image, by definition, is limited to one.

So as always, the answer to “which is better” is “it depends”.

Next time we’ll go into more detail on how to create a Murano app and deploy it to the App Catalog.

From Virtualization to Containerization
Learn how to move from monolithic to microservices in this free eBook
Download Now
Radio Cloud Native – Week of May 11th, 2022

Every Wednesday, Nick Chase and Eric Gregory from Mirantis go over the week’s cloud native and industry news. This week they discussed: Docker Extensions Artificial Intelligence shows signs that it's reaching the common person Google Cloud TPU VMs reach general availability Google buys MobileX, folds into Google Cloud NIST changes Palantir is back, and it's got a Blanket Purchase Agreement at the Department of Health and Human …

Radio Cloud Native – Week of May 11th, 2022
Where do Ubuntu 20.04, OpenSearch, Tungsten Fabric, and more all come together? In the latest Mirantis Container Cloud releases!

In the last several weeks we have released two updates to Mirantis Container Cloud - versions 2.16 and 2.17, which bring a number of important changes and enhancements. These are focused on both keeping key components up to date to provide the latest functionality and security fixes, and also delivering new functionalities for our customers to take advantage of in …

Where do Ubuntu 20.04, OpenSearch, Tungsten Fabric, and more all come together? In the latest Mirantis Container Cloud releases!
Monitoring Kubernetes costs using Kubecost and Mirantis Kubernetes Engine [Transcript]

Cloud environments & Kubernetes are becoming more and more expensive to operate and manage. In this demo-rich workshop, Mirantis and Kubecost demonstrate how to deploy Kubecost as a Helm chart on top of Mirantis Kubernetes Engine. Lens users will be able to visualize their Kubernetes spend directly in the Lens desktop application, allowing users to view spend and costs efficiently …

Monitoring Kubernetes costs using Kubecost and Mirantis Kubernetes Engine [Transcript]
Service Mesh for Mere Mortals
A Guide to Istio and How to Use Service Mesh Platforms
The Definitive Guide to Container Platforms
Istio in the Enterprise: Security & Scale Out Challenges for Microservices in k8s

Presented with Tetrate