Add network_data.yaml to encapsulate list of networks for j2
authorSteven Hardy <shardy@redhat.com>
Thu, 8 Dec 2016 17:34:08 +0000 (17:34 +0000)
committerEmilien Macchi <emilien@redhat.com>
Sun, 5 Mar 2017 03:20:42 +0000 (03:20 +0000)
This moves the hard-coded networks from the default environment,
and provides the first step towards enabling composable networks.

Co-Author: Dan Sneddon <dsneddon@redhat.com>
Partial-Bug: #1633090
Depends-On: I9f818912bd8e2a3220e41c8ccbbab3d9063b4d72
Change-Id: I7793b8badede5450b05437c84d9b40c28de7546b

network/networks.j2.yaml [new file with mode: 0644]
network/networks.yaml [deleted file]
network_data.yaml [new file with mode: 0644]
overcloud-resource-registry-puppet.j2.yaml
tools/process-templates.py

diff --git a/network/networks.j2.yaml b/network/networks.j2.yaml
new file mode 100644 (file)
index 0000000..ef977d8
--- /dev/null
@@ -0,0 +1,17 @@
+heat_template_version: ocata
+
+description: Create networks to split out Overcloud traffic
+
+resources:
+
+  {%- for network in networks %}
+    {%- if network.name != 'InternalApi' %}
+  {{network.name}}Network:
+    {%- else  %}
+  InternalNetwork:
+    {%- endif %}
+    type: OS::TripleO::Network::{{network.name}}
+  {%- endfor %}
+
+  NetworkExtraConfig:
+    type: OS::TripleO::Network::ExtraConfig
diff --git a/network/networks.yaml b/network/networks.yaml
deleted file mode 100644 (file)
index 26033ee..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-heat_template_version: ocata
-
-description: Create networks to split out Overcloud traffic
-
-resources:
-
-  ExternalNetwork:
-    type: OS::TripleO::Network::External
-
-  InternalNetwork:
-    type: OS::TripleO::Network::InternalApi
-
-  StorageMgmtNetwork:
-    type: OS::TripleO::Network::StorageMgmt
-
-  StorageNetwork:
-    type: OS::TripleO::Network::Storage
-
-  TenantNetwork:
-    type: OS::TripleO::Network::Tenant
-
-  ManagementNetwork:
-    type: OS::TripleO::Network::Management
-
-  NetworkExtraConfig:
-    type: OS::TripleO::Network::ExtraConfig
diff --git a/network_data.yaml b/network_data.yaml
new file mode 100644 (file)
index 0000000..6d62605
--- /dev/null
@@ -0,0 +1,30 @@
+# List of networks, used for j2 templating of enabled networks
+#
+# Supported values:
+#
+# name: Name of the network (mandatory)
+# name_lower: lowercase version of name used for filenames
+#             (optional, defaults to name.lower())
+# vlan: vlan for the network (optional)
+# gateway: gateway for the network (optional)
+# enabled: Is the network enabled (optional, defaults to true)
+# vip: Enable creation of a virtual IP on this network
+# [TODO] (dsneddon@redhat.com) - Enable dynamic creation of VIP ports, to support
+# VIPs on non-default networks. See https://bugs.launchpad.net/tripleo/+bug/1667104
+#
+- name: External
+  vip: true
+- name: InternalApi
+  name_lower: internal_api
+  vip: true
+- name: Storage
+  vip: true
+- name: StorageMgmt
+  name_lower: storage_mgmt
+  vip: true
+- name: Tenant
+  vip: false  # Tenant network does not use VIPs
+- name: Management
+  # Management network is disabled by default
+  enabled: false
+  vip: false  # Management network does not use VIPs
index b811a5a..2834f90 100644 (file)
@@ -23,22 +23,16 @@ resource_registry:
   OS::TripleO::Tasks::{{role.name}}PostConfig: OS::Heat::None
   OS::TripleO::{{role.name}}ExtraConfigPre: puppet/extraconfig/pre_deploy/default.yaml
   # Port assignments for the {{role.name}} role
+  {%- if role.name != 'ObjectStorage' %}
+    {%- for network in networks %}
+  OS::TripleO::{{role.name}}::Ports::{{network.name}}Port: network/ports/noop.yaml
+    {%- endfor %}
+  {%- else %}
   # Note we have to special-case ObjectStorage for backwards compatibility
