From d9b0af54b153c87a9474f9b3517c96bd2d5d50b4 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Tue, 5 Mar 2024 11:52:17 +0100 Subject: Add seaweedfs playbooks --- playbooks.d/seaweedfs-filer/playbook.bash | 94 +++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 playbooks.d/seaweedfs-filer/playbook.bash (limited to 'playbooks.d/seaweedfs-filer/playbook.bash') diff --git a/playbooks.d/seaweedfs-filer/playbook.bash b/playbooks.d/seaweedfs-filer/playbook.bash new file mode 100644 index 0000000..1a71f07 --- /dev/null +++ b/playbooks.d/seaweedfs-filer/playbook.bash @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +BASHTARD_PLAYBOOK_VARS[$BASHTARD_PLAYBOOK.ip]="required" + +playbook_add() { + local buffer + + # Make sure seaweedfs is installed + "$BASHTARD_BIN" add seaweedfs || true + + mkdir -pv "/var/lib/seaweedfs/filer" + + # Generate systemd unit files + case "${BASHTARD_PLATFORM[init]}" in + systemd) + cat <<-EOF > "$(config "fs.etcdir")/systemd/system/seaweedfs-filer.service" + [Unit] + Description=SeaweedFS Filer + After=network.target + + [Service] + Type=simple + User=root + Group=root + + ExecStart=$(config "fs.bindir")/weed filer -options="$(config "fs.etcdir")/seaweedfs/filer.conf" + WorkingDirectory=/var/lib/seaweedfs/filer + SyslogIdentifier=seaweedfs + + [Install] + WantedBy=multi-user.target + EOF + ;; + *) die "NYI" + esac + + # Perform initial configuration + playbook_sync + + # Start the service + svc enable seaweedfs-filer + svc start seaweedfs-filer +} + +playbook_sync() { + local buffer + local conf + local peers=() + local hash + + buffer="$(tmpfile)" + conf="$(config "fs.etcdir")/seaweedfs/filer.conf" + hash="$(file_hash "$conf")" + + # Add all registered seaweedfs-master nodes as peers + while read -r host + do + peers+=("[$(config_for "$(basename "$host")" "seaweedfs-master.ip")]:$(config_for "$(basename "$host")" "seaweedfs-master.port" "9333")") + done < <(grep -FHl "$BASHTARD_PLAYBOOK" "$BASHTARD_ETCDIR/registry.d"/*) + + # Generate config files + file_template "filer.conf" \ + ip="$(config "$BASHTARD_PLAYBOOK.ip")" \ + port="$(config "$BASHTARD_PLAYBOOK.port" "8888")" \ + masters="$(join_args "${peers[@]}")" \ + s3_port="$(config "$BASHTARD_PLAYBOOK.s3.port" "8333")" \ + > "$buffer" + + file_template "filer.toml" \ + > "$(config "fs.etcdir")/seaweedfs/filer.toml" + + [[ "$(file_hash "$buffer")" == "$hash" ]] && return + + mv -- "$buffer" "$conf" + + [[ "$BASHTARD_ACTION" == "add" ]] && return + + # Reload service + svc restart seaweedfs-filer +} + +playbook_del() { + # Stop service + svc stop seaweedfs-filer + svc disable seaweedfs-filer + + # Remove systemd unit file + rm -fr -- "$(config "fs.etcdir")/systemd/system/seaweedfs-filer.service" + + # Remove configuration files + rm -fr -- \ + "$(config "fs.etcdir")/seaweedfs/filer.conf" \ + "$(config "fs.etcdir")/seaweedfs/filer.toml" +} -- cgit v1.1