自旋锁直到实例从 Openstack 获得它的 ip 地址
Spinlock until instance has gotten its ip address from Openstack
我正在编写一个程序,可以在需要时自动在 openstack 中创建服务器。问题是我希望程序在继续之前等到实例获得其 ip 地址。如果实例没有得到它的 ip,novaclient 将抛出异常并且对象将死亡。使用睡眠功能可以让它工作,但我不希望它成为永久解决方案。
ipAddress = None
try:
instance = nova.servers.create(name=self.hostName, image=image,
flavor=flavor, key_name="mykey",
nics=nics)
while(ipAddress == None): #<---Something like this, just actually working
for network in instance.networks['my_net']:
if re.match('\d+\.\d+\.\d+\.\d+', network):
self.ipAddress = network
break
print 'The server is waiting at IP address {0}.'.format(self.ipAddress)
except:
print "could not create webserver"
#WebManager.exception(hostname)
finally:
print("Execution Completed")
self.addToLoadbalancer()
有没有办法编写一种自旋锁或类似的东西来等待服务器获得其 ip?
任何提示都会很棒。
我设法解决了这个问题。事实证明,仅使用 novaclient 很难检测到机器何时准备就绪。通过使用 nova list
我设法获得了 IP 地址。
while 1 == 1:
result = getbash("nova list" + " | grep " + hostname + \
" | awk '{print }'").split('=')
if re.match('\d+\.\d+\.\d+\.\d+', result[-1]):
self.ipAddress = result[-1]
print 'The server is waiting at IP address {0}.'.format(self.ipAddress)
break
sleep(1)
此代码查询主机名并检查实例是否已收到 IP 地址。 getbash() 函数是一个简单的 subprocess
函数,它 return subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
的输出
我正在编写一个程序,可以在需要时自动在 openstack 中创建服务器。问题是我希望程序在继续之前等到实例获得其 ip 地址。如果实例没有得到它的 ip,novaclient 将抛出异常并且对象将死亡。使用睡眠功能可以让它工作,但我不希望它成为永久解决方案。
ipAddress = None
try:
instance = nova.servers.create(name=self.hostName, image=image,
flavor=flavor, key_name="mykey",
nics=nics)
while(ipAddress == None): #<---Something like this, just actually working
for network in instance.networks['my_net']:
if re.match('\d+\.\d+\.\d+\.\d+', network):
self.ipAddress = network
break
print 'The server is waiting at IP address {0}.'.format(self.ipAddress)
except:
print "could not create webserver"
#WebManager.exception(hostname)
finally:
print("Execution Completed")
self.addToLoadbalancer()
有没有办法编写一种自旋锁或类似的东西来等待服务器获得其 ip? 任何提示都会很棒。
我设法解决了这个问题。事实证明,仅使用 novaclient 很难检测到机器何时准备就绪。通过使用 nova list
我设法获得了 IP 地址。
while 1 == 1:
result = getbash("nova list" + " | grep " + hostname + \
" | awk '{print }'").split('=')
if re.match('\d+\.\d+\.\d+\.\d+', result[-1]):
self.ipAddress = result[-1]
print 'The server is waiting at IP address {0}.'.format(self.ipAddress)
break
sleep(1)
此代码查询主机名并检查实例是否已收到 IP 地址。 getbash() 函数是一个简单的 subprocess
函数,它 return subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)