Create short lived ssh key for enable-ssh-admin.sh
[apex-tripleo-heat-templates.git] / tools / yaml-validate.py
index 3a2691d..c322962 100755 (executable)
@@ -31,12 +31,14 @@ envs_containing_endpoint_map = ['tls-endpoints-public-dns.yaml',
                                 'tls-endpoints-public-ip.yaml',
                                 'tls-everywhere-endpoints-dns.yaml']
 ENDPOINT_MAP_FILE = 'endpoint_map.yaml'
-OPTIONAL_SECTIONS = ['service_workflow_tasks']
+OPTIONAL_SECTIONS = ['workflow_tasks']
 REQUIRED_DOCKER_SECTIONS = ['service_name', 'docker_config', 'puppet_config',
                             'config_settings', 'step_config']
 OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks',
-                            'service_config_settings', 'host_prep_tasks',
-                            'metadata_settings', 'kolla_config']
+                            'post_upgrade_tasks', 'update_tasks',
+                            'service_config_settings',
+                            'host_prep_tasks', 'metadata_settings',
+                            'kolla_config', 'logging_source', 'logging_groups']
 REQUIRED_DOCKER_PUPPET_CONFIG_SECTIONS = ['config_volume', 'step_config',
                                           'config_image']
 OPTIONAL_DOCKER_PUPPET_CONFIG_SECTIONS = [ 'puppet_tags', 'volumes' ]
