Browse Source
new: [vps] add local command ``vps``
new: [vps] add local command ``vps``
This command is intended to be run from the local vps being targeted. Signed-off-by: Valentin Lab <valentin.lab@kalysto.org>rc1
Valentin Lab
4 years ago
1 changed files with 109 additions and 0 deletions
-
109bin/vps
@ -0,0 +1,109 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
|
||||
|
. /etc/shlib |
||||
|
|
||||
|
include common |
||||
|
include parse |
||||
|
include cmdline |
||||
|
include config |
||||
|
|
||||
|
|
||||
|
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && SOURCED=true |
||||
|
|
||||
|
version=0.1 |
||||
|
desc='Install backup' |
||||
|
help="" |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
[ "$SOURCED" ] && return 0 |
||||
|
|
||||
|
## |
||||
|
## Command line processing |
||||
|
## |
||||
|
|
||||
|
|
||||
|
cmdline.spec.gnu |
||||
|
cmdline.spec.reporting |
||||
|
|
||||
|
cmdline.spec.gnu install |
||||
|
cmdline.spec.gnu backup |
||||
|
|
||||
|
|
||||
|
cmdline.spec::cmd:install:run() { |
||||
|
|
||||
|
: |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
cmdline.spec:install:cmd:backup:run() { |
||||
|
|
||||
|
: :posarg: BACKUP_SERVER 'Target backup server' |
||||
|
|
||||
|
: :optval: --service-name,-s "YAML service name in compose |
||||
|
file to check for existence of key. |
||||
|
Defaults to 'rsync-backup'" |
||||
|
: :optval: --compose-file,-f "Compose file location. Defaults to |
||||
|
the value of '\$DEFAULT_COMPOSE_FILE'" |
||||
|
|
||||
|
local service_name compose_file |
||||
|
|
||||
|
[ -e "/etc/compose/local.conf" ] && source /etc/compose/local.conf |
||||
|
|
||||
|
compose_file=${opt_compose_file:-$DEFAULT_COMPOSE_FILE} |
||||
|
service_name=${opt_service_name:-rsync-backup} |
||||
|
|
||||
|
if ! [ -e "$compose_file" ]; then |
||||
|
err "Compose file not found in '$compose_file'." |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
## XXXvlab: far from perfect as it mimics and depends internal |
||||
|
## logic of current default way to get a domain in compose-core |
||||
|
host=$(hostname) |
||||
|
if ! egrep "^$host:" "$compose_file" >/dev/null && |
||||
|
! egrep "^\s+domain:\s+$host\s*$" "$compose_file" >/dev/null; then |
||||
|
err "Can't find domain '$host' in compose file '$compose_file'." |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
ip=$(getent ahosts "$host" | egrep "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s+" | head -n 1 | cut -f 1 -d " ") || return 1 |
||||
|
my_ip=$(curl -s myip.kal.fr) |
||||
|
if [ "$ip" != "$my_ip" ]; then |
||||
|
err "IP of '$host' ($ip) doesn't match mine ($my_ip)." |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
if [ -e "/root/.ssh/rsync_rsa" ]; then |
||||
|
if ! [ -e "/root/.ssh/rsync_rsa.pub" ]; then |
||||
|
err "Didn't find public key in '/root/.ssh/rsync_rsa.pub'. (Private key is present !)." |
||||
|
return 1 |
||||
|
fi |
||||
|
else |
||||
|
Wrap -d "Creating rsync key pair" -- \ |
||||
|
ssh-keygen -t rsa -N \"\" -f /root/.ssh/rsync_rsa -C "rsync@$host" |
||||
|
fi |
||||
|
|
||||
|
if egrep "^$service_name:" "$compose_file" >/dev/null; then |
||||
|
err "There's already a backup service named '$service_name'" |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
cat <<EOF >> "$compose_file" |
||||
|
|
||||
|
$service_name: |
||||
|
options: |
||||
|
ident: $host |
||||
|
target: $BACKUP_SERVER |
||||
|
private-key: | |
||||
|
$(cat /root/.ssh/rsync_rsa | sed -r 's/^/ /g') |
||||
|
EOF |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
cmdline::parse "$@" |
Write
Preview
Loading…
Cancel
Save
Reference in new issue