#!/usr/bin/env bash subcommand() { remote="$1" ; shift if [[ -z "$remote" ]] then info "bootstrap" "No remote given, bootstrapping from scratch" bootstrap_local return fi bootstrap_remote } bootstrap_local() { local dirs=( "$BASHTARD_ETCDIR" "$BASHTARD_ETCDIR/hosts.d" "$BASHTARD_ETCDIR/os.d" "$BASHTARD_ETCDIR/playbooks.d" "$BASHTARD_ETCDIR/playbook-registry.d/" ) local files=( "$BASHTARD_ETCDIR/defaults" "$BASHTARD_ETCDIR/playbooks" "$BASHTARD_ETCDIR/playbook-registry.d/${BASHTARD_PLATFORM[fqdn]}" "$BASHTARD_ETCDIR/hosts.d/${BASHTARD_PLATFORM[fqdn]}" "$BASHTARD_ETCDIR/os.d/${BASHTARD_PLATFORM[key]}" ) for dir in "${dirs[@]}" do notice "bootstrap" "Creating $dir" mkdir -p -- "$dir" done for file in "${files[@]}" do notice "bootstrap" "Creating $file" touch -- "$file" done } bootstrap_remote() { notice "bootstrap" "Cloning $1 to $BASHTARD_ETCDIR" git clone "$1" "$BASHTARD_ETCDIR" local files=( "$BASHTARD_ETCDIR/hosts.d/${BASHTARD_PLATFORM[fqdn]}" "$BASHTARD_ETCDIR/os.d/${BASHTARD_PLATFORM[key]}" "$BASHTARD_ETCDIR/playbook-registry.d/${BASHTARD_PLATFORM[fqdn]}" ) for file in "${files[@]}" do [[ -f "$file" ]] && continue notice "bootstrap" "Creating $file" touch -- "$file" done while read -r playbook url do notice bootstrap "Cloning $playbook from $url" git clone "$url" "$BASHTARD_ETCDIR/playbooks.d" done < "$BASHTARD_ETCDIR/playbooks" }