TAG: lenovo


JSP to Angular

Man, don't I dislike Java!

how to angular

Top level controller is mwc, and is linked at the root <html>:

./WEB-INF/jsp/administration.jsp:5:<html ng-app="mwc">
./WEB-INF/jsp/login.jsp:6:<html ng-app="mwc">
./WEB-INF/jsp/index.jsp:6:<html ng-app="mwc" lang="en">
./WEB-INF/jsp/exception ...


IBB brain shutdown procedure

This document describes procedure to shutdown an IBB brain instance.

Shutdown procedure

  1. On RHV admin portal, shutdown all virtual machines but not the hosted-engine.

  2. Put the cluster in global maintenance mode by login any brain server, and hosted-engine --set-maintenance --mode=global.

    To verify, login in a brain node and hosted-engine ...


SPA: a cofiguration Dashboard

Project SPA Dashboard demo

Project SPA Dashboard is a weekend fun. The idea came from Lenovo Open Cloud project, in which we have developed auto deployment of a complex stack on three physical servers. Services are Red Hat software deployed on a RHHI instance. Previously we have maintained ...


Server RAID

If you are like me who dislikes any GUI and mouse clicks, CLI via a SSH session to IMM is a fun way to get things done. This one shows how to config disks into RAID.

CLI manual is here.

    storage -config vol -option [-options] -target target_id
    -remove ...


Network switch

Network switch is a gold mine. You will need (ip, username, pwd) to get to it, using Telnet(!). Your friend is pexpect, but even that gives you jinx sometimes when each switch can return you some random garbages once a while that makes session.expect("your regex pattern") to time ...



Introduce tools to create screencast.


Netbox revised

Netbox is a nice level 1 tool (for levels, see capability model). But we need more. Managing a lab or a rack is more than level 1. On top of all these, we talk about automation, which implies capabilities at least to level 4. Therefore, we used Netbox code as ...


Use RHEL server qcow2 as sandbox

The closest thing RHEL has to a cloud image is a qcow (download from here). This image has disabled root password, and disabled SSH access ← so what the heck!?

Method 1: modify image directly

Really ugly solution. Anyway. On a Ubuntu 16.04, install guestfish and libguesttools, then:

create root ...



These notes are based on Satellite 6.3. There are minor difference between 6.2 and 6.3. Grasp the concept here, and hopefully you will have a good understanding of the Satellite models and procedures.


  1. One satellite server (master server), and 1+ capsule servers.
  2. The Satellite Server is ...


Juju GUI nginx proxy

In LXD on localhost we introduced using LXD container to bootstrap a Juju controller. But how to access the Juju GUI? Launching it is easy enough with $ juju gui from juju host; accessing it from anywhere outside the host is a challenge. One way is through $ ssh -X to the ...



KVM is something new to me, and it sounds awesome. The experience I want to have is a local dev that I can copy & paste from some base image in case I forgot to take a snapshot at milestone. This way I feel comfortable to stand up a sandbox, try ...


Juju local LXD

Using Juju's LXD provider is the least-hassle way to start an experience of Juju and its charms. However, if you have done charm development for a while, you know making a one line of code change, deploying charm, then wait to see the new code got executed ← it's ...


Charm Ansible integration

Let's face it. Ansible has the mouth (and market) share these days. For our modeling purpose, we are to utilize its procedural strength to carry out actions, which provides an abstraction instead of coding in charm's Python files.

Design objectives:

  1. Design as reusable layer(s)
  2. Be compatible with ...


Charm layer-basic

Have you ever wondered what layer-basic is for? and why every charm needs to include it? In this article we will take a look at its code base to decipher this mystery.


We already know hooks are hardcoded. Juju expects certain hooks and hook sequence is always executed in ...


Juju charm Python2

Charm is based on Python 3 while RHEL/CentOS7 ships


Charm Reactive

Charm's reactive framework is the core of charm design and


Charm chained states

This charm is created to demonstrate chained states using Juju charm. Chained states is essentially mirroring a pattern of any sequential execution in a workflow. Potentially each execution block can also have conditions to set the next state, even though this type of knowledge should be exposed outside function element ...


MAAS vs. Ironic

This article is to analyze Openstack Ironic and Canonical MAAS, both are tools to turn baremetal into a pool of managed resources that are ready for consumption by upstream srervice. On the highest level, a baremetal is either managed or not-managed. Being managed requires that the manager is aware of ...


Baremetal provisioning

Everyone of us has installed an operating system to a computer at some point in life. It is easy to perceive inserting a disk or USB key to make this happen because the OS files are there. A fancier version is to boot from network using PXE boot option, which ...


Openstack Ironic

This article is an outcome of my writing a Juju-Ironic provider. The plan was to first figure out Ironic APIs that will achieve what Juju provider needs — start an instance on demand, then build those REST requests into Juju provider code. After playing with Ironic API and Openstack's Devstack ...