aboutsummaryrefslogtreecommitdiff
path: root/lib/subcommands
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2022-04-15 16:32:43 +0200
committerPatrick Spek <p.spek@tyil.nl>2022-04-15 16:32:43 +0200
commitd8a2f732b300cdbb892e0878fe87dbb7a0ef6d03 (patch)
treed364845506af8f3080c79df9a91bb3e32cc4b4d8 /lib/subcommands
Initial commit
Diffstat (limited to 'lib/subcommands')
-rw-r--r--lib/subcommands/bootstrap.bash72
-rw-r--r--lib/subcommands/ssh.bash39
-rw-r--r--lib/subcommands/sysinfo.bash11
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
+}