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'
117 nets['external'][0]['nic_mapping'][args.role]['phys_type'] =\
119 if ds.get('performance', {}).get(args.role.title(), {}).get('vpp', {})\
121 nets['tenant']['nic_mapping'][args.role]['uio-driver'] =\
122 ds['performance'][args.role.title()]['vpp']['uio-driver']
124 nets['external'][0]['nic_mapping'][args.role]['uio-driver'] =\
125 ds['performance'][args.role.title()]['vpp']['uio-driver']
127 print(template.render(nets=nets,
129 external_net_af=netsets.get_ip_addr_family(),
130 external_net_type=args.ext_net_type,
131 ovs_dpdk_bridge=args.ovs_dpdk_bridge))
135 parser = argparse.ArgumentParser()
136 parser.add_argument('--debug', action='store_true', default=False,
137 help="Turn on debug messages")
138 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
139 dest='log_file', help="Log file to log to")
140 subparsers = parser.add_subparsers()
142 net_settings = subparsers.add_parser('parse-net-settings',
143 help='Parse network settings file')
144 net_settings.add_argument('-s', '--net-settings-file',
145 default='network-settings.yaml',
146 dest='net_settings_file',
147 help='path to network settings file')
148 net_settings.add_argument('-e', '--net-env-file',
149 default="network-environment.yaml",
151 help='path to network environment file')
152 net_settings.add_argument('-td', '--target-dir',
155 help='directory to write the'
156 'network-environment.yaml file')
157 net_settings.add_argument('--compute-pre-config',
160 dest='compute_pre_config',
161 help='Boolean to enable Compute Pre Config')
162 net_settings.add_argument('--controller-pre-config',
165 dest='controller_pre_config',
166 help='Boolean to enable Controller Pre Config')
168 net_settings.set_defaults(func=parse_net_settings)
170 get_int_ip = subparsers.add_parser('find-ip',
171 help='Find interface ip')
172 get_int_ip.add_argument('-i', '--interface', required=True,
173 help='Interface name')
174 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
175 choices=[4, 6], dest='address_family',
176 help='IP Address family')
177 get_int_ip.set_defaults(func=find_ip)
179 nic_template = subparsers.add_parser('nic-template',
180 help='Build NIC templates')
181 nic_template.add_argument('-r', '--role', required=True,
182 choices=['controller', 'compute'],
183 help='Role template generated for')
184 nic_template.add_argument('-t', '--template', required=True,
186 help='Template file to process')
187 nic_template.add_argument('-s', '--net-settings-file',
188 default='network-settings.yaml',
189 dest='net_settings_file',
190 help='path to network settings file')
191 nic_template.add_argument('-e', '--ext-net-type', default='interface',
193 choices=['interface', 'vpp_interface', 'br-ex'],
194 help='External network type')
195 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
196 default=None, dest='ovs_dpdk_bridge',
197 help='OVS DPDK Bridge Name')
198 nic_template.add_argument('--deploy-settings-file',
199 help='path to deploy settings file')
201 nic_template.set_defaults(func=build_nic_template)
202 # parse-deploy-settings
203 deploy_settings = subparsers.add_parser('parse-deploy-settings',
204 help='Parse deploy settings file')
205 deploy_settings.add_argument('-f', '--file',
206 default='deploy_settings.yaml',
207 help='path to deploy settings file')
208 deploy_settings.set_defaults(func=parse_deploy_settings)
210 inventory = subparsers.add_parser('parse-inventory',
211 help='Parse inventory file')
212 inventory.add_argument('-f', '--file',
213 default='deploy_settings.yaml',
214 help='path to deploy settings file')
215 inventory.add_argument('--ha',
218 help='Indicate if deployment is HA or not')
219 inventory.add_argument('--virtual',
222 help='Indicate if deployment inventory is virtual')
223 inventory.add_argument('--export-bash',
227 help='Export bash variables from inventory')
228 inventory.set_defaults(func=parse_inventory)
230 clean = subparsers.add_parser('clean',
231 help='Parse deploy settings file')
232 clean.add_argument('-f', '--file',
233 help='path to inventory file')
234 clean.set_defaults(func=run_clean)
240 parser = get_parser()
241 args = parser.parse_args(sys.argv[1:])
243 logging.basicConfig(level=logging.DEBUG)
245 apex_log_filename = args.log_file
246 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
247 logging.basicConfig(filename=apex_log_filename,
248 format='%(asctime)s %(levelname)s: %(message)s',
249 datefmt='%m/%d/%Y %I:%M:%S %p',
251 if hasattr(args, 'func'):
257 if __name__ == "__main__":