# ===================================================================
#
# Unless otherwise specified, all software contained herein is licensed
-# under the Apache License, Version 2.0 (the “License”);
+# under the Apache License, Version 2.0 (the "License");
# you may not use this software except in compliance with the License.
# You may obtain a copy of the License at
#
#
#
# Unless otherwise specified, all documentation contained herein is licensed
-# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
# you may not use this documentation except in compliance with the License.
# You may obtain a copy of the License at
#
#
# ============LICENSE_END============================================
#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
#
-
import pytest
-import yaml
+from tests import cached_yaml as yaml
from .helpers import validates
from .utils.vm_types import get_vm_type_for_nova_server
-@validates('R-01455', 'R-48067', 'R-00977')
-def test_nova_servers_valid_resource_ids(heat_template):
- '''
+@validates("R-40499", "R-57282")
+def test_nova_servers_valid_resource_ids(yaml_file):
+ """
Make sure all nova servers have valid resource ids
- '''
+ """
- with open(heat_template) as fh:
+ with open(yaml_file) as fh:
yml = yaml.load(fh)
# skip if resources are not defined
vm_type = get_vm_type_for_nova_server(v1)
if not vm_type:
- continue
- vm_type = vm_type.lower()
-
- if vm_type+"_" not in k1.lower():
- invalid_nova_servers.append(k1)
+ # could not determine vm_type
+ invalid_nova_servers.append({"resource": k1, "vm_type": "none found"})
+ else:
+ k1_split = k1.split("_server_")
+ k1_prefix = k1_split[0]
+ if k1_prefix != vm_type:
+ # vm_type on server doesn't match
+ invalid_nova_servers.append({"resource": k1, "vm_type": vm_type})
+ else:
+ if len(k1_split) == 2:
+ k1_suffix = k1_split[1]
+ try:
+ int(k1_suffix)
+ except ValueError:
+ # vm_type_index is not an integer
+ invalid_nova_servers.append(
+ {
+ "resource": k1,
+ "vm_type": vm_type,
+ "vm_type_index": k1_suffix,
+ }
+ )
+ else:
+ # vm_type_index not found
+ invalid_nova_servers.append(
+ {
+ "resource": k1,
+ "vm_type": vm_type,
+ "vm_type_index": "none found",
+ }
+ )
- assert not set(invalid_nova_servers)
+ assert not invalid_nova_servers, (
+ "Invalid OS::Nova::Server resource ids detected {}. "
+ "OS::Nova::Server resource ids must be in the form "
+ "{{vm_type}}_server_{{vm_type_index}} where "
+ "{{vm_type}} is derived from flavor, image and name properties."
+ "".format(invalid_nova_servers)
+ )