setup-driver.sh 5.54 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/bin/sh

set -x

DIRNAME=`dirname $0`

# Gotta know the rules!
if [ $EUID -ne 0 ] ; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

# Grab our libs
. "$DIRNAME/setup-lib.sh"
15 16 17 18 19
# Don't run setup-driver.sh twice
if [ -f $OURDIR/setup-driver-done ]; then
    echo "setup-driver already ran; not running again"
    exit 0
fi
20 21 22 23 24 25

#
# Setup nginx to show our setup/config directory.
#
if [ "$HOSTNAME" = "$CONTROLLER" ]; then
    maybe_install_packages nginx
26 27 28
    # Always remove default nginx site-enabled file, since apache must
    # listen on port 80.  But if apache2 ran prior to nginx, nginx
    # install may have failed; if so, remove its default enabled site.
29
    if [ ! $? -eq 0 ]; then
30
        rm -f /etc/nginx/sites-enabled/default
31 32
	maybe_install_packages nginx
    fi
33
    rm -f /etc/nginx/sites-enabled/default
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
    echo "$ADMIN_PASS" | htpasswd -n -i admin > /etc/nginx/htpasswd
    chown www-data:root /etc/nginx/htpasswd
    chmod 660 /etc/nginx/htpasswd
    mkdir /var/www/profile-setup
    chown www-data /var/www/profile-setup
    mount -o bind,ro $OURDIR /var/www/profile-setup/
    echo $OURDIR /var/www/profile-setup none defaults,bind 0 0 >> /etc/fstab
    cat <<EOF >/etc/nginx/sites-available/profile-setup-logs
server {
        include /etc/nginx/mime.types;
        types { text/plain log; }
        listen 7999 default_server;
        listen [::]:7999 default_server;
        root /var/www/profile-setup;
        index index.html;
        server_name _;
        location / {
                 autoindex on;
                 auth_basic "profile-setup";
                 auth_basic_user_file /etc/nginx/htpasswd;
        }
}
EOF
    ln -s /etc/nginx/sites-available/profile-setup-logs \
        /etc/nginx/sites-enabled/profile-setup-logs
59 60
    service_enable nginx
    service_restart nginx
61
fi
62
logtstart "driver"
63

64 65 66
# Copy our source code into $OURDIR for future use:
echo "*** Copying source code into $OURDIR/bin ..."
mkdir -p $OURDIR/bin
67
rsync -avz $DIRNAME/ $OURDIR/bin/
68

69 70
echo "*** Setting up root ssh pubkey access across all nodes..."

71 72 73
# All nodes need to publish public keys, and acquire others'
$DIRNAME/setup-root-ssh.sh 1> $OURDIR/setup-root-ssh.log 2>&1

74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
if [ -f $SETTINGS ]; then
    . $SETTINGS
fi

if [ "$HOSTNAME" = "$NETWORKMANAGER" ]; then

    echo "*** Waiting for ssh access to all nodes..."

    for node in $NODES ; do
	[ "$node" = "$NETWORKMANAGER" ] && continue

	SUCCESS=1
	fqdn=`getfqdn $node`
	while [ $SUCCESS -ne 0 ] ; do
	    sleep 1
	    ssh -o ConnectTimeout=1 -o PasswordAuthentication=No -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=No $fqdn /bin/ls > /dev/null
	    SUCCESS=$?
	done
	echo "*** $node is up!"
    done

    #
    # Get our hosts files setup to point to the new management network.
    # (These were created one-time in setup-lib.sh)
    #
99
    cat $OURDIR/mgmt-hosts > /etc/hosts.tmp
100 101 102
    # Some services assume they can resolve the hostname prior to network being
    # up (i.e. neutron-ovs-cleanup; see setup-ovs-node.sh).
    echo $MYIP `hostname` >> /etc/hosts.tmp
103
    cp -p /etc/hosts $OURDIR/hosts.orig
