Introducing CloudStack-UI: Story of alternative interface for Apache CloudStack
© Shutterstock / 3D_creation
In the following article, Marina Minaeva and Ivan Kudryavtsev share the story behind the CloudStack-UI open source project. They summarize the main challenges they met in the process of development, and overview enhancements that Apache CloudStack users get with the CloudStack-UI.
Apache CloudStack (ACS) is an open source virtualization platform widely used for organization of public and private clouds. It is a great product, providing a wide range of features for organization of IaaS clouds such as reliable compute orchestration, out of the box users and accounts management, network services management, comprehensive and open API, support of most popular hypervisors, resource accounting .
However, as any software product, it has downsides of different scale that could or could not be business and operations critical for a certain service provider depending on its’ requirements. Thanks to the active user community and comprehensive documentation, most of the ACS challenges could be solved relatively easily and make no negative impact on overall service quality; our own experience with the ACS platform was so far mostly positive.
We successfully run an ACS public cloud for 3 years by now, meeting and resolving some non-critical issues in the process. However, one thing we noticed had a significant impact on overall business results and customers satisfaction with our cloud services.
We found that average users, i.e. our customers, who are used to work Amazon AWS, Digital Ocean and other famous VPS management systems find native CloudStack uncomfortable and make a lot of operational mistakes. This subsequently leads to support team overload, appearance of long help-desk tickets queue, tasks delays and affects the productivity and safety of operations when providing ACS clouds to end users.
The most obvious cause of the problem are existing shortcomings of native ACS interface:
- ACS user interface, from our point of view, is designed for professional system administrators, which makes its’ usage particularly hard for end cloud users. Some of the interactions are not straightforward and unnatural to an average user and require quite a long time to adapt;
- Native ACS UI has lack of functions to track virtual machine statistics & charting, doesn’t provide functionality for more sophisticated resource accounting and application management. These features are important not only for customers to understand what is the performance of their VM and if the service package they use efficient for their needs, but also for the service team to quickly solve operational requests.
In 2016, to deal with these challenges our team came up with the idea to design and implement a convenient and neat end-user interface for ACS covering regular activities that are important for day-to-day VM management.
Initially, our main goal was to design UI that would meet identified in practical experience requirements:
- should be user-oriented, offering clear UX and intuitive navigation;
- should provide additional functionality to enhance VM management, statistics and resource accounting;
- should cover all the productional use cases enabled in ACS configuration with basic zones, since this is the ACS deployment we use for our cloud services proposition.
User-friendly interface with clear UX
To provide such experience to the users we had to rethink most of the native ACS screens regrouping functionality to avoid unnecessary transfers between views and forms, eliminate confusing sequences of actions and unclear behavior of the system. At the same time, we wanted to give users more visualization opportunities to make the interface look unique and meaningful.
The team has widely implemented “one-step” approach that gives users access to all necessary functions and information from the single screen. Thus, for example, all actions on VM instances (grouping, editing, adding, deleting) in CloudStack-UI are managed from the same “Virtual machines” view. Thanks to the integrated sidebar, the user also could easily access most of VM information such as virtual-machine related activities (like security groups, additional IPS) and virtual machine storage management (disks, snapshots, and ISO).
We also thought through smaller, though not less important things, such as automatic check of the available resources when creating VM that would help users to avoid the launch of impossible scenarios that would fail for sure; automatic VM names generation with the use of existing user data that would spare precious time of the service customers; ability to set a specific color to a virtual machine and use it as a filtering key, possibility to choose a time format (AM / PM <-> 24h) to use the system in a convenient time mode in different countries.
Other things which we found good to support were a responsive interface for cross-platform usage and an option for other ACS based cloud service providers to customize the interface to better reflect their branding. To achieve this we used development frameworks supporting cross-platform access, added color scheme options for users in settings and ability to change preloader logo for service providers.
As some of the cloud providers may want to offer reseller opportunities to their clients, we embedded comprehensive ACS domains support. The domain is an entity in ACS that has an assigned domain administrator and multiple domain accounts. Domain administrator, who is taking the role of reseller can use CloudStack-UI to deploy customized end-user interface in his own domain, becoming a service sub-provider for users of his domain, i.e. his customers.
Additional functionality for enhanced statistics, VM management and resource accounting
The second important aspect of our project work was directed to the introduction of new functionality that gives customers and support team in a more enhanced way to work with statistics, perform resource accounting and management of existing VM.
One of the essential things for users to efficiently operate their cloud is information about available resources. Native ACS interface doesn’t provide extended information about used and available resources to end users, through service administrators may access such information from their accounts. In CloudStack-UI we implemented easily accessible resource usage bar that gives users visual information on the state of their resources.
Small but valuable improvement was introduced in events log, namely, we added filtering by functionality with which user or help desk can find events that happened in particular period of time.
Another challenge was to improve logics of security groups — the entity in ACS that allows isolating traffic to VMs . The concept of security groups in ACS, from our point of view, might be quite confusing for an average user because users have to create a specific security group before a virtual machine is created and they can not change VM’s security group, but they can change the rules inside the security group and as a result those changes affect all the virtual machines which share the same group. Such logics is not obvious and caused a lot of requests to our help-desk team.
Therefore, we tried to enhance it with the introduction of the “Firewall rules template” concept, which is a preset (system default or developed by the user) used to specify firewall rules for a new virtual machine. In the VM creation form, the user can choose one or several firewall templates to apply to a new VM. Upon VM creation CloudStack-UI automatically creates and sets a new security group for the VM based on the rules from specified firewall templates. In this way, when the user changes the rules for a certain virtual machine, they don’t affect other machines. So, basically, the interface disables sharing one security group between several virtual machines. Every virtual machine always gets a unique security group which is built from the preset specified when the virtual machine was created.
The most recently added functionality extensions include two plugins, providing access to useful VM management and statistics analysis operations that are not supported in native ACS API and interface.
The first plugin, called WebShell, is a VNC client of a sort. It enables users to perform a clientless SSH connection to a virtual machine. Basically, WebShell functionality is similar to the one of NoVNC client which is supported in ACS . However, NoVNC has several well-known downsides, that we aimed to overcome in WebShell design:
- Low interactivity and slow throughput of the terminal interface;
- Lack of possibility to copy/paste text from the user’s local machine;
- Missing feature to complete the session by timeout;
- Access to a virtual machine in out-of-band mode, which allows performing a number of insecure operations.
Thus, the introduction of WebShell plugin in CloudStack-UI for remote access to VM:
- Provides users with high interactivity, which is especially useful when working with information that contains large amounts of text;
- Allows copying and pasting text from the workstation;
- Enables configuration of the session completion timeout, thereby improving the security of the system;
- Prevents an access to the VM in out-of-band mode.
The second plugin, named Pulse, was designed for visualization of virtual machines performance statistics. With help of sensors that collect virtual machines performance statistics, CloudStack-UI is able to display CPU, RAM, disk IO and network traffic utilization in the form of convenient visual charts.
Project technological stack
For the interface design, we initially relied on MDL framework, that has clean styles and library of components to create a neat looking interface across different devices . With the production release of Material 2 framework we decided to switch to it, as it has better components and is optimized for Angular .
From the beginning, it was important to make the project easy deployable and independent from ACS distributive to make sure users meet no difficulties with its installation. To do this, we are relying on the most popular container platform — Docker . Thus, each CloudStack-UI version is provided as a Docker container that could be deployed on any machine with Docker.
The CloudStack-UI project was created to overcome limitations of native ACS interface and help cloud services providers to deliver a better experience to their users.
The article overviews details of the production-ready CloudStack-UI version 1.0.7, but as the project is growing with two-weeks version updates new functionality is being added and new scenarios supported. The work done within the project resolves most of the common problem use-cases identified in practice and enables ACS based cloud service providers to use the project in production environment.