Add network_data.yaml to encapsulate list of networks for j2

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
This commit is contained in:
Steven Hardy 2016-12-08 17:34:08 +00:00 committed by Emilien Macchi
parent ccb13e7b42
commit a5116005d8
5 changed files with 76 additions and 54 deletions

17
network/networks.j2.yaml Normal file
View File

@ -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

View File

@ -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

30
network_data.yaml Normal file
View File

@ -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

View 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

View File

@ -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))