Brian Picciano
8c3e6a2845
In a world where the daemon can manage more than one network, the Daemon is really responsible only for knowing which networks are currently joined, creating/joining/leaving networks, and routing incoming RPC requests to the correct network handler as needed. The new network package, with its Network interface, inherits most of the logic that Daemon used to have, leaving Daemon only the parts needed for the functionality just described. There's a lot of cleanup done here in order to really nail down the separation of concerns between the two, especially around directory creation.
106 lines
2.6 KiB
Bash
106 lines
2.6 KiB
Bash
set -e
|
|
|
|
base="shared/1-data-1-empty"
|
|
|
|
ipNet="10.6.9.0/24"
|
|
|
|
primus_base="$base/primus"
|
|
primus_ip="10.6.9.1"
|
|
|
|
secondus_base="$base/secondus"
|
|
|
|
function as_primus {
|
|
current_ip="$primus_ip"
|
|
eval "$($SHELL "$UTILS/shared-daemon-env.sh" "$primus_base")"
|
|
}
|
|
|
|
function as_secondus {
|
|
current_ip="$secondus_ip"
|
|
eval "$($SHELL "$UTILS/shared-daemon-env.sh" "$secondus_base")"
|
|
}
|
|
|
|
# Even if it's already intialized, we want to put the caller in primus'
|
|
# environment
|
|
as_primus
|
|
|
|
secondus_bootstrap="$(pwd)/secondus-bootstrap.json"
|
|
|
|
if [ ! -d "$XDG_RUNTIME_DIR/isle" ]; then
|
|
echo "Initializing shared single node network"
|
|
|
|
mkdir a
|
|
mkdir b
|
|
mkdir c
|
|
|
|
cat >daemon.yml <<EOF
|
|
vpn:
|
|
public_addr: 127.0.0.1:60000
|
|
tun:
|
|
device: isle-primus
|
|
storage:
|
|
allocations:
|
|
- data_path: a/data
|
|
meta_path: a/meta
|
|
capacity: 1
|
|
- data_path: b/data
|
|
meta_path: b/meta
|
|
capacity: 1
|
|
- data_path: c/data
|
|
meta_path: c/meta
|
|
capacity: 1
|
|
EOF
|
|
|
|
isle daemon -l debug --config-path daemon.yml >daemon.log 2>&1 &
|
|
pid="$!"
|
|
$SHELL "$UTILS/register-cleanup.sh" "$pid" "1-data-1-empty-node-network/primus"
|
|
|
|
echo "Waiting for primus daemon (process $pid) to start"
|
|
while ! [ -e "$ISLE_DAEMON_HTTP_SOCKET_PATH" ]; do sleep 1; done
|
|
|
|
echo "Creating 1-data-1-empty network"
|
|
isle network create \
|
|
--domain shared.test \
|
|
--hostname primus \
|
|
--ip-net "$ipNet" \
|
|
--name "testing"
|
|
|
|
echo "Creating secondus bootstrap"
|
|
isle hosts create \
|
|
--hostname secondus \
|
|
> "$secondus_bootstrap"
|
|
|
|
(
|
|
as_secondus
|
|
|
|
cat >daemon.yml <<EOF
|
|
vpn:
|
|
tun:
|
|
device: isle-secondus
|
|
EOF
|
|
|
|
isle daemon -l debug -c daemon.yml >daemon.log 2>&1 &
|
|
pid="$!"
|
|
$SHELL "$UTILS/register-cleanup.sh" "$pid" "1-data-1-empty-node-network/secondus"
|
|
|
|
echo "Waiting for secondus daemon (process $!) to start"
|
|
while ! [ -e "$ISLE_DAEMON_HTTP_SOCKET_PATH" ]; do sleep 1; done
|
|
|
|
echo "Joining secondus to the network"
|
|
isle network join -b "$secondus_bootstrap"
|
|
)
|
|
fi
|
|
|
|
secondus_ip="$(
|
|
nebula-cert print -json \
|
|
-path <(jq -r '.Bootstrap.Hosts["secondus"].PublicCredentials.Cert' "$secondus_bootstrap") \
|
|
| jq -r '.details.ips[0]' \
|
|
| cut -d/ -f1
|
|
)"
|
|
|
|
NETWORK_ID="$(jq '.Bootstrap.NetworkCreationParams.ID' "$secondus_bootstrap")"
|
|
export NETWORK_ID
|
|
|
|
# shared-daemon-env.sh depends on NETWORK_ID, so we re-call as_primus in order
|
|
# to fully populate the envvars we need.
|
|
as_primus
|