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. option should be used with caution.
--exclude-servers Do not export in template server resources --exclude-servers Do not export in template server resources
--exclude-volumes Do not export in template volume resources --exclude-volumes Do not export in template volume resources
--exclude-keypairs Do not export in template key pair resources
--generate-stack-data --generate-stack-data
In addition to template, generate Heat stack data In addition to template, generate Heat stack data
file. file.

View File

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

View File

@ -135,9 +135,10 @@ class TemplateGenerator(object):
region_name=region_name) region_name=region_name)
def extract_vm_details(self, exclude_servers, exclude_volumes, def extract_vm_details(self, exclude_servers, exclude_volumes,
generate_data): exclude_keypairs, generate_data):
self.exclude_servers = exclude_servers self.exclude_servers = exclude_servers
self.exclude_volumes = exclude_volumes self.exclude_volumes = exclude_volumes
self.exclude_keypairs = exclude_keypairs
self.generate_data = generate_data self.generate_data = generate_data
self.subnets = self.build_data(self.neutron.subnet_list()) 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.ports = self.build_data(self.neutron.port_list())
self.external_networks = [] self.external_networks = []
self.keys = dict( if not exclude_keypairs:
(key.name, (index, key)) self.keys = dict(
for index, key in enumerate(self.nova.keypair_list())) (key.name, (index, key))
for index, key in enumerate(self.nova.keypair_list()))
if not exclude_servers: if not exclude_servers:
self.flavors = self.build_data(self.nova.flavor_list()) self.flavors = self.build_data(self.nova.flavor_list())
@ -404,9 +406,18 @@ class TemplateGenerator(object):
properties['image'] = {'get_param': image_parameter_name} properties['image'] = {'get_param': image_parameter_name}
# Keypair # Keypair
if server.key_name and server.key_name in self.keys: if server.key_name:
resource_key = "key_%d" % self.keys[server.key_name][0] if self.exclude_keypairs or server.key_name not in self.keys:
properties['key_name'] = {'get_resource': resource_key} 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) security_groups = self.build_secgroups(resource, server)
if security_groups: if security_groups:
@ -535,8 +546,9 @@ class TemplateGenerator(object):
resources += self._extract_subnets() resources += self._extract_subnets()
resources += self._extract_secgroups() resources += self._extract_secgroups()
resources += self._extract_floating() resources += self._extract_floating()
resources += self._extract_keys()
if not self.exclude_keypairs:
resources += self._extract_keys()
if not self.exclude_servers: if not self.exclude_servers:
resources += self._extract_servers() resources += self._extract_servers()
if not self.exclude_volumes: if not self.exclude_volumes:

File diff suppressed because it is too large Load Diff