diff --git a/roles/datastore/meta/argument_specs.yaml b/roles/datastore/meta/argument_specs.yaml new file mode 100644 index 0000000..45b004d --- /dev/null +++ b/roles/datastore/meta/argument_specs.yaml @@ -0,0 +1,67 @@ +--- +argument_specs: + main: + description: >- + This role makes several assumptions about the local storage configuration of the server: + + 1. There is one block device on the server that will be used for data storage + 2. That block device will be joined to a glusterfs volume + 3. The block device is encrypted with LUKS + + This role mostly serves to perform housekeeping tasks and validation of expected configs. + Automating disk configuration seems like a really good way to lose all my data, so I decided + to leave that to the much more reliable manual configuration for the time being. + + To that end, here is a quick cheatsheet of commands that might be useful in setting up + storage device(s) for this role (replace `DEVICE` with the block device for storage): + + ```bash + # Encrypt a block device, provide encryption key when prompted + cryptsetup luksFormat --type luks2 /dev/DEVICE + + # Unlock encrypted block device and mount under a mapper + cryptsetup luksOpen /dev/DEVICE LABEL + + # Lock an encrypted block device + cryptsetup luksClose LABEL + + # Create and format a partition on the encrypted block device + mkfs.xfs /dev/mapper/LABEL -L LABEL + + # Run from an existing server already in the gluster pool + # Add server to the gluster pool + gluster peer probe HOSTNAME + + # To replace a brick from an already offline'd node, the old brick first needs to be force + # removed, replication reduced, and (if arbiter is enabled) any arbiter nodes removed + # + # Remove arbiter brick + gluster volume remove-brick VOLUME replica 2 HOSTNAME:/EXPORT force + # Remove dead data brick + gluster volume remove-brick VOLUME replica 1 HOSTNAME:/EXPORT force + # Remove dead node + gluster peer detach HOSTNAME + # Add new data brick + gluster volume add-brick VOLUME replica 2 HOSTNAME:/EXPORT start + # + # To re-add the arbiter you might need to clean up the `.glusterfs` directory and remove + # directory parametes from the old brick. These next commands need to be run on the host + # with the arbiter brick physically attached + # + rm -rf /EXPORT/.glusterfs + setfattr -x trusted.gfid /EXPORT + setfattr -x trusted.glusterfs.volume-id /EXPORT + # Re-add arbiter brick + gluster volume add-brick VOLUME replica 3 arbiter 1 HOSTNAME:/EXPORT + # Trigger a resync + gluster volume heal datastore + + # General gluster debug info + gluster volume info VOLUME + gluster volume status VOLUME + ``` + options: + skylab_datastore_device: + description: The block device under `/dev/` that should be configured as datastore storage + type: str + required: true