Skip to content

Instantly share code, notes, and snippets.

@kirill9617
Created February 12, 2017 11:54
Show Gist options
  • Select an option

  • Save kirill9617/59bba77dfcde5c84b9f0a6a1f3c14ead to your computer and use it in GitHub Desktop.

Select an option

Save kirill9617/59bba77dfcde5c84b9f0a6a1f3c14ead to your computer and use it in GitHub Desktop.
Script to setup cluster of coreOS in VirtualBox
#!/bin/bash
USAGE="Usage: $0 -h | [-n name-prefix] [-s size]
This script create cluster of size VBox VMs using default parameters.
Feel free to modify it.
Options:
-h This help
-n Name prefix for VMs (default: core)
-s Size of cluster (default: 3)
CREATEVDI_OPTS will be passed to create-coreos-vdi scripts
This tool creates a CoreOS VDI image to be used with VirtualBox.
"
PREFIX="core"
SIZE=3
: ${CREATEVDI_OPTS:="-V stable"}
while getopts "n:s:h" OPTION
do
case $OPTION in
n) PREFIX="$OPTARG" ;;
s) SIZE=$OPTARG ;;
h) echo "$USAGE"; exit;;
*) exit 1;;
esac
done
#загрузка образа диска
: ${IMAGE:=coreos_prod.vdi}
echo $IMAGE
if [ ! -f $IMAGE ]
then
if [ ! -f "create-coreos-vdi" ]
then
wget https://raw.githubusercontent.com/coreos/scripts/master/contrib/create-coreos-vdi
chmod +x create-coreos-vdi
fi
source ./create-coreos-vdi $CREATEVDI_OPTS
mv $VDI_IMAGE $IMAGE
fi
#генерация токена для инициализации кластера
TOKEN=$(curl http://discovery.etcd.io/new?size=$SIZE | sed 's|.*/||')
#шаблон cloud-config
CLOUD_CONFIG='#cloud-config
users:
- name: "user"
passwd: "$1$53YHkhSo$bvjpI.GPhDuC8pUfqAlrT."
groups:
- "sudo"
- "docker"
ssh-authorized-keys:
- "<SSH_KEY>"
ssh_authorized_keys:
- <SSH_KEY>
hostname: <HOSTNAME>
coreos:
etcd2:
advertise-client-urls: http://<IP>:2379,http://<IP>:4001
initial-advertise-peer-urls: http://<IP>:2380
discovery: https://discovery.etcd.io/<TOKEN>
listen-peer-urls: http://<IP>:2380,http://<IP>:7001
listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
units:
- name: etcd2.service
command: start
- name: fleet.service
command: start
- name: static.network
runtime: true
content: |
[Match]
Name=enp0s3
[Network]
DNS=192.168.15.1
Address=<IP>/24
Gateway=192.168.15.1
#'
#добавление в конфиг ssh ключей
while read l; do
if [ -z "$SSH_KEY" ]; then
SSH_KEY="$l"
else
SSH_KEY="$SSH_KEY
- $l"
fi
done < ~/.ssh/id_rsa.pub
#заполнение конфига
CLOUD_CONFIG="${CLOUD_CONFIG//<SSH_KEY>/${SSH_KEY}}"
CLOUD_CONFIG="${CLOUD_CONFIG//<TOKEN>/${TOKEN}}"
#создание сети NAT для кластера
VBoxManage natnetwork remove --netname ${PREFIX}_net
VBoxManage natnetwork add --netname ${PREFIX}_net --network "192.168.15.0/24" --dhcp off --enable
#создание ВМ
for i in $(seq 1 $SIZE)
do
NAME=$PREFIX$i
CLOUD_CONFIG_x=$CLOUD_CONFIG
public_ipv4="192.168.15.$((100+$i))"
#заполнение конфига
CLOUD_CONFIG_x="${CLOUD_CONFIG_x//<HOSTNAME>/${NAME}}"
CLOUD_CONFIG_x="${CLOUD_CONFIG_x//<IP>/${public_ipv4}}"
WORKDIR="tmp.${RANDOM}"
mkdir "$WORKDIR"
CONFIG_DIR="${WORKDIR}/openstack/latest"
CONFIG_FILE="${CONFIG_DIR}/user_data"
CONFIGDRIVE_FILE="$NAME.iso"
mkdir -p "$CONFIG_DIR"
touch ${CONFIG_FILE}
cat > ${CONFIG_FILE} << EOL
${CLOUD_CONFIG_x}
EOL
#создание config-drive
mkisofs -R -V config-2 -o "$CONFIGDRIVE_FILE" "$WORKDIR"
rm -rf $WORKDIR
#клонирование образа диска
VBoxManage clonehd $IMAGE $NAME.vdi
VBoxManage modifyhd $NAME.vdi --resize 10240
#настройка ВМ
VBoxManage createvm --name $NAME --ostype Linux26_64 --register
VBoxManage modifyvm $NAME --memory 1024
#настройка сети
VBoxManage modifyvm $NAME --nic1 natnetwork
VBoxManage modifyvm $NAME --nat-network1 ${PREFIX}_net
VBoxManage natnetwork modify --netname ${PREFIX}_net --port-forward-4 "ssh_$NAME:tcp:[]:$((1022+$i)):[$public_ipv4]:22"
VBoxManage modifyvm $NAME --nic2 nat
#проброс портов
VBoxManage modifyvm $NAME --natpf2 "ssh_$NAME,tcp,127.0.0.1,$((2200+$i)),,22"
#подключение образа диска
VBoxManage storagectl $NAME --name "SATA Controller" --add sata --controller IntelAHCI
VBoxManage storageattach $NAME --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium $NAME.vdi
#подключение config-drive
VBoxManage storagectl $NAME --name "IDE Controller" --add ide
VBoxManage storageattach $NAME --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium $NAME.iso
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment