1 ##############################################################################
2 # Copyright (c) 2016 Feng Pan (fpan@redhat.com), Dan Radez (dradez@redhat.com)
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
18 from jinja2 import Environment
19 from jinja2 import FileSystemLoader
21 from apex import NetworkSettings
22 from apex import NetworkEnvironment
23 from apex import DeploySettings
24 from apex import ip_utils
25 from apex.common.constants import ADMIN_NETWORK
28 def parse_net_settings(args):
30 Parse OPNFV Apex network_settings.yaml config file
31 and dump bash syntax to set environment variables
35 file to network_settings.yaml file
36 - network_isolation: bool
37 enable or disable network_isolation
39 settings = NetworkSettings(args.net_settings_file,
40 args.network_isolation)
41 net_env = NetworkEnvironment(settings, args.net_env_file)
42 dump_yaml(net_env.get_netenv_settings(), '/tmp/network-environment.yaml')
46 def dump_yaml(data, file):
48 Dumps data to a file as yaml
49 :param data: yaml to be written to file
50 :param file: filename to write to
53 with open(file, "w") as fh:
54 yaml.dump(data, fh, default_flow_style=False)
57 def parse_deploy_settings(args):
58 settings = DeploySettings(args.file)
64 Get and print the IP from a specific interface
68 network interface name
70 4 or 6, respective to ipv4 or ipv6
72 interface = ip_utils.get_interface(args.interface,
78 def build_nic_template(args):
80 Build and print a Triple-O nic template from jinja template
84 path to jinja template to load
85 - enabled_networks: comma delimited list
86 list of networks defined in net_env.py
87 - ext_net_type: string
88 interface or br-ex, defines the external network configuration
89 - address_family: string
90 4 or 6, respective to ipv4 or ipv6
91 - ovs_dpdk_bridge: string
92 bridge name to use as ovs_dpdk
94 template_dir, template = args.template.rsplit('/', 1)
96 network_settings = NetworkSettings(args.net_settings_file,
97 args.network_isolation)
98 settings = network_settings.settings_obj
99 env = Environment(loader=FileSystemLoader(template_dir))
100 template = env.get_template(template)
102 # gather vlan values into a dict
103 net_list = copy(args.enabled_networks).split(' ')
104 net_list.remove(ADMIN_NETWORK)
105 vlans_vals = map(lambda x: settings[x]['vlan'], net_list)
106 vlans = dict(zip(net_list, vlans_vals))
107 nics = network_settings.nics
109 print(template.render(enabled_networks=args.enabled_networks,
112 external_net_type=args.ext_net_type,
113 external_net_af=args.address_family,
114 ovs_dpdk_bridge=args.ovs_dpdk_bridge,
119 parser = argparse.ArgumentParser()
120 parser.add_argument('--debug', action='store_true', default=False,
121 help="Turn on debug messages")
122 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
123 dest='log_file', help="Log file to log to")
124 subparsers = parser.add_subparsers()
126 net_settings = subparsers.add_parser('parse-net-settings',
127 help='Parse network settings file')
128 net_settings.add_argument('-s', '--net-settings-file',
129 default='network-settings.yaml',
130 dest='net_settings_file',
131 help='path to network settings file')
132 net_settings.add_argument('-i', '--network-isolation', type=bool,
133 default=True, dest='network_isolation',
134 help='network isolation')
135 net_settings.add_argument('-e', '--net-env-file',
136 default="network-environment.yaml",
138 help='path to network environment file')
139 net_settings.set_defaults(func=parse_net_settings)
141 get_int_ip = subparsers.add_parser('find-ip',
142 help='Find interface ip')
143 get_int_ip.add_argument('-i', '--interface', required=True,
144 help='Interface name')
145 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
146 choices=[4, 6], dest='address_family',
147 help='IP Address family')
148 get_int_ip.set_defaults(func=find_ip)
150 nic_template = subparsers.add_parser('nic-template',
151 help='Build NIC templates')
152 nic_template.add_argument('-r', '--role', required=True,
153 choices=['controller', 'compute'],
154 help='Role template generated for')
155 nic_template.add_argument('-t', '--template', required=True,
157 help='Template file to process')
158 nic_template.add_argument('-s', '--net-settings-file',
159 default='network-settings.yaml',
160 dest='net_settings_file',
161 help='path to network settings file')
162 nic_template.add_argument('-i', '--network-isolation', type=bool,
163 default=True, dest='network_isolation',
164 help='network isolation')
165 nic_template.add_argument('-n', '--enabled-networks', required=True,
166 dest='enabled_networks',
167 help='enabled network list')
168 nic_template.add_argument('-e', '--ext-net-type', default='interface',
170 choices=['interface', 'br-ex'],
171 help='External network type')
172 nic_template.add_argument('-af', '--address-family', type=int, default=4,
173 dest='address_family', help='IP address family')
174 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
175 default=None, dest='ovs_dpdk_bridge',
176 help='OVS DPDK Bridge Name')
177 nic_template.set_defaults(func=build_nic_template)
179 deploy_settings = subparsers.add_parser('parse-deploy-settings',
180 help='Parse deploy settings file')
181 deploy_settings.add_argument('-f', '--file',
182 default='deploy_settings.yaml',
183 help='path to deploy settings file')
184 deploy_settings.set_defaults(func=parse_deploy_settings)
190 parser = get_parser()
191 args = parser.parse_args(sys.argv[1:])
193 logging.basicConfig(level=logging.DEBUG)
195 apex_log_filename = args.log_file
196 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
197 logging.basicConfig(filename=apex_log_filename,
198 format='%(asctime)s %(levelname)s: %(message)s',
199 datefmt='%m/%d/%Y %I:%M:%S %p',
201 if hasattr(args, 'func'):
207 if __name__ == "__main__":