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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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