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
37 settings = NetworkSettings(args.net_settings_file)
38 net_env = NetworkEnvironment(settings, args.net_env_file,
39 args.compute_pre_config,
40 args.controller_pre_config)
41 target = args.target_dir.split('/')
42 target.append('network-environment.yaml')
43 dump_yaml(dict(net_env), '/'.join(target))
47 def dump_yaml(data, file):
49 Dumps data to a file as yaml
50 :param data: yaml to be written to file
51 :param file: filename to write to
54 with open(file, "w") as fh:
55 yaml.dump(data, fh, default_flow_style=False)
58 def parse_deploy_settings(args):
59 settings = DeploySettings(args.file)
64 apex.clean_nodes(args.file)
67 def parse_inventory(args):
68 inventory = Inventory(args.file, ha=args.ha, virtual=args.virtual)
69 inventory.dump_instackenv_json()
74 Get and print the IP from a specific interface
78 network interface name
80 4 or 6, respective to ipv4 or ipv6
82 interface = ip_utils.get_interface(args.interface,
88 def build_nic_template(args):
90 Build and print a Triple-O nic template from jinja template
94 path to jinja template to load
95 - enabled_networks: comma delimited list
96 list of networks defined in net_env.py
97 - ext_net_type: string
98 interface or br-ex, defines the external network configuration
99 - address_family: string
100 4 or 6, respective to ipv4 or ipv6
101 - ovs_dpdk_bridge: string
102 bridge name to use as ovs_dpdk
104 template_dir, template = args.template.rsplit('/', 1)
106 netsets = NetworkSettings(args.net_settings_file)
107 env = Environment(loader=FileSystemLoader(template_dir), autoescape=True)
108 template = env.get_template(template)
110 print(template.render(nets=netsets['networks'],
112 external_net_af=netsets.get_ip_addr_family(),
113 external_net_type=args.ext_net_type,
114 ovs_dpdk_bridge=args.ovs_dpdk_bridge))
118 parser = argparse.ArgumentParser()
119 parser.add_argument('--debug', action='store_true', default=False,
120 help="Turn on debug messages")
121 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
122 dest='log_file', help="Log file to log to")
123 subparsers = parser.add_subparsers()
125 net_settings = subparsers.add_parser('parse-net-settings',
126 help='Parse network settings file')
127 net_settings.add_argument('-s', '--net-settings-file',
128 default='network-settings.yaml',
129 dest='net_settings_file',
130 help='path to network settings file')
131 net_settings.add_argument('-e', '--net-env-file',
132 default="network-environment.yaml",
134 help='path to network environment file')
135 net_settings.add_argument('-td', '--target-dir',
138 help='directory to write the'
139 'network-environment.yaml file')
140 net_settings.add_argument('--compute-pre-config',
143 dest='compute_pre_config',
144 help='Boolean to enable Compute Pre Config')
145 net_settings.add_argument('--controller-pre-config',
148 dest='controller_pre_config',
149 help='Boolean to enable Controller Pre Config')
151 net_settings.set_defaults(func=parse_net_settings)
153 get_int_ip = subparsers.add_parser('find-ip',
154 help='Find interface ip')
155 get_int_ip.add_argument('-i', '--interface', required=True,
156 help='Interface name')
157 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
158 choices=[4, 6], dest='address_family',
159 help='IP Address family')
160 get_int_ip.set_defaults(func=find_ip)
162 nic_template = subparsers.add_parser('nic-template',
163 help='Build NIC templates')
164 nic_template.add_argument('-r', '--role', required=True,
165 choices=['controller', 'compute'],
166 help='Role template generated for')
167 nic_template.add_argument('-t', '--template', required=True,
169 help='Template file to process')
170 nic_template.add_argument('-s', '--net-settings-file',
171 default='network-settings.yaml',
172 dest='net_settings_file',
173 help='path to network settings file')
174 nic_template.add_argument('-e', '--ext-net-type', default='interface',
176 choices=['interface', 'br-ex'],
177 help='External network type')
178 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
179 default=None, dest='ovs_dpdk_bridge',
180 help='OVS DPDK Bridge Name')
181 nic_template.set_defaults(func=build_nic_template)
182 # parse-deploy-settings
183 deploy_settings = subparsers.add_parser('parse-deploy-settings',
184 help='Parse deploy settings file')
185 deploy_settings.add_argument('-f', '--file',
186 default='deploy_settings.yaml',
187 help='path to deploy settings file')
188 deploy_settings.set_defaults(func=parse_deploy_settings)
190 inventory = subparsers.add_parser('parse-inventory',
191 help='Parse inventory file')
192 inventory.add_argument('-f', '--file',
193 default='deploy_settings.yaml',
194 help='path to deploy settings file')
195 inventory.add_argument('--ha',
198 help='Indicate if deployment is HA or not')
199 inventory.add_argument('--virtual',
202 help='Indicate if deployment inventory is virtual')
203 inventory.set_defaults(func=parse_inventory)
205 clean = subparsers.add_parser('clean',
206 help='Parse deploy settings file')
207 clean.add_argument('-f', '--file',
208 help='path to inventory file')
209 clean.set_defaults(func=run_clean)
215 parser = get_parser()
216 args = parser.parse_args(sys.argv[1:])
218 logging.basicConfig(level=logging.DEBUG)
220 apex_log_filename = args.log_file
221 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
222 logging.basicConfig(filename=apex_log_filename,
223 format='%(asctime)s %(levelname)s: %(message)s',
224 datefmt='%m/%d/%Y %I:%M:%S %p',
226 if hasattr(args, 'func'):
232 if __name__ == "__main__":