mirror of
https://github.com/outbackdingo/matchbox.git
synced 2026-01-27 10:19:35 +00:00
* Refactor examples to boot provision minimal hosts with Fedora CoreOS or Flatcar Linux * Remove the etcd3 cluster example or other specific kinds of hosts * Update script get-fedora-coreos * Remove script get-coreos
115 lines
2.5 KiB
Bash
Executable File
115 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Create a virtual bridge with PXE services and matchbox
|
|
# USAGE: ./scripts/devnet create [example]
|
|
# USAGE: ./scripts/devnet status
|
|
# USAGE: ./scripts/devnet destroy
|
|
set -u
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
EXAMPLE=${2:-}
|
|
# Local Container Runtime (docker)
|
|
CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-docker}"
|
|
BRIDGE=metal0
|
|
ASSETS_DIR="${ASSETS_DIR:-$PWD/examples/assets}"
|
|
CONFIG_DIR="${CONFIG_DIR:-$PWD/examples/etc/matchbox}"
|
|
|
|
MATCHBOX_ARGS=""
|
|
|
|
if [ "$EUID" -ne 0 ]
|
|
then echo "Please run as root"
|
|
exit
|
|
fi
|
|
|
|
function main {
|
|
if [ "$#" -eq 0 ]; then
|
|
usage
|
|
exit 2
|
|
fi
|
|
case "$1" in
|
|
"create") create;;
|
|
"status") status;;
|
|
"destroy") destroy;;
|
|
*)
|
|
usage
|
|
exit 2
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function usage {
|
|
echo "USAGE: ${0##*/} <command>"
|
|
echo "Commands:"
|
|
echo -e "\tcreate\tcreate matchbox and PXE services on the bridge"
|
|
echo -e "\tstatus\tshow the status of matchbox and dnsmasq"
|
|
echo -e "\tdestroy\tdestroy the services on the bridge"
|
|
}
|
|
|
|
function create {
|
|
case "$CONTAINER_RUNTIME" in
|
|
"docker") docker_create;;
|
|
*) docker_create;;
|
|
esac
|
|
}
|
|
|
|
function status {
|
|
case "$CONTAINER_RUNTIME" in
|
|
"docker") docker_status;;
|
|
*) docker_status;;
|
|
esac
|
|
}
|
|
|
|
function destroy {
|
|
case "$CONTAINER_RUNTIME" in
|
|
"docker") docker_destroy;;
|
|
*) docker_destroy;;
|
|
esac
|
|
}
|
|
|
|
function docker_create {
|
|
if [ -z "$EXAMPLE" ]; then
|
|
echo "Starting matchbox"
|
|
else
|
|
echo "Starting matchbox configured to boot $EXAMPLE"
|
|
fi
|
|
|
|
if [ -z "$EXAMPLE" ]; then
|
|
# Mount a data volume with assets and enable gRPC
|
|
MATCHBOX_ARGS="-rpc-address=0.0.0.0:8081"
|
|
DATA_MOUNT=""
|
|
else
|
|
# Mount the given EXAMPLE
|
|
DATA_MOUNT="-v $PWD/examples:/var/lib/matchbox:Z -v $DIR/../examples/groups/$EXAMPLE:/var/lib/matchbox/groups:Z"
|
|
fi
|
|
|
|
docker run --name matchbox \
|
|
-d \
|
|
-p 8080:8080 \
|
|
-p 8081:8081 \
|
|
-v $CONFIG_DIR:/etc/matchbox:Z \
|
|
-v $ASSETS_DIR:/var/lib/matchbox/assets:Z \
|
|
$DATA_MOUNT \
|
|
quay.io/poseidon/matchbox:latest -address=0.0.0.0:8080 -log-level=debug $MATCHBOX_ARGS
|
|
|
|
echo "Starting dnsmasq to provide DHCP/TFTP/DNS services"
|
|
docker run --name dnsmasq \
|
|
-d \
|
|
--cap-add=NET_ADMIN \
|
|
-v $PWD/contrib/dnsmasq/docker0.conf:/etc/dnsmasq.conf:Z \
|
|
quay.io/poseidon/dnsmasq:f4623c508ff3fbc467285de1ede61126624b91ac -d
|
|
}
|
|
|
|
function docker_status {
|
|
docker logs matchbox
|
|
docker logs dnsmasq
|
|
}
|
|
|
|
function docker_destroy {
|
|
docker stop matchbox
|
|
docker stop dnsmasq
|
|
docker rm matchbox
|
|
docker rm dnsmasq
|
|
}
|
|
|
|
main $@
|