diff options
author | Michal Skalski <mskalski@mirantis.com> | 2016-08-02 09:19:44 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@172.30.200.206> | 2016-08-02 09:19:44 +0000 |
commit | 2c8231be1aebe869297aa5ca15870da70338bd68 (patch) | |
tree | 7a3b7b55f1243fa049dbe398c5e412a46c2fa002 | |
parent | ef0d47da19062f1fd5574fdb97409c290798f800 (diff) | |
parent | 8687c10b1a098c9c9f41e68c7f322a5ce6727c40 (diff) |
Merge "Make it possible to include files in templates"
-rw-r--r-- | deploy/README.templater | 94 | ||||
-rwxr-xr-x | deploy/templater.py | 16 |
2 files changed, 110 insertions, 0 deletions
diff --git a/deploy/README.templater b/deploy/README.templater index 964872fb7..b5d52ab9d 100644 --- a/deploy/README.templater +++ b/deploy/README.templater @@ -49,6 +49,12 @@ syntax is described below: Specify a network type and a role as arguments to interface(). +5. File inclusion + + %{include(templates/interfaces.yaml)} + + Filename with absolute or relative path. + ======== EXAMPLES ======== @@ -275,3 +281,91 @@ compute_private_if: ens5 mongo_mgmt_if: ens3 controller_private_if: ens4 + +--- Example 4 --- + +Template file: + +version: 1.1 +created: Mon Jun 13 19:39:35 2016 +comment: None +%{include(environment.yaml)} + + +environment.yaml: + +environment: + name: F9-NOSDN-NOFEATURE-VXLAN-BAREMETAL + net_segment_type: tun + + +Result: + +version: 1.1 +created: Mon Jun 13 19:39:35 2016 +comment: None +environment: + name: F9-NOSDN-NOFEATURE-VXLAN-BAREMETAL + net_segment_type: tun + + +--- Example 5 --- + +Template file (except): + +settings: + editable: + access: + email: + description: Email address for Administrator + label: Email + regex: + error: Invalid email + source: ^\S+@\S+$ + type: text + value: admin@localhost + weight: 40 +# ... +# lines omitted for brevity + %{include(templates/cgroups.yaml)} + + +cgroups.yaml: + + cgroups: + metadata: + always_editable: true + group: general + label: Cgroups conguration for services + restrictions: + - action: hide + condition: 'true' + weight: 90 + + +Result: + +settings: + editable: + access: + email: + description: Email address for Administrator + label: Email + regex: + error: Invalid email + source: ^\S+@\S+$ + type: text + value: admin@localhost + weight: 40 +# ... +# again, lines omitted for brevity + cgroups: + metadata: + always_editable: true + group: general + label: Cgroups conguration for services + restrictions: + - action: hide + condition: 'true' + weight: 90 + diff --git a/deploy/templater.py b/deploy/templater.py index 2ad6e05ba..6b41e1f3c 100755 --- a/deploy/templater.py +++ b/deploy/templater.py @@ -107,12 +107,28 @@ class Templater(object): return self.get_interface_from_network(interfaces, args[0]) + def parse_include_tag(self, tag): + # Remove 'include(' prefix and trailing ')' + filename = tag[len('include('):].rstrip(')') + + if not filename: + err('No argument for include().') + + return filename + + def include_file(self, filename): + fragment = self.load_yaml(filename) + return yaml.dump(fragment, default_flow_style=False) + def parse_tag(self, tag, indent): fragment = '' if 'interface(' in tag: args = self.parse_interface_tag(tag) fragment = self.lookup_interface(args) + elif 'include(' in tag: + filename = self.parse_include_tag(tag) + fragment = self.include_file(filename) else: path = tag.split(DELIMITER) fragment = self.base |