#!/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" }