Permit using a known keypair when bootstrapping.

For debugging it is really inconvenient to have to wait for puppet to
*work* to log into a box and analyse what went wrong. This small patch
makes making one-time keypairs optional. Setting provider.keypair to
the name of a nova keypair will use that keypair in provisioning - but
you'll need to have the real key available via an agent for nodepool
to login itself.

Change-Id: I768ba656368ff00f9f7374ec0a46e57cd563ee61
This commit is contained in:
Robert Collins 2014-01-17 10:15:35 +13:00
parent 82a21be6b2
commit a0eac8a4f9
3 changed files with 14 additions and 5 deletions

View File

@ -436,12 +436,18 @@ class ImageUpdater(threading.Thread):
self.log.info("Creating image id: %s with hostname %s for %s in %s" %
(self.snap_image.id, hostname, self.image.name,
self.provider.name))
if self.manager.hasExtension('os-keypairs'):
if self.provider.keypair:
key_name = self.provider.keypair
key = None
use_password = False
elif self.manager.hasExtension('os-keypairs'):
key_name = hostname.split('.')[0]
key = self.manager.addKeypair(key_name)
use_password = False
else:
key_name = None
key = None
use_password = True
server_id = self.manager.createServer(
hostname, self.image.min_ram, image_name=self.image.base_image,
@ -466,7 +472,7 @@ class ImageUpdater(threading.Thread):
raise Exception("Unable to find public IP of server")
server['public_v4'] = ip
self.bootstrapServer(server, key)
self.bootstrapServer(server, key, use_password=use_password)
image_id = self.manager.createImage(server_id, hostname)
self.snap_image.external_id = image_id
@ -497,12 +503,12 @@ class ImageUpdater(threading.Thread):
" %s for image id: %s" %
(server_id, self.snap_image.id))
def bootstrapServer(self, server, key):
def bootstrapServer(self, server, key, use_password=False):
log = logging.getLogger("nodepool.image.build.%s.%s" %
(self.provider.name, self.image.name))
ssh_kwargs = dict(log=log)
if key:
if not use_password:
ssh_kwargs['pkey'] = key
else:
ssh_kwargs['password'] = server['admin_pass']
@ -646,6 +652,7 @@ class NodePool(threading.Thread):
p.service_name = provider.get('service-name')
p.region_name = provider.get('region-name')
p.max_servers = provider['max-servers']
p.keypair = provider.get('keypair', None)
p.pool = provider.get('pool')
p.rate = provider.get('rate', 1.0)
p.boot_timeout = provider.get('boot-timeout', 60)

View File

@ -386,7 +386,8 @@ class ProviderManager(TaskManager):
self.removeFloatingIP(server_id, ip['ip'])
self.deleteFloatingIP(ip['id'])
if self.hasExtension('os-keypairs'):
if (self.hasExtension('os-keypairs') and
server['key_name'] != self.provider.keypair):
for kp in self.listKeypairs():
if kp['name'] == server['key_name']:
self.log.debug('Deleting keypair for server %s' %

View File

@ -13,6 +13,7 @@ gearman-servers:
providers:
- name: fake-provider
keypair: 'if-present-use-this-keypair'
username: 'fake'
password: 'fake'
auth-url: 'fake'