Statistiques
| Révision :

root / trunk / python / create-compute-node.py @ 53

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

1
#! /usr/bin/python
2
#
3
#
4
# Define a main function to allow for function declaration in any order.
5
# The main program lives in the main function.
6
def main():
7
  # System modules
8
  import sys
9
  import re
10
  import string
11
  import commands
12
  # Local modules (must live in the same directory).
13
  import ciab_user_functions as cuf
14
  from ciab_common_vars import (commonVariables)
15
  #
16
  # Variables
17
  nodeNumberString = ''
18
  nodeAddress      = ''
19
  templatesDir     = ''
20
  templatesDirName = '/../templates'
21
  
22
  # Yep, the final comma is correct: it's a list of variables!
23
  nodeNumberString, = usage(sys.argv)
24
  # Must be all digits.
25
  if re.match("\D", nodeNumberString):
26
    print 
27
    print
28
    print sys.argv[0], ': invalid node number "', nodeNumberString, '".'
29
    print 'Aborting!'
30
    print
31
    print
32
    sys.exit(1)
33
  # Make sure the number is whithin the limits.
34
  if int(nodeNumberString) >= int(commonVariables['COMPUTE_NODE_MAX_NUM']):
35
    print 
36
    print
37
    print sys.argv[0], ': invalid node number "', nodeNumberString, '".'
38
    print 'Must be <', commonVariables['COMPUTE_NODE_MAX_NUM'], '.'
39
    print 'Aborting!'
40
    print
41
    print
42
    sys.exit(1)
43
  
44
  # Nomalize to three digits.
45
  while len(nodeNumberString) < 3:
46
    nodeNumberString = '0' + nodeNumberString
47
  print 'Node number string: ', nodeNumberString
48
  
49
  currentNodeName = commonVariables['COMPUTE_NODE_NAME_PREFIX'] + \
50
                    nodeNumberString
51
  # Get the templates directory.
52
  templatesDir = commands.getoutput('dirname ' + sys.argv[0]) + templatesDirName  
53
  
54
  # Check if the virtual machine we want to build is not already running.
55
  isRunning = commands.getoutput('xm list | grep ' + currentNodeName)
56
  #isRunning = commands.getoutput('xm list | grep ' + 'compute-node-model')
57
  if isRunning != '':
58
    print
59
    print
60
    print sys.argv[0], ': VM "', currentHostName, '" is already running.'
61
    print 'Aborting!'
62
    print
63
    print
64
    sys.exit(1)
65
  # Create the VM system disk (a snapshot of the compute node model disk).
66
  computeNodeSystemDisk = commonVariables['SYSTEM_DISK_CLONE_PREFIX'] + \
67
                          nodeNumberString + \
68
                          commonVariables['SYSTEM_DISK_CLONE_POSTFIX']
69
  commandString = 'lvcreate -L ' + commonVariables['SYSTEM_DISK_CLONE_SIZE'] + \
70
                          ' -s ' +\
71
                          ' -n ' + computeNodeSystemDisk + \
72
                             ' ' + commonVariables['SYSTEM_DISK_MASTER']
73
  #print commandString
74
  status = 0
75
  # FIXME!!!!!!!!!!!!!!!!!!!!!
76
  #status,output = commands.getstatusoutput(commandString)
77
  if status != 0 :
78
    print
79
    print
80
    print sys.argv[0], ': could not create VM system disk.'
81
    print output
82
    print 'Aborting!'
83
    print
84
    print
85
    sys.exit(1)
86
  # Create the VM swap volume
87
  computeNodeSwapDisk = commonVariables['SWAP_DISK_PREFIX'] + \
88
                        nodeNumberString + \
89
                        commonVariables['SWAP_DISK_POSTFIX']
90
  print computeNodeSwapDisk
91
  commandString = 'lvcreate -L ' + commonVariables['SWAP_DISK_SIZE'] + \
92
                          ' -n ' + computeNodeSwapDisk + \
93
                             ' ' + commonVariables['SWAP_DISK_LOGICAL_VOLUME']
94
  print commandString
95
  # FIXME!!!!!!!!!!!!!!!!!!!!!
96
  #status,output = commands.getstatusoutput(commandString)
97
  if status != 0 :
98
    print
99
    print
100
    print sys.argv[0], ': could not create the VM swap disk.'
101
    print output
102
    print 'Aborting!'
103
    print
104
    print
105
    sys.exit(1)
106
  commandLine = 'mkswap ' + commonVariables['SWAP_DISK_LOGICAL_VOLUME'] + \
107
                '/' + computeNodeSwapDisk
108
  print commandString
109
  # FIXME!!!!!!!!!!!!!!!!!!!!!
110
  #status,output = commands.getstatusoutput(commandString)
111
  if status != 0 :
112
    print
113
    print
114
    print sys.argv[0], ': could not format the VM swap disk.'
115
    print output
116
    print 'Aborting!'
117
    print
118
    print
119
    sys.exit(1)
120
  # Mount the VM system disk to copy all the specific files
121
  commandString = 'mount ' + commonVariables['SYSTEM_DISK_LOGICAL_VOLUME'] + \
122
                             '/' + computeNodeSystemDisk + ' ' + \
123
                             commonVariables['COMPUTE_NODE_DISK_MOUNT_POINT']
124
  print commandString
125
                           
126
  # FIXME!!!!!!!!!!!!!!!!!!!!!
127
  #status,output = commands.getstatusoutput(commandString)
128
  if status != 0 :
129
    print
130
    print
131
    print sys.argv[0], ': could not mount the VM system disk.'
132
    print output
133
    print 'Aborting!'
134
    print
135
    print
136
    sys.exit(1)
137
  
138
  # /etc/network/interfaces
139
  currentFile = '/etc/network/interfaces'
140
  commandString = 'cp ' + templatesDir + currentFile + ' ' +\
141
                   commonVariables['COMPUTE_NODE_DISK_MOUNT_POINT'] + \
142
                   currentFile
143
  print commandString
144
  nodeAddress = commonVariables['COMPUTE_NODE_STATIC_NETWORK_PREFIX'] + '.' + \
145
                nodeNumberString
146
  commandString = 'rpl __STATIC_ADDRESS__ ' + nodeAddress + ' ' + \
147
                  commonVariables['COMPUTE_NODE_DISK_MOUNT_POINT'] 
148
#  cp templates$CURRENT_PATH/interfaces \
149
#   $COMPUTE_NODE_DISK_MOUNT_POINT/$CURRENT_PATH
150
#  ADDRESS="$COMPUTE_NODE_STATIC_NETWORK_PREFIX.$NODE_NUMBER"
151
#  rpl __STATIC_ADDRESS__ $ADDRESS  \
152
#    ${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
153

    
154
  print 'Current node name: ', currentNodeName
155
  print commonVariables.keys()
156
  print commonVariables.values()
157
# End main
158

    
159
def usage(arguments):
160
  import sys
161
  if (len(arguments) < 2):
162
    print
163
    print
164
    print 'Missing parameter. Aborting'
165
    print
166
    print 'Usage: ' + arguments[0] + ' node_number'
167
    print
168
    print
169
    sys.exit(1)
170
  nodeNumberString = arguments[1]
171
  # Yep, the final comma is correct: it's a list of variables!
172
  return nodeNumberString,
173
  
174
if __name__ == "__main__":
175
  main()