mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-10 14:36:58 +02:00
This check helps to avoid exit the script with the message indicating success even though the mkisofs is missing and an image has not been created.
159 lines
3.7 KiB
Bash
Executable File
159 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
DEFAULT_ETCD_DISCOVERY="https//discovery.etcd.io/TOKEN"
|
|
DEFAULT_ETCD_ADDR="\$public_ipv4:4001"
|
|
DEFAULT_ETCD_PEER_ADDR="\$private_ipv4:7001"
|
|
|
|
USAGE="Usage: $0 -H HOSTNAME -S SSH_FILE [-p /target/path] [-d|-e|-i|-n|-t|-h]
|
|
Options:
|
|
-d URL Full URL path to discovery endpoint.
|
|
-e IP:PORT Address for client communication.
|
|
-H HOSTNAME Machine hostname.
|
|
-i IP:PORT Address for server communication.
|
|
-n NAME etcd node name.
|
|
-p DEST Create config-drive ISO image to the given path.
|
|
-S FILE SSH keys file.
|
|
-t TOKEN Token ID from https://discovery.etcd.io.
|
|
-h This help
|
|
|
|
This tool creates a basic config-drive ISO image.
|
|
"
|
|
|
|
CLOUD_CONFIG="#cloud-config
|
|
|
|
coreos:
|
|
etcd:
|
|
name: <ETCD_NAME>
|
|
discovery: <ETCD_DISCOVERY>
|
|
addr: <ETCD_ADDR>
|
|
peer-addr: <ETCD_PEER_ADDR>
|
|
ssh_authorized_keys:
|
|
- <SSH_KEY>
|
|
hostname: <HOSTNAME>
|
|
"
|
|
REGEX_SSH_FILE="^ssh-(rsa|dss|ed25519) [-A-Za-z0-9+\/]+[=]{0,2} .+"
|
|
|
|
while getopts "d:e:H:i:n:p:S:t:h" OPTION
|
|
do
|
|
case $OPTION in
|
|
d) ETCD_DISCOVERY="$OPTARG" ;;
|
|
e) ETCD_ADDR="$OPTARG" ;;
|
|
H) HNAME="$OPTARG" ;;
|
|
i) ETCD_PEER_ADDR="$OPTARG" ;;
|
|
n) ETCD_NAME="$OPTARG" ;;
|
|
p) DEST="$OPTARG" ;;
|
|
S) SSH_FILE="$OPTARG" ;;
|
|
t) TOKEN="$OPTARG" ;;
|
|
h) echo "$USAGE"; exit;;
|
|
*) exit 1;;
|
|
esac
|
|
done
|
|
|
|
# root user forbidden
|
|
if [ $(id -u) -eq 0 ]; then
|
|
echo "$0: This script should not be run as root." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# mkisofs tool check
|
|
if ! which mkisofs &>/dev/null; then
|
|
echo "$0: mkisofs tool is required to create image." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$HNAME" ]; then
|
|
echo "$0: The hostname parameter '-H' is required." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$SSH_FILE" ]; then
|
|
echo "$0: The SSH filename parameter '-S' is required." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -r "$SSH_FILE" ]]; then
|
|
echo "$0: The SSH file (${SSH_FILE}) was not found." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(cat "$SSH_FILE" | wc -l) -eq 0 ]; then
|
|
echo "$0: The SSH file (${SSH_FILE}) is empty." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(grep -v -E "$REGEX_SSH_FILE" "$SSH_FILE" | wc -l) -gt 0 ]; then
|
|
echo "$0: The SSH file (${SSH_FILE}) content is invalid." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$DEST" ]; then
|
|
DEST=$PWD
|
|
fi
|
|
|
|
if [[ ! -d "$DEST" ]]; then
|
|
echo "$0: Target path (${DEST}) do not exists." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -z "$ETCD_DISCOVERY" ] && [ ! -z "$TOKEN" ]; then
|
|
echo "$0: You cannot specify both discovery token and discovery URL." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -z "$TOKEN" ]; then
|
|
ETCD_DISCOVERY="${DEFAULT_ETCD_DISCOVERY//TOKEN/$TOKEN}"
|
|
fi
|
|
|
|
if [ -z "$ETCD_DISCOVERY" ]; then
|
|
ETCD_DISCOVERY=$DEFAULT_ETCD_DISCOVERY
|
|
fi
|
|
|
|
if [ -z "$ETCD_NAME" ]; then
|
|
ETCD_NAME=$HNAME
|
|
fi
|
|
|
|
if [ -z "$ETCD_ADDR" ]; then
|
|
ETCD_ADDR=$DEFAULT_ETCD_ADDR
|
|
fi
|
|
|
|
if [ -z "$ETCD_PEER_ADDR" ]; then
|
|
ETCD_PEER_ADDR=$DEFAULT_ETCD_PEER_ADDR
|
|
fi
|
|
|
|
|
|
WORKDIR="${DEST}/tmp.${RANDOM}"
|
|
mkdir "$WORKDIR"
|
|
trap "rm -rf '${WORKDIR}'" EXIT
|
|
|
|
CONFIG_DIR="${WORKDIR}/openstack/latest"
|
|
CONFIG_FILE="${CONFIG_DIR}/user_data"
|
|
CONFIGDRIVE_FILE="${DEST}/${HNAME}.iso"
|
|
|
|
mkdir -p "$CONFIG_DIR"
|
|
|
|
while read l; do
|
|
if [ -z "$SSH_KEY" ]; then
|
|
SSH_KEY="$l"
|
|
else
|
|
SSH_KEY="$SSH_KEY
|
|
- $l"
|
|
fi
|
|
done < "$SSH_FILE"
|
|
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<ETCD_NAME>/${ETCD_NAME}}"
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<ETCD_DISCOVERY>/${ETCD_DISCOVERY}}"
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<ETCD_ADDR>/${ETCD_ADDR}}"
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<ETCD_PEER_ADDR>/${ETCD_PEER_ADDR}}"
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<SSH_KEY>/${SSH_KEY}}"
|
|
CLOUD_CONFIG="${CLOUD_CONFIG/<HOSTNAME>/${HNAME}}"
|
|
|
|
echo "$CLOUD_CONFIG" > "$CONFIG_FILE"
|
|
|
|
mkisofs -R -V config-2 -o $CONFIGDRIVE_FILE $WORKDIR
|
|
|
|
echo
|
|
echo
|
|
echo "Success! The config-drive image was created on ${CONFIGDRIVE_FILE}"
|
|
|
|
# vim: ts=4 et
|