Statistiques
| Révision :

root / trunk / shell / start-compute-node @ 35

Historique | Voir | Annoter | Télécharger (5,16 ko)

1
#! /bin/bash
2
#
3
# Start a fresh node (cloned from the compute-node model).
4
#
5
# Get the directory of the script.
6
SCRIPT_PATH=`dirname $0`
7
# Get the script name.
8
SCRIPT_NAME=`basename $0`
9
if [ "x$1" == "x" ]
10
  then
11
     echo
12
     echo Missing parameter. Aborting!
13
     echo
14
     echo Usage: $SCRIPT_NAME node_number
15
     echo
16
     exit 1
17
  else
18
    echo "node_number: $1"
19
    NODE_NUMBER=$(($1))
20
    NODE_NUMBER_STRING=$NODE_NUMBER
21
    while [ ${#NODE_NUMBER_STRING} -lt 3 ]
22
      do
23
        NODE_NUMBER_STRING="0$NODE_NUMBER_STRING"
24
    done
25
fi
26
echo $NODE_NUMBER_STRING
27
#exit 0
28
# Source the common configuration variables.
29
. $SCRIPT_PATH/c-i-a-b.common
30
#
31
# Check that the virtual machine does not already exist.
32
#
33
CURRENT_HOST_NAME=${COMPUTE_NODE_NAME_PREFIX}${NODE_NUMBER_STRING}
34
IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
35
if [ -n "$IS_RUNNING" ]
36
  then
37
    echo
38
    echo The \"$CURRENT_HOST_NAME\" domU already exists. Aborting!
39
    echo
40
    exit 1
41
fi
42

    
43
# Create the VM system disk (a snapshot of the model disk).
44
COMPUTE_NODE_SYSTEM_DISK="${SYSTEM_DISK_CLONE_PREFIX}${NODE_NUMBER_STRING}${SYSTEM_DISK_CLONE_POSTFIX}"
45
lvcreate -L$SYSTEM_DISK_CLONE_SIZE -s \
46
         -n  $COMPUTE_NODE_SYSTEM_DISK \
47
         $SYSTEM_DISK_MASTER
48
# DO NOT CREATE A FILE SYSTEM ON THE SNAPSHOT!
49
# Create the swap volume for the compute node
50
COMPUTE_NODE_SWAP_DISK="${SWAP_DISK_PREFIX}${NODE_NUMBER_STRING}${SWAP_DISK_POSTFIX}"
51
lvcreate -L $SWAP_DISK_SIZE \
52
         -n $COMPUTE_NODE_SWAP_DISK \
53
         $SWAP_DISK_LOGICAL_VOLUME
54
mkswap $SWAP_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SWAP_DISK
55
# Mount the system disk to copy all the specific files.
56
mount $SWAP_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SYSTEM_DISK \
57
      $COMPUTE_NODE_DISK_MOUNT_POINT
58
#
59
# Configure the specific files from templates
60
#
61
# /etc/network/interfaces
62
CURRENT_PATH=/etc/network
63
cp templates$CURRENT_PATH/interfaces \
64
   $COMPUTE_NODE_DISK_MOUNT_POINT/$CURRENT_PATH
65
ADDRESS="$COMPUTE_NODE_STATIC_NETWORK_PREFIX.$NODE_NUMBER"
66
rpl __STATIC_ADDRESS__ $ADDRESS  \
67
    ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
68
# /etc/hostname
69
CURRENT_PATH=/etc
70
echo $CURRENT_HOST_NAME > "${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/hostname"
71
# /etc/hosts
72
CURRENT_PATH=/etc
73
CURRENT_HOST_IP="${COMPUTE_NODE_STATIC_NETWORK_PREFIX}.${NODE_NUMBER}"
74
cp templates$CURRENT_PATH/hosts \
75
   $COMPUTE_NODE_DISK_MOUNT_POINT/$CURRENT_PATH
76
rpl __COMPUTE_NODE_IP__ $CURRENT_HOST_IP \
77
    ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
78
rpl __COMPUTE_NODE_NAME__ $CURRENT_HOST_NAME \
79
    ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
80
# /etc/resolv.conf
81
CURRENT_PATH=/etc
82
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
83
   ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
84
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
85
   ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
86
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.$FRONT_END_STATIC_NETWORK_POSTFIX" \
87
   ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
88
#
89
# Get the MAC address
90
#
91
CURRENT_PATH=/etc
92
COMPUTE_NODE_MAC_ADDRESS=\
93
`awk -F, -v INDEX=$NODE_NUMBER '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$CONST_DHCP_HOSTS_FILE_BASENAME`
94
#
95
# Create the Xen configuration file from a template
96
#
97
CURRENT_PATH=/etc/xen
98
cp templates$CURRENT_PATH/compute-node.cfg \
99
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
100
rpl Template Configuration $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
101
rpl "the Xen instance compute-node" "compute-node-$NODE_NUMBER_STRING" \
102
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
103
rpl __COMPUTE_NODE_KERNEL__ $COMPUTE_NODE_KERNEL \
104
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
105
rpl __COMPUTE_NODE_RAMDISK__ $COMPUTE_NODE_RAMDISK \
106
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
107
rpl __COMPUTE_NODE_MEMORY__ $COMPUTE_NODE_MEMORY \
108
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
109
rpl __COMPUTE_NODE_VCPUS__ $COMPUTE_NODE_VCPUS \
110
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
111
CPUS_LIST=`sed -n ${NODE_NUMBER},${NODE_NUMBER}p $SCRIPT_PATH/$COMPUTE_NODE_CPUS_FILE`
112
CPUS=""
113
for i in $CPUS_LIST
114
  do
115
    if [ "x$CPUS" == "x" ]
116
      then
117
        CPUS=$i
118
      else
119
        CPUS="$CPUS,$i"
120
    fi
121
done
122
rpl __COMPUTE_NODE_CPUS__ $CPUS \
123
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
124
rpl __COMPUTE_NODE_SYSTEM_DISK__ $SYSTEM_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SYSTEM_DISK \
125
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
126
rpl __COMPUTE_NODE_SWAP_DISK__ $SYSTEM_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SWAP_DISK \
127
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
128
rpl __COMPUTE_NODE_HOST_NAME__ $CURRENT_HOST_NAME \
129
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
130
rpl __COMPUTE_NODE_IP__ $ADDRESS \
131
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
132
rpl __COMPUTE_NODE_MAC__ $COMPUTE_NODE_MAC_ADDRESS \
133
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
134
rpl __COMPUTE_NODE_BRIDGE__ $COMPUTE_NODE_BRIDGE \
135
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
136

    
137
#
138
# Umount the compute node system disk
139
#
140
umount $COMPUTE_NODE_DISK_MOUNT_POINT
141
#
142
# Start the virtual machine
143
#
144
xm create $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
145
#
146
# Wait until the virtual machine has started
147
#
148
IS_RUNNING=""
149
while [ -z "$IS_RUNNING" ]
150
  do
151
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
152
    sleep 1
153
done
154
#
155
# Pin the VCPUs to "real" CPUs.
156
#
157
VCPU_NUM=0
158
for i in $CPUS_LIST
159
  do
160
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
161
    VCPU_NUM=$((VCPU_NUM + 1))
162
done