cloudstack/agent/bindir/cloud-setup-agent.in
2011-05-06 19:54:52 -04:00

108 lines
3.7 KiB
Python
Executable File

#!/usr/bin/python
import os
import logging
import sys
import socket
from cloud.cloudException import CloudRuntimeException, CloudInternalException
from cloud.utilities import initLoging
from cloud.configFileOps import configFileOps
from cloud.globalEnv import globalEnv
from cloud.networkConfig import networkConfig
from cloud.syscfg import sysConfigFactory
from optparse import OptionParser
def getUserInputs():
print "Welcome to myCloud Setup:"
cfo = configFileOps("/etc/cloud/agent/agent.properties")
oldMgt = cfo.getEntry("host")
mgtSvr = raw_input("Please input the Management Server Name/IP:[%s]"%oldMgt)
if mgtSvr == "":
mgtSvr = oldMgt
try:
socket.getaddrinfo(mgtSvr, 443)
except:
print "Failed to resolve %s. Please input correct server name or IP."%mgtSvr
exit(1)
oldToken = cfo.getEntry("zone")
zoneToken = raw_input("Please input the Zone Token:[%s]"%oldToken)
if zoneToken == "":
zoneToken = oldToken
try:
defaultNic = networkConfig.getDefaultNetwork()
except:
print "Failed to get default route. Please configure your network to have a default route"
exit(1)
defNic = defaultNic.name
network = raw_input("Please choose which network used to create VM:[%s]"%defNic)
if network == "":
if defNic == "":
print "You need to specifiy one of Nic or bridge on your system"
exit(1)
elif network == "":
network = defNic
return [mgtSvr, zoneToken, network]
if __name__ == '__main__':
initLoging("/var/log/cloud/setupAgent.log")
glbEnv = globalEnv()
glbEnv.mode = "Agent"
glbEnv.agentMode = "Agent"
parser = OptionParser()
parser.add_option("-a", action="store_true", dest="auto", help="auto mode")
parser.add_option("-m", "--host", dest="mgt", help="management server name or IP")
parser.add_option("-z", "--zone", dest="zone", help="zone id")
parser.add_option("-p", "--pod", dest="pod", help="pod id")
parser.add_option("-c", "--cluster", dest="cluster", help="cluster id")
parser.add_option("-g", "--guid", dest="guid", help="guid")
parser.add_option("--pubNic", dest="pubNic", help="public nic")
parser.add_option("--prvNic", dest="prvNic", help="private nic")
parser.add_option("--guestNic", dest="guestNic", help="guest nic")
(options, args) = parser.parse_args()
if options.auto is None:
userInputs = getUserInputs()
glbEnv.mgtSvr = userInputs[0]
glbEnv.zone = userInputs[1]
glbEnv.defaultNic = userInputs[2]
#generate UUID
glbEnv.uuid = configFileOps("/etc/cloud/agent/agent.properties").getEntry("guid")
if glbEnv.uuid == "":
glbEnv.uuid = bash("uuidgen").getStdout()
else:
for para, value in options.__dict__.items():
if value is None:
print "Missing operand:%s"%para
print "Try %s --help for more information"%sys.argv[0]
sys.exit(1)
glbEnv.uuid = options.guid
glbEnv.mgtSvr = options.mgt
glbEnv.zone = options.zone
glbEnv.pod = options.pod
glbEnv.cluster = options.cluster
glbEnv.nics.append(options.prvNic)
glbEnv.nics.append(options.pubNic)
glbEnv.nics.append(options.guestNic)
print "Starting to configure your system:"
syscfg = sysConfigFactory.getSysConfigFactory(glbEnv)
try:
syscfg.config()
print "Cloud Agent setup is Done!"
except (CloudRuntimeException,CloudInternalException), e:
print e
print "Try to restore your system:"
try:
syscfg.restore()
except:
pass