From 71c0e12d3783a1e114e7d04a3cbe8c9924fcb131 Mon Sep 17 00:00:00 2001 From: Timur Sufiev Date: Tue, 26 Nov 2013 16:01:42 +0400 Subject: [PATCH] Rename manifests to make their names match 'full_service_name'. During manifest validation, if its name doesn't match 'full_service_name', skip this manifest completely. Change-Id: I5deb0c1b822df89bdd9a67db87924e0274c83083 Closes-bug: #1254625 --- .../Services/activeDirectory-manifest.yaml | 36 +++++++++++++++ muranorepository/Services/ad-manifest.yaml | 46 ------------------- ...-manifest.yaml => aspNetApp-manifest.yaml} | 0 ...ifest.yaml => aspNetAppFarm-manifest.yaml} | 0 muranorepository/Services/demo-manifest.yaml | 32 ------------- .../Services/demoService-manifest.yaml | 24 ++++++++++ ....yaml => linuxApacheService-manifest.yaml} | 0 ....yaml => linuxTelnetService-manifest.yaml} | 0 ....yaml => msSqlClusterServer-manifest.yaml} | 0 ...anifest.yaml => msSqlServer-manifest.yaml} | 0 ...-manifest.yaml => webServer-manifest.yaml} | 0 ...ifest.yaml => webServerFarm-manifest.yaml} | 0 muranorepository/api/utils.py | 2 +- muranorepository/api/v1.py | 7 +++ muranorepository/utils/parser.py | 33 +++++++------ 15 files changed, 86 insertions(+), 94 deletions(-) create mode 100644 muranorepository/Services/activeDirectory-manifest.yaml delete mode 100644 muranorepository/Services/ad-manifest.yaml rename muranorepository/Services/{asp-net-manifest.yaml => aspNetApp-manifest.yaml} (100%) rename muranorepository/Services/{asp-net-farm-manifest.yaml => aspNetAppFarm-manifest.yaml} (100%) delete mode 100644 muranorepository/Services/demo-manifest.yaml create mode 100644 muranorepository/Services/demoService-manifest.yaml rename muranorepository/Services/{apache-manifest.yaml => linuxApacheService-manifest.yaml} (100%) rename muranorepository/Services/{telnet-manifest.yaml => linuxTelnetService-manifest.yaml} (100%) rename muranorepository/Services/{mssql-cluster-manifest.yaml => msSqlClusterServer-manifest.yaml} (100%) rename muranorepository/Services/{mssql-manifest.yaml => msSqlServer-manifest.yaml} (100%) rename muranorepository/Services/{iis-manifest.yaml => webServer-manifest.yaml} (100%) rename muranorepository/Services/{iis-farm-manifest.yaml => webServerFarm-manifest.yaml} (100%) diff --git a/muranorepository/Services/activeDirectory-manifest.yaml b/muranorepository/Services/activeDirectory-manifest.yaml new file mode 100644 index 0000000..e59e92d --- /dev/null +++ b/muranorepository/Services/activeDirectory-manifest.yaml @@ -0,0 +1,36 @@ +agent: +- CreatePrimaryDC.template +- LeaveDomain.template +- SetPassword.template +- CreateSecondaryDC.template +- AskDnsIp.template +- JoinDomain.template +author: '' +description: The Active Directory Service includes one primary + and optionally a few secondary Domain Controllers, with DNS +enabled: true +full_service_name: activeDirectory +heat: +- RouterInterface.template +- Windows.template +- Network.template +- Param.template +- Subnet.template +- InstancePortWSubnet.template +- InstancePort.template +scripts: +- Install-RoleSecondaryDomainController.ps1 +- Install-RolePrimaryDomainController.ps1 +- Join-Domain.ps1 +- ImportCoreFunctions.ps1 +- Get-DnsListeningIpAddress.ps1 +- Set-LocalUserPassword.ps1 +service_display_name: Active Directory +service_version: '' +ui: +- ActiveDirectory.yaml +version: '0.1' +workflows: +- AD.xml +- Networking.xml +- Common.xml diff --git a/muranorepository/Services/ad-manifest.yaml b/muranorepository/Services/ad-manifest.yaml deleted file mode 100644 index 78ceab2..0000000 --- a/muranorepository/Services/ad-manifest.yaml +++ /dev/null @@ -1,46 +0,0 @@ -version: 0.1 -service_display_name: Active Directory - -description: >- - The Active Directory Service - includes one primary and optionally a few secondary - Domain Controllers, with DNS - -full_service_name: activeDirectory -author: Mirantis Inc. -service_version: 1.0 -enabled: True - -ui: - - ActiveDirectory.yaml - -workflows: - - AD.xml - - Networking.xml - - Common.xml - -heat: - - Windows.template - - InstancePort.template - - InstancePortWSubnet.template - - Network.template - - Param.template - - RouterInterface.template - - Subnet.template - -agent: - - SetPassword.template - - CreatePrimaryDC.template - - AskDnsIp.template - - LeaveDomain.template - - JoinDomain.template - - CreateSecondaryDC.template - -scripts: - - ImportCoreFunctions.ps1 - - Set-LocalUserPassword.ps1 - - Get-DnsListeningIpAddress.ps1 - - Get-DnsListeningIpAddress.ps1 - - Join-Domain.ps1 - - Install-RolePrimaryDomainController.ps1 - - Install-RoleSecondaryDomainController.ps1 diff --git a/muranorepository/Services/asp-net-manifest.yaml b/muranorepository/Services/aspNetApp-manifest.yaml similarity index 100% rename from muranorepository/Services/asp-net-manifest.yaml rename to muranorepository/Services/aspNetApp-manifest.yaml diff --git a/muranorepository/Services/asp-net-farm-manifest.yaml b/muranorepository/Services/aspNetAppFarm-manifest.yaml similarity index 100% rename from muranorepository/Services/asp-net-farm-manifest.yaml rename to muranorepository/Services/aspNetAppFarm-manifest.yaml diff --git a/muranorepository/Services/demo-manifest.yaml b/muranorepository/Services/demo-manifest.yaml deleted file mode 100644 index c026e0a..0000000 --- a/muranorepository/Services/demo-manifest.yaml +++ /dev/null @@ -1,32 +0,0 @@ -version: 0.1 -service_display_name: Demo Service - -description: >- - Demo Service - shows how Murano is working. - -full_service_name: demoService -author: Mirantis Inc. -service_version: 1.0 -enabled: True - -ui: - - Demo.yaml - -workflows: - - Demo.xml - - Common.xml - - Networking.xml - -heat: - - Demo.template - - InstancePort.template - - InstancePortWSubnet.template - - Network.template - - Param.template - - RouterInterface.template - - Subnet.template - - -agent: - - Demo.template diff --git a/muranorepository/Services/demoService-manifest.yaml b/muranorepository/Services/demoService-manifest.yaml new file mode 100644 index 0000000..f243077 --- /dev/null +++ b/muranorepository/Services/demoService-manifest.yaml @@ -0,0 +1,24 @@ +agent: +- Demo.template +author: '' +description: Demo Service shows how Murano is working. +enabled: true +full_service_name: demoService +heat: +- Demo.template +- RouterInterface.template +- Network.template +- Param.template +- Subnet.template +- InstancePortWSubnet.template +- InstancePort.template +scripts: [] +service_display_name: Demo Service 11 +service_version: '' +ui: +- Demo.yaml +version: '0.1' +workflows: +- Networking.xml +- Common.xml +- Demo.xml diff --git a/muranorepository/Services/apache-manifest.yaml b/muranorepository/Services/linuxApacheService-manifest.yaml similarity index 100% rename from muranorepository/Services/apache-manifest.yaml rename to muranorepository/Services/linuxApacheService-manifest.yaml diff --git a/muranorepository/Services/telnet-manifest.yaml b/muranorepository/Services/linuxTelnetService-manifest.yaml similarity index 100% rename from muranorepository/Services/telnet-manifest.yaml rename to muranorepository/Services/linuxTelnetService-manifest.yaml diff --git a/muranorepository/Services/mssql-cluster-manifest.yaml b/muranorepository/Services/msSqlClusterServer-manifest.yaml similarity index 100% rename from muranorepository/Services/mssql-cluster-manifest.yaml rename to muranorepository/Services/msSqlClusterServer-manifest.yaml diff --git a/muranorepository/Services/mssql-manifest.yaml b/muranorepository/Services/msSqlServer-manifest.yaml similarity index 100% rename from muranorepository/Services/mssql-manifest.yaml rename to muranorepository/Services/msSqlServer-manifest.yaml diff --git a/muranorepository/Services/iis-manifest.yaml b/muranorepository/Services/webServer-manifest.yaml similarity index 100% rename from muranorepository/Services/iis-manifest.yaml rename to muranorepository/Services/webServer-manifest.yaml diff --git a/muranorepository/Services/iis-farm-manifest.yaml b/muranorepository/Services/webServerFarm-manifest.yaml similarity index 100% rename from muranorepository/Services/iis-farm-manifest.yaml rename to muranorepository/Services/webServerFarm-manifest.yaml diff --git a/muranorepository/api/utils.py b/muranorepository/api/utils.py index dacfa13..322615f 100644 --- a/muranorepository/api/utils.py +++ b/muranorepository/api/utils.py @@ -165,7 +165,7 @@ def perform_deletion(files_for_deletion, manifest_for_deletion): backup_dir = backup_data() service_name = manifest_for_deletion.full_service_name path_to_manifest = os.path.join(CONF.manifests, - manifest_for_deletion.manifest_file_name) + '{0}-manifest.yaml'.format(service_name)) try: if os.path.exists(path_to_manifest): log.debug('Deleting manifest file {0}'.format(path_to_manifest)) diff --git a/muranorepository/api/v1.py b/muranorepository/api/v1.py index fc35b98..d87db4e 100644 --- a/muranorepository/api/v1.py +++ b/muranorepository/api/v1.py @@ -223,6 +223,13 @@ def create_service(service_name): service_data = json.loads(request.data) except: return make_response('Unable to load json data', 500) + + service_id = service_data.get('full_service_name') + if not service_id or service_id != service_name: + return make_response( + "Body attribute 'full_service_name' value is {0} which doesn't " + "correspond to 'service_name' part of URL (equals to {1})".format( + service_id, service_name), 400) resp = api.create_service(service_name, service_data) api.reset_cache() return resp diff --git a/muranorepository/utils/parser.py b/muranorepository/utils/parser.py index 2a4b207..22e690b 100644 --- a/muranorepository/utils/parser.py +++ b/muranorepository/utils/parser.py @@ -52,8 +52,16 @@ class ManifestParser(object): self.manifest_directory = manifest_directory def _validate_manifest(self, file, service_manifest_data): + service_id = service_manifest_data.get('full_service_name') + if not service_id or '{0}-manifest.yaml'.format(service_id) != file: + log.error("Attribute 'full_service_name' inside manifest '{0}' " + "has value '{1}' which doesn't correspond to its " + "filename, skipping this manifest completely." + "".format(file, service_id)) + return False, False + + valid_file_info = True for key, value in service_manifest_data.iteritems(): - valid_file_info = True if key in DATA_TYPES: if key != MANIFEST: root_directory = os.path.join(self.manifest_directory, @@ -78,7 +86,7 @@ class ManifestParser(object): "doesn't exist at {2}".format(filename, file, absolute_path)) - return valid_file_info + return valid_file_info, True def parse(self): manifests = [] @@ -99,23 +107,18 @@ class ManifestParser(object): "The reason: {1!s}".format(manifest_file, exc)) continue - manifest_data['manifest_file_name'] = file - manifest_is_valid = self._validate_manifest(file, - manifest_data) - manifest_data["valid"] = manifest_is_valid - manifests.append(Manifest(manifest_data)) + manifest_is_valid, use_manifest = self._validate_manifest( + file, manifest_data) + if use_manifest: + manifest_data["valid"] = manifest_is_valid + manifests.append(Manifest(manifest_data)) + return manifests def _get_manifest_path(self, service_name): - # ToDO: Rename manifests to it's id and remove this func - manifests = self.parse() - for manifest in manifests: - if manifest.full_service_name == service_name: - path_to_manifest = os.path.join(self.manifest_directory, - manifest.manifest_file_name) - return path_to_manifest - return None + return os.path.join(self.manifest_directory, + '{0}-manifest.yaml'.format(service_name)) def toggle_enabled(self, service_name): path_to_manifest = self._get_manifest_path(service_name)