diff options
Diffstat (limited to 'playbooks.d/seaweedfs-master')
-rw-r--r-- | playbooks.d/seaweedfs-master/description.txt | 1 | ||||
-rw-r--r-- | playbooks.d/seaweedfs-master/etc/defaults | 1 | ||||
-rw-r--r-- | playbooks.d/seaweedfs-master/playbook.bash | 95 | ||||
-rw-r--r-- | playbooks.d/seaweedfs-master/share/master.conf | 8 |
4 files changed, 105 insertions, 0 deletions
diff --git a/playbooks.d/seaweedfs-master/description.txt b/playbooks.d/seaweedfs-master/description.txt new file mode 100644 index 0000000..d14afca --- /dev/null +++ b/playbooks.d/seaweedfs-master/description.txt @@ -0,0 +1 @@ +Scalable object storage cluster diff --git a/playbooks.d/seaweedfs-master/etc/defaults b/playbooks.d/seaweedfs-master/etc/defaults new file mode 100644 index 0000000..2578831 --- /dev/null +++ b/playbooks.d/seaweedfs-master/etc/defaults @@ -0,0 +1 @@ +svc.seaweedfs-master=seaweedfs-master diff --git a/playbooks.d/seaweedfs-master/playbook.bash b/playbooks.d/seaweedfs-master/playbook.bash new file mode 100644 index 0000000..34e46c1 --- /dev/null +++ b/playbooks.d/seaweedfs-master/playbook.bash @@ -0,0 +1,95 @@ +#!/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" +} diff --git a/playbooks.d/seaweedfs-master/share/master.conf b/playbooks.d/seaweedfs-master/share/master.conf new file mode 100644 index 0000000..4126635 --- /dev/null +++ b/playbooks.d/seaweedfs-master/share/master.conf @@ -0,0 +1,8 @@ +ip=[${ip}] +port=${port} + +peers=${peers} +mdir=${mdir} + +defaultReplication=${replication} +volumeSizeLimitMB=${volume_size} |