#!/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 # Create directories used by seaweedfs mkdir -pv -- "/var/lib/seaweedfs/master" # Generate systemd unit files case "${BASHTARD_PLATFORM[init]}" in systemd) cat <<-EOF > "$(config "fs.etcdir")/systemd/system/seaweedfs-master.service" [Unit] Description=SeaweedFS Master After=network.target [Service] Type=simple User=root Group=root ExecStart=$(config "fs.bindir")/weed master -options="$(config "fs.etcdir")/seaweedfs/master.conf" WorkingDirectory=/var/lib/seaweedfs SyslogIdentifier=seaweedfs [Install] WantedBy=multi-user.target EOF ;; *) die "NYI" esac # Perform initial configuration playbook_sync # Start the service svc enable seaweedfs-master svc start seaweedfs-master } playbook_sync() { local buffer local conf local peers=() local hash buffer="$(tmpfile)" conf="$(config "fs.etcdir")/seaweedfs/master.conf" hash="$(file_hash "$conf")" # Add all registered seaweedfs-master nodes as peers while read -r host do # Except this node itself [[ "$(basename "$host")" == "${BASHTARD_PLATFORM[fqdn]}" ]] && continue peers+=("$(config_for "$(basename "$host")" "$BASHTARD_PLAYBOOK.ip")") done < <(grep -FHl "$BASHTARD_PLAYBOOK" "$BASHTARD_ETCDIR/registry.d"/*) # Generate config file file_template "master.conf" \ ip="$(config "$BASHTARD_PLAYBOOK.ip")" \ port="$(config "$BASHTARD_PLAYBOOK.port" "9333")" \ peers="$(join_args "${peers[@]}")" \ mdir="$(config "$BASHTARD_PLAYBOOK.mdir" "/var/lib/seaweedfs/master/mdir")" \ replication="$(config "$BASHTARD_PLAYBOOK.replication" "000")" \ volume_size="$(config "$BASHTARD_PLAYBOOK.volume-size" "1024")" \ > "$buffer" [[ "$(file_hash "$buffer")" == "$hash" ]] && return mv -- "$buffer" "$conf" [[ "$BASHTARD_ACTION" == "add" ]] && return # Reload service svc restart seaweedfs-master } playbook_del() { # Stop service svc stop seaweedfs-master svc disable seaweedfs-master # Remove systemd unit file rm -fr -- "$(config "fs.etcdir")/systemd/system/seaweedfs-master.service" # Remove configuration files rm -fr -- "$(config "fs.etcdir")/seaweedfs/master.conf" }