-
Notifications
You must be signed in to change notification settings - Fork 0
Day 2 Operations
Osotechie edited this page Jun 22, 2026
·
1 revision
Common tasks you'll need to do after the initial setup. This is the "how do I..." page.
- Physically install the disk in the NAS
-
Format and label the disk:
sudo mkfs.ext4 -L ARRAY-DISK5 /dev/sdX
-
Update group_vars — add the new disk to
storage_disks:storage_disks: - { label: "ARRAY-DISK1", mount: "/mnt/disk1" } - { label: "ARRAY-DISK2", mount: "/mnt/disk2" } - { label: "ARRAY-DISK3", mount: "/mnt/disk3" } - { label: "ARRAY-DISK4", mount: "/mnt/disk4" } - { label: "ARRAY-DISK5", mount: "/mnt/disk5" } # ← new
- Update the MergerFS source (if applicable) to include the new mount
- Push to main — the provisioning pipeline will mount the disk and add it to the pool
- Add the secret to Azure KeyVault:
az keyvault secret set --vault-name <name> --name "my-new-secret" --value "the-value"
- Reference it in the appropriate config file using the token pattern:
(Remember:
my_config_value: "#{MY_NEW_SECRET}#"
my-new-secretin KeyVault becomesMY_NEW_SECRETas an env var) - Commit and push — the workflow dynamically pulls all secrets, no workflow changes needed
-
Add to the
userslist in group_vars:users: - name: newuser comment: "Description" groups: [docker] ssh_key: #{SSH_PUBKEY_NEWUSER}
💡 The SSH public key should be stored as a secret in Azure KeyVault (e.g.
ssh-pubkey-newuser) so it's injected via token replacement — never hardcode keys in group_vars. -
If the user needs directory access, update
host_directorieswith appropriate ACLs -
Push to main
- Create the role directory structure under
playbooks/roles/owendemooy.newrole/ - Add the role name to the
functionslist in group_vars - Add the conditional include in
provision.yml:- name: New Role ansible.builtin.include_role: name: owendemooy.newrole when: "'newrole' in functions"
- Push to main
If the NAS hardware dies or you're migrating to new hardware:
- Move Disks to the new server (the Array and Parity Disks)
- Install Ubuntu Server on the new hardware (minimal install)
-
Set the IP to match what's in the inventory (e.g.
10.1.1.118) - Add your SSH public key to the user's authorized_keys
-
Update GitHub Secrets if needed:
-
HOST_FINGERPRINT— the new machine will have new SSH host keys -
WG_CONFIG_FILE— only if the WireGuard peer config changes
-
- Run the provisioning pipeline — it will configure everything from scratch
-
Restore from backup — run
restore.shto bring back Docker persistent data - Run the container deployment — deploys all Docker stacks
💡 Steps 5-7 get you from bare metal to fully running in minutes (plus backup restore time). That's the whole point of this project.
- Check the GitHub Actions job summary — it shows a structured recap
- Look at the specific failed step in the workflow log
- Common issues:
- WireGuard timeout — is the home WG endpoint reachable? Check ISP/router
-
SSH refused — did the NAS host keys change? Update
HOST_FINGERPRINT - Ansible task failed — read the error message, it's usually clear
- KeyVault access denied — SPN credentials may have expired (they have a default 1-year lifetime)
Overview
Secrets & Networking
Ansible
- Ansible Structure
- Role: Docker
- Role: Storage
- Role: Samba
- Role: NUT Client
- Role: Backup
- Role: Coral TPU
Pipelines
Operations