diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst index be62fd4ea..588096ea9 100644 --- a/doc/source/configuration.rst +++ b/doc/source/configuration.rst @@ -547,6 +547,9 @@ Example configuration:: Nodepool expects that user to exist after running the script indicated by ``setup``. Default ``jenkins`` + ``key-name`` + If provided, named keypair in nova that will be provided to server create. + ``private-key`` Default ``/var/lib/jenkins/.ssh/id_rsa`` diff --git a/nodepool/cmd/config_validator.py b/nodepool/cmd/config_validator.py index 7e7d1f126..5d1316117 100644 --- a/nodepool/cmd/config_validator.py +++ b/nodepool/cmd/config_validator.py @@ -34,6 +34,7 @@ class ConfigValidator: 'pause': bool, 'min-ram': int, 'name-filter': str, + 'key-name': str, 'diskimage': str, 'meta': dict, 'username': str, diff --git a/nodepool/config.py b/nodepool/config.py index 21916747e..f812b551f 100644 --- a/nodepool/config.py +++ b/nodepool/config.py @@ -62,6 +62,7 @@ class Provider(ConfigValue): for k in new_images: if (new_images[k].min_ram != old_images[k].min_ram or new_images[k].name_filter != old_images[k].name_filter or + new_images[k].key_name != old_images[k].key_name or new_images[k].username != old_images[k].username or new_images[k].user_home != old_images[k].user_home or new_images[k].private_key != old_images[k].private_key or @@ -236,6 +237,7 @@ def loadConfig(config_path): p.images[i.name] = i i.min_ram = image['min-ram'] i.name_filter = image.get('name-filter', None) + i.key_name = image.get('key-name', None) i.username = image.get('username', 'jenkins') i.user_home = image.get('user-home', '/home/jenkins') i.pause = bool(image.get('pause', False)) diff --git a/nodepool/nodepool.py b/nodepool/nodepool.py index 4d426ab44..ed45d6a83 100644 --- a/nodepool/nodepool.py +++ b/nodepool/nodepool.py @@ -479,6 +479,7 @@ class NodeLauncher(threading.Thread): server = self.manager.createServer( hostname, self.image.min_ram, cloud_image.external_id, name_filter=self.image.name_filter, az=self.node.az, + key_name=self.image.key_name, config_drive=self.image.config_drive, nodepool_node_id=self.node_id, nodepool_image_name=self.image.name) @@ -803,6 +804,7 @@ class SubNodeLauncher(threading.Thread): server = self.manager.createServer( hostname, self.image.min_ram, cloud_image.external_id, name_filter=self.image.name_filter, az=self.node_az, + key_name=self.image.key_name, config_drive=self.image.config_drive, nodepool_node_id=self.node_id, nodepool_image_name=self.image.name)