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 env = Environment(loader=FileSystemLoader(template_dir), autoescape=True)
110 template = env.get_template(template)
112 print(template.render(nets=netsets['networks'],
114 external_net_af=netsets.get_ip_addr_family(),
115 external_net_type=args.ext_net_type,
116 ovs_dpdk_bridge=args.ovs_dpdk_bridge))
120 parser = argparse.ArgumentParser()
121 parser.add_argument('--debug', action='store_true', default=False,
122 help="Turn on debug messages")
123 parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
124 dest='log_file', help="Log file to log to")
125 subparsers = parser.add_subparsers()
127 net_settings = subparsers.add_parser('parse-net-settings',
128 help='Parse network settings file')
129 net_settings.add_argument('-s', '--net-settings-file',
130 default='network-settings.yaml',
131 dest='net_settings_file',
132 help='path to network settings file')
133 net_settings.add_argument('-e', '--net-env-file',
134 default="network-environment.yaml",
136 help='path to network environment file')
137 net_settings.add_argument('-td', '--target-dir',
140 help='directory to write the'
141 'network-environment.yaml file')
142 net_settings.add_argument('--compute-pre-config',
145 dest='compute_pre_config',
146 help='Boolean to enable Compute Pre Config')
147 net_settings.add_argument('--controller-pre-config',
150 dest='controller_pre_config',
151 help='Boolean to enable Controller Pre Config')
153 net_settings.set_defaults(func=parse_net_settings)
155 get_int_ip = subparsers.add_parser('find-ip',
156 help='Find interface ip')
157 get_int_ip.add_argument('-i', '--interface', required=True,
158 help='Interface name')
159 get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
160 choices=[4, 6], dest='address_family',
161 help='IP Address family')
162 get_int_ip.set_defaults(func=find_ip)
164 nic_template = subparsers.add_parser('nic-template',
165 help='Build NIC templates')
166 nic_template.add_argument('-r', '--role', required=True,
167 choices=['controller', 'compute'],
168 help='Role template generated for')
169 nic_template.add_argument('-t', '--template', required=True,
171 help='Template file to process')
172 nic_template.add_argument('-s', '--net-settings-file',
173 default='network-settings.yaml',
174 dest='net_settings_file',
175 help='path to network settings file')
176 nic_template.add_argument('-e', '--ext-net-type', default='interface',
178 choices=['interface', 'br-ex'],
179 help='External network type')
180 nic_template.add_argument('-d', '--ovs-dpdk-bridge',
181 default=None, dest='ovs_dpdk_bridge',
182 help='OVS DPDK Bridge Name')
183 nic_template.set_defaults(func=build_nic_template)
184 # parse-deploy-settings
185 deploy_settings = subparsers.add_parser('parse-deploy-settings',
186 help='Parse deploy settings file')
187 deploy_settings.add_argument('-f', '--file',
188 default='deploy_settings.yaml',
189 help='path to deploy settings file')
190 deploy_settings.set_defaults(func=parse_deploy_settings)
192 inventory = subparsers.add_parser('parse-inventory',
193 help='Parse inventory file')
194 inventory.add_argument('-f', '--file',
195 default='deploy_settings.yaml',
196 help='path to deploy settings file')
197 inventory.add_argument('--ha',
200 help='Indicate if deployment is HA or not')
201 inventory.add_argument('--virtual',
204 help='Indicate if deployment inventory is virtual')
205 inventory.add_argument('--export-bash',
209 help='Export bash variables from inventory')
210 inventory.set_defaults(func=parse_inventory)
212 clean = subparsers.add_parser('clean',
213 help='Parse deploy settings file')
214 clean.add_argument('-f', '--file',
215 help='path to inventory file')
216 clean.set_defaults(func=run_clean)
222 parser = get_parser()
223 args = parser.parse_args(sys.argv[1:])
225 logging.basicConfig(level=logging.DEBUG)
227 apex_log_filename = args.log_file
228 os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
229 logging.basicConfig(filename=apex_log_filename,
230 format='%(asctime)s %(levelname)s: %(message)s',
231 datefmt='%m/%d/%Y %I:%M:%S %p',
233 if hasattr(args, 'func'):
239 if __name__ == "__main__":