104 105 106 107 108
    cp -p /etc/hosts $OURDIR/hosts.stripped
    for node in $NODES ; do
	sed -i -e "s/[ ]$node\$//g" $OURDIR/hosts.stripped
    done
    cat $OURDIR/hosts.stripped >> /etc/hosts.tmp
109
    mv /etc/hosts.tmp /etc/hosts
110 111 112
    for node in $NODES 
    do
	[ "$node" = "$NETWORKMANAGER" ] && continue
113 114 115
	#if unified ; then
	#    continue
	#fi
116 117 118

	fqdn=`getfqdn $node`
	$SSH $fqdn mkdir -p $OURDIR
119 120 121 122
	#scp -p -o StrictHostKeyChecking=no \
	    #$SETTINGS $OURDIR/mgmt-hosts $OURDIR/mgmt-netmask \
	    #$OURDIR/data-hosts $OURDIR/data-netmask \
	    #$fqdn:$OURDIR
123
	scp -p -o StrictHostKeyChecking=no \
124
	    $OURDIR/mgmt-hosts $OURDIR/hosts.stripped $fqdn:$OURDIR
125 126
	# For now, just insert the new hosts in front of the existing ones.
	# setup-{ovs,linuxbridge}-node.sh may do differently.
127
	$SSH $fqdn "cp -p /etc/hosts $OURDIR/hosts.orig ; cat $OURDIR/mgmt-hosts > /etc/hosts.tmp ; cat $OURDIR/hosts.stripped >> /etc/hosts.tmp ; mv /etc/hosts.tmp /etc/hosts"
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
    done

    echo "*** Setting up the Management Network"

    if [ -z "${MGMTLAN}" ]; then
	echo "*** Building a VPN-based Management Network"

	$DIRNAME/setup-vpn.sh 1> $OURDIR/setup-vpn.log 2>&1

        # Give the VPN a chance to settle down
	PINGED=0
	while [ $PINGED -eq 0 ]; do
	    sleep 2
	    ping -c 1 $CONTROLLER
	    if [ $? -eq 0 ]; then
		PINGED=1
	    fi
	done
    else
	echo "*** Using $MGMTLAN as the Management Network"
    fi

150 151
    if [ "${ML2PLUGIN}" = "openvswitch" ]; then
	echo "*** Moving Interfaces into OpenVSwitch Bridges"
152

153 154 155 156 157 158
	$DIRNAME/setup-ovs.sh 1> $OURDIR/setup-ovs.log 2>&1
    else
	echo "*** Setting up Linux Bridge static network configuration"

	$DIRNAME/setup-linuxbridge.sh 1> $OURDIR/setup-linuxbridge.log 2>&1
    fi
159 160 161 162 163 164

    echo "*** Telling controller to set up OpenStack!"

    ssh -o StrictHostKeyChecking=no ${CONTROLLER} "/bin/touch $OURDIR/networkmanager-driver-done"
fi

165 166 167
# Mark things as done right here, it's safe.
touch $OURDIR/setup-driver-done

168 169 170 171 172 173 174 175 176 177 178
if [ "$HOSTNAME" = "$CONTROLLER" ]; then
    #
    # Wait for networkmanager setup to touch a special file indicating that
    # it's finished all the network stuff and we should setup the controller.
    #
    echo "*** Waiting for networkmanager to finish network configuration..."

    while [ ! -f $OURDIR/networkmanager-driver-done ]; do
	sleep 1
    done

179 180
    logtend "driver"

181 182 183 184 185 186
    echo "*** Building an Openstack!"

    exec /bin/sh -c "$DIRNAME/setup-controller.sh 1> $OURDIR/setup-controller.log 2>&1 </dev/null"

    exit 1
elif [ "$HOSTNAME" != "$NETWORKMANAGER" ]; then
187
    logtend "driver"
188 189 190
    exit 0;
fi

191
logtend "driver"
192
exit 0