diff --git a/blog/index.md b/blog/index.md
index 47ce8a5..2f78c81 100644
--- a/blog/index.md
+++ b/blog/index.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Blog
+ - Index
+ - Documentation
+---
+
# Blog
## Purpose
Narrative posts for lessons learned, experiments, and updates.
diff --git a/blog/posts/01-22-2025-Windows-Power-Profiles-Causing-Notable-CPU-Performance-Loss.md b/blog/posts/01-22-2025-Windows-Power-Profiles-Causing-Notable-CPU-Performance-Loss.md
index c84c8fe..253872a 100644
--- a/blog/posts/01-22-2025-Windows-Power-Profiles-Causing-Notable-CPU-Performance-Loss.md
+++ b/blog/posts/01-22-2025-Windows-Power-Profiles-Causing-Notable-CPU-Performance-Loss.md
@@ -7,10 +7,11 @@ authors:
categories:
- General
tags:
- - Windows Server
- - Power Profiles
- - Virtualization
+ - Blog
+ - Hyper-V
- Veeam
+ - Windows
+ - Backup
---
# Windows Power Profiles Causing Notable CPU Performance Loss
diff --git a/blog/posts/05-16-2025-Learning-to-Leverage-Gitea-Runners.md b/blog/posts/05-16-2025-Learning-to-Leverage-Gitea-Runners.md
index 5feccf1..62b3330 100644
--- a/blog/posts/05-16-2025-Learning-to-Leverage-Gitea-Runners.md
+++ b/blog/posts/05-16-2025-Learning-to-Leverage-Gitea-Runners.md
@@ -7,11 +7,11 @@ authors:
categories:
- General
tags:
- - Infrastructure as Code
- - Gitea Act Runners
+ - Blog
+ - Containers
- Docker
- - GitOps
- - CI/CD
+ - Portainer
+ - Ansible
---
# Learning to Leverage Gitea Runners
diff --git a/blog/posts/12-15-2024-Implementing-the-Blog-Plugin.md b/blog/posts/12-15-2024-Implementing-the-Blog-Plugin.md
index b6449ec..6b3a1f5 100644
--- a/blog/posts/12-15-2024-Implementing-the-Blog-Plugin.md
+++ b/blog/posts/12-15-2024-Implementing-the-Blog-Plugin.md
@@ -8,7 +8,9 @@ categories:
- General
- Documentation
tags:
- - MKDocs
+ - Blog
+ - Rocket.Chat
+ - MkDocs
- Material MkDocs
- Documentation
---
diff --git a/blog/posts/12-15-2024-OpenStack-Frustrations.md b/blog/posts/12-15-2024-OpenStack-Frustrations.md
index 0f02942..35aae36 100644
--- a/blog/posts/12-15-2024-OpenStack-Frustrations.md
+++ b/blog/posts/12-15-2024-OpenStack-Frustrations.md
@@ -11,7 +11,10 @@ categories:
- Virtualization
- Containers
tags:
+ - Blog
- OpenStack
+ - Hyper-V
+ - Containers
- Ansible
---
diff --git a/infrastructure/hardware/cluster-node-01/disk-arrays.md b/infrastructure/hardware/cluster-node-01/disk-arrays.md
index 6e293d3..882562e 100644
--- a/infrastructure/hardware/cluster-node-01/disk-arrays.md
+++ b/infrastructure/hardware/cluster-node-01/disk-arrays.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Disk Arrays
+ - Storage
+ - Hardware
+---
+
## Purpose
This document is meant to help keep track disks and their associated serial numbers for replacement and recordkeeping purposes.
diff --git a/infrastructure/hardware/cluster-node-02/disk-arrays.md b/infrastructure/hardware/cluster-node-02/disk-arrays.md
index d229a03..1228964 100644
--- a/infrastructure/hardware/cluster-node-02/disk-arrays.md
+++ b/infrastructure/hardware/cluster-node-02/disk-arrays.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Disk Arrays
+ - Storage
+ - Hardware
+---
+
## Purpose
This document is meant to help keep track disks and their associated serial numbers for replacement and recordkeeping purposes.
diff --git a/infrastructure/hardware/cluster-node-03/disk-arrays.md b/infrastructure/hardware/cluster-node-03/disk-arrays.md
index 45cd278..4d18b8f 100644
--- a/infrastructure/hardware/cluster-node-03/disk-arrays.md
+++ b/infrastructure/hardware/cluster-node-03/disk-arrays.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Disk Arrays
+ - Storage
+ - Hardware
+---
+
## Purpose
This document is meant to help keep track disks and their associated serial numbers for replacement and recordkeeping purposes.
diff --git a/infrastructure/hardware/index.md b/infrastructure/hardware/index.md
index 93c4183..4cdc994 100644
--- a/infrastructure/hardware/index.md
+++ b/infrastructure/hardware/index.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Infrastructure
+ - Hardware
+ - Index
+ - Documentation
+---
+
# Hardware
## Purpose
Physical assets, node inventories, storage layouts, and power topology for the lab.
diff --git a/infrastructure/hardware/storage-node-01-truenas-core/disk-arrays.md b/infrastructure/hardware/storage-node-01-truenas-core/disk-arrays.md
index a886fbe..86db327 100644
--- a/infrastructure/hardware/storage-node-01-truenas-core/disk-arrays.md
+++ b/infrastructure/hardware/storage-node-01-truenas-core/disk-arrays.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - TrueNAS
+ - Disk Arrays
+ - Storage
+ - Hardware
+---
+
## Purpose
This document is meant to help keep track disks and their associated serial numbers for replacement and recordkeeping purposes.
diff --git a/infrastructure/hardware/storage-node-01-truenas-core/replacing-a-drive.md b/infrastructure/hardware/storage-node-01-truenas-core/replacing-a-drive.md
index 1d8add9..9f69412 100644
--- a/infrastructure/hardware/storage-node-01-truenas-core/replacing-a-drive.md
+++ b/infrastructure/hardware/storage-node-01-truenas-core/replacing-a-drive.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - TrueNAS
+ - Storage
+ - Hardware
+---
+
## Purpose
This document acts as a workflow to understand how to replace a drive on TrueNAS Core when it is hosted on an HPE Proliant server with HBA / IT Mode enabled. This enables you to hot-swap drives without rebooting TrueNAS Core.
diff --git a/infrastructure/hardware/storage-node-02-truenas-scale/disk-arrays.md b/infrastructure/hardware/storage-node-02-truenas-scale/disk-arrays.md
index 57d0fbf..6571699 100644
--- a/infrastructure/hardware/storage-node-02-truenas-scale/disk-arrays.md
+++ b/infrastructure/hardware/storage-node-02-truenas-scale/disk-arrays.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - TrueNAS
+ - Disk Arrays
+ - Storage
+ - Hardware
+---
+
## Purpose
This document is meant to help keep track disks and their associated serial numbers for replacement and recordkeeping purposes.
diff --git a/infrastructure/networking/controllers/unifi-controller.md b/infrastructure/networking/controllers/unifi-controller.md
index 98452ac..9eec8eb 100644
--- a/infrastructure/networking/controllers/unifi-controller.md
+++ b/infrastructure/networking/controllers/unifi-controller.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - UniFi
+ - Networking
+ - Docker
+---
+
**Purpose**: The UniFi® Controller is a wireless network management software solution from Ubiquiti Networks™. It allows you to manage multiple wireless networks using a web browser.
```yaml title="docker-compose.yml"
diff --git a/infrastructure/networking/controllers/unifi-network-server-controller.md b/infrastructure/networking/controllers/unifi-network-server-controller.md
index 297091a..8d2d9c7 100644
--- a/infrastructure/networking/controllers/unifi-network-server-controller.md
+++ b/infrastructure/networking/controllers/unifi-network-server-controller.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - UniFi
+ - Networking
+---
+
**Purpose**:
If you need to deploy Unifi Controller bare-metal into a virtual machine, you can do so with a few simple commands. You can feel free to reference the [original documentation](https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux) if additional clarity is needed.
diff --git a/infrastructure/networking/docker-networking/creating-a-macvlan-sub-interface-for-docker.md b/infrastructure/networking/docker-networking/creating-a-macvlan-sub-interface-for-docker.md
index 538459b..bd69d33 100644
--- a/infrastructure/networking/docker-networking/creating-a-macvlan-sub-interface-for-docker.md
+++ b/infrastructure/networking/docker-networking/creating-a-macvlan-sub-interface-for-docker.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Docker
+ - Macvlan
+ - Networking
+---
+
**Purpose**:
You may find that you only have one network adapter on a server / VM and need to have multiple virtual networks associated with it. For example, Home Assistant exists on the `192.168.3.0/24` network but it needs to also access devices on the `192.168.4.0/24` surveillance network. To facilitate this, we will make a MACVLAN Sub-Interface. This will make a virtual interface that is parented to the actual physical interface.
diff --git a/infrastructure/networking/docker-networking/docker-networking.md b/infrastructure/networking/docker-networking/docker-networking.md
index 2175db1..bd99122 100644
--- a/infrastructure/networking/docker-networking/docker-networking.md
+++ b/infrastructure/networking/docker-networking/docker-networking.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Docker
+ - Networking
+---
+
### Configure Docker Network
We want to use a dedicated subnet / network specifically for containers, so they don't trample over the **SERVER** and **LAN** networks. If you are unsure of the name of the network adapter, in this case `eth0`, just type `ipaddr` in the terminal to list the network interfaces to locate it.
```
diff --git a/infrastructure/networking/firewall-and-routing/sophos/configure-lan-bridging.md b/infrastructure/networking/firewall-and-routing/sophos/configure-lan-bridging.md
index 5e8bc4a..60a7fd8 100644
--- a/infrastructure/networking/firewall-and-routing/sophos/configure-lan-bridging.md
+++ b/infrastructure/networking/firewall-and-routing/sophos/configure-lan-bridging.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Sophos
+ - Firewall
+ - Routing
+ - LAN
+ - Networking
+---
+
**Purpose**: You may have a Sophos XGS appliance and need more than one interface to act as additional LAN ports. You can achieve this with bridges.
!!! info "Assumptions"
diff --git a/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/automatic-tunnel-resetting.md b/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/automatic-tunnel-resetting.md
index 5d9bf69..fcaefe2 100644
--- a/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/automatic-tunnel-resetting.md
+++ b/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/automatic-tunnel-resetting.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Sophos
+ - IPsec
+ - VPN
+ - Firewall
+ - Routing
+---
+
**Purpose**: Generally speaking, when you have site-to-site VPN tunnels, you have to ensure that the *health* of the tunnel is operating as-expected. Sometimes VPN tunnels will report that they are online and connected, but in reality, no traffic is flowing to the remote side of the tunnel. In these instances, we can create a script that pings a device on the remote end, and if it does not respond in a timely manner, the script restart the VPN tunnel automatically.
!!! note "Assumptions"
diff --git a/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/tunnel-creation.md b/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/tunnel-creation.md
index 54132b9..8e08d21 100644
--- a/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/tunnel-creation.md
+++ b/infrastructure/networking/firewall-and-routing/sophos/vpn/site-to-site-vpns/ipsec/tunnel-creation.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Sophos
+ - IPsec
+ - VPN
+ - Firewall
+ - Routing
+---
+
**Purpose**: You may have two Sophos XGS appliances (or a mixed configuration) and need to set up a site-to-site VPN tunnel between two remote locations. You can achieve this with a simple passphrase-based IPSec VPN tunnel.
!!! info "Assumptions"
diff --git a/infrastructure/networking/firewall-and-routing/sophos/vpn/ssl-vpn/configuring-remote-vpn-rdp-access.md b/infrastructure/networking/firewall-and-routing/sophos/vpn/ssl-vpn/configuring-remote-vpn-rdp-access.md
index bee4ac3..aef7d3e 100644
--- a/infrastructure/networking/firewall-and-routing/sophos/vpn/ssl-vpn/configuring-remote-vpn-rdp-access.md
+++ b/infrastructure/networking/firewall-and-routing/sophos/vpn/ssl-vpn/configuring-remote-vpn-rdp-access.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Sophos
+ - RDP
+ - SSL VPN
+ - VPN
+ - Firewall
+---
+
## Purpose
This document exists to outline the generalized process to configuring remote access in a Sophos XGS Firewall to allow a VPN user to RDP into a workstation. *Setting up Remote SSL VPN Access is not covered in this document.*
diff --git a/infrastructure/networking/index.md b/infrastructure/networking/index.md
index 43f7173..7c779c0 100644
--- a/infrastructure/networking/index.md
+++ b/infrastructure/networking/index.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Infrastructure
+ - Networking
+ - Index
+ - Documentation
+---
+
# Networking
## Purpose
Network topology, addressing, firewalling, VPN, and network service dependencies.
diff --git a/infrastructure/networking/ip-tables/172-16-16-0-sophos-network.md b/infrastructure/networking/ip-tables/172-16-16-0-sophos-network.md
index 5b660a2..cf9a88b 100644
--- a/infrastructure/networking/ip-tables/172-16-16-0-sophos-network.md
+++ b/infrastructure/networking/ip-tables/172-16-16-0-sophos-network.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Sophos
+ - iptables
+ - Networking
+---
+
### IP Addresses
Documented IP addresses of Hyper-V Failover Cluster VMs that exist behind the Sophos XG Firewall VM. All of these machines are funneled through the Sophos XG Firewall VM before they are allowed to communicate on the physical network with other devices.
diff --git a/infrastructure/networking/ip-tables/192-168-5-0-container-network.md b/infrastructure/networking/ip-tables/192-168-5-0-container-network.md
index 4b13a7a..fc5dbbd 100644
--- a/infrastructure/networking/ip-tables/192-168-5-0-container-network.md
+++ b/infrastructure/networking/ip-tables/192-168-5-0-container-network.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Containers
+ - iptables
+ - Networking
+---
+
### IP Addresses
Documented IP addresses of containers.
diff --git a/infrastructure/networking/ip-tables/homelab-server-inventory.md b/infrastructure/networking/ip-tables/homelab-server-inventory.md
index bbffa73..54cb919 100644
--- a/infrastructure/networking/ip-tables/homelab-server-inventory.md
+++ b/infrastructure/networking/ip-tables/homelab-server-inventory.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - iptables
+ - Networking
+ - Docker
+---
+
## Overview
All servers (physical and virtual) are documented within this specific page. They are written in a specific annotated manner in order to make them copy/paste ready for the Ansible AWX Operator server that interacts with devices in the homelab over `SSH` and `WinRM` protocols. This allows me to automate functions such as updates across the entire homelab declaratively versus individually.
diff --git a/infrastructure/networking/linux-networking/modifying-ip-address-of-server.md b/infrastructure/networking/linux-networking/modifying-ip-address-of-server.md
index 98712c4..a3349c1 100644
--- a/infrastructure/networking/linux-networking/modifying-ip-address-of-server.md
+++ b/infrastructure/networking/linux-networking/modifying-ip-address-of-server.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Linux
+ - Networking
+---
+
**Purpose**: This is a scaffold document outlining the high level of changing an IP address of a server in either Debian or RHEL based operating systems.
=== "Ubuntu / Debian"
diff --git a/infrastructure/networking/misc/tuya-smart-lights.md b/infrastructure/networking/misc/tuya-smart-lights.md
index 7f07099..60a246c 100644
--- a/infrastructure/networking/misc/tuya-smart-lights.md
+++ b/infrastructure/networking/misc/tuya-smart-lights.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Tuya
+ - Networking
+---
+
### pfSense DHCP Reservations for Tuya-Based Smart Devices
| **Description** | **IP Address** | **MAC Address** | **Hostname** | **Device ID** | **Local Key** |
| :--- | :--- | :--- | :--- | :--- | :--- |
diff --git a/infrastructure/networking/vpn/netbird.md b/infrastructure/networking/vpn/netbird.md
index 555dd4d..217b181 100644
--- a/infrastructure/networking/vpn/netbird.md
+++ b/infrastructure/networking/vpn/netbird.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - NetBird
+ - VPN
+ - Networking
+ - Docker
+---
+
## Purpose
Netbird is a free and open-source VPN server and client platform. The following document will illustrate how to deploy Netbird into a homelab or business environment.
diff --git a/operations/automation/ansible/awx/awx-kerberos-implementation.md b/operations/automation/ansible/awx/awx-kerberos-implementation.md
index f449450..f0232a1 100644
--- a/operations/automation/ansible/awx/awx-kerberos-implementation.md
+++ b/operations/automation/ansible/awx/awx-kerberos-implementation.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Ansible
+ - AWX
+ - Kerberos
+ - Automation
+---
+
## Kerberos Implementation
You may find that you need to be able to run playbooks on domain-joined Windows devices using Kerberos. You need to go through some extra steps to set this up after you have successfully fully deployed AWX Operator into Kubernetes.
diff --git a/operations/automation/ansible/awx/connect-awx-to-gitea.md b/operations/automation/ansible/awx/connect-awx-to-gitea.md
index cce4933..b5b4c7b 100644
--- a/operations/automation/ansible/awx/connect-awx-to-gitea.md
+++ b/operations/automation/ansible/awx/connect-awx-to-gitea.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Ansible
+ - AWX
+ - Gitea
+ - Automation
+---
+
**Purpose**: Once AWX is deployed, you will want to connect Gitea at https://git.bunny-lab.io. The reason for this is so we can pull in our playbooks, inventories, and templates automatically into AWX, making it more stateless overall and more resilient to potential failures of either AWX or the underlying Kubernetes Cluster hosting it.
## Obtain Gitea Token
diff --git a/operations/automation/ansible/awx/deployment/awx-in-minikube.md b/operations/automation/ansible/awx/deployment/awx-in-minikube.md
index 603e1bb..fcb5bcc 100644
--- a/operations/automation/ansible/awx/deployment/awx-in-minikube.md
+++ b/operations/automation/ansible/awx/deployment/awx-in-minikube.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Ansible
+ - AWX
+ - Automation
+---
+
# Deploy AWX on Minikube Cluster
Minikube Cluster based deployment of Ansible AWX. (Ansible Tower)
!!! note Prerequisites
diff --git a/operations/automation/ansible/awx/deployment/awx-operator.md b/operations/automation/ansible/awx/deployment/awx-operator.md
index 448fc09..64f16e3 100644
--- a/operations/automation/ansible/awx/deployment/awx-operator.md
+++ b/operations/automation/ansible/awx/deployment/awx-operator.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Ansible
+ - AWX
+ - Automation
+---
+
**Purpose**:
Deploying a Rancher RKE2 Cluster-based Ansible AWX Operator server. This can scale to a larger more enterprise environment if needed.
diff --git a/operations/automation/ansible/awx/deployment/upgrading-issues-past-2-10-0.md b/operations/automation/ansible/awx/deployment/upgrading-issues-past-2-10-0.md
index 0e69412..c214daa 100644
--- a/operations/automation/ansible/awx/deployment/upgrading-issues-past-2-10-0.md
+++ b/operations/automation/ansible/awx/deployment/upgrading-issues-past-2-10-0.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Ansible
+ - AWX
+ - Automation
+---
+
## Upgrading from 2.10.0 to 2.19.1+
There is a known issue with upgrading / install AWX Operator beyond version 2.10.0, because of how the PostgreSQL database upgrades from 13.0 to 15.0, and has changed permissions. The following workflow will help get past that and adjust the permissions in such a way that allows the upgrade to proceed successfully. If this is a clean installation, you can also perform this step if the fresh install of 2.19.1 is not working yet. (It wont work out of the box because of this bug). `The developers of AWX seem to just not care about this issue, and have not implemented an official fix themselves at this time).
diff --git a/operations/automation/ansible/credentials/custom-credential-types/winrm.md b/operations/automation/ansible/credentials/custom-credential-types/winrm.md
index 74b88dd..7f96c9d 100644
--- a/operations/automation/ansible/credentials/custom-credential-types/winrm.md
+++ b/operations/automation/ansible/credentials/custom-credential-types/winrm.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Ansible
+ - WinRM
+ - Automation
+---
+
# WinRM (Kerberos)
**Name**: "Kerberos WinRM"
diff --git a/operations/automation/ansible/credentials/overview.md b/operations/automation/ansible/credentials/overview.md
index 7c59c05..cb3f8f3 100644
--- a/operations/automation/ansible/credentials/overview.md
+++ b/operations/automation/ansible/credentials/overview.md
@@ -1,6 +1,10 @@
---
sidebar_position: 1
+tags:
+ - Ansible
+ - Automation
---
+
# AWX Credential Types
When interacting with devices via Ansible Playbooks, you need to provide the playbook with credentials to connect to the device with. Examples are domain credentials for Windows devices, and local sudo user credentials for Linux.
diff --git a/operations/automation/ansible/enable-winrm-on-windows-devices.md b/operations/automation/ansible/enable-winrm-on-windows-devices.md
index caf2695..06284c0 100644
--- a/operations/automation/ansible/enable-winrm-on-windows-devices.md
+++ b/operations/automation/ansible/enable-winrm-on-windows-devices.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Ansible
+ - WinRM
+ - Windows
+ - Automation
+---
+
**Purpose**:
You will need to enable secure WinRM management of the Windows devices you are running playbooks against, as compared to the Linux devices. The following powershell script needs to be ran on every Windows device you intend to run Ansible playbooks on. This script can also be useful for simply enabling / resetting WinRM configurations for Hyper-V hosts in general, just omit the Powershell script remote signing section if you dont plan on using it for Ansible.
diff --git a/operations/automation/ansible/inventories/overview.md b/operations/automation/ansible/inventories/overview.md
index 5be58ce..c4f93bb 100644
--- a/operations/automation/ansible/inventories/overview.md
+++ b/operations/automation/ansible/inventories/overview.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Ansible
+ - Automation
+---
+
# Host Inventories
When you are deploying playbooks, you target hosts that exist in "Inventories". These inventories consist of a list of hosts and their corresponding IP addresses, as well as any host-specific variables that may be necessary to declare to run the playbook. You can see an example inventory file below.
diff --git a/operations/automation/ansible/playbooks/playbooks.md b/operations/automation/ansible/playbooks/playbooks.md
index 2c01c4e..c15c7f9 100644
--- a/operations/automation/ansible/playbooks/playbooks.md
+++ b/operations/automation/ansible/playbooks/playbooks.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Ansible
+ - Automation
+---
+
!!! warning "DOCUMENT UNDER CONSTRUCTION"
This document is a "scaffold" document. It is missing significant portions of several sections and should not be read with any scrutiny until it is more feature-complete down-the-road. Come back later and I should have added more to this document hopefully by then.
diff --git a/operations/automation/ansible/projects/overview.md b/operations/automation/ansible/projects/overview.md
index 0688b55..81aa841 100644
--- a/operations/automation/ansible/projects/overview.md
+++ b/operations/automation/ansible/projects/overview.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Ansible
+ - Automation
+---
+
# AWX Projects
When you want to run playbooks on host devices in your inventory files, you need to host the playbooks in a "Project". Projects can be as simple as a connection to Gitea/Github to store playbooks in a repository.
diff --git a/operations/automation/ansible/templates/overview.md b/operations/automation/ansible/templates/overview.md
index f56f1cb..4407db9 100644
--- a/operations/automation/ansible/templates/overview.md
+++ b/operations/automation/ansible/templates/overview.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Ansible
+ - Automation
+---
+
# Templates
Templates are basically pre-constructed groups of devices, playbooks, and credentials that perform a specific kind of task against a predefined group of hosts or device inventory.
diff --git a/operations/automation/index.md b/operations/automation/index.md
index d6d9728..514f4ad 100644
--- a/operations/automation/index.md
+++ b/operations/automation/index.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Operations
+ - Automation
+ - Index
+ - Documentation
+---
+
# Automation
## Purpose
Infrastructure automation, orchestration, and workflow tooling.
diff --git a/operations/automation/puppet/deployment/puppet-bolt.md b/operations/automation/puppet/deployment/puppet-bolt.md
index c126b79..c4f8f2b 100644
--- a/operations/automation/puppet/deployment/puppet-bolt.md
+++ b/operations/automation/puppet/deployment/puppet-bolt.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Puppet
+ - Automation
+---
+
**Purpose**: Puppet Bolt can be leveraged in an Ansible-esque manner to connect to and enroll devices such as Windows Servers, Linux Servers, and various workstations. To this end, it could be used to run ad-hoc tasks or enroll devices into a centralized Puppet server. (e.g. `LAB-PUPPET-01.bunny-lab.io`)
!!! note "Assumptions"
diff --git a/operations/automation/puppet/deployment/puppet.md b/operations/automation/puppet/deployment/puppet.md
index b120a3c..e216fcd 100644
--- a/operations/automation/puppet/deployment/puppet.md
+++ b/operations/automation/puppet/deployment/puppet.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Puppet
+ - Automation
+---
+
**Purpose**:
Puppet is another declarative configuration management tool that excels in system configuration and enforcement. Like Ansible, it's designed to maintain the desired state of a system's configuration but uses a client-server (master-agent) architecture by default.
diff --git a/operations/backups-and-dr/veeam-backup-replication/backup-agent-takeover.md b/operations/backups-and-dr/veeam-backup-replication/backup-agent-takeover.md
index 7cf64bc..75b473c 100644
--- a/operations/backups-and-dr/veeam-backup-replication/backup-agent-takeover.md
+++ b/operations/backups-and-dr/veeam-backup-replication/backup-agent-takeover.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
**Purpose**: You may find that you need to adopt a device that was onboarded by a different Veeam Backup & Replication server. Maybe the old server died, or maybe you are restructuring your backup infrastructure, and want a new server taking over the backup responsibilities for the device.
If this happens, Veeam will complain that the device is managed by a different server. To circumvent this, perform the following changes in the Windows Registry based on the version of Veeam Backup & Replication you are currently using, then try to Update the Agent / Backup the agent again, and it should be successful after the registry changes are made.
diff --git a/operations/backups-and-dr/veeam-backup-replication/core-veeam-concepts.md b/operations/backups-and-dr/veeam-backup-replication/core-veeam-concepts.md
index f9f0731..ad46d92 100644
--- a/operations/backups-and-dr/veeam-backup-replication/core-veeam-concepts.md
+++ b/operations/backups-and-dr/veeam-backup-replication/core-veeam-concepts.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
**Purpose**:
The purpose of this document is to explain the core concepts / terminology of things seen in Veeam Backup & Replication from a relatively high-level. It's more of a quick-reference guide than a formal education.
diff --git a/operations/backups-and-dr/veeam-backup-replication/manually-pruning-backups.md b/operations/backups-and-dr/veeam-backup-replication/manually-pruning-backups.md
index 3e25f94..0b40643 100644
--- a/operations/backups-and-dr/veeam-backup-replication/manually-pruning-backups.md
+++ b/operations/backups-and-dr/veeam-backup-replication/manually-pruning-backups.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
**Purpose**:
There may come a time that you need to free up space in a Veeam Backup & Replication backup repository because you are running out of space. In these cases, you need to manually trim the older backups in a specific way to ensure this is non-destructive.
diff --git a/operations/backups-and-dr/veeam-backup-replication/migrating-vms-to-proxmoxve.md b/operations/backups-and-dr/veeam-backup-replication/migrating-vms-to-proxmoxve.md
index b2c4f79..dd7157c 100644
--- a/operations/backups-and-dr/veeam-backup-replication/migrating-vms-to-proxmoxve.md
+++ b/operations/backups-and-dr/veeam-backup-replication/migrating-vms-to-proxmoxve.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Proxmox
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
**Purpose**:
When you migrate virtual machines from Hyper-V (and possibly other platforms) to ProxmoxVE, you may run into several issues, from the disk formats being in `.raw` format instead of `.qcow2`, among other things. One thing in particular, which is the reason for this document, is that if you migrate Rocky Linux from Hyper-V into ProxmoxVE using Veeam Backup & Replication, it will break the storage system so badly that the operating system will not boot.
diff --git a/operations/backups-and-dr/veeam-backup-replication/migrating-vspc-backup-repositories.md b/operations/backups-and-dr/veeam-backup-replication/migrating-vspc-backup-repositories.md
index a5ee5f7..917f198 100644
--- a/operations/backups-and-dr/veeam-backup-replication/migrating-vspc-backup-repositories.md
+++ b/operations/backups-and-dr/veeam-backup-replication/migrating-vspc-backup-repositories.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
## Purpose
If you find that you need to migrate cloud backups that are being sent to a server running the Veeam VSCP due to issues like exhausted storage space on existing repositories.
diff --git a/operations/backups-and-dr/veeam-backup-replication/retention-best-practices.md b/operations/backups-and-dr/veeam-backup-replication/retention-best-practices.md
index 0678631..8d285f8 100644
--- a/operations/backups-and-dr/veeam-backup-replication/retention-best-practices.md
+++ b/operations/backups-and-dr/veeam-backup-replication/retention-best-practices.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
**Purpose**:
This is meant as a high-level generally-speaking best practice retention policy in most use-cases. This document will generally be pretty bare-bones, but the general idea is the following advanced GFS retention period is generally configured on backup copy jobs, specifically ones that have off-site backups, but can also be used for local backup repositories.
diff --git a/operations/backups-and-dr/veeam-backup-replication/troubleshooting/failed-to-validate-certificates-of-some-gateways.md b/operations/backups-and-dr/veeam-backup-replication/troubleshooting/failed-to-validate-certificates-of-some-gateways.md
index 897988a..40071db 100644
--- a/operations/backups-and-dr/veeam-backup-replication/troubleshooting/failed-to-validate-certificates-of-some-gateways.md
+++ b/operations/backups-and-dr/veeam-backup-replication/troubleshooting/failed-to-validate-certificates-of-some-gateways.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Veeam
+ - Backup
+ - Disaster Recovery
+---
+
### Symptoms
When you try to run a backup to a remote backup server, the backup job fails and gives the following error:
diff --git a/operations/foundations/documentation-styling.md b/operations/foundations/documentation-styling.md
index 535c9d3..a81d5b2 100644
--- a/operations/foundations/documentation-styling.md
+++ b/operations/foundations/documentation-styling.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Documentation
+ - Markdown
+ - Style Guide
+---
+
## Purpose
This document defines the **authoritative documentation style contract** used throughout the Bunny Lab homelab documentation.
diff --git a/operations/foundations/index.md b/operations/foundations/index.md
index 6c8a80f..5c5a108 100644
--- a/operations/foundations/index.md
+++ b/operations/foundations/index.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Operations
+ - Index
+ - Documentation
+---
+
# Foundations
## Purpose
Defines the baseline documentation standards, shared references, and structural conventions used everywhere else in this knowledgebase.
diff --git a/operations/foundations/templates/document-template.md b/operations/foundations/templates/document-template.md
index abaa75c..d3c3292 100644
--- a/operations/foundations/templates/document-template.md
+++ b/operations/foundations/templates/document-template.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Documentation
+ - Templates
+ - Markdown
+---
+
**Purpose**: PLACEHOLDER
## Docker Configuration
diff --git a/operations/hardware-management/ilo/generic-ilo-advanced-license-keys.md b/operations/hardware-management/ilo/generic-ilo-advanced-license-keys.md
index 63cf4f6..25f6825 100644
--- a/operations/hardware-management/ilo/generic-ilo-advanced-license-keys.md
+++ b/operations/hardware-management/ilo/generic-ilo-advanced-license-keys.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - iLO
+ - Hardware
+ - Licensing
+---
+
!!! info "Assumptions of Usage"
It should go without saying, using one of these keys does not entitle you to support by Hewlett-Packard Enterprise. These are meant for homelab environments where licensing / auditing does not matter.
diff --git a/operations/index.md b/operations/index.md
index 421e8f2..83ac691 100644
--- a/operations/index.md
+++ b/operations/index.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Operations
+ - Index
+ - Documentation
+---
+
# Operations
## Purpose
Runbooks for maintenance, troubleshooting, backups, and day-2 operations.
diff --git a/operations/linux/expand-iscsi-based-zfs-filesystem.md b/operations/linux/expand-iscsi-based-zfs-filesystem.md
index 0f645c6..0d0dd91 100644
--- a/operations/linux/expand-iscsi-based-zfs-filesystem.md
+++ b/operations/linux/expand-iscsi-based-zfs-filesystem.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - ZFS
+ - iSCSI
+ - Linux
+ - Filesystems
+---
+
**Purpose**:
The purpose of this workflow is to illustrate the process of expanding storage for a Linux server that uses an iSCSI-based ZFS storage. We want the VM to have more storage space, so this document will go over the steps to expand that usable space.
diff --git a/operations/linux/expanding-linux-filesystems.md b/operations/linux/expanding-linux-filesystems.md
index 68b7f9c..f39034c 100644
--- a/operations/linux/expanding-linux-filesystems.md
+++ b/operations/linux/expanding-linux-filesystems.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Linux
+ - Filesystems
+---
+
**Purpose**:
The purpose of this workflow is to illustrate the process of expanding storage for a RHEL-based Linux server acting as a GuestVM. We want the VM to have more storage space, so this document will go over the steps to expand that usable space.
diff --git a/operations/linux/fedora-workstation/full-setup.md b/operations/linux/fedora-workstation/full-setup.md
index 6a2681a..c867c6c 100644
--- a/operations/linux/fedora-workstation/full-setup.md
+++ b/operations/linux/fedora-workstation/full-setup.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Fedora
+ - Linux
+ - Workstation
+---
+
**Purpose**:
This document serves as a general guideline for my workstation deployment process when working with Fedora Workstation 41 and up. This document will constantly evolve over time based on my needs.
diff --git a/operations/linux/fedora-workstation/install-de-into-fedora-server.md b/operations/linux/fedora-workstation/install-de-into-fedora-server.md
index 78016c7..fd280c1 100644
--- a/operations/linux/fedora-workstation/install-de-into-fedora-server.md
+++ b/operations/linux/fedora-workstation/install-de-into-fedora-server.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Fedora
+ - Linux
+ - Desktop Environment
+ - Workstation
+---
+
## Purpose
You may find that you need to install an XFCE desktop environment or something into Fedora Server, if this is the case, for installing something like Rustdesk remote access, you can follow the steps below.
diff --git a/operations/linux/fedora-workstation/install-flatpak-apps.md b/operations/linux/fedora-workstation/install-flatpak-apps.md
index ee0a926..6976915 100644
--- a/operations/linux/fedora-workstation/install-flatpak-apps.md
+++ b/operations/linux/fedora-workstation/install-flatpak-apps.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Fedora
+ - Linux
+ - Flatpak
+ - Workstation
+---
+
## Purpose
You may need to install flatpak packages like Signal in your workstation environment. If you need to do this, you only need to run a few commands.
diff --git a/operations/linux/fedora-workstation/upgrading-versions.md b/operations/linux/fedora-workstation/upgrading-versions.md
index 0ab2c62..7f3a166 100644
--- a/operations/linux/fedora-workstation/upgrading-versions.md
+++ b/operations/linux/fedora-workstation/upgrading-versions.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Fedora
+ - Linux
+ - Workstation
+---
+
**Purpose**:
If you want to upgrade Fedora Workstation to a new version (e.g. 41 --> 42) you can run the following commands to do so. The overall process is fairly straightforward and requires a reboot.
diff --git a/operations/power-and-ups/apc-cell-wiring-diagram.md b/operations/power-and-ups/apc-cell-wiring-diagram.md
index ab73243..50cc2d0 100644
--- a/operations/power-and-ups/apc-cell-wiring-diagram.md
+++ b/operations/power-and-ups/apc-cell-wiring-diagram.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - UPS
+ - APC
+ - Power
+---
+
**Purpose**: When an APC battery backup's battery dies, you can manually replace the cells and 'refurbish' the battery. The following diagram is how you rewire the cells.
!!! warning "Work in Progress"
diff --git a/operations/power-and-ups/battery-backup-power-distribution.md b/operations/power-and-ups/battery-backup-power-distribution.md
index 14d01dc..8b4cefb 100644
--- a/operations/power-and-ups/battery-backup-power-distribution.md
+++ b/operations/power-and-ups/battery-backup-power-distribution.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - UPS
+ - Backup
+ - Power
+---
+
| **Battery Backup** | **Status** | **Connected Device(s)** | **Estimated Runtime** | **Shutdown Threshold** | **UPS Web Management** |
| :--- | :--- | :--- | :--- | :--- | :---: |
| Outer-Left `#1` | /uptimes/7d/badge.svg) | - VIRT-NODE-01
- 10-Port 10GbE Network Switch
- pfSense Firewall | 10 Minutes | 3 Minutes Remaining | [:fontawesome-solid-car-battery: Manage](http://192.168.3.4:3052){ .md-button } |
diff --git a/operations/reference/bash/configure-ssh-key-authentication.md b/operations/reference/bash/configure-ssh-key-authentication.md
index 797f6d7..23b6d21 100644
--- a/operations/reference/bash/configure-ssh-key-authentication.md
+++ b/operations/reference/bash/configure-ssh-key-authentication.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - SSH
+ - Bash
+ - Authentication
+ - Scripting
+ - Linux
+---
+
*Purpose*: Sometimes you need two linux computers to be able to talk to eachother without requiring a password. Passwordless SSH can be achieved by running the following commands:
!!! note "Non-Root Key Storage Considerations"
diff --git a/operations/reference/bash/fix-displaylink-issues-on-linux.md b/operations/reference/bash/fix-displaylink-issues-on-linux.md
index 7cec9bf..757eb82 100644
--- a/operations/reference/bash/fix-displaylink-issues-on-linux.md
+++ b/operations/reference/bash/fix-displaylink-issues-on-linux.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Linux
+ - Bash
+ - Scripting
+---
+
``` sh
xrandr --auto
xrandr --setprovideroutputsource 4 0
diff --git a/operations/reference/bash/git-repo-updater.md b/operations/reference/bash/git-repo-updater.md
index 84fd860..c39e313 100644
--- a/operations/reference/bash/git-repo-updater.md
+++ b/operations/reference/bash/git-repo-updater.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Bash
+ - Scripting
+ - Linux
+---
+
# Git Repo Updater (Script)
## Purpose
Standalone `repo_watcher.sh` script used by the Git Repo Updater container. This script clones or pulls one or more repositories and rsyncs them into destination paths.
diff --git a/operations/reference/bash/install-qemu-guest-agent.md b/operations/reference/bash/install-qemu-guest-agent.md
index 96aa220..2ecc3d6 100644
--- a/operations/reference/bash/install-qemu-guest-agent.md
+++ b/operations/reference/bash/install-qemu-guest-agent.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Bash
+ - QEMU
+ - Scripting
+ - Linux
+---
+
**Purpose**:
You may need to install the QEMU guest agent on linux VMs manually, while Windows-based devices work out-of-the-box after installing the VirtIO guest tools installer.
diff --git a/operations/reference/bash/install-xrdp.md b/operations/reference/bash/install-xrdp.md
index 60c82cb..801e315 100644
--- a/operations/reference/bash/install-xrdp.md
+++ b/operations/reference/bash/install-xrdp.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - XRDP
+ - Bash
+ - Scripting
+ - Linux
+---
+
**Purpose**:
If you need to set up RDP access to a Linux environment, you will want to install XRDP. Once it is installed, you can leverage other tools such as Apache Guacamole to remotely connect to it.
diff --git a/operations/reference/bash/mdadm-grow-array-size.md b/operations/reference/bash/mdadm-grow-array-size.md
index 31a2b2c..9e277c2 100644
--- a/operations/reference/bash/mdadm-grow-array-size.md
+++ b/operations/reference/bash/mdadm-grow-array-size.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - RAID
+ - Bash
+ - Scripting
+ - Linux
+---
+
https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04
``` sh
sudo mdadm --grow /dev/md0 -l 5
diff --git a/operations/reference/bash/open-port-checker.md b/operations/reference/bash/open-port-checker.md
index 33a1327..25b2012 100644
--- a/operations/reference/bash/open-port-checker.md
+++ b/operations/reference/bash/open-port-checker.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Bash
+ - Ports
+ - Scripting
+ - Linux
+---
+
**Purpose**:
If you want to check if a certain TCP port is open on a server.
diff --git a/operations/reference/bash/proxmoxve/deeplab-rollback-script.md b/operations/reference/bash/proxmoxve/deeplab-rollback-script.md
index c356a47..c7e3a78 100644
--- a/operations/reference/bash/proxmoxve/deeplab-rollback-script.md
+++ b/operations/reference/bash/proxmoxve/deeplab-rollback-script.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Proxmox
+ - Bash
+ - Scripting
+ - Linux
+---
+
## Purpose
This script is ran via cronjob on `cluster-node-02` at midnight to rollback the deeplab environment automatically to a previous snapshot nightly.
diff --git a/operations/reference/bash/time-adjustment.md b/operations/reference/bash/time-adjustment.md
index 1e4a75d..0049d57 100644
--- a/operations/reference/bash/time-adjustment.md
+++ b/operations/reference/bash/time-adjustment.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Bash
+ - Time Sync
+ - Scripting
+ - Linux
+---
+
The commands outlined in this short document are meant to be a quick-reference for setting the timezone and date/time of a Linux-based server.
### Set Timezone:
diff --git a/operations/reference/bash/transfer-docker-containers.md b/operations/reference/bash/transfer-docker-containers.md
index 0100fe1..2c1c1a6 100644
--- a/operations/reference/bash/transfer-docker-containers.md
+++ b/operations/reference/bash/transfer-docker-containers.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Containers
+ - Docker
+ - Bash
+ - Scripting
+ - Linux
+---
+
**Purpose**:
If you find that you need to migrate a container, along with any supporting files, permissions, etc from an old server to a new server, rsync helps make this as painless as possible.
Be sure to perform the following steps to make sure that you can copy the container's files.
diff --git a/operations/reference/bash/transfer-files-with-netcat.md b/operations/reference/bash/transfer-files-with-netcat.md
index b089601..18e1fa8 100644
--- a/operations/reference/bash/transfer-files-with-netcat.md
+++ b/operations/reference/bash/transfer-files-with-netcat.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Bash
+ - Netcat
+ - File Transfer
+ - Scripting
+ - Linux
+---
+
**Purpose**: You may find that you need to transfer a file, such as a public SSH key, or some other kind of file between two devices. In this scenario, we assume both devices have the `netcat` command available to them. By putting a network listener on the device recieving the file, then sending the file to that device's IP and port, you can successfully transfer data between computers without needing to set up SSH, FTP, or anything else to establish initial trust between the devices. [Original Reference Material](https://www.youtube.com/shorts/1j17UBGqSog).
!!! warning
diff --git a/operations/reference/batch/blue-iris/server-watchdog.md b/operations/reference/batch/blue-iris/server-watchdog.md
index 7d26444..bbee481 100644
--- a/operations/reference/batch/blue-iris/server-watchdog.md
+++ b/operations/reference/batch/blue-iris/server-watchdog.md
@@ -1,3 +1,12 @@
+---
+tags:
+ - Blue Iris
+ - Batch
+ - Monitoring
+ - Scripting
+ - Windows
+---
+
``` batch
@echo off
diff --git a/operations/reference/batch/robocopy.md b/operations/reference/batch/robocopy.md
index 65094a2..f6d75de 100644
--- a/operations/reference/batch/robocopy.md
+++ b/operations/reference/batch/robocopy.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Robocopy
+ - Batch
+ - Scripting
+ - Windows
+---
+
Robocopy is a useful tool that can be leveraged to copy files and folders from one location to another (e.g. Over the network to another server) without losing file and folder ACLs (permissions / ownership data).
!!! warning "Run as Domain Admin"
diff --git a/operations/reference/index.md b/operations/reference/index.md
index 4823ae5..d26fe7b 100644
--- a/operations/reference/index.md
+++ b/operations/reference/index.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Operations
+ - Reference
+ - Index
+ - Documentation
+---
+
# Reference
## Purpose
Quick-use scripts and snippets for day-to-day operations.
diff --git a/operations/reference/powershell/azure/check-email-aliases.md b/operations/reference/powershell/azure/check-email-aliases.md
index fd55035..02630ff 100644
--- a/operations/reference/powershell/azure/check-email-aliases.md
+++ b/operations/reference/powershell/azure/check-email-aliases.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - PowerShell
+ - Email
+ - Scripting
+---
+
!!! info "Prerequesite: [Connect to Azure AD](./connect-to-azure-ad.md)"
The uppercase `SMTP` address is the primary address, while lowercase `smtp` are aliases. You can find the value in active directory in **"User > Attribute Editor > proxyAddresses"**.
diff --git a/operations/reference/powershell/azure/connect-to-azure-ad.md b/operations/reference/powershell/azure/connect-to-azure-ad.md
index 3ddb598..9752b08 100644
--- a/operations/reference/powershell/azure/connect-to-azure-ad.md
+++ b/operations/reference/powershell/azure/connect-to-azure-ad.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**: Sometimes you will need to connect to Azure AD via powershell in order to perform troubleshooting / automation.
## Update Nuget Package Manager
diff --git a/operations/reference/powershell/exchange-online/connect-to-exchange-online.md b/operations/reference/powershell/exchange-online/connect-to-exchange-online.md
index 2aa5bf2..a5cb580 100644
--- a/operations/reference/powershell/exchange-online/connect-to-exchange-online.md
+++ b/operations/reference/powershell/exchange-online/connect-to-exchange-online.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Exchange Online
+ - PowerShell
+ - Scripting
+---
+
**Purpose**: Sometimes you will need to connect to Office365 via powershell in order to perform troubleshooting / automation that either is too complex to do via the website, or is not exposed / possible to do via the website.
## Update Nuget Package Manager
diff --git a/operations/reference/powershell/general-purpose/directory-walker.md b/operations/reference/powershell/general-purpose/directory-walker.md
index e50d830..0a12e4c 100644
--- a/operations/reference/powershell/general-purpose/directory-walker.md
+++ b/operations/reference/powershell/general-purpose/directory-walker.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**:
Sometimes you just need a basic script that outputs a pretty directory and file tree. This script offers files and folders to ignore, and outputs a fancy directory tree.
diff --git a/operations/reference/powershell/general-purpose/dns-hierarchy-correction.md b/operations/reference/powershell/general-purpose/dns-hierarchy-correction.md
index b288a1a..dbb72cd 100644
--- a/operations/reference/powershell/general-purpose/dns-hierarchy-correction.md
+++ b/operations/reference/powershell/general-purpose/dns-hierarchy-correction.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - DNS
+ - PowerShell
+ - Scripting
+---
+
## Purpose
When it comes to best-practices with Windows-based DNS servers, you never want to have `127.0.0.1` or the IP of the server itself as the primary DNS server, you want to have a *different* DNS server as primary, and `127.0.0.1` as the secondary or tertiary DNS server instead.
diff --git a/operations/reference/powershell/general-purpose/file-finder.md b/operations/reference/powershell/general-purpose/file-finder.md
index 4fb1db6..77d5b1f 100644
--- a/operations/reference/powershell/general-purpose/file-finder.md
+++ b/operations/reference/powershell/general-purpose/file-finder.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - PowerShell
+ - File Management
+ - Scripting
+---
+
**Purpose**:
Locate specific files, and copy them with a renamed datestamp appended to a specific directory.
diff --git a/operations/reference/powershell/general-purpose/fix-corrupted-windows-updates.md b/operations/reference/powershell/general-purpose/fix-corrupted-windows-updates.md
index 6457878..ecd451a 100644
--- a/operations/reference/powershell/general-purpose/fix-corrupted-windows-updates.md
+++ b/operations/reference/powershell/general-purpose/fix-corrupted-windows-updates.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Windows
+ - PowerShell
+ - Scripting
+---
+
## Purpose
Sometimes when you try to run Windows Updates, you may run into issues where updates just fail to install for seemingly nebulous reasons. You can run the following commands (in order) to try to resolve the issue.
diff --git a/operations/reference/powershell/general-purpose/force-gpupdate-domain-wide.md b/operations/reference/powershell/general-purpose/force-gpupdate-domain-wide.md
index 3ad5892..be3591d 100644
--- a/operations/reference/powershell/general-purpose/force-gpupdate-domain-wide.md
+++ b/operations/reference/powershell/general-purpose/force-gpupdate-domain-wide.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Group Policy
+ - PowerShell
+ - Scripting
+---
+
``` powershell
$computers = Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=bunny-lab,DC=io"
$computers | ForEach-Object -Process {Invoke-GPUpdate -Computer $_.name -RandomDelayInMinutes 0 -Force}
diff --git a/operations/reference/powershell/general-purpose/inactive-user-profile-data-cleanup.md b/operations/reference/powershell/general-purpose/inactive-user-profile-data-cleanup.md
index 11d5fb1..29916cc 100644
--- a/operations/reference/powershell/general-purpose/inactive-user-profile-data-cleanup.md
+++ b/operations/reference/powershell/general-purpose/inactive-user-profile-data-cleanup.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
## Purpose
This script is designed to iterate over every computer device within an Active Directory Domain. It then reaches out to those devices over the network and iterates upon every local user profile on those devices, and using CIM, determines which profiles have not been logged into in X number of days. If executed in a non-dry-run nature, it will then delete those profiles (*this does not delete local or domain users, it just cleans up their local profile data on the workstation*).
diff --git a/operations/reference/powershell/general-purpose/rclone.md b/operations/reference/powershell/general-purpose/rclone.md
index 7955137..419e0bc 100644
--- a/operations/reference/powershell/general-purpose/rclone.md
+++ b/operations/reference/powershell/general-purpose/rclone.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Rclone
+ - PowerShell
+ - Scripting
+---
+
Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces. Over 70 cloud storage products support rclone including S3 object stores, business & consumer file storage services, as well as standard transfer protocols.
!!! warning "Be Mindful of Sync Type"
diff --git a/operations/reference/powershell/general-purpose/restart-service-domain-wide.md b/operations/reference/powershell/general-purpose/restart-service-domain-wide.md
index 66c74ab..ee498bd 100644
--- a/operations/reference/powershell/general-purpose/restart-service-domain-wide.md
+++ b/operations/reference/powershell/general-purpose/restart-service-domain-wide.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**:
Sometimes you need to restart a service across every computer in an Active Directory Domain. This powershell script will restart a specific service by name domain-wide. Each device will be processed in a serialized nature, one-by-one.
diff --git a/operations/reference/powershell/general-purpose/windows-11-upgrade-via-unc-path.md b/operations/reference/powershell/general-purpose/windows-11-upgrade-via-unc-path.md
index 9e37fe7..8f8b49b 100644
--- a/operations/reference/powershell/general-purpose/windows-11-upgrade-via-unc-path.md
+++ b/operations/reference/powershell/general-purpose/windows-11-upgrade-via-unc-path.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Windows 11
+ - Windows
+ - PowerShell
+ - Scripting
+---
+
**Purpose**:
You may need to upgrade a device to Windows 11 using an ISO stored on a UNC Network Share, the script below handles that.
diff --git a/operations/reference/powershell/hyper-v/collapse-differencing-disk-chains.md b/operations/reference/powershell/hyper-v/collapse-differencing-disk-chains.md
index 68aa0b6..48b38cf 100644
--- a/operations/reference/powershell/hyper-v/collapse-differencing-disk-chains.md
+++ b/operations/reference/powershell/hyper-v/collapse-differencing-disk-chains.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
## Purpose
Sometimes things go awry with backup servers and Hyper-V and a bunch of extra `.avhdx` virtual differencing disks are created, taking up a ton of space. This can be problematic because if you run out of space, the virtual machines running on that underlying storage will stop working. Sometimes this can involve dozens or even hundreds of differencing disks in rare cases that need to be manually merged or "collapsed" down to reclaim the lost space.
diff --git a/operations/reference/powershell/hyper-v/delete-locked-vhdx-file.md b/operations/reference/powershell/hyper-v/delete-locked-vhdx-file.md
index 3d8732e..0eca5e1 100644
--- a/operations/reference/powershell/hyper-v/delete-locked-vhdx-file.md
+++ b/operations/reference/powershell/hyper-v/delete-locked-vhdx-file.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**:
You may find that you cannot delete a VHDX file for a virtual machine you removed from Hyper-V and/or Hyper-V Failover Cluster, and either cannot afford to, or do not want to reboot your virtualization host(s) to unlock the file locked by `SYSTEM`.
diff --git a/operations/reference/powershell/hyper-v/failover-cluster/force-reboot-remote-cluster-node.md b/operations/reference/powershell/hyper-v/failover-cluster/force-reboot-remote-cluster-node.md
index 4ca1615..e0788c8 100644
--- a/operations/reference/powershell/hyper-v/failover-cluster/force-reboot-remote-cluster-node.md
+++ b/operations/reference/powershell/hyper-v/failover-cluster/force-reboot-remote-cluster-node.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**: Sometimes a Hyper-V Failover Cluster node does not want to shut down, or is having issues preventing you from migrating VMs to another node in the cluster, etc. In these situations, you can run this script to force a cluster node to reboot itself.
!!! warning "Run from a Different Server"
diff --git a/operations/reference/powershell/hyper-v/failover-cluster/replication-bumper.md b/operations/reference/powershell/hyper-v/failover-cluster/replication-bumper.md
index 4a78a71..2e75e7d 100644
--- a/operations/reference/powershell/hyper-v/failover-cluster/replication-bumper.md
+++ b/operations/reference/powershell/hyper-v/failover-cluster/replication-bumper.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PowerShell
+ - Scripting
+---
+
**Purpose**:
This script *bumps* any replication that has entered a paused state due to a replication error. The script will record failed attempts at restarting the replication. The logs will rotate out every 5-days.
diff --git a/operations/reference/powershell/minecraft-server/update-script.md b/operations/reference/powershell/minecraft-server/update-script.md
index d7c0668..99f9569 100644
--- a/operations/reference/powershell/minecraft-server/update-script.md
+++ b/operations/reference/powershell/minecraft-server/update-script.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Minecraft
+ - PowerShell
+ - Scripting
+---
+
**Purpose**: This script was purpose-built for the homelab Minecraft servers in my homelab. It may need to be ported based on your own needs.
```powershell
diff --git a/operations/reference/powershell/nextcloud/upload-data-to-nextcloud-share.md b/operations/reference/powershell/nextcloud/upload-data-to-nextcloud-share.md
index b027fe9..4f2b15b 100644
--- a/operations/reference/powershell/nextcloud/upload-data-to-nextcloud-share.md
+++ b/operations/reference/powershell/nextcloud/upload-data-to-nextcloud-share.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Nextcloud
+ - PowerShell
+ - Scripting
+---
+
**Purpose**: In some unique cases, you want to be able to either perform backups of data or exfiltrate data to Nextcloud from a local device via the use of a script. Doing such a thing with Nextcloud as the destination is not very documented, but you can achieve that result by running a script like what is seen below:
## Windows
diff --git a/operations/reference/powershell/reporting/get-password-expiration.md b/operations/reference/powershell/reporting/get-password-expiration.md
index b7c53ce..0ba2b43 100644
--- a/operations/reference/powershell/reporting/get-password-expiration.md
+++ b/operations/reference/powershell/reporting/get-password-expiration.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - PowerShell
+ - Reporting
+ - Scripting
+---
+
**Purpose**:
Sometimes you need a report of every user in a domain, and if/when their passwords will expire. This one-liner command will help automate that reporting.
diff --git a/operations/reference/powershell/reporting/inactive-computers.md b/operations/reference/powershell/reporting/inactive-computers.md
index 97495af..69bf816 100644
--- a/operations/reference/powershell/reporting/inactive-computers.md
+++ b/operations/reference/powershell/reporting/inactive-computers.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - PowerShell
+ - Reporting
+ - Scripting
+---
+
``` powershell
$DaysInactive = 30
$time = (Get-Date).Adddays(-($DaysInactive))
diff --git a/operations/reference/powershell/reporting/inactive-users.md b/operations/reference/powershell/reporting/inactive-users.md
index d7f07ed..37ae35b 100644
--- a/operations/reference/powershell/reporting/inactive-users.md
+++ b/operations/reference/powershell/reporting/inactive-users.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - PowerShell
+ - Reporting
+ - Scripting
+---
+
``` powershell
InactiveDays = 30
$Days = (Get-Date).Adddays(-($InactiveDays))
diff --git a/operations/reference/powershell/smb/detailed-permission-report-all-shares.md b/operations/reference/powershell/smb/detailed-permission-report-all-shares.md
index e05b91a..4f0523e 100644
--- a/operations/reference/powershell/smb/detailed-permission-report-all-shares.md
+++ b/operations/reference/powershell/smb/detailed-permission-report-all-shares.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - SMB
+ - PowerShell
+ - Permissions
+ - Scripting
+---
+
**Purpose**:
This script will iterate over all network shares hosted by the computer it is running on, and will give *recursive* permissions to all folders, subfolders, and files, including hidden ones. It is very I/O intensive given it iterates recursively on every file/folder being shared.
diff --git a/operations/reference/powershell/smb/top-level-permission-report-all-shares.md b/operations/reference/powershell/smb/top-level-permission-report-all-shares.md
index 235df04..ced1dbd 100644
--- a/operations/reference/powershell/smb/top-level-permission-report-all-shares.md
+++ b/operations/reference/powershell/smb/top-level-permission-report-all-shares.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - SMB
+ - PowerShell
+ - Permissions
+ - Scripting
+---
+
**Purpose**:
This script will iterate over all network shares hosted by the computer it is running on, and will give *top-level* permissions to all the shared folders. It will not navigate deeper than the top-level in its report. Very I/O friendly.
diff --git a/operations/windows/change-windows-edition.md b/operations/windows/change-windows-edition.md
index a5190f3..c23a39a 100644
--- a/operations/windows/change-windows-edition.md
+++ b/operations/windows/change-windows-edition.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Windows
+---
+
# Changing Windows Editions
### Changing Editions:
Windows Server: `DISM /ONLINE /set-edition:serverstandard /productkey:AAAAA-BBBBB-CCCCC-DDDDD-EEEEE /AcceptEula`
diff --git a/operations/windows/delete-windows-recovery-partition.md b/operations/windows/delete-windows-recovery-partition.md
index c440aa0..c4e100b 100644
--- a/operations/windows/delete-windows-recovery-partition.md
+++ b/operations/windows/delete-windows-recovery-partition.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Windows
+---
+
**Purpose**:
Sometimes you are running a virtual machine and are running out of space, and want to expand the operating system disk. However, there is a recovery partition to-the-right of the operating system partition. When this happens, you have to delete that partition in order to expand the storage space for the operating system.
diff --git a/operations/windows/vss/delete-shadow-copies.md b/operations/windows/vss/delete-shadow-copies.md
index 88155fd..0e39016 100644
--- a/operations/windows/vss/delete-shadow-copies.md
+++ b/operations/windows/vss/delete-shadow-copies.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Windows
+ - VSS
+ - Backup
+---
+
## Purpose
There are times when you may need to delete shadow copies (Volume Shadow Copies) from a drive, commonly to free up disk space. While this is usually straightforward, you may encounter scenarios where shadow copies cannot be deleted through normal means. The following methods provide ways to forcibly remove all shadow copies from a specific volume.
diff --git a/operations/windows/windows-11/creating-a-local-account-on-win11.md b/operations/windows/windows-11/creating-a-local-account-on-win11.md
index d3a3274..5334816 100644
--- a/operations/windows/windows-11/creating-a-local-account-on-win11.md
+++ b/operations/windows/windows-11/creating-a-local-account-on-win11.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Windows 11
+ - Windows
+ - User Accounts
+---
+
**Purpose:** You may find that Windows 11 does not allow you to install it with a local account. This is a documented case of Microsoft attempting to push Microsoft accounts, and can be bypassed by following the workflow below:
## Initial Boot to Windows 11 Installer
diff --git a/operations/windows/windows-server/ssl-certificates/convert-ssl-certificates-into-pfx-files.md b/operations/windows/windows-server/ssl-certificates/convert-ssl-certificates-into-pfx-files.md
index 49923cf..5ec1ade 100644
--- a/operations/windows/windows-server/ssl-certificates/convert-ssl-certificates-into-pfx-files.md
+++ b/operations/windows/windows-server/ssl-certificates/convert-ssl-certificates-into-pfx-files.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Windows Server
+ - Windows
+ - SSL
+---
+
**Purpose**: Sometimes you may find that you need to convert a `.crt` or `.pem` certificate file into a `.pfx` file that Microsoft IIS Server Manager can import for something like Exchange Server or another custom IIS-based server.
# Download the Certificate Files
diff --git a/platforms/containerization/docker/custom-containers/container-development.md b/platforms/containerization/docker/custom-containers/container-development.md
index e4d2d94..79a5a49 100644
--- a/platforms/containerization/docker/custom-containers/container-development.md
+++ b/platforms/containerization/docker/custom-containers/container-development.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Containers
+ - Docker
+ - Containerization
+---
+
**Purpose**:
This document will outline the general workflow of using Visual Studio Code to author and update custom containers and push them to a container registry hosted in Gitea. This will be referencing the `git-repo-updater` project throughout.
diff --git a/platforms/containerization/docker/custom-containers/git-repo-updater.md b/platforms/containerization/docker/custom-containers/git-repo-updater.md
index a56789b..c427d18 100644
--- a/platforms/containerization/docker/custom-containers/git-repo-updater.md
+++ b/platforms/containerization/docker/custom-containers/git-repo-updater.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Containers
+ - Docker
+ - Containerization
+---
+
**Purpose**: Docker container running Alpine Linux that automates and improves upon much of the script mentioned in the [Git Repo Updater](../../../../reference/bash/git-repo-updater.md) document. It offers the additional benefits of checking for updates every 5 seconds instead of every 60 seconds. It also accepts environment variables to provide credentials and notification settings, and can have an infinite number of monitored repositories.
### Deployment
diff --git a/platforms/containerization/docker/deploy-portainer.md b/platforms/containerization/docker/deploy-portainer.md
index b7c8f71..9656758 100644
--- a/platforms/containerization/docker/deploy-portainer.md
+++ b/platforms/containerization/docker/deploy-portainer.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Docker
+ - Portainer
+ - Containerization
+---
+
### Update The Package Manager
We need to update the server before installing Docker
diff --git a/platforms/containerization/kubernetes/deployment/k8s.md b/platforms/containerization/kubernetes/deployment/k8s.md
index 45f89cb..0103b72 100644
--- a/platforms/containerization/kubernetes/deployment/k8s.md
+++ b/platforms/containerization/kubernetes/deployment/k8s.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Kubernetes
+ - Containerization
+---
+
# Deploy Generic Kubernetes
The instructions outlined below assume you are deploying the environment using Ansible Playbooks either via Ansible's CLI or AWX.
diff --git a/platforms/containerization/kubernetes/deployment/rancher-rke2.md b/platforms/containerization/kubernetes/deployment/rancher-rke2.md
index 585e05d..763aaa6 100644
--- a/platforms/containerization/kubernetes/deployment/rancher-rke2.md
+++ b/platforms/containerization/kubernetes/deployment/rancher-rke2.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Kubernetes
+ - RKE2
+ - Rancher
+ - Containerization
+---
+
# Deploy RKE2 Cluster
Deploying a Rancher RKE2 Cluster is fairly straightforward. Just run the commands in-order and pay attention to which steps apply to all machines in the cluster, the controlplanes, and the workers.
diff --git a/platforms/containerization/kubernetes/migrating-docker-compose-yml-to-k8s.md b/platforms/containerization/kubernetes/migrating-docker-compose-yml-to-k8s.md
index c8a4e16..f2ebe86 100644
--- a/platforms/containerization/kubernetes/migrating-docker-compose-yml-to-k8s.md
+++ b/platforms/containerization/kubernetes/migrating-docker-compose-yml-to-k8s.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Kubernetes
+ - Docker
+ - Containerization
+---
+
# Migrating `docker-compose.yml` to Rancher RKE2 Cluster
You may be comfortable operating with Portainer or `docker-compose`, but there comes a point where you might want to migrate those existing workloads to a Kubernetes cluster as easily-as-possible. Lucklily, there is a way to do this using a tool called "**Kompose**'. Follow the instructions seen below to convert and deploy your existing `docker-compose.yml` into a Kubernetes cluster such as Rancher RKE2.
diff --git a/platforms/index.md b/platforms/index.md
index 99186bd..1ca4322 100644
--- a/platforms/index.md
+++ b/platforms/index.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Platforms
+ - Index
+ - Documentation
+---
+
# Platforms
## Purpose
Virtualization and containerization platforms, cluster builds, and base OS images.
diff --git a/platforms/virtualization/hyper-v/failover-cluster/deploy-failover-cluster-node.md b/platforms/virtualization/hyper-v/failover-cluster/deploy-failover-cluster-node.md
index f4a6cce..0646962 100644
--- a/platforms/virtualization/hyper-v/failover-cluster/deploy-failover-cluster-node.md
+++ b/platforms/virtualization/hyper-v/failover-cluster/deploy-failover-cluster-node.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Documentation
+---
+
**Purpose**: Deploying a Windows Server Node into the Hyper-V Failover Cluster is an essential part of rebuilding and expanding the backbone of my homelab. The documentation below goes over the process of setting up a bare-metal host from scratch and integrating it into the Hyper-V Failover Cluster.
!!! note "Prerequisites & Assumptions"
diff --git a/platforms/virtualization/hyper-v/failover-cluster/rebuild-failover-cluster-replication.md b/platforms/virtualization/hyper-v/failover-cluster/rebuild-failover-cluster-replication.md
index ee406f1..d3d6f1f 100644
--- a/platforms/virtualization/hyper-v/failover-cluster/rebuild-failover-cluster-replication.md
+++ b/platforms/virtualization/hyper-v/failover-cluster/rebuild-failover-cluster-replication.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Documentation
+---
+
**Purpose**: If you run an environment with multiple Hyper-V: Failover Clusters, for the purpose of Hyper-V: Failover Cluster Replication via a `Hyper-V Replica Broker` role installed on a host within the Failover Cluster, sometimes a GuestVM will fail to replicate itself to the replica cluster, and in those cases, it may not be able to recover on its own. This guide attempts to outline the process to rebuild replication for GuestVMs on a one-by-one basis.
!!! note "Assumptions"
diff --git a/platforms/virtualization/hyper-v/kerberos-enabled-vm-migration.md b/platforms/virtualization/hyper-v/kerberos-enabled-vm-migration.md
index ee94f39..b2d5ed0 100644
--- a/platforms/virtualization/hyper-v/kerberos-enabled-vm-migration.md
+++ b/platforms/virtualization/hyper-v/kerberos-enabled-vm-migration.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Kerberos
+---
+
**Purpose**:
You may find that you want to be able to live-migrate guestVMs on a Hyper-V environment that is not clustered as a Hyper-V Failover Cluster, you will have permission issues. One way to work around this is to use CredSSP as the authentication mechanism, which is not ideal but useful in a pinch, or you can use Kerberos-based authentication.
diff --git a/platforms/virtualization/openstack/ansible-openstack.md b/platforms/virtualization/openstack/ansible-openstack.md
index b309098..fef523b 100644
--- a/platforms/virtualization/openstack/ansible-openstack.md
+++ b/platforms/virtualization/openstack/ansible-openstack.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - OpenStack
+ - Ansible
+---
+
!!! warning "Document Under Construction"
This document is very unfinished and should **NOT** be followed by anyone for deployment at this time.
diff --git a/platforms/virtualization/openstack/canonical-openstack.md b/platforms/virtualization/openstack/canonical-openstack.md
index 6f3f378..44fc0f6 100644
--- a/platforms/virtualization/openstack/canonical-openstack.md
+++ b/platforms/virtualization/openstack/canonical-openstack.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - OpenStack
+---
+
# OpenStack
OpenStack is basically a virtual machine hypervisor that is HA and cluster-friendly. This particular variant is deployed via Canonical's MiniStack environment using SNAP. It will deploy OpenStack onto a single node, which can later be expanded to additional nodes. You can also use something like OpenShift to deploy a Kubernetes Cluster onto OpenStack automatically via its various APIs.
diff --git a/platforms/virtualization/proxmox/cloud-init-templates/ubuntu-server.md b/platforms/virtualization/proxmox/cloud-init-templates/ubuntu-server.md
index ff47a96..8cdcebb 100644
--- a/platforms/virtualization/proxmox/cloud-init-templates/ubuntu-server.md
+++ b/platforms/virtualization/proxmox/cloud-init-templates/ubuntu-server.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Proxmox
+ - Ubuntu
+---
+
## Purpose
You may need to deploy many copies of a virtual machine rapidly, and don't want to go through the hassle of setting up everything ad-hoc as the needs arise for each VM workload. Creating a cloud-init template allows you to more rapidly deploy production-ready copies of a template VM (that you create below) into a ProxmoxVE environment.
diff --git a/platforms/virtualization/proxmox/common-tasks.md b/platforms/virtualization/proxmox/common-tasks.md
index 046908a..32c9ff7 100644
--- a/platforms/virtualization/proxmox/common-tasks.md
+++ b/platforms/virtualization/proxmox/common-tasks.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Proxmox
+---
+
**Purpose**: The purpose of this document is to outline common tasks that you may need to run in your cluster to perform various tasks.
## Delete Node from Cluster
diff --git a/platforms/virtualization/proxmox/configuring-iscsi-based-cluster-storage.md b/platforms/virtualization/proxmox/configuring-iscsi-based-cluster-storage.md
index d65192b..73b82b2 100644
--- a/platforms/virtualization/proxmox/configuring-iscsi-based-cluster-storage.md
+++ b/platforms/virtualization/proxmox/configuring-iscsi-based-cluster-storage.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Proxmox
+ - iSCSI
+ - Storage
+---
+
## Purpose
This document describes the **end-to-end procedure** for creating a **thick-provisioned iSCSI-backed shared storage target** on **TrueNAS CORE**, and consuming it from a **Proxmox VE cluster** using **shared LVM**.
diff --git a/platforms/virtualization/proxmox/operations/manually-activate-volume-group.md b/platforms/virtualization/proxmox/operations/manually-activate-volume-group.md
index 1cb8828..5dc8346 100644
--- a/platforms/virtualization/proxmox/operations/manually-activate-volume-group.md
+++ b/platforms/virtualization/proxmox/operations/manually-activate-volume-group.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Proxmox
+---
+
## Purpose
Sometimes in some very specific situations, you will find that an LVM / VG just won't come online in ProxmoxVE. If this happens, you can run the following commands (and replace the placeholder location) to manually bring the storage online.
diff --git a/platforms/virtualization/proxmox/operations/upgrade-pve-from-8-to-9.md b/platforms/virtualization/proxmox/operations/upgrade-pve-from-8-to-9.md
index a8e643c..77234d5 100644
--- a/platforms/virtualization/proxmox/operations/upgrade-pve-from-8-to-9.md
+++ b/platforms/virtualization/proxmox/operations/upgrade-pve-from-8-to-9.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Proxmox
+---
+
## Purpose
There are a few steps you have to take when upgrading ProxmoxVE from 8.4.1+ to 9.0+. The process is fairly straightforward, so just follow the instructions seen below.
diff --git a/platforms/virtualization/proxmox/proxmoxve.md b/platforms/virtualization/proxmox/proxmoxve.md
index 354aef3..95b4228 100644
--- a/platforms/virtualization/proxmox/proxmoxve.md
+++ b/platforms/virtualization/proxmox/proxmoxve.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - Proxmox
+---
+
## Initial Installation / Configuration
Proxmox Virtual Environment is an open source server virtualization management solution based on QEMU/KVM and LXC. You can manage virtual machines, containers, highly available clusters, storage and networks with an integrated, easy-to-use web interface or via CLI.
diff --git a/platforms/virtualization/proxmox/zfs-over-iscsi.md b/platforms/virtualization/proxmox/zfs-over-iscsi.md
index 5bd4143..c5262f9 100644
--- a/platforms/virtualization/proxmox/zfs-over-iscsi.md
+++ b/platforms/virtualization/proxmox/zfs-over-iscsi.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Proxmox
+ - ZFS
+ - iSCSI
+---
+
**Purpose**: There is a way to incorporate ProxmoxVE and TrueNAS more deeply using SSH, simplifying the deployment of virtual disks/volumes passed into GuestVMs in ProxmoxVE. Using ZFS over iSCSI will give you the following non-exhaustive list of benefits:
- Automatically make Zvols in a ZFS Storage Pool
diff --git a/platforms/virtualization/rancher-harvester/harvester.md b/platforms/virtualization/rancher-harvester/harvester.md
index 22b2999..20d5453 100644
--- a/platforms/virtualization/rancher-harvester/harvester.md
+++ b/platforms/virtualization/rancher-harvester/harvester.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Rancher
+ - Harvester
+---
+
**Purpose**: Rancher Harvester is an awesome tool that acts like a self-hosted cloud VDI provider, similar to AWS, Linode, and other online cloud compute platforms. In most scenarios, you will deploy "Rancher" in addition to Harvester to orchestrate the deployment, management, and rolling upgrades of a Kubernetes Cluster. You can also just run standalone Virtual Machines, similar to Hyper-V, RHEV, oVirt, Bhyve, XenServer, XCP-NG, and VMware ESXi.
:::note Prerequisites
diff --git a/services/asset-management/homebox.md b/services/asset-management/homebox.md
index b40ec2e..1590407 100644
--- a/services/asset-management/homebox.md
+++ b/services/asset-management/homebox.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Homebox
+ - Asset Management
+ - Docker
+---
+
**Purpose**: Homebox is the inventory and organization system built for the Home User! With a focus on simplicity and ease of use, Homebox is the perfect solution for your home inventory, organization, and management needs.
[Reference Documentation](https://hay-kot.github.io/homebox/quick-start/)
diff --git a/services/asset-management/snipe-it.md b/services/asset-management/snipe-it.md
index 5cb20b1..757b865 100644
--- a/services/asset-management/snipe-it.md
+++ b/services/asset-management/snipe-it.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Snipe-IT
+ - Asset Management
+ - Docker
+---
+
**Purpose**: A free open source IT asset/license management system.
!!! warning
diff --git a/services/authentication/active-directory/certificate-services.md b/services/authentication/active-directory/certificate-services.md
index 9dbac10..ece3549 100644
--- a/services/authentication/active-directory/certificate-services.md
+++ b/services/authentication/active-directory/certificate-services.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Active Directory
+ - Certificate Services
+ - Authentication
+---
+
## Purpose
This document outlines the Microsoft-recommended best practices for deploying a secure, internal-use-only, two-tier Public Key Infrastructure (PKI) using Windows Server 2022 or newer. The PKI supports securing S/MIME email, 802.1X Wi-Fi with NPS, and LDAP over SSL (LDAPS).
diff --git a/services/authentication/active-directory/group-policy/desktop-shortcut-to-unc-path.md b/services/authentication/active-directory/group-policy/desktop-shortcut-to-unc-path.md
index 9cb167e..5aaead2 100644
--- a/services/authentication/active-directory/group-policy/desktop-shortcut-to-unc-path.md
+++ b/services/authentication/active-directory/group-policy/desktop-shortcut-to-unc-path.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Active Directory
+ - Group Policy
+ - Authentication
+---
+
**Purpose**:
To deploy a shortcut to the desktop pointing to a network share's root path. (e.g. `\\storage.bunny-lab.io`). There is a quirk with how Windows handles network shares and shortcuts and doesn't like when you point the shortcut to a root UNC path.
diff --git a/services/authentication/active-directory/ldap-settings.md b/services/authentication/active-directory/ldap-settings.md
index 1f75a0b..2e23139 100644
--- a/services/authentication/active-directory/ldap-settings.md
+++ b/services/authentication/active-directory/ldap-settings.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Active Directory
+ - LDAP
+ - Authentication
+---
+
**Purpose**: LDAP settings are used in various services from privacyIDEA to Nextcloud. This will outline the basic parameters in my homelab that are necessary to make it function.
| **Field** | **Value** | **Description** |
diff --git a/services/authentication/active-directory/restore-domain-trust.md b/services/authentication/active-directory/restore-domain-trust.md
index 4b98f07..6683b40 100644
--- a/services/authentication/active-directory/restore-domain-trust.md
+++ b/services/authentication/active-directory/restore-domain-trust.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Active Directory
+ - Authentication
+---
+
## Purpose
If you have a device that lost trust in the domain for some reason, and won't let you login using domain credentials, run the following command as a local administrator on the device to repair trust.
diff --git a/services/authentication/authelia.md b/services/authentication/authelia.md
index 4b2e94c..b4ddab5 100644
--- a/services/authentication/authelia.md
+++ b/services/authentication/authelia.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Authelia
+ - Authentication
+ - Docker
+---
+
**Purpose**: Authelia is an open-source authentication and authorization server and portal fulfilling the identity and access management (IAM) role of information security in providing multi-factor authentication and single sign-on (SSO) for your applications via a web portal. It acts as a companion for common reverse proxies.
```yaml title="docker-compose.yml"
diff --git a/services/authentication/authentik.md b/services/authentication/authentik.md
index 7be15d2..5314559 100644
--- a/services/authentication/authentik.md
+++ b/services/authentication/authentik.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Authentik
+ - Authentication
+ - Docker
+---
+
!!! bug
The docker-compose version of the deployment appears bugged and has known issues, deployment via Kubernetes is required to stability and support.
diff --git a/services/authentication/keycloak/deployment.md b/services/authentication/keycloak/deployment.md
index 35f32db..2cc2fc9 100644
--- a/services/authentication/keycloak/deployment.md
+++ b/services/authentication/keycloak/deployment.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Keycloak
+ - Authentication
+ - Docker
+---
+
**Purpose**: Keycloak is an open source identity and access management system for modern applications and services.
- [Original Reference Compose File](https://github.com/JamesTurland/JimsGarage/blob/main/Keycloak/docker-compose.yaml)
diff --git a/services/authentication/keycloak/oauth2/deployment.md b/services/authentication/keycloak/oauth2/deployment.md
index 694775f..fefa072 100644
--- a/services/authentication/keycloak/oauth2/deployment.md
+++ b/services/authentication/keycloak/oauth2/deployment.md
@@ -1,2 +1,10 @@
+---
+tags:
+ - Keycloak
+ - OAuth2
+ - Authentication
+ - Docker
+---
+
You can deploy Keycloak via a [docker-compose stack](../deployment.md) found within the "Containerization" section of the documentation.
diff --git a/services/authentication/keycloak/oauth2/gitea-oauth2.md b/services/authentication/keycloak/oauth2/gitea-oauth2.md
index 11fdb10..f35dc12 100644
--- a/services/authentication/keycloak/oauth2/gitea-oauth2.md
+++ b/services/authentication/keycloak/oauth2/gitea-oauth2.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Gitea
+ - Keycloak
+ - OAuth2
+ - Authentication
+---
+
### OAuth2 Configuration
These are variables referenced by the associated service to connect its authentication system to [Keycloak](../deployment.md).
diff --git a/services/authentication/keycloak/oauth2/portainer-oauth2.md b/services/authentication/keycloak/oauth2/portainer-oauth2.md
index 93b2f5a..1463989 100644
--- a/services/authentication/keycloak/oauth2/portainer-oauth2.md
+++ b/services/authentication/keycloak/oauth2/portainer-oauth2.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Portainer
+ - Keycloak
+ - OAuth2
+ - Authentication
+---
+
### OAuth2 Configuration
These are variables referenced by the associated service to connect its authentication system to [Keycloak](../deployment.md).
diff --git a/services/authentication/privacyidea.md b/services/authentication/privacyidea.md
index 102f09f..4eb3750 100644
--- a/services/authentication/privacyidea.md
+++ b/services/authentication/privacyidea.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - PrivacyIDEA
+ - Authentication
+---
+
**Purpose**: privacyIDEA is a modular authentication system. Using privacyIDEA you can enhance your existing applications like local login, VPN, remote access, SSH connections, access to web sites or web portals with a second factor during authentication.
!!! info "Assumptions"
diff --git a/services/automation-tools/activepieces.md b/services/automation-tools/activepieces.md
index dd640bf..63350f8 100644
--- a/services/automation-tools/activepieces.md
+++ b/services/automation-tools/activepieces.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Activepieces
+ - Automation
+ - Docker
+---
+
**Purpose**: Self-hosted open-source no-code business automation tool.
```yaml title="docker-compose.yml"
diff --git a/services/automation-tools/node-red.md b/services/automation-tools/node-red.md
index 137fa37..3bcfafa 100644
--- a/services/automation-tools/node-red.md
+++ b/services/automation-tools/node-red.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Node-RED
+ - Automation
+ - Docker
+---
+
**Purpose**: Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.
```yaml title="docker-compose.yml"
diff --git a/services/automation-tools/semaphore-ui.md b/services/automation-tools/semaphore-ui.md
index 9a9b70f..94b237a 100644
--- a/services/automation-tools/semaphore-ui.md
+++ b/services/automation-tools/semaphore-ui.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Semaphore
+ - Automation
+ - Docker
+---
+
**Purpose**: User friendly web interface for executing Ansible playbooks, Terraform, OpenTofu code and Bash scripts. It is designed to make your automation tasks easier and more enjoyable.
[Website Details](https://semaphoreui.com/)
diff --git a/services/backup/kopia.md b/services/backup/kopia.md
index bb01764..14b81a1 100644
--- a/services/backup/kopia.md
+++ b/services/backup/kopia.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Kopia
+ - Backup
+ - Docker
+---
+
**Purpose**: Cross-platform backup tool for Windows, macOS & Linux with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication. CLI and GUI included.
```yaml title="docker-compose.yml"
diff --git a/services/communication/niltalk.md b/services/communication/niltalk.md
index 8367c71..a086537 100644
--- a/services/communication/niltalk.md
+++ b/services/communication/niltalk.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Niltalk
+ - Communication
+ - Docker
+---
+
**Purpose**: Niltalk is a web based disposable chat server. It allows users to create password protected disposable, ephemeral chatrooms and invite peers to chat rooms.
```yaml title="docker-compose.yml"
diff --git a/services/communication/rocketchat/autotask-regex-replacer.md b/services/communication/rocketchat/autotask-regex-replacer.md
index 4647c06..02f41c9 100644
--- a/services/communication/rocketchat/autotask-regex-replacer.md
+++ b/services/communication/rocketchat/autotask-regex-replacer.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Rocket.Chat
+ - Communication
+---
+
**Purpose**:
When someone types a message that includes a ticket number (e.g. `T00000000.0000`) we want to replace that text with an API-friendly URL that leverages Markdown language as well.
diff --git a/services/communication/rocketchat/deployment.md b/services/communication/rocketchat/deployment.md
index c4cb23a..b8c1c5f 100644
--- a/services/communication/rocketchat/deployment.md
+++ b/services/communication/rocketchat/deployment.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Rocket.Chat
+ - Communication
+ - Docker
+---
+
**Purpose**: Deploy a RocketChat and MongoDB database together.
!!! caution Folder Pre-Creation
diff --git a/services/cpanel/creating-email-server.md b/services/cpanel/creating-email-server.md
index 05acd05..afef9f1 100644
--- a/services/cpanel/creating-email-server.md
+++ b/services/cpanel/creating-email-server.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - cPanel
+ - Email
+---
+
## Purpose
This documentation helps you deploy an email server within a cPanel hosted environment.
diff --git a/services/dashboards/dashy.md b/services/dashboards/dashy.md
index 35d9f8b..462efa6 100644
--- a/services/dashboards/dashy.md
+++ b/services/dashboards/dashy.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Dashy
+ - Dashboards
+ - Docker
+---
+
**Purpose**: A self-hostable personal dashboard built for you. Includes status-checking, widgets, themes, icon packs, a UI editor and tons more!
```yaml title="docker-compose.yml"
diff --git a/services/dashboards/homepage-docker.md b/services/dashboards/homepage-docker.md
index 71f5b48..dd5f8b3 100644
--- a/services/dashboards/homepage-docker.md
+++ b/services/dashboards/homepage-docker.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Docker
+ - Homepage
+ - Dashboards
+---
+
**Purpose**: A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.
```yaml title="docker-compose.yml"
diff --git a/services/devops/gitea.md b/services/devops/gitea.md
index 38612f3..7f0ee19 100644
--- a/services/devops/gitea.md
+++ b/services/devops/gitea.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Gitea
+ - DevOps
+ - Docker
+---
+
**Purpose**: Gitea is a painless self-hosted all-in-one software development service, it includes Git hosting, code review, team collaboration, package registry and CI/CD. It is similar to GitHub, Bitbucket and GitLab. Gitea was forked from Gogs originally and almost all the code has been changed.
[Detailed SMTP Configuration Reference](https://docs.gitea.com/administration/config-cheat-sheet)
diff --git a/services/dns/adguard-home.md b/services/dns/adguard-home.md
index ffabfac..97a2104 100644
--- a/services/dns/adguard-home.md
+++ b/services/dns/adguard-home.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - AdGuard Home
+ - DNS
+ - Docker
+---
+
**Purpose**: AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it will cover ALL your home devices, and you don’t need any client-side software for that. With the rise of Internet-Of-Things and connected devices, it becomes more and more important to be able to control your whole network.
```yaml title="docker-compose.yml"
diff --git a/services/dns/pi-hole.md b/services/dns/pi-hole.md
index 5922e30..841979b 100644
--- a/services/dns/pi-hole.md
+++ b/services/dns/pi-hole.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Pi-hole
+ - DNS
+ - Docker
+---
+
**Purpose**: Pi-hole is a Linux network-level advertisement and Internet tracker blocking application which acts as a DNS sinkhole and optionally a DHCP server, intended for use on a private network.
```yaml title="docker-compose.yml"
diff --git a/services/dns/windows-server/best-practices.md b/services/dns/windows-server/best-practices.md
index ac9d7ce..eb438c7 100644
--- a/services/dns/windows-server/best-practices.md
+++ b/services/dns/windows-server/best-practices.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - DNS
+ - Windows Server
+ - Windows
+---
+
## Purpose
This document outlines best practices for DNS server configuration in Active Directory environments, focusing on both performance and security considerations. The goal is to enhance the stability, efficiency, and security of DNS infrastructure within enterprise networks.
diff --git a/services/documentation/docusaurus.md b/services/documentation/docusaurus.md
index cff3e6d..00e5603 100644
--- a/services/documentation/docusaurus.md
+++ b/services/documentation/docusaurus.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Docusaurus
+ - Documentation
+ - Docker
+---
+
**Purpose**: An optimized site generator in React. Docusaurus helps you to move fast and write content. Build documentation websites, blogs, marketing pages, and more.
```yaml title="docker-compose.yml"
diff --git a/services/documentation/material-mkdocs.md b/services/documentation/material-mkdocs.md
index ac60171..fb76893 100644
--- a/services/documentation/material-mkdocs.md
+++ b/services/documentation/material-mkdocs.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - MkDocs
+ - Material MkDocs
+ - Documentation
+ - Docker
+---
+
**Purpose**: Documentation that simply works. Write your documentation in Markdown and create a professional static site for your Open Source or commercial project in minutes – searchable, customizable, more than 60 languages, for all devices.
## Deploy Material MKDocs
diff --git a/services/documentation/zensical.md b/services/documentation/zensical.md
index 10f24e4..da8ba5a 100644
--- a/services/documentation/zensical.md
+++ b/services/documentation/zensical.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Zensical
+ - Documentation
+---
+
## Purpose
After many years of using Material for MKDocs and it being updated with new features and security updates, it finally reached EOL around the end of 2025. The project maintainers started pivoting to a new successor called [Zensical](https://zensical.org/docs/get-started/). This document outlines my particular process for setting up a standalone documentation server within a virtual machine.
diff --git a/services/edge/nginx.md b/services/edge/nginx.md
index b1d587a..2c70cdb 100644
--- a/services/edge/nginx.md
+++ b/services/edge/nginx.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Nginx
+ - Reverse Proxy
+ - Docker
+---
+
**Purpose**: NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more.
```yaml title="docker-compose.yml"
diff --git a/services/edge/traefik.md b/services/edge/traefik.md
index 8ad28c8..8fb0f2c 100644
--- a/services/edge/traefik.md
+++ b/services/edge/traefik.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Traefik
+ - Reverse Proxy
+ - Docker
+---
+
**Purpose**: A traefik reverse proxy is a server that sits between your network firewall and servers hosting various web services on your private network(s). Traefik automatically handles the creation of Let's Encrypt SSL certificates if you have a domain registrar that is supported by Traefik such as CloudFlare; by leveraging API keys, Traefik can automatically make the DNS records for Let's Encrypt's DNS "challenges" whenever you add a service behind the Traefik reverse proxy.
!!! info "Assumptions"
diff --git a/services/email/iredmail/deploy-iredmail.md b/services/email/iredmail/deploy-iredmail.md
index d69c292..07701ac 100644
--- a/services/email/iredmail/deploy-iredmail.md
+++ b/services/email/iredmail/deploy-iredmail.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - IredMail
+ - Email
+---
+
**Purpose**:
Self-Hosted Open-Source email server that can be setup in minutes, and is enterprise-grade if upgraded with an iRedAdmin-Pro license.
diff --git a/services/email/iredmail/query-smtp-outgoing-queue.md b/services/email/iredmail/query-smtp-outgoing-queue.md
index c12b4a9..8c3584b 100644
--- a/services/email/iredmail/query-smtp-outgoing-queue.md
+++ b/services/email/iredmail/query-smtp-outgoing-queue.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - IredMail
+ - SMTP
+ - Email
+---
+
## Purpose
You may need to troubleshoot the outgoing SMTP email queue / active sessions in iRedMail for one reason or another. This can provide useful insight into the reason why emails are not being delivered, etc.
diff --git a/services/email/iredmail/quick-server-settings.md b/services/email/iredmail/quick-server-settings.md
index 0f639c0..d3f183a 100644
--- a/services/email/iredmail/quick-server-settings.md
+++ b/services/email/iredmail/quick-server-settings.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - IredMail
+ - Email
+---
+
| Server | Port(s) | Security | Auth Method | Username |
|:------------------|:----------------------------------------------|:----------|:----------------|:-------------------|
| `mail.bunny-lab.io` | **IMAP:** 143 `Internal`, 993 `External`
**SMTP:** 587, 25 `Fallback` | STARTTLS | Normal Password | user@bunny-lab.io |
diff --git a/services/email/mailcow.md b/services/email/mailcow.md
index bc52d2f..3639593 100644
--- a/services/email/mailcow.md
+++ b/services/email/mailcow.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Mailcow
+ - Email
+ - Docker
+---
+
!!! warning "Under Construction"
The deployment of Mailcow is mostly correct here, but with the exception that we dont point DNS records to the reverse proxy (internally) because it's currently not functioning as expected. So for the time being, you would open all of the ports up to the Mailcow server's internal IP address via port forwarding on your firewall.
diff --git a/services/email/microsoft-exchange/configuring-acme-letsencrypt-bot.md b/services/email/microsoft-exchange/configuring-acme-letsencrypt-bot.md
index bb5b047..3a513e8 100644
--- a/services/email/microsoft-exchange/configuring-acme-letsencrypt-bot.md
+++ b/services/email/microsoft-exchange/configuring-acme-letsencrypt-bot.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Microsoft Exchange
+ - Lets Encrypt
+ - Email
+---
+
**Purpose**: If you want to set up automatic Let's Encrypt SSL certificates on a Microsoft Exchange server, you have to go through a few steps to install the WinACME bot, and configure it to automatically renew certificates.
!!! note "ACME Bot Provisioning Considerations"
diff --git a/services/email/microsoft-exchange/preparing-for-cumulative-updates.md b/services/email/microsoft-exchange/preparing-for-cumulative-updates.md
index 2ca8d87..5ae8dd9 100644
--- a/services/email/microsoft-exchange/preparing-for-cumulative-updates.md
+++ b/services/email/microsoft-exchange/preparing-for-cumulative-updates.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Microsoft Exchange
+ - Email
+---
+
**Purpose**:
This document is meant to be an abstract guide on what to do before installing Cumulative Updates on Microsoft Exchange Server. There are a few considerations that need to be made ahead of time. This list was put together through shere brute-force while troubleshooting an update issue for a server on 12/16/2024.
diff --git a/services/email/microsoft-exchange/scripts/dag/database-management.md b/services/email/microsoft-exchange/scripts/dag/database-management.md
index a381569..7590eca 100644
--- a/services/email/microsoft-exchange/scripts/dag/database-management.md
+++ b/services/email/microsoft-exchange/scripts/dag/database-management.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Microsoft Exchange
+ - Email
+---
+
## Purpose
If you operate an Exchange Database Availability Group (DAG) with 2 or more servers, you may need to do maintenance to one of the members, and during that maintenance, it's possible that one of the databases of the server that was rebooted etc will be out-of-date. In case this happens, it may suspend the database replication to one of the DAG's member servers.
diff --git a/services/email/microsoft-exchange/scripts/restart-exchange-services.md b/services/email/microsoft-exchange/scripts/restart-exchange-services.md
index 6b3551f..b3a5180 100644
--- a/services/email/microsoft-exchange/scripts/restart-exchange-services.md
+++ b/services/email/microsoft-exchange/scripts/restart-exchange-services.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Microsoft Exchange
+ - Email
+---
+
### Purpose:
Sometimes Microsoft Exchange Server will misbehave and the services will need to be *bumped* to fix them. This script iterates over all of the Exchange-related services and restarts them automatically for you.
diff --git a/services/email/microsoft-exchange/scripts/set-mailbox-auto-reply.md b/services/email/microsoft-exchange/scripts/set-mailbox-auto-reply.md
index 32c94ee..962b37b 100644
--- a/services/email/microsoft-exchange/scripts/set-mailbox-auto-reply.md
+++ b/services/email/microsoft-exchange/scripts/set-mailbox-auto-reply.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Microsoft Exchange
+ - Email
+---
+
**Purpose**: Sometimes you need to set an autoreply on a mailbox on behalf of someone else. In these cases, you can leverage the "Exchange Admin Shell" to configure an auto-reply to anyone who sends an email to the mailbox.
In the example below, replace `` with the shortened username of the target user. (e.g. `nicole.rappe` not `nicole.rappe@bunny-lab.io`)
diff --git a/services/file-services/windows-server/dfs-namespaces-with-replication.md b/services/file-services/windows-server/dfs-namespaces-with-replication.md
index 8c5902c..8b2625f 100644
--- a/services/file-services/windows-server/dfs-namespaces-with-replication.md
+++ b/services/file-services/windows-server/dfs-namespaces-with-replication.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - DFS
+ - Windows Server
+ - Windows
+ - File Services
+---
+
## Purpose
If you want data available from a single, consistent UNC path while hosting it on multiple file servers, use **DFS Namespaces (DFSN)**. A namespace presents a *virtual* folder tree (for example, `\\bunny-lab.io\Projects`) whose folders point to one or more **folder targets** (actual SMB shares on your servers).
**DFS Replication (DFSR)** is a *separate* feature you configure to keep the contents of those targets in sync.
diff --git a/services/gaming/ark-survival-ascended.md b/services/gaming/ark-survival-ascended.md
index c631818..30a1ed3 100644
--- a/services/gaming/ark-survival-ascended.md
+++ b/services/gaming/ark-survival-ascended.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - ARK
+ - Gaming
+---
+
**Purpose**:
This document outlines some of the prerequisites as well as deployment process for an ARK: Survival Ascended Server
diff --git a/services/gaming/pterodactyl.md b/services/gaming/pterodactyl.md
index dcdf214..58c36fe 100644
--- a/services/gaming/pterodactyl.md
+++ b/services/gaming/pterodactyl.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Pterodactyl
+ - Gaming
+---
+
**Purpose**: Pterodactyl is the open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to administrators and users.
[Official Website](https://pterodactyl.io/panel/1.0/getting_started.html)
diff --git a/services/gaming/valheim.md b/services/gaming/valheim.md
index b0201df..9c1ecb2 100644
--- a/services/gaming/valheim.md
+++ b/services/gaming/valheim.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Valheim
+ - Gaming
+---
+
**Purpose**:
This document outlines some of the prerequisites as well as deployment process for an dedicated Valheim server.
diff --git a/services/home-and-iot/frigate.md b/services/home-and-iot/frigate.md
index 12a9474..7318091 100644
--- a/services/home-and-iot/frigate.md
+++ b/services/home-and-iot/frigate.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Frigate
+ - IoT
+ - Docker
+---
+
**Purpose**: A complete and local NVR designed for Home Assistant with AI object detection. Uses OpenCV and Tensorflow to perform realtime object detection locally for IP cameras.
```yaml title="docker-compose.yml"
diff --git a/services/home-and-iot/homeassistant.md b/services/home-and-iot/homeassistant.md
index 9426454..fa9adab 100644
--- a/services/home-and-iot/homeassistant.md
+++ b/services/home-and-iot/homeassistant.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Home Assistant
+ - IoT
+ - Docker
+---
+
**Purpose**: Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.
```yaml title="docker-compose.yml"
diff --git a/services/index.md b/services/index.md
index 1749e26..36ed0f2 100644
--- a/services/index.md
+++ b/services/index.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Services
+ - Index
+ - Documentation
+---
+
# Services
## Purpose
Deployable services and applications in the lab (auth, email, monitoring, etc).
diff --git a/services/media-and-gaming/emulatorjs.md b/services/media-and-gaming/emulatorjs.md
index a879418..25e8e97 100644
--- a/services/media-and-gaming/emulatorjs.md
+++ b/services/media-and-gaming/emulatorjs.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - EmulatorJS
+ - Media
+ - Gaming
+ - Docker
+---
+
**Purpose**: Emulatorjs is a browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.
## Docker Configuration
diff --git a/services/media-and-gaming/pyload.md b/services/media-and-gaming/pyload.md
index 966d38c..42f776d 100644
--- a/services/media-and-gaming/pyload.md
+++ b/services/media-and-gaming/pyload.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Pyload
+ - Media
+ - Gaming
+ - Docker
+---
+
**Purpose**: pyLoad-ng is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.
[Detailed LinuxServer.io Deployment Info](https://docs.linuxserver.io/images/docker-pyload-ng/)
diff --git a/services/microsoft-365/change-mfa-settings.md b/services/microsoft-365/change-mfa-settings.md
index d7dd9e5..822ec24 100644
--- a/services/microsoft-365/change-mfa-settings.md
+++ b/services/microsoft-365/change-mfa-settings.md
@@ -1,3 +1,8 @@
+---
+tags:
+ - MFA
+---
+
**Purpose**:
Sometimes you may need to change the MFA on an account, by adding a new email or phone number for SMS-based MFA. This can be done fairly quickly and only involves a few steps:
diff --git a/services/monitoring/gatus.md b/services/monitoring/gatus.md
index 03ccf79..9a6e672 100644
--- a/services/monitoring/gatus.md
+++ b/services/monitoring/gatus.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Gatus
+ - Monitoring
+ - Docker
+---
+
**Purpose**: Gatus Service Status Server.
## Docker Configuration
diff --git a/services/monitoring/speedtest-tracker.md b/services/monitoring/speedtest-tracker.md
index 5a00988..f7e2b39 100644
--- a/services/monitoring/speedtest-tracker.md
+++ b/services/monitoring/speedtest-tracker.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Speedtest Tracker
+ - Monitoring
+ - Docker
+---
+
## Purpose:
Speedtest Tracker is a self-hosted application that monitors the performance and uptime of your internet connection over time.
[Detailed Configuration Reference](https://docs.speedtest-tracker.dev/getting-started/installation)
diff --git a/services/monitoring/uptimekuma.md b/services/monitoring/uptimekuma.md
index 687c743..f63b881 100644
--- a/services/monitoring/uptimekuma.md
+++ b/services/monitoring/uptimekuma.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Uptime Kuma
+ - Monitoring
+ - Docker
+---
+
**Purpose**: Deploy Uptime Kuma uptime monitor to monitor services in the homelab and send notifications to various services.
```yaml title="docker-compose.yml"
diff --git a/services/notifications/ntfy.md b/services/notifications/ntfy.md
index e3d95d1..0f8d55f 100644
--- a/services/notifications/ntfy.md
+++ b/services/notifications/ntfy.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - ntfy
+ - Notifications
+ - Docker
+---
+
**Purpose**: ntfy (pronounced notify) is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API. It's infinitely flexible, and 100% free software.
```yaml title="docker-compose.yml"
diff --git a/services/productivity/collabora-code-server.md b/services/productivity/collabora-code-server.md
index 55112c2..08669ac 100644
--- a/services/productivity/collabora-code-server.md
+++ b/services/productivity/collabora-code-server.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Collabora
+ - Productivity
+ - Docker
+---
+
## Purpose:
The Collabora CODE Server is used by Nextcloud Office to open and edit documents and spreadsheets collaboratively. When Nextcloud is not deployed in a [Nextcloud AIO](./nextcloud-aio.md) way, and is instead installed not as a container, you (may) run into stability issues with Collabora CODE Server just randomly breaking and not allowing users to edit documents. If this happens, you can follow this document to stand-up a dedicated Collabora CODE Server on the same host as your Nextcloud server.
diff --git a/services/productivity/nextcloud-aio.md b/services/productivity/nextcloud-aio.md
index b8e9db0..997e436 100644
--- a/services/productivity/nextcloud-aio.md
+++ b/services/productivity/nextcloud-aio.md
@@ -1,3 +1,11 @@
+---
+tags:
+ - Nextcloud AIO
+ - Nextcloud
+ - Productivity
+ - Docker
+---
+
**Purpose**:
Deploy a Nextcloud AIO Server. [Official Nextcloud All-in-One Documentation](https://github.com/nextcloud/all-in-one).
This version of Nextcloud consists of 12 containers that are centrally managed by a single "master" container. It is more orchestrated and automates the implementation of Nextcloud Office, Nextcloud Talk, and other integrations / apps.
diff --git a/services/productivity/nextcloud.md b/services/productivity/nextcloud.md
index 0698567..c07c08c 100644
--- a/services/productivity/nextcloud.md
+++ b/services/productivity/nextcloud.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Nextcloud
+ - Productivity
+ - Docker
+---
+
**Purpose**: Deploy a Nextcloud and PostgreSQL database together.
```yaml title="docker-compose.yml"
diff --git a/services/productivity/onlyoffice-ee.md b/services/productivity/onlyoffice-ee.md
index d97a114..4819d6c 100644
--- a/services/productivity/onlyoffice-ee.md
+++ b/services/productivity/onlyoffice-ee.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - OnlyOffice
+ - Productivity
+ - Docker
+---
+
**Purpose**: ONLYOFFICE offers a secure online office suite highly compatible with MS Office formats. Generally used with Nextcloud to edit documents directly within the web browser.
```yaml title="docker-compose.yml"
diff --git a/services/productivity/stirling-pdf.md b/services/productivity/stirling-pdf.md
index c4f1248..cc358ce 100644
--- a/services/productivity/stirling-pdf.md
+++ b/services/productivity/stirling-pdf.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Stirling PDF
+ - Productivity
+ - Docker
+---
+
**Purpose**: This is a powerful locally hosted web based PDF manipulation tool using docker that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application started as a 100% ChatGPT-made application and has evolved to include a wide range of features to handle all your PDF needs.
## Docker Configuration
diff --git a/services/productivity/trilium.md b/services/productivity/trilium.md
index bebd82f..f1252ec 100644
--- a/services/productivity/trilium.md
+++ b/services/productivity/trilium.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Trilium
+ - Productivity
+ - Docker
+---
+
**Purpose**: Build your personal knowledge base with [Trilium Notes](https://github.com/zadam/trilium/tree/master).
```yaml title="docker-compose.yml"
diff --git a/services/productivity/wordpress.md b/services/productivity/wordpress.md
index 4b5e493..a484425 100644
--- a/services/productivity/wordpress.md
+++ b/services/productivity/wordpress.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - WordPress
+ - Productivity
+ - Docker
+---
+
**Purpose**: At its core, WordPress is the simplest, most popular way to create your own website or blog. In fact, WordPress powers over 43.3% of all the websites on the Internet. Yes – more than one in four websites that you visit are likely powered by WordPress.
```yaml title="docker-compose.yml"
diff --git a/services/remote-access/apache-guacamole.md b/services/remote-access/apache-guacamole.md
index f8c1157..25df8d3 100644
--- a/services/remote-access/apache-guacamole.md
+++ b/services/remote-access/apache-guacamole.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Apache Guacamole
+ - Docker
+---
+
**Purpose**: HTML5-based Remote Access Broker for SSH, RDP, and VNC. Useful for remote access into an environment.
### Docker Compose Stack
diff --git a/services/remote-access/firefox.md b/services/remote-access/firefox.md
index 579e167..bb2f705 100644
--- a/services/remote-access/firefox.md
+++ b/services/remote-access/firefox.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Firefox
+ - Docker
+---
+
**Purpose**: Sometimes you just want an instance of Firefox running on an Alpine Linux container, that has persistence (Extensions, bookmarks, history, etc) outside of the container (with bind-mapped folders). This is useful for a number of reasons, but insecure by default, so you have to protect it behind something like a [Keycloak Server](../authentication/keycloak/deployment.md) so it is not misused.
## Keycloak Authentication Sequence
diff --git a/services/rmm/tacticalrmm.md b/services/rmm/tacticalrmm.md
index 3c24bc6..52dc6cb 100644
--- a/services/rmm/tacticalrmm.md
+++ b/services/rmm/tacticalrmm.md
@@ -1,3 +1,9 @@
+---
+tags:
+ - Tactical RMM
+ - RMM
+---
+
**Purpose**:
Tactical RMM is a remote monitoring & management tool built with Django, Vue and Golang. [Official Documentation](https://docs.tacticalrmm.com/install_server/).
diff --git a/services/security-and-utility/changedetection.md b/services/security-and-utility/changedetection.md
index 61b5b72..4892904 100644
--- a/services/security-and-utility/changedetection.md
+++ b/services/security-and-utility/changedetection.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - ChangeDetection
+ - Security
+ - Docker
+---
+
**Purpose**: Detect website content changes and perform meaningful actions - trigger notifications via Discord, Email, Slack, Telegram, API calls and many more.
## Docker Configuration
diff --git a/services/security-and-utility/cyberchef.md b/services/security-and-utility/cyberchef.md
index 98fd74f..0a91dff 100644
--- a/services/security-and-utility/cyberchef.md
+++ b/services/security-and-utility/cyberchef.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - CyberChef
+ - Security
+ - Docker
+---
+
**Purpose**: The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis.
```yaml title="docker-compose.yml"
diff --git a/services/security-and-utility/it-tools.md b/services/security-and-utility/it-tools.md
index 9bac728..a48acdf 100644
--- a/services/security-and-utility/it-tools.md
+++ b/services/security-and-utility/it-tools.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - IT-Tools
+ - Security
+ - Docker
+---
+
**Purpose**: Collection of handy online tools for developers, with great UX.
```yaml title="docker-compose.yml"
diff --git a/services/security-and-utility/password-pusher.md b/services/security-and-utility/password-pusher.md
index 685cdc5..f2eec1a 100644
--- a/services/security-and-utility/password-pusher.md
+++ b/services/security-and-utility/password-pusher.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Password Pusher
+ - Security
+ - Docker
+---
+
**Purpose**: An application to securely communicate passwords over the web. Passwords automatically expire after a certain number of views and/or time has passed. Track who, what and when.
## Docker Configuration
diff --git a/services/security-and-utility/searx.md b/services/security-and-utility/searx.md
index 420b555..3ac443f 100644
--- a/services/security-and-utility/searx.md
+++ b/services/security-and-utility/searx.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Searx
+ - Security
+ - Docker
+---
+
**Purpose**: Deploys a SearX Meta Search Engine Server
## Docker Configuration
diff --git a/services/security-and-utility/vaultwarden.md b/services/security-and-utility/vaultwarden.md
index a37c28b..9c9b894 100644
--- a/services/security-and-utility/vaultwarden.md
+++ b/services/security-and-utility/vaultwarden.md
@@ -1,3 +1,10 @@
+---
+tags:
+ - Vaultwarden
+ - Security
+ - Docker
+---
+
**Purpose**: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs.
```yaml title="docker-compose.yml"