[personal profile] codedot
This script was written on Solaris 11 running inside VirtualBox.

set -Cex

ROOT=/opt/euromake
DEFROUTER=10.0.2.2
NETWORK=17
MIN=10
MAX=99

cd $ROOT

mkdir -p vacant
for p in $(ls vacant); do
	test -d "vacant/$p"
	if echo $$ >"vacant/$p/lock"; then
		POOL=$p
		trap 'rm -f "vacant/$POOL/lock"' INT TERM EXIT
		break
	fi
done

test "$POOL" -ge "$MIN"
test "$POOL" -le "$MAX"

read ZONE <vacant/$POOL/next
test "$ZONE" -ge "$MIN"
test "$ZONE" -le "$MAX"

ZONENAME=$NETWORK.$POOL.$ZONE
ZONEPATH=/zones/clones/$NETWORK/$POOL/$ZONE

# Comment at your own risk!
echo \
zonecfg -z $ZONENAME <<-COMMIT
	create
	set zonepath=$ZONEPATH
	select anet linkname=net0
		set defrouter=$DEFROUTER
		set allowed-address=10.$ZONENAME
	COMMIT
echo \
zoneadm -z $ZONENAME clone origin # from /zones/origin

NEXT=$(($ZONE + 1))
if [ "$NEXT" -le "$MAX" ]; then
	echo $NEXT >|vacant/$POOL/next
	rm -f vacant/$POOL/lock
else
	mkdir -p full
	test ! -e "full/$POOL"
	mv vacant/$POOL full
fi

trap - INT TERM EXIT

root@euromake:~# find /opt/euromake
/opt/euromake
/opt/euromake/create.sh
root@euromake:~# mkdir -p /opt/euromake/vacant/{13,42}
root@euromake:~# touch /opt/euromake/vacant/13/lock
root@euromake:~# echo 98 >/opt/euromake/vacant/42/next
root@euromake:~# sh /opt/euromake/create.sh
+ ROOT=/opt/euromake
+ DEFROUTER=10.0.2.2
+ NETWORK=17
+ MIN=10
+ MAX=99
+ cd /opt/euromake
+ mkdir -p vacant
+ ls vacant
+ test -d vacant/13
+ echo 2258
+ /opt/euromake/create.sh[14]: vacant/13/lock: file already exists [File exists]
+ test -d vacant/42
+ echo 2258
+ 1> vacant/42/lock
+ POOL=42
+ trap 'rm -f "vacant/$POOL/lock"' INT TERM EXIT
+ break
+ test 42 -ge 10
+ test 42 -le 99
+ read ZONE
+ 0< vacant/42/next
+ test 98 -ge 10
+ test 98 -le 99
+ ZONENAME=17.42.98
+ ZONEPATH=/zones/clones/17/42/98
+ echo zonecfg -z 17.42.98
+ 0<< \COMMIT
create
set zonepath=/zones/clones/17/42/98
select anet linkname=net0
set defrouter=10.0.2.2
set allowed-address=10.17.42.98
COMMIT
zonecfg -z 17.42.98
+ echo zoneadm -z 17.42.98 clone origin
zoneadm -z 17.42.98 clone origin
+ NEXT=99
+ [ 99 -le 99 ]
+ echo 99
+ 1>| vacant/42/next
+ rm -f vacant/42/lock
+ trap - INT TERM EXIT
root@euromake:~# sh /opt/euromake/create.sh
+ ROOT=/opt/euromake
+ DEFROUTER=10.0.2.2
+ NETWORK=17
+ MIN=10
+ MAX=99
+ cd /opt/euromake
+ mkdir -p vacant
+ ls vacant
+ test -d vacant/13
+ echo 2262
+ /opt/euromake/create.sh[14]: vacant/13/lock: file already exists [File exists]
+ test -d vacant/42
+ echo 2262
+ 1> vacant/42/lock
+ POOL=42
+ trap 'rm -f "vacant/$POOL/lock"' INT TERM EXIT
+ break
+ test 42 -ge 10
+ test 42 -le 99
+ read ZONE
+ 0< vacant/42/next
+ test 99 -ge 10
+ test 99 -le 99
+ ZONENAME=17.42.99
+ ZONEPATH=/zones/clones/17/42/99
+ echo zonecfg -z 17.42.99
+ 0<< \COMMIT
create
set zonepath=/zones/clones/17/42/99
select anet linkname=net0
set defrouter=10.0.2.2
set allowed-address=10.17.42.99
COMMIT
zonecfg -z 17.42.99
+ echo zoneadm -z 17.42.99 clone origin
zoneadm -z 17.42.99 clone origin
+ NEXT=100
+ [ 100 -le 99 ]
+ mkdir -p full
+ test ! -e full/42
+ mv vacant/42 full
+ trap - INT TERM EXIT
root@euromake:~# sh /opt/euromake/create.sh
+ ROOT=/opt/euromake
+ DEFROUTER=10.0.2.2
+ NETWORK=17
+ MIN=10
+ MAX=99
+ cd /opt/euromake
+ mkdir -p vacant
+ ls vacant
+ test -d vacant/13
+ echo 2267
+ /opt/euromake/create.sh[14]: vacant/13/lock: file already exists [File exists]
+ test '' -ge 10
root@euromake:~# find /opt/euromake
/opt/euromake
/opt/euromake/full
/opt/euromake/full/42
/opt/euromake/full/42/next
/opt/euromake/full/42/lock
/opt/euromake/create.sh
/opt/euromake/vacant
/opt/euromake/vacant/13
/opt/euromake/vacant/13/lock
root@euromake:~# rm -fr /opt/euromake/{vacant,full}
root@euromake:~# find /opt/euromake
/opt/euromake
/opt/euromake/create.sh
root@euromake:~# 

Profile

Anton Salikhmetov

November 2018

S M T W T F S
    123
45678 910
11121314151617
18192021222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 12th, 2025 06:43 am
Powered by Dreamwidth Studios