Add new option to exclude key pairs from template

When option used, nova key pairs will not be exported as resources
in generated template.

Change-Id: I763f0ab151a7740144240fdae750c7c31cd24cd0
This commit is contained in:
ala.rezmerita 2015-08-27 15:41:23 +02:00
parent 3de772dbd6
commit 154afdee8c
4 changed files with 670 additions and 61 deletions

View File

@ -52,6 +52,7 @@ Usage
option should be used with caution.
--exclude-servers Do not export in template server resources
--exclude-volumes Do not export in template volume resources
--exclude-keypairs Do not export in template key pair resources
--generate-stack-data
In addition to template, generate Heat stack data
file.

View File

@ -69,6 +69,9 @@ def main(args=None):
parser.add_argument('--exclude-volumes', action='store_true',
default=False,
help="Do not export in template volume resources")
parser.add_argument('--exclude-keypairs', action='store_true',
default=False,
help="Do not export in template key pair resources")
parser.add_argument('--generate-stack-data', action='store_true',
default=False,
help="In addition to template, generate Heat "
@ -81,7 +84,9 @@ def main(args=None):
endpoint_type=args.endpoint_type,
region_name=args.region)
template = flame.template_generator
template.extract_vm_details(args.exclude_servers, args.exclude_volumes,
template.extract_vm_details(args.exclude_servers,
args.exclude_volumes,
args.exclude_keypairs,
args.generate_stack_data)
template.extract_data()
print("### Heat Template ###")

View File

@ -135,9 +135,10 @@ class TemplateGenerator(object):
region_name=region_name)
def extract_vm_details(self, exclude_servers, exclude_volumes,
generate_data):
exclude_keypairs, generate_data):
self.exclude_servers = exclude_servers
self.exclude_volumes = exclude_volumes
self.exclude_keypairs = exclude_keypairs
self.generate_data = generate_data
self.subnets = self.build_data(self.neutron.subnet_list())
@ -148,9 +149,10 @@ class TemplateGenerator(object):
self.ports = self.build_data(self.neutron.port_list())
self.external_networks = []
self.keys = dict(
(key.name, (index, key))
for index, key in enumerate(self.nova.keypair_list()))
if not exclude_keypairs:
self.keys = dict(
(key.name, (index, key))
for index, key in enumerate(self.nova.keypair_list()))
if not exclude_servers:
self.flavors = self.build_data(self.nova.flavor_list())
@ -404,9 +406,18 @@ class TemplateGenerator(object):
properties['image'] = {'get_param': image_parameter_name}
# Keypair
if server.key_name and server.key_name in self.keys:
resource_key = "key_%d" % self.keys[server.key_name][0]
properties['key_name'] = {'get_resource': resource_key}
if server.key_name:
if self.exclude_keypairs or server.key_name not in self.keys:
key_parameter_name = "%s_key" % resource_name
description = ("Key for server %s" % resource_name)
constraints = [{'custom_constraint': "nova.keypair"}]
resource.add_parameter(key_parameter_name, description,
default=server.key_name,
constraints=constraints)
properties['key_name'] = {'get_param': key_parameter_name}
else:
resource_key = "key_%d" % self.keys[server.key_name][0]
properties['key_name'] = {'get_resource': resource_key}
security_groups = self.build_secgroups(resource, server)
if security_groups:
@ -535,8 +546,9 @@ class TemplateGenerator(object):
resources += self._extract_subnets()
resources += self._extract_secgroups()
resources += self._extract_floating()
resources += self._extract_keys()
if not self.exclude_keypairs:
resources += self._extract_keys()
if not self.exclude_servers:
resources += self._extract_servers()
if not self.exclude_volumes:

File diff suppressed because it is too large Load Diff