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
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 args.compute_pre_config,
43 args.controller_pre_config)
44 target = args.target_dir.split('/')
45 target.append('network-environment.yaml')
46 dump_yaml(dict(net_env), '/'.join(target))
50 def dump_yaml(data, file):
52 Dumps data to a file as yaml
53 :param data: yaml to be written to file
54 :param file: filename to write to
57 with open(file, "w") as fh:
58 yaml.dump(data, fh, default_flow_style=False)
61 def parse_deploy_settings(args):
62 settings = DeploySettings(args.file)
67 apex.clean_nodes(args.file)
70 def parse_inventory(args):
71 inventory = Inventory(args.file, ha=args.ha, virtual=args.virtual)
72 inventory.dump_instackenv_json()
77 Get and print the IP from a specific interface
81 network interface name
83 4 or 6, respective to ipv4 or ipv6
85 interface = ip_utils.get_interface(args.interface,
91 def build_nic_template(args):
93 Build and print a Triple-O nic template from jinja template
97 path to jinja template to load
98 - enabled_networks: comma delimited list
99 list of networks defined in net_env.py
100 - ext_net_type: string
101 interface or br-ex, defines the external network configuration
102 - address_family: string
103 4 or 6, respective to ipv4 or ipv6
104 - ovs_dpdk_bridge: string
105 bridge name to use as ovs_dpdk
107 template_dir, template = args.template.rsplit('/', 1)
109 netsets = NetworkSettings(args.net_settings_file,
110 args.network_isolation)
111 env = Environment(loader=FileSystemLoader(template_dir), autoescape=True)
112 template = env.get_template(template)
114 print(template.render(nets=netsets['networks'],
116 external_net_af=netsets.get_ip_addr_family(),
117 external_net_type=args.ext_net_type,
118 ovs_dpdk_bridge=args.ovs_dpdk_bridge))
122 parser = argparse.ArgumentParser()
123 parser.add_argument('--debug', action='store_true', default=False,
124 help="Turn on debug messages")
125 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
126 dest='log_file', help="Log file to log to")
127 subparsers = parser.add_subparsers()
129 net_settings = subparsers.add_parser('parse-net-settings',
130 help='Parse network settings file')
131 net_settings.add_argument('-s', '--net-settings-file',
132 default='network-settings.yaml',
133 dest='net_settings_file',
134 help='path to network settings file')
135 net_settings.add_argument('--flat', action='store_false',
136 default=True, dest='network_isolation',
137 help='disable network isolation')
138 net_settings.add_argument('-e', '--net-env-file',
139 default="network-environment.yaml",
141 help='path to network environment file')
142 net_settings.add_argument('-td', '--target-dir',
145 help='directory to write the'
146 'network-environment.yaml file')
147 net_settings.add_argument('--compute-pre-config',
150 dest='compute_pre_config',
151 help='Boolean to enable Compute Pre Config')
152 net_settings.add_argument('--controller-pre-config',
155 dest='controller_pre_config',
156 help='Boolean to enable Controller Pre Config')
158 net_settings.set_defaults(func=parse_net_settings)
160 get_int_ip = subparsers.add_parser('find-ip',
161 help='Find interface ip')
162 get_int_ip.add_argument('-i', '--interface', required=True,
163 help='Interface name')
164 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
165 choices=[4, 6], dest='address_family',
166 help='IP Address family')
167 get_int_ip.set_defaults(func=find_ip)
169 nic_template = subparsers.add_parser('nic-template',
170 help='Build NIC templates')
171 nic_template.add_argument('-r', '--role', required=True,
172 choices=['controller', 'compute'],
173 help='Role template generated for')
174 nic_template.add_argument('-t', '--template', required=True,
176 help='Template file to process')
177 nic_template.add_argument('-s', '--net-settings-file',
178 default='network-settings.yaml',
179 dest='net_settings_file',
180 help='path to network settings file')
181 nic_template.add_argument('--flat', action='store_false',
182 default=True, dest='network_isolation',
183 help='disable network isolation')
184 nic_template.add_argument('-e', '--ext-net-type', default='interface',
186 choices=['interface', 'br-ex'],
187 help='External network type')
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)
192 # parse-deploy-settings
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 inventory = subparsers.add_parser('parse-inventory',
201 help='Parse inventory file')
202 inventory.add_argument('-f', '--file',
203 default='deploy_settings.yaml',
204 help='path to deploy settings file')
205 inventory.add_argument('--ha',
208 help='Indicate if deployment is HA or not')
209 inventory.add_argument('--virtual',
212 help='Indicate if deployment inventory is virtual')
213 inventory.set_defaults(func=parse_inventory)
215 clean = subparsers.add_parser('clean',
216 help='Parse deploy settings file')
217 clean.add_argument('-f', '--file',
218 help='path to inventory file')
219 clean.set_defaults(func=run_clean)
225 parser = get_parser()
226 args = parser.parse_args(sys.argv[1:])
228 logging.basicConfig(level=logging.DEBUG)
230 apex_log_filename = args.log_file
231 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
232 logging.basicConfig(filename=apex_log_filename,
233 format='%(asctime)s %(levelname)s: %(message)s',
234 datefmt='%m/%d/%Y %I:%M:%S %p',
236 if hasattr(args, 'func'):
242 if __name__ == "__main__":