Skip to content
Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Boxes

Stacki enables you to create a box which is a composition of pallets and (optionally) carts.

The contents of a box is the entire set of RPMs and configuration scripts that are available to a backend host when it installs.

The default box consists of the stacki and os pallets (and no carts). The os pallet is a stripped down version of CentOS.

These two pallets are the minimum pallets required to install a backend host.

Backend hosts are assigned the default box automatically.

Different backend hosts can be assigned to different boxes which gives you a great deal of latitude when deciding what software stacks should go on which backend hosts.

A few examples of the utility of boxes:

  • Adding a different OS If you want the basic functionality Stacki provides but also have to add RHEL or Oracle or something wacky like Scientific Linux, create a new box and the stacki pallet plus the new OS pallet. Backend nodes assigned to the new box will be installed with RHEL (Or Oracle or you get the idea.)

  • Maintaining different versions of the OS: If you want CentOS 7.3 on one set of backend hosts and CentOS 7.4 on another set of backend hosts to test an upgrade. You can download the 7.4 CentOS ISOs, add them to the frontend (with stack add pallet), create a new box with the stacki and CentOS 7.4 pallets, then assign backend hosts to the new box.

  • Maintaining updates: Pallets can be created by mirroring any publicly available repo (or subscribed repo if using RHEL). Adding an updates pallet to any box will make the updated RPMs available to hosts via yum/zypper/apt-get.

  • Maintaining dev/test/production environments: Again, having created dev, test, and production boxes with the appropriate pallets, assign machines to each of those boxes. Install/reinstall the machines. When you want to promote machines to a new environment, reassign the machine's box and reinstall.

Create a new box

This example will create a new box that incorporates RHEL 7.4 instead of CentOS 7.4. Then we'll assign machines to the new box.

List pallets and boxes:

# stack list pallet
NAME   VERSION              RELEASE ARCH   OS     BOXES
os     7.4_20171128         redhat7 x86_64 redhat
stacki 5.0_20171128_b0ed4e3 redhat7 x86_64 redhat default
CentOS 7                    redhat7 x86_64 redhat default

stack list pallet shows the pallets available and stack list box shows which box contains which pallet:

[root@stacki-50 isos]# stack list box
NAME    OS     PALLETS                                              CARTS
default redhat stacki-5.0_20171128_b0ed4e3-redhat7 CentOS-7-redhat7

In the above output, the default box contains two pallets (stacki version 5.0_20171128_b0ed4e3 and CentOS version 7.4) and it contains no carts.

But we really, really want RHEL 7.4 because we like giving an 800lb gorilla money.

Add RHEL 7.4 (downloaded from your handy RHEL subscription) to the list of available pallets:

# stack add pallet rhel-server-7.4-x86_64-dvd.iso
Copying RHEL 7.4-redhat7 pallet ...

And now the output of stack list pallet shows:

# stack list pallet
NAME           VERSION              RELEASE ARCH   OS     BOXES
os             7.4_20171128         redhat7 x86_64 redhat
stacki         5.0_20171128_b0ed4e3 redhat7 x86_64 redhat default
CentOS         7                    redhat7 x86_64 redhat default
RHEL           7.4                  redhat7 x86_64 redhat

The RHEL pallet is not associated with any box.

We'll add a new box and call it rhel74:

# stack add box rhel74

(rhel74 because what happens when rhel75 comes out?)

Now stack list box shows the new box rhel74 with no pallets and no carts associated with it:

NAME    OS     PALLETS                                                CARTS
default redhat stacki-5.0_20171128_b0ed4e3-redhat7 CentOS-7-redhat7
rhel74   redhat ----------------------------------------------------------------------------------------

Let's associate the RHEL and stacki pallets with the rhel74 box:

# stack enable pallet stacki RHEL box=rhel74
Cleaning repos: CentOS-7-redhat7 stacki-5.0_20171128_b0ed4e3-redhat7
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos

(That stuff after the command is due to RedHat's loquaciousness problem, not Stacki's.)

List the pallets and see that stacki is associated with two boxes, and RHEL with only our default box.

[root@stacki50 doc]# stack list pallet
NAME           VERSION              RELEASE ARCH   OS     BOXES
os             7.4_20171128         redhat7 x86_64 redhat
stacki         5.0_20171128_b0ed4e3 redhat7 x86_64 redhat default rhel74
CentOS         7                    redhat7 x86_64 redhat default
RHEL           7.4                  redhat7 x86_64 redhat rhel74

And now stack list box shows:

# stack list box
NAME    OS     PALLETS                                              CARTS
default redhat stacki-5.0_20171128_b0ed4e3-redhat7 CentOS-7-redhat7
rhel74   redhat stacki-5.0_20171128_b0ed4e3-redhat7 RHEL-7.4-redhat7

We see that the rhel74 box contains the RHEL and stacki pallets.

Now let's assign a backend host to the rhel74 box.

First, let's look at what the backend hosts are currently set to:

# stack list host
HOST        RACK RANK APPLIANCE OS     BOX     ENVIRONMENT OSACTION INSTALLACTION STATUS COMMENT
stacki-50   0    0    frontend  redhat default ----------- default  default       up
backend-0-0 0    0    backend   redhat default ----------- default  console       up
backend-0-1 0    1    backend   redhat default ----------- default  console       up
backend-0-2 0    2    backend   redhat default ----------- default  console       up
backend-0-3 0    3    backend   redhat default ----------- default  console       up
backend-0-4 0    4    backend   redhat default ----------- default  console       up

We see all backend hosts are associated with the default box.

Let's associate backend-0-0 through backend-0-2 to the rhel74 box:

# stack set host box backend-0-[0-2] box=rhel74

Now stack list host shows backend-0-0, backend-0-1, and backend-0-2 are associated with the rhel74 box:

# stack list host
HOST        RACK RANK APPLIANCE OS     BOX     ENVIRONMENT OSACTION INSTALLACTION STATUS COMMENT
stacki-50   0    0    frontend  redhat default ----------- default  default       up
backend-0-0 0    0    backend   redhat rhel74  ----------- default  console       up
backend-0-1 0    1    backend   redhat rhel74  ----------- default  console       up
backend-0-2 0    2    backend   redhat rhel74  ----------- default  console       up
backend-0-3 0    3    backend   redhat default ----------- default  console       up
backend-0-4 0    4    backend   redhat default ----------- default  console       up

To get those nodes onto RHEL 7.4, they need to be reinstalled. Once they are, they'll be RHEL 7.4 machines not CentOS.

So do the reinstall dance:

# stack set host boot backend-0-[0-2] action=install
# stack run host backend-0-[0-2] command="reboot"

We can verify after a re-install:

# stack run host command="cat /etc/redhat-release"
HOST        OUTPUT
backend-0-0 Red Hat Enterprise Linux Server release 7.4 (Maipo)
backend-0-1 Red Hat Enterprise Linux Server release 7.4 (Maipo)
backend-0-2 Red Hat Enterprise Linux Server release 7.4 (Maipo)
backend-0-3 CentOS Linux release 7.4.1708 (Core)
backend-0-4 CentOS Linux release 7.4.1708 (Core)

You subscribed those, right?

Removing a Box

To remove a box, do the following:

Reset the backend nodes to a valid box:

# stack set host box backend-0-[0-2] box=default

Remove the box rhel74 and verify it is gone:

# stack remove box rhel74
# stack list box

Which shows that we only now have the default box defined:

# stack list box
NAME    OS     PALLETS                                              CARTS
default redhat stacki-5.0_20171128_b0ed4e3-redhat7 CentOS-7-redhat7
Clone this wiki locally