diff options
Diffstat (limited to 'playbooks.d/git-server/playbook.bash')
-rw-r--r-- | playbooks.d/git-server/playbook.bash | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/playbooks.d/git-server/playbook.bash b/playbooks.d/git-server/playbook.bash new file mode 100644 index 0000000..ac4f2da --- /dev/null +++ b/playbooks.d/git-server/playbook.bash @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +playbook_add() { + notice "$BASHTARD_PLAYBOOK" "Installing packages" + pkg install "$(config "pkg.git")" + + notice "$BASHTARD_PLAYBOOK" "Creating user 'git'" + useradd \ + --home-dir "$(config "git.repodir")" \ + --create-home \ + --shell "$(config "fs.bindir")/git-shell" \ + "$(config "git.user")" + + playbook_sync +} + +playbook_sync() { + notice "$BASHTARD_PLAYBOOK" "Setting up authorized_keys" + mkdir -pv -- "$(config "git.repodir")/.ssh" + + cat "$BASHTARD_ETCDIR/playbooks.d/$BASHTARD_PLAYBOOK/share/pubkeys.d/"* > "$(config "git.repodir")/.ssh/authorized_keys" + + chown -Rv "$(config "git.user"):$(config "git.user")" "$(config "git.repodir")/.ssh" + chmod -v 700 "$(config "git.repodir")/.ssh" + chmod -v 644 "$(config "git.repodir")/.ssh/authorized_keys" + + notice "$BASHTARD_PLAYBOOK" "Ensuring all desired repositories exist" + while read -r repo + do + local name="$(config "git.repos.$repo.name" "$repo")" + local path="$(config "git.repodir")/$(config "git.repos.$repo.path" "$name")" + + info "$BASHTARD_PLAYBOOK" "Ensuring $name exists ($repo)" + + if [[ ! -d "$path" ]] + then + notice "$BASHTARD_PLAYBOOK" "Creating bare repository at $path" + sudo -u git mkdir -pv -- "$path" + sudo -u git git -C "$path" --bare init + fi + + printf "$(config "git.repos.$repo.description" "Nondescript")\n" > "$path/description" + done < <(config_subkeys "git.repos") +} + +playbook_del() { + notice "$BASHTARD_PLAYBOOK" "Cleaning up repodir" + rm -frv --one-file-system -- "$(config "git.repodir")" + userdel "$(config "git.user")" +} |