diff options
author | Patrick Spek <p.spek@tyil.nl> | 2022-04-15 16:32:43 +0200 |
---|---|---|
committer | Patrick Spek <p.spek@tyil.nl> | 2022-04-15 16:32:43 +0200 |
commit | d8a2f732b300cdbb892e0878fe87dbb7a0ef6d03 (patch) | |
tree | d364845506af8f3080c79df9a91bb3e32cc4b4d8 /lib/subcommands |
Initial commit
Diffstat (limited to 'lib/subcommands')
-rw-r--r-- | lib/subcommands/bootstrap.bash | 72 | ||||
-rw-r--r-- | lib/subcommands/ssh.bash | 39 | ||||
-rw-r--r-- | lib/subcommands/sysinfo.bash | 11 |
3 files changed, 122 insertions, 0 deletions
diff --git a/lib/subcommands/bootstrap.bash b/lib/subcommands/bootstrap.bash new file mode 100644 index 0000000..b2e540b --- /dev/null +++ b/lib/subcommands/bootstrap.bash @@ -0,0 +1,72 @@ +#!/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" +} diff --git a/lib/subcommands/ssh.bash b/lib/subcommands/ssh.bash new file mode 100644 index 0000000..19ead9a --- /dev/null +++ b/lib/subcommands/ssh.bash @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +subcommand() +{ + local ssh="$(config app.ssh)" + + if [[ ! -d "$BASHTARD_ETCDIR/hosts.d" ]] + then + crit "$BASHTARD_NAME/ssh" "Could not find hosts file at $BASHTARD_ETCDIR/hosts.d" + return 3 + fi + + chgdir "$BASHTARD_ETCDIR/hosts.d" + + for node in * + do + local user + local host + local ip + + user="$(config_for "$node" "ssh.user" "root")" + + # Try IPv6 first + host="$(config_for "$node" "ssh.host" "$(config_for "$node" "vpn.ipv6")")" + + if [[ -z "$host" ]] + then + # Otherwise try IPv4 + host="$(config_for "$node" "ssh.host" "$(config_for "$node" "vpn.ipv4")")" + fi + + notice "ssh" "$user@$node ($host) > $*" + + $ssh "$user@$host" "$@" + + unset user + unset host + done +} diff --git a/lib/subcommands/sysinfo.bash b/lib/subcommands/sysinfo.bash new file mode 100644 index 0000000..5010798 --- /dev/null +++ b/lib/subcommands/sysinfo.bash @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +subcommand() { + printf "%-15s %s\n" "basedir" "$BASHTARD_BASEDIR" + printf "%-15s %s\n" "etcdir" "$BASHTARD_ETCDIR" + + for key in "${!BASHTARD_PLATFORM[@]}" + do + printf "%-15s %s\n" "$key" "${BASHTARD_PLATFORM[$key]}" + done +} |