@@ -50,88 +52,64 @@ PARAMETER_DEFINITION_EXCLUSIONS = {'ManagementNetCidr': ['default'],
                                    'ExternalAllocationPools': ['default'],
                                    'StorageNetCidr': ['default'],
                                    'StorageAllocationPools': ['default'],
-                                   'StorageMgmtNetCidr': ['default',
-                                                          # FIXME
-                                                          'description'],
+                                   'StorageMgmtNetCidr': ['default'],
                                    'StorageMgmtAllocationPools': ['default'],
                                    'TenantNetCidr': ['default'],
                                    'TenantAllocationPools': ['default'],
                                    'InternalApiNetCidr': ['default'],
+                                   'InternalApiAllocationPools': ['default'],
                                    'UpdateIdentifier': ['description'],
+                                   'key_name': ['default'],
+                                   # There's one template that defines this
+                                   # differently, and I'm not sure if we can
+                                   # safely change it.
+                                   'EC2MetadataIp': ['default'],
+                                   # Same as EC2MetadataIp
+                                   'ControlPlaneDefaultRoute': ['default'],
                                    # TODO(bnemec): Address these existing
                                    # inconsistencies.
-                                   'NeutronMetadataProxySharedSecret': [
-                                       'description', 'hidden'],
                                    'ServiceNetMap': ['description', 'default'],
-                                   'EC2MetadataIp': ['default'],
                                    'network': ['default'],
                                    'ControlPlaneIP': ['default',
                                                       'description'],
                                    'ControlPlaneIp': ['default',
                                                       'description'],
                                    'NeutronBigswitchLLDPEnabled': ['default'],
-                                   'NeutronEnableL2Pop': ['description'],
                                    'NeutronWorkers': ['description'],
-                                   'TenantIpSubnet': ['description'],
-                                   'ExternalNetName': ['description'],
-                                   'ControlPlaneDefaultRoute': ['default'],
-                                   'StorageMgmtNetName': ['description'],
                                    'ServerMetadata': ['description'],
-                                   'InternalApiIpUri': ['description'],
-                                   'UpgradeLevelNovaCompute': ['default'],
-                                   'StorageMgmtIpUri': ['description'],
                                    'server': ['description'],
                                    'servers': ['description'],
-                                   'FixedIPs': ['description'],
-                                   'ExternalIpSubnet': ['description'],
-                                   'NeutronBridgeMappings': ['description'],
                                    'ExtraConfig': ['description'],
-                                   'InternalApiIpSubnet': ['description'],
                                    'DefaultPasswords': ['description',
                                                         'default'],
                                    'BondInterfaceOvsOptions': ['description',
                                                                'default',
                                                                'constraints'],
                                    'KeyName': ['constraints'],
-                                   'TenantNetName': ['description'],
-                                   'StorageIpSubnet': ['description'],
                                    'OVNSouthboundServerPort': ['description'],
                                    'ExternalInterfaceDefaultRoute':
                                        ['description', 'default'],
-                                   'ExternalIpUri': ['description'],
+                                   'ManagementInterfaceDefaultRoute':
+                                       ['description', 'default'],
                                    'IPPool': ['description'],
-                                   'ControlPlaneNetwork': ['description'],
                                    'SSLCertificate': ['description',
                                                       'default',
                                                       'hidden'],
                                    'HostCpusList': ['default', 'constraints'],
-                                   'InternalApiAllocationPools': ['default'],
                                    'NodeIndex': ['description'],
                                    'name': ['description', 'default'],
-                                   'StorageNetName': ['description'],
-                                   'ManagementNetName': ['description'],
-                                   'NeutronPublicInterface': ['description'],
-                                   'RoleParameters': ['description'],
-                                   'ManagementInterfaceDefaultRoute':
-                                       ['default'],
                                    'image': ['description', 'default'],
                                    'NeutronBigswitchAgentEnabled': ['default'],
                                    'EndpointMap': ['description', 'default'],
                                    'DockerManilaConfigImage': ['description',
                                                                'default'],
-                                   'NetworkName': ['default', 'description'],
-                                   'StorageIpUri': ['description'],
-                                   'InternalApiNetName': ['description'],
-                                   'NeutronTunnelTypes': ['description'],
                                    'replacement_policy': ['default'],
-                                   'StorageMgmtIpSubnet': ['description'],
                                    'CloudDomain': ['description', 'default'],
-                                   'key_name': ['default', 'description'],
                                    'EnableLoadBalancer': ['description'],
                                    'ControllerExtraConfig': ['description'],
                                    'NovaComputeExtraConfig': ['description'],
                                    'controllerExtraConfig': ['description'],
-                                   'DockerSwiftConfigImage': ['default'],
+                                   'DockerSwiftConfigImage': ['default']
                                    }
 
 PREFERRED_CAMEL_CASE = {
@@ -139,6 +117,22 @@ PREFERRED_CAMEL_CASE = {
     'haproxy': 'HAProxy',
 }
 
+# Overrides for docker/puppet validation
+# <filename>: True explicitly enables validation
+# <filename>: False explicitly disables validation
+#
+# If a filename is not found in the overrides then the top level directory is
+# used to determine which validation method to use.
+VALIDATE_PUPPET_OVERRIDE = {
+  # docker/service/sshd.yaml is a variation of the puppet sshd service
+  './docker/services/sshd.yaml': True,
+  # qdr aliases rabbitmq service to provide alternative messaging backend
+  './puppet/services/qdr.yaml': False,
+}
+VALIDATE_DOCKER_OVERRIDE = {
+  # docker/service/sshd.yaml is a variation of the puppet sshd service
+  './docker/services/sshd.yaml': False,
+}
 
 def exit_usage():
     print('Usage %s <yaml file or directory>' % sys.argv[0])
@@ -459,12 +453,14 @@ def validate(filename, param_map):
                   % filename)
             return 1
 
-        # qdr aliases rabbitmq service to provide alternative messaging backend
-        if (filename.startswith('./puppet/services/') and
-                filename not in ['./puppet/services/qdr.yaml']):
+        if VALIDATE_PUPPET_OVERRIDE.get(filename, False) or (
+                filename.startswith('./puppet/services/') and
+                VALIDATE_PUPPET_OVERRIDE.get(filename, True)):
             retval = validate_service(filename, tpl)
 
-        if filename.startswith('./docker/services/'):
+        if VALIDATE_DOCKER_OVERRIDE.get(filename, False) or (
+                filename.startswith('./docker/services/') and
+                VALIDATE_DOCKER_OVERRIDE.get(filename, True)):
             retval = validate_docker_service(filename, tpl)
 
         if filename.endswith('hyperconverged-ceph.yaml'):