From e1ff9579ddf737fe49995d7d68090ae082c54593 Mon Sep 17 00:00:00 2001 From: Ekaterina Fedorova Date: Tue, 3 Dec 2013 12:05:43 +0400 Subject: [PATCH] Add fields from manifest to ui forms Add ui forms to separate directory for each service Change-Id: Id49510755b9db5468de99a414d0a9e548af765b2 --- etc/murano-repository.conf.sample | 5 ++-- .../Services/ui_forms/ActiveDirectory.yaml | 8 ----- .../Services/ui_forms/AspNetApp.yaml | 7 ----- .../Services/ui_forms/AspNetAppFarm.yaml | 7 ----- muranorepository/Services/ui_forms/Demo.yaml | 7 ----- .../Services/ui_forms/LinuxApache.yaml | 7 ----- .../Services/ui_forms/LinuxTelnet.yaml | 7 ----- .../Services/ui_forms/MsSqlClusterServer.yaml | 7 ----- .../Services/ui_forms/MsSqlServer.yaml | 7 ----- .../Services/ui_forms/WebServer.yaml | 7 ----- .../Services/ui_forms/WebServerFarm.yaml | 6 ---- muranorepository/consts.py | 4 +++ muranorepository/utils/archiver.py | 29 ++++++++++++++++++- 13 files changed, 35 insertions(+), 73 deletions(-) diff --git a/etc/murano-repository.conf.sample b/etc/murano-repository.conf.sample index c5e4755..b274486 100644 --- a/etc/murano-repository.conf.sample +++ b/etc/murano-repository.conf.sample @@ -30,8 +30,9 @@ heat = heat_templates agent = agent_templates scripts = scripts -# Configure archive structure -# data_type = desired folder +# Configure client archive structure +# Format: data_type = desired folder +# ui parameter is not actually used, but is kept to not break things apart [output] ui = service_forms workflows = workflows diff --git a/muranorepository/Services/ui_forms/ActiveDirectory.yaml b/muranorepository/Services/ui_forms/ActiveDirectory.yaml index f329bc7..fa2b1cf 100644 --- a/muranorepository/Services/ui_forms/ActiveDirectory.yaml +++ b/muranorepository/Services/ui_forms/ActiveDirectory.yaml @@ -1,11 +1,3 @@ -name: Active Directory -type: activeDirectory - -description: >- - The Active Directory Service - includes one primary and optionally a few secondary - Domain Controllers, with DNS - unitTemplates: - isMaster: true recoveryPassword: {YAQL: $.serviceConfiguration.recoveryPassword} diff --git a/muranorepository/Services/ui_forms/AspNetApp.yaml b/muranorepository/Services/ui_forms/AspNetApp.yaml index 2e38472..04edc9f 100644 --- a/muranorepository/Services/ui_forms/AspNetApp.yaml +++ b/muranorepository/Services/ui_forms/AspNetApp.yaml @@ -1,10 +1,3 @@ -name: ASP.NET Application -type: aspNetApp - -description: >- - The ASP.NET Application Service installs - custom application onto one IIS Web Server - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/AspNetAppFarm.yaml b/muranorepository/Services/ui_forms/AspNetAppFarm.yaml index 151d8a5..31b4e56 100644 --- a/muranorepository/Services/ui_forms/AspNetAppFarm.yaml +++ b/muranorepository/Services/ui_forms/AspNetAppFarm.yaml @@ -1,10 +1,3 @@ -name: ASP.NET Application Web Farm -type: aspNetAppFarm - -description: >- - The ASP.NET Farm Service installs a custom application - on a load-balanced array of IIS servers - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/Demo.yaml b/muranorepository/Services/ui_forms/Demo.yaml index be0e863..15113fe 100644 --- a/muranorepository/Services/ui_forms/Demo.yaml +++ b/muranorepository/Services/ui_forms/Demo.yaml @@ -1,10 +1,3 @@ -name: Demo Service -type: demoService - -description: >- - Demo Service - shows how Murano is working. - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/LinuxApache.yaml b/muranorepository/Services/ui_forms/LinuxApache.yaml index a050b7a..6ea05e8 100644 --- a/muranorepository/Services/ui_forms/LinuxApache.yaml +++ b/muranorepository/Services/ui_forms/LinuxApache.yaml @@ -1,10 +1,3 @@ -name: Linux Apache -type: linuxApacheService - -description: >- - Linux Apache Service - Demonstrates a linux agent, which installs Apache web server. - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/LinuxTelnet.yaml b/muranorepository/Services/ui_forms/LinuxTelnet.yaml index a37ea0d..d08025b 100644 --- a/muranorepository/Services/ui_forms/LinuxTelnet.yaml +++ b/muranorepository/Services/ui_forms/LinuxTelnet.yaml @@ -1,10 +1,3 @@ -name: Linux Telnet -type: linuxTelnetService - -description: >- - Linux Telnet Service - Demonstrates a simple linux agent, which installs Telnet if required. - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/MsSqlClusterServer.yaml b/muranorepository/Services/ui_forms/MsSqlClusterServer.yaml index 646e0a7..96562ff 100644 --- a/muranorepository/Services/ui_forms/MsSqlClusterServer.yaml +++ b/muranorepository/Services/ui_forms/MsSqlClusterServer.yaml @@ -1,10 +1,3 @@ -name: MS SQL Server Cluster -type: msSqlClusterServer - -description: >- - The MS SQL Failover Cluster installs - Microsoft SQL Failover Cluster Server - unitTemplates: - isMaster: true isSync: true diff --git a/muranorepository/Services/ui_forms/MsSqlServer.yaml b/muranorepository/Services/ui_forms/MsSqlServer.yaml index 1b8428d..228ead7 100644 --- a/muranorepository/Services/ui_forms/MsSqlServer.yaml +++ b/muranorepository/Services/ui_forms/MsSqlServer.yaml @@ -1,10 +1,3 @@ -name: MS SQL Server -type: msSqlServer - -description: >- - The MS SQL Service installs an instance of - Microsoft SQL Server - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/WebServer.yaml b/muranorepository/Services/ui_forms/WebServer.yaml index 7503701..a181615 100644 --- a/muranorepository/Services/ui_forms/WebServer.yaml +++ b/muranorepository/Services/ui_forms/WebServer.yaml @@ -1,10 +1,3 @@ -name: Internet Information Services -type: webServer - -description: >- - The Internet Information Service - sets up an IIS server and joins it into an existing domain - unitTemplates: - {} diff --git a/muranorepository/Services/ui_forms/WebServerFarm.yaml b/muranorepository/Services/ui_forms/WebServerFarm.yaml index 3bf2f6d..9725584 100644 --- a/muranorepository/Services/ui_forms/WebServerFarm.yaml +++ b/muranorepository/Services/ui_forms/WebServerFarm.yaml @@ -1,9 +1,3 @@ -name: Internet Information Services Web Farm -type: webServerFarm - -description: >- - The IIS Farm Service sets up a load-balanced set of IIS servers - unitTemplates: - {} diff --git a/muranorepository/consts.py b/muranorepository/consts.py index c8fc526..ef366d0 100644 --- a/muranorepository/consts.py +++ b/muranorepository/consts.py @@ -26,3 +26,7 @@ CLIENTS_DICT = {'conductor': (WORKFLOW, HEAT, AGENT, SCRIPTS), 'ui': (UI,)} ARCHIVE_PKG_NAME = 'data.tar.gz' + +UI_FIELDS_IN_MANIFEST = {'description': 'description', + 'type': 'full_service_name', + 'name': 'service_display_name'} diff --git a/muranorepository/utils/archiver.py b/muranorepository/utils/archiver.py index 22e77dc..1f42f74 100644 --- a/muranorepository/utils/archiver.py +++ b/muranorepository/utils/archiver.py @@ -17,9 +17,12 @@ import tarfile import tempfile import shutil import hashlib +import yaml import logging as log from oslo.config import cfg +from .parser import serialize from muranorepository.consts import DATA_TYPES, ARCHIVE_PKG_NAME +from muranorepository.consts import UI, UI_FIELDS_IN_MANIFEST CONF = cfg.CONF CHUNK_SIZE = 1 << 20 # 1MB @@ -138,6 +141,24 @@ class Archiver(object): os.mkdir(pkg_dir) return pkg_dir + def _compose_ui_forms(self, manifest, ui_definitions, src, dst): + """ + Extends ui_forms before sending to client. + Some parameters defined UI_FIELDS_IN_MANIFEST that are required + for ui forms are specified in manifest. + """ + new_dst = os.path.join(os.path.dirname(dst), + manifest.full_service_name) + if not os.path.exists(new_dst): + os.makedirs(new_dst) + for file in ui_definitions: + with open(os.path.join(src, file)) as ui_form: + content = yaml.load(ui_form) + for ui_name, manifest_name in UI_FIELDS_IN_MANIFEST.iteritems(): + content[ui_name] = getattr(manifest, manifest_name) + with open(os.path.join(new_dst, file), 'w') as ui_form: + ui_form.write(serialize(content)) + def get_existing_hash(self, cache_dir): existing_caches = os.listdir(cache_dir) if not len(existing_caches): @@ -190,7 +211,13 @@ class Archiver(object): CONF.manifests, self.src_directories[data_type]) dst_directory = os.path.join( temp_dir, self.dst_directories[data_type]) - self._copy_data(file_list, scr_directory, dst_directory) + if data_type == UI: + self._compose_ui_forms(manifest, file_list, + scr_directory, dst_directory) + else: + self._copy_data(file_list, + scr_directory, + dst_directory) else: log.info( 'Manifest for {0} service has no file definitions for '