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 ##############################################################################
17 from jinja2 import Environment
18 from jinja2 import FileSystemLoader
20 from apex import NetworkSettings
21 from apex import NetworkEnvironment
22 from apex import DeploySettings
23 from apex import Inventory
24 from apex import ip_utils
27 def parse_net_settings(args):
29 Parse OPNFV Apex network_settings.yaml config file
30 and dump bash syntax to set environment variables
34 file to network_settings.yaml file
36 settings = NetworkSettings(args.net_settings_file)
37 net_env = NetworkEnvironment(settings, args.net_env_file,
38 args.compute_pre_config,
39 args.controller_pre_config)
40 target = args.target_dir.split('/')
41 target.append('network-environment.yaml')
42 dump_yaml(dict(net_env), '/'.join(target))
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)
63 apex.clean_nodes(args.file)
66 def parse_inventory(args):
67 inventory = Inventory(args.file, ha=args.ha, virtual=args.virtual)
68 if args.export_bash is True:
71 inventory.dump_instackenv_json()
76 Get and print the IP from a specific interface
80 network interface name
82 4 or 6, respective to ipv4 or ipv6
84 interface = ip_utils.get_interface(args.interface,
90 def build_nic_template(args):
92 Build and print a Triple-O nic template from jinja template
96 path to jinja template to load
97 - enabled_networks: comma delimited list
98 list of networks defined in net_env.py
99 - ext_net_type: string
100 interface or br-ex, defines the external network configuration
101 - address_family: string
102 4 or 6, respective to ipv4 or ipv6
103 - ovs_dpdk_bridge: string
104 bridge name to use as ovs_dpdk
106 template_dir, template = args.template.rsplit('/', 1)
108 netsets = NetworkSettings(args.net_settings_file)
109 nets = netsets.get('networks')
110 ds = DeploySettings(args.deploy_settings_file).get('deploy_options')
111 env = Environment(loader=FileSystemLoader(template_dir), autoescape=True)
112 template = env.get_template(template)
114 if ds['dataplane'] == 'fdio':
115 nets['tenant']['nic_mapping'][args.role]['phys_type'] = 'vpp_interface'
116 nets['external'][0]['nic_mapping'][args.role]['phys_type'] =\
118 if ds.get('performance', {}).get(args.role.title(), {}).get('vpp', {})\
120 nets['tenant']['nic_mapping'][args.role]['uio-driver'] =\
121 ds['performance'][args.role.title()]['vpp']['uio-driver']
122 nets['external'][0]['nic_mapping'][args.role]['uio-driver'] =\
123 ds['performance'][args.role.title()]['vpp']['uio-driver']
124 if ds.get('performance', {}).get(args.role.title(), {}).get('vpp', {})\
125 .get('interface-options'):
126 nets['tenant']['nic_mapping'][args.role]['interface-options'] =\
127 ds['performance'][args.role.title()]['vpp']['interface-options']
129 print(template.render(nets=nets,
131 external_net_af=netsets.get_ip_addr_family(),
132 external_net_type=args.ext_net_type,
133 ovs_dpdk_bridge=args.ovs_dpdk_bridge))
137 parser = argparse.ArgumentParser()
138 parser.add_argument('--debug', action='store_true', default=False,
139 help="Turn on debug messages")
140 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
141 dest='log_file', help="Log file to log to")
142 subparsers = parser.add_subparsers()
144 net_settings = subparsers.add_parser('parse-net-settings',
145 help='Parse network settings file')
146 net_settings.add_argument('-s', '--net-settings-file',
147 default='network-settings.yaml',
148 dest='net_settings_file',
149 help='path to network settings file')
150 net_settings.add_argument('-e', '--net-env-file',
151 default="network-environment.yaml",
153 help='path to network environment file')
154 net_settings.add_argument('-td', '--target-dir',
157 help='directory to write the'
158 'network-environment.yaml file')
159 net_settings.add_argument('--compute-pre-config',
162 dest='compute_pre_config',
163 help='Boolean to enable Compute Pre Config')
164 net_settings.add_argument('--controller-pre-config',
167 dest='controller_pre_config',
168 help='Boolean to enable Controller Pre Config')
170 net_settings.set_defaults(func=parse_net_settings)
172 get_int_ip = subparsers.add_parser('find-ip',
173 help='Find interface ip')
174 get_int_ip.add_argument('-i', '--interface', required=True,
175 help='Interface name')
176 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
177 choices=[4, 6], dest='address_family',
178 help='IP Address family')
179 get_int_ip.set_defaults(func=find_ip)
181 nic_template = subparsers.add_parser('nic-template',
182 help='Build NIC templates')
183 nic_template.add_argument('-r', '--role', required=True,
184 choices=['controller', 'compute'],
185 help='Role template generated for')
186 nic_template.add_argument('-t', '--template', required=True,
188 help='Template file to process')
189 nic_template.add_argument('-s', '--net-settings-file',
190 default='network-settings.yaml',
191 dest='net_settings_file',
192 help='path to network settings file')
193 nic_template.add_argument('-e', '--ext-net-type', default='interface',
195 choices=['interface', 'vpp_interface', 'br-ex'],
196 help='External network type')
197 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
198 default=None, dest='ovs_dpdk_bridge',
199 help='OVS DPDK Bridge Name')
200 nic_template.add_argument('--deploy-settings-file',
201 help='path to deploy settings file')
203 nic_template.set_defaults(func=build_nic_template)
204 # parse-deploy-settings
205 deploy_settings = subparsers.add_parser('parse-deploy-settings',
206 help='Parse deploy settings file')
207 deploy_settings.add_argument('-f', '--file',
208 default='deploy_settings.yaml',
209 help='path to deploy settings file')
210 deploy_settings.set_defaults(func=parse_deploy_settings)
212 inventory = subparsers.add_parser('parse-inventory',
213 help='Parse inventory file')
214 inventory.add_argument('-f', '--file',
215 default='deploy_settings.yaml',
216 help='path to deploy settings file')
217 inventory.add_argument('--ha',
220 help='Indicate if deployment is HA or not')
221 inventory.add_argument('--virtual',
224 help='Indicate if deployment inventory is virtual')
225 inventory.add_argument('--export-bash',
229 help='Export bash variables from inventory')
230 inventory.set_defaults(func=parse_inventory)
232 clean = subparsers.add_parser('clean',
233 help='Parse deploy settings file')
234 clean.add_argument('-f', '--file',
235 help='path to inventory file')
236 clean.set_defaults(func=run_clean)
242 parser = get_parser()
243 args = parser.parse_args(sys.argv[1:])
245 logging.basicConfig(level=logging.DEBUG)
247 apex_log_filename = args.log_file
248 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
249 logging.basicConfig(filename=apex_log_filename,
250 format='%(asctime)s %(levelname)s: %(message)s',
251 datefmt='%m/%d/%Y %I:%M:%S %p',
253 if hasattr(args, 'func'):
259 if __name__ == "__main__":