mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-22 14:11:07 +02:00
Script to create basic config-drive
New script that creates a basic config-drive, ideal to testing purpose.
This commit is contained in:
parent
8f3fc749c2
commit
63d519b992
152
contrib/create-basic-configdrive
Executable file
152
contrib/create-basic-configdrive
Executable file
@ -0,0 +1,152 @@
|
||||
#!/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) [-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
|
||||
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user