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 ##############################################################################
19 from jinja2 import Environment
20 from jinja2 import FileSystemLoader
22 from apex import NetworkSettings
23 from apex import NetworkEnvironment
24 from apex import DeploySettings
25 from apex import ip_utils
26 from apex.common.constants import ADMIN_NETWORK
29 def parse_net_settings(args):
31 Parse OPNFV Apex network_settings.yaml config file
32 and dump bash syntax to set environment variables
36 file to network_settings.yaml file
37 - network_isolation: bool
38 enable or disable network_isolation
40 settings = NetworkSettings(args.net_settings_file,
41 args.network_isolation)
42 net_env = NetworkEnvironment(settings, args.net_env_file,
43 args.compute_pre_config,
44 args.controller_pre_config)
45 dump_yaml(dict(net_env), '/tmp/network-environment.yaml')
49 def dump_yaml(data, file):
51 Dumps data to a file as yaml
52 :param data: yaml to be written to file
53 :param file: filename to write to
56 with open(file, "w") as fh:
57 yaml.dump(data, fh, default_flow_style=False)
60 def parse_deploy_settings(args):
61 settings = DeploySettings(args.file)
66 apex.clean_nodes(args.file)
71 Get and print the IP from a specific interface
75 network interface name
77 4 or 6, respective to ipv4 or ipv6
79 interface = ip_utils.get_interface(args.interface,
85 def build_nic_template(args):
87 Build and print a Triple-O nic template from jinja template
91 path to jinja template to load
92 - enabled_networks: comma delimited list
93 list of networks defined in net_env.py
94 - ext_net_type: string
95 interface or br-ex, defines the external network configuration
96 - address_family: string
97 4 or 6, respective to ipv4 or ipv6
98 - ovs_dpdk_bridge: string
99 bridge name to use as ovs_dpdk
101 template_dir, template = args.template.rsplit('/', 1)
103 netsets = NetworkSettings(args.net_settings_file,
104 args.network_isolation)
105 env = Environment(loader=FileSystemLoader(template_dir))
106 template = env.get_template(template)
108 # gather vlan values into a dict
109 net_list = copy(netsets.enabled_network_list)
110 net_list.remove(ADMIN_NETWORK)
111 vlans_vals = map(lambda x: netsets[x]['vlan'], net_list)
112 vlans = dict(zip(net_list, vlans_vals))
115 print(template.render(enabled_networks=netsets.enabled_network_list,
118 external_net_type=args.ext_net_type,
119 external_net_af=args.address_family,
120 ovs_dpdk_bridge=args.ovs_dpdk_bridge,
125 parser = argparse.ArgumentParser()
126 parser.add_argument('--debug', action='store_true', default=False,
127 help="Turn on debug messages")
128 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
129 dest='log_file', help="Log file to log to")
130 subparsers = parser.add_subparsers()
132 net_settings = subparsers.add_parser('parse-net-settings',
133 help='Parse network settings file')
134 net_settings.add_argument('-s', '--net-settings-file',
135 default='network-settings.yaml',
136 dest='net_settings_file',
137 help='path to network settings file')
138 net_settings.add_argument('--flat', action='store_false',
139 default=True, dest='network_isolation',
140 help='disable network isolation')
141 net_settings.add_argument('-e', '--net-env-file',
142 default="network-environment.yaml",
144 help='path to network environment file')
145 net_settings.add_argument('--compute-pre-config',
148 dest='compute_pre_config',
149 help='Boolean to enable Compute Pre Config')
150 net_settings.add_argument('--controller-pre-config',
153 dest='controller_pre_config',
154 help='Boolean to enable Controller Pre Config')
156 net_settings.set_defaults(func=parse_net_settings)
158 get_int_ip = subparsers.add_parser('find-ip',
159 help='Find interface ip')
160 get_int_ip.add_argument('-i', '--interface', required=True,
161 help='Interface name')
162 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
163 choices=[4, 6], dest='address_family',
164 help='IP Address family')
165 get_int_ip.set_defaults(func=find_ip)
167 nic_template = subparsers.add_parser('nic-template',
168 help='Build NIC templates')
169 nic_template.add_argument('-r', '--role', required=True,
170 choices=['controller', 'compute'],
171 help='Role template generated for')
172 nic_template.add_argument('-t', '--template', required=True,
174 help='Template file to process')
175 nic_template.add_argument('-s', '--net-settings-file',
176 default='network-settings.yaml',
177 dest='net_settings_file',
178 help='path to network settings file')
179 nic_template.add_argument('--flat', action='store_false',
180 default=True, dest='network_isolation',
181 help='disable network isolation')
182 nic_template.add_argument('-e', '--ext-net-type', default='interface',
184 choices=['interface', 'br-ex'],
185 help='External network type')
186 nic_template.add_argument('-af', '--address-family', type=int, default=4,
187 dest='address_family', help='IP address family')
188 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
189 default=None, dest='ovs_dpdk_bridge',
190 help='OVS DPDK Bridge Name')
191 nic_template.set_defaults(func=build_nic_template)
193 deploy_settings = subparsers.add_parser('parse-deploy-settings',
194 help='Parse deploy settings file')
195 deploy_settings.add_argument('-f', '--file',
196 default='deploy_settings.yaml',
197 help='path to deploy settings file')
198 deploy_settings.set_defaults(func=parse_deploy_settings)
200 clean = subparsers.add_parser('clean',
201 help='Parse deploy settings file')
202 clean.add_argument('-f', '--file',
203 help='path to inventory file')
204 clean.set_defaults(func=run_clean)
210 parser = get_parser()
211 args = parser.parse_args(sys.argv[1:])
213 logging.basicConfig(level=logging.DEBUG)
215 apex_log_filename = args.log_file
216 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
217 logging.basicConfig(filename=apex_log_filename,
218 format='%(asctime)s %(levelname)s: %(message)s',
219 datefmt='%m/%d/%Y %I:%M:%S %p',
221 if hasattr(args, 'func'):
227 if __name__ == "__main__":