Merge "adding control of number of virtual compute nodes"
[apex.git] / lib / python / apex-python-utils.py
1 ##############################################################################
2 # Copyright (c) 2016 Feng Pan (fpan@redhat.com), Dan Radez (dradez@redhat.com)
3 #
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 ##############################################################################
9
10 import argparse
11 import sys
12 import apex
13 import logging
14 import os
15 from jinja2 import Environment, FileSystemLoader
16
17
18 def parse_net_settings(args):
19     """
20     Parse OPNFV Apex network_settings.yaml config file
21     and dump bash syntax to set environment variables
22
23     Args:
24     - file: string
25       file to network_settings.yaml file
26     - network_isolation: bool
27       enable or disable network_isolation
28     """
29     settings = apex.NetworkSettings(args.file,
30                                     args.network_isolation)
31     settings.dump_bash()
32
33 def parse_deploy_settings(args):
34     settings = apex.DeploySettings(args.file)
35     settings.dump_bash()
36
37
38 def find_ip(args):
39     """
40     Get and print the IP from a specific interface
41
42     Args:
43     - interface: string
44       network interface name
45     - address_family: int
46       4 or 6, respective to ipv4 or ipv6
47     """
48     interface = apex.ip_utils.get_interface(args.interface,
49                                             args.address_family)
50     if interface:
51         print(interface.ip)
52
53
54 def build_nic_template(args):
55     """
56     Build and print a Triple-O nic template from jinja template
57
58     Args:
59     - template: string
60       path to jinja template to load
61     - enabled_networks: comma delimited list
62       list of networks defined in net_env.py
63     - ext_net_type: string
64       interface or br-ex, defines the external network configuration
65     - address_family: string
66       4 or 6, respective to ipv4 or ipv6
67     """
68     dir, template = args.template.rsplit('/', 1)
69
70     env = Environment(loader=FileSystemLoader(dir))
71     template = env.get_template(template)
72     print(template.render(enabled_networks=args.enabled_networks,
73                           external_net_type=args.ext_net_type,
74                           external_net_af=args.address_family))
75
76
77 def parse_args():
78     parser = argparse.ArgumentParser()
79     parser.add_argument('--debug', action='store_true', default=False,
80                         help="Turn on debug messages")
81     parser.add_argument('-l', '--log-file', default='/var/log/apex/apex.log',
82                         dest='log_file', help="Log file to log to")
83     subparsers = parser.add_subparsers()
84
85     net_settings = subparsers.add_parser('parse-net-settings',
86                                          help='Parse network settings file')
87     net_settings.add_argument('-f', '--file', default='network-settings.yaml',
88                               help='path to network settings file')
89     net_settings.add_argument('-i', '--network-isolation', type=bool,
90                               default=True, dest='network_isolation',
91                               help='network isolation')
92     net_settings.set_defaults(func=parse_net_settings)
93
94     get_int_ip = subparsers.add_parser('find-ip',
95                                        help='Find interface ip')
96     get_int_ip.add_argument('-i', '--interface', required=True,
97                             help='Interface name')
98     get_int_ip.add_argument('-af', '--address-family', default=4, type=int,
99                             choices=[4, 6], dest='address_family',
100                             help='IP Address family')
101     get_int_ip.set_defaults(func=find_ip)
102
103     nic_template = subparsers.add_parser('nic-template',
104                                          help='Build NIC templates')
105     nic_template.add_argument('-t', '--template', required=True,
106                               dest='template',
107                               help='Template file to process')
108     nic_template.add_argument('-n', '--enabled-networks', required=True,
109                               dest='enabled_networks',
110                               help='enabled network list')
111     nic_template.add_argument('-e', '--ext-net-type', default='interface',
112                               dest='ext_net_type',
113                               choices=['interface', 'br-ex'],
114                               help='External network type')
115     nic_template.add_argument('-af', '--address-family', type=int, default=4,
116                               dest='address_family', help='IP address family')
117     nic_template.set_defaults(func=build_nic_template)
118
119     deploy_settings = subparsers.add_parser('parse-deploy-settings',
120                               help='Parse deploy settings file')
121     deploy_settings.add_argument('-f', '--file', default='deploy_settings.yaml',
122                               help='path to deploy settings file')
123     deploy_settings.set_defaults(func=parse_deploy_settings)
124
125     args = parser.parse_args(sys.argv[1:])
126     if args.debug:
127         logging.basicConfig(level=logging.DEBUG)
128     else:
129         apex_log_filename = args.log_file
130         os.makedirs(os.path.dirname(apex_log_filename), exist_ok=True)
131         logging.basicConfig(filename=apex_log_filename,
132                             format='%(asctime)s %(levelname)s: %(message)s',
133                             datefmt='%m/%d/%Y %I:%M:%S %p',
134                             level=logging.DEBUG)
135     return parser, args
136
137
138 def main(parser, args):
139     if hasattr(args, 'func'):
140         args.func(args)
141     else:
142         parser.print_help()
143         exit(1)
144
145 if __name__ == "__main__":
146     parser, args = parse_args()
147     main(parser, args)