############################################################################## # Copyright (c) 2016 Ericsson AB and others. # peter.barabas@ericsson.com # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## ======== TEMPLATING SUPPORT IN YAML CONFIGURATION FILES ======== deploy/templater.py makes it possible to use templates to generate configuration files. It takes 2 input YAML files and an output file as arguments. One being the dictionary (called the base file), which is used to look up values in; the other file is the template, where the substitution will take place. Templater will write the result to an output file, specified as the 3rd argument. ======== SYNTAX OF TEMPLATE FILES ======== A template file can contain any valid YAML data and template variables, whose syntax is described below: 1. Single value references %{title} %{environment/net_segment_type} Either a root element, or a path can be specified. 2. YAML sections %{nodes} %{network/networking_parameters} Either a root element, or a path can be specified. 3. Interface lookup for network %{interface(storage)} Specify a network type as argument to interface(). 4. Interface lookup for network and role %{interface(public,compute)} 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 ======== Base YAML file (excerpt): title: Deployment Environment Adapter (DEA) version: 1.1 created: Wed Mar 30 08:16:04 2016 environment: name: vCity net_segment_type: tun wanted_release: Liberty on Ubuntu 14.04 nodes: - id: 1 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 4 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 5 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 6 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 interfaces_1: ens3: - fuelweb_admin - management ens4: - storage ens5: - private ens6: - public interfaces_2: ens3: - fuelweb_admin - management ens4: - storage - private - public network: networks: - cidr: 172.16.0.0/24 gateway: 172.16.0.1 ip_ranges: - - 172.16.0.2 - 172.16.0.126 meta: cidr: 172.16.0.0/24 configurable: true floating_range_var: floating_ranges ip_range: - 172.16.0.2 - 172.16.0.126 map_priority: 1 name: public notation: ip_ranges render_addr_mask: public render_type: null use_gateway: true vips: - haproxy - vrouter vlan_start: null name: public vlan_start: null - cidr: 192.168.1.0/24 gateway: null ip_ranges: - - 192.168.1.1 - 192.168.1.254 meta: cidr: 192.168.1.0/24 configurable: true map_priority: 2 name: storage notation: cidr render_addr_mask: storage render_type: cidr use_gateway: false vlan_start: 102 name: storage vlan_start: 102 --- Example 1 --- Template file: deployment-scenario-metadata: title: %{title} version: 0.1 dea-override-config: environment: net_segment_type: %{environment/net_segment_type} nodes: %{nodes} Result: deployment-scenario-metadata: title: Deployment Environment Adapter (DEA) version: 0.1 dea-override-config: environment: net_segment_type: tun nodes: - id: 1 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 4 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 5 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 6 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 --- Example 2 --- Template file: dea-override-config: network: networks: %{network/networks} Result: dea-override-config: network: networks: - cidr: 172.16.0.0/24 gateway: 172.16.0.1 ip_ranges: - - 172.16.0.2 - 172.16.0.126 meta: cidr: 172.16.0.0/24 configurable: true floating_range_var: floating_ranges ip_range: - 172.16.0.2 - 172.16.0.126 map_priority: 1 name: public notation: ip_ranges render_addr_mask: public render_type: null use_gateway: true vips: - haproxy - vrouter vlan_start: null name: public vlan_start: null - cidr: 192.168.1.0/24 gateway: null ip_ranges: - - 192.168.1.1 - 192.168.1.254 meta: cidr: 192.168.1.0/24 configurable: true map_priority: 2 name: storage notation: cidr render_addr_mask: storage render_type: cidr use_gateway: false vlan_start: 102 name: storage vlan_start: 102 --- Example 3 --- Template file: storage_if: %{interface(storage)} compute_private_if: %{interface(private,compute)} # Management interface of a mongo node mongo_mgmt_if: %{interface(management,mongo)} controller_private_if: %{interface(private,controller)} Result: storage_if: ens4 compute_private_if: ens5 # Management interface of a mongo node 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