summaryrefslogtreecommitdiffstats
path: root/bin/copy-secrets
blob: 24685ede09f741efd8aadf8da2d65c9b759995c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#! /bin/sh
#
# copy-secrets system_name target
#
set -euf

system_name=$1
target=$2

nixos_config=$config_root/modules/$system_name
secrets_nix=$secrets_root/$system_name/nix
secrets_rsync=$secrets_root/$system_name/rsync

if ! test -e "$secrets_rsync"; then
  exit # nothing to do
fi

# XXX this is ugly
# Notice NIX_PATH used from host
# Notice secrets required to evaluate configuration
NIX_PATH=$NIX_PATH:nixos-config=$PWD/modules/$system_name
NIX_PATH=$NIX_PATH:secrets=$PWD/secrets/$system_name/nix
export NIX_PATH

case $(nixos-query tv.retiolum.enable 2>/dev/null) in true)
  retiolum_secret=$(nixos-query tv.retiolum.privateKeyFile)
  retiolum_uid=$(nixos-query users.extraUsers.retiolum-tinc.uid)
esac

case $(nixos-query services.ejabberd-cd.enable 2>/dev/null) in true)
  ejabberd_secret=$(nixos-query services.ejabberd-cd.certFile)
  ejabberd_uid=$(nixos-query users.extraUsers.ejabberd.uid)
esac

(set -x
  rsync \
    --rsync-path="mkdir -p \"$2\" && rsync" \
    -vzrlptD \
    "$secrets_rsync/" \
    "$target:/")

ssh "$target" -T <<EOF
set -euf

retiolum_secret=${retiolum_secret-}
retiolum_uid=${retiolum_uid-}
ejabberd_secret=${ejabberd_secret-}
ejabberd_uid=${ejabberd_uid-}

if test -n "\$retiolum_secret"; then
  chown -v "\$retiolum_uid:0" "\$retiolum_secret"
fi

if test -n "\$ejabberd_secret"; then
  chown -v "\$ejabberd_uid:0" "\$ejabberd_secret"
fi

EOF