-  {% if role.name != 'ObjectStorage' %}
-  OS::TripleO::{{role.name}}::Ports::ExternalPort: network/ports/noop.yaml
-  OS::TripleO::{{role.name}}::Ports::InternalApiPort: network/ports/noop.yaml
-  OS::TripleO::{{role.name}}::Ports::StoragePort: network/ports/noop.yaml
-  OS::TripleO::{{role.name}}::Ports::StorageMgmtPort: network/ports/noop.yaml
-  OS::TripleO::{{role.name}}::Ports::TenantPort: network/ports/noop.yaml
-  OS::TripleO::{{role.name}}::Ports::ManagementPort: network/ports/noop.yaml
-  {% else %}
-  OS::TripleO::SwiftStorage::Ports::ExternalPort: network/ports/noop.yaml
-  OS::TripleO::SwiftStorage::Ports::InternalApiPort: network/ports/noop.yaml
-  OS::TripleO::SwiftStorage::Ports::StoragePort: network/ports/noop.yaml
-  OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: network/ports/noop.yaml
-  OS::TripleO::SwiftStorage::Ports::TenantPort: network/ports/noop.yaml
-  OS::TripleO::SwiftStorage::Ports::ManagementPort: network/ports/noop.yaml
-  {% endif %}
+    {%- for network in networks %}
+  OS::TripleO::SwiftStorage::Ports::{{network.name}}Port: network/ports/noop.yaml
+    {%- endfor %}
+  {%- endif %}
   OS::TripleO::{{role.name}}::Net::SoftwareConfig: net-config-noop.yaml
 {% endfor %}
 
@@ -84,12 +78,9 @@ resource_registry:
   # TripleO overcloud networks
   OS::TripleO::Network: network/networks.yaml
 
-  OS::TripleO::Network::External: OS::Heat::None
-  OS::TripleO::Network::InternalApi: OS::Heat::None
-  OS::TripleO::Network::StorageMgmt: OS::Heat::None
-  OS::TripleO::Network::Storage: OS::Heat::None
-  OS::TripleO::Network::Tenant: OS::Heat::None
-  OS::TripleO::Network::Management: OS::Heat::None
+  {%- for network in networks %}
+  OS::TripleO::Network::{{network.name}}: OS::Heat::None
+  {%- endfor %}
 
   OS::TripleO::Network::ExtraConfig: OS::Heat::None
 
@@ -98,10 +89,10 @@ resource_registry:
   OS::TripleO::Network::Ports::NetIpListMap: network/ports/net_ip_list_map.yaml
 
   # Port assignments for the VIPs
-  OS::TripleO::Network::Ports::ExternalVipPort: network/ports/noop.yaml
-  OS::TripleO::Network::Ports::InternalApiVipPort: network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageVipPort: network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageMgmtVipPort: network/ports/noop.yaml
+  {%- for network in networks if network.vip|default(false) %}
+  OS::TripleO::Network::Ports::{{network.name}}VipPort: network/ports/noop.yaml
+  {%- endfor %}
+
   OS::TripleO::Network::Ports::RedisVipPort: network/ports/ctlplane_vip.yaml
   OS::TripleO::Network::Ports::ControlPlaneVipPort: OS::Neutron::Port
 
index 1c8c4ba..69ed96a 100755 (executable)
@@ -32,6 +32,9 @@ def parse_opts(argv):
     parser.add_argument('-r', '--roles-data', metavar='ROLES_DATA',
                         help="""relative path to the roles_data.yaml file.""",
                         default='roles_data.yaml')
+    parser.add_argument('-n', '--network-data', metavar='NETWORK_DATA',
+                        help="""relative path to the network_data.yaml file.""",
+                        default='network_data.yaml')
     parser.add_argument('--safe',
                         action='store_true',
                         help="""Enable safe mode (do not overwrite files).""",
@@ -71,11 +74,15 @@ def _j2_render_to_file(j2_template, j2_data, outfile_name=None,
         out_f.write(r_template)
 
 
-def process_templates(template_path, role_data_path, output_dir, overwrite):
+def process_templates(template_path, role_data_path, output_dir,
+                      network_data_path, overwrite):
 
     with open(role_data_path) as role_data_file:
         role_data = yaml.safe_load(role_data_file)
 
+    with open(network_data_path) as network_data_file:
+        network_data = yaml.safe_load(network_data_file)
+
     j2_excludes_path = os.path.join(template_path, 'j2_excludes.yaml')
     with open(j2_excludes_path) as role_data_file:
         j2_excludes = yaml.safe_load(role_data_file)
@@ -150,7 +157,8 @@ def process_templates(template_path, role_data_path, output_dir, overwrite):
                     print("jinja2 rendering normal template %s" % f)
                     with open(file_path) as j2_template:
                         template_data = j2_template.read()
-                        j2_data = {'roles': role_data}
+                        j2_data = {'roles': role_data,
+                                   'networks': network_data}
                         out_f = os.path.basename(f).replace('.j2.yaml', '.yaml')
                         out_f_path = os.path.join(out_dir, out_f)
                         _j2_render_to_file(template_data, j2_data, out_f_path,
@@ -164,5 +172,7 @@ def process_templates(template_path, role_data_path, output_dir, overwrite):
 opts = parse_opts(sys.argv)
 
 role_data_path = os.path.join(opts.base_path, opts.roles_data)
+network_data_path = os.path.join(opts.base_path, opts.network_data)
 
-process_templates(opts.base_path, role_data_path, opts.output_dir, (not opts.safe))
+process_templates(opts.base_path, role_data_path, opts.output_dir,
+                  network_data_path, (not opts.